免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: meego2012
打印 上一主题 下一主题

[技术动态] 王垠:我和Google的故事 [复制链接]

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
11 [报告]
发表于 2012-08-14 12:49 |只看该作者
本帖最后由 shang2010 于 2012-08-14 17:31 编辑

有影响力impact{:3_203:}

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
12 [报告]
发表于 2012-08-14 14:08 |只看该作者
回复 8# KanonInD


    因为他要写的是类编译器的东西,
无类型是对用户而言的,编译器需要知道类型,就算这个类型是可以动态变化的,和C++的Virtual一样

4000行一个Parsor,的确是个牛人了。
随便写个玩具都上这个规模的泪奔。。。

感觉不像在米国,
像是中国Google的样子(国内的服从文化)

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
13 [报告]
发表于 2012-08-14 16:02 |只看该作者
回复 8# KanonInD


    鸭子类型... "如果一个东西走路像鸭子, 叫声像鸭子, xxx像鸭子, 那么它就是一只鸭子"的说法么.
    可惜... python的用户是"鸭子类型"的用户, 而此文的作者是要实现鸭子类型这种类型模型本身的类型推导. 人家是在实现语言类型模型本身的反解析...

论坛徽章:
0
14 [报告]
发表于 2012-08-14 17:58 |只看该作者
KanonInD 发表于 2012-08-14 11:57
(python的)鸭子类型有什么不好, 为何需要类型推导?


python的duck type本身没什么不好,不过它必须要在运行时环境里、运行到的那一刻才能知道被调用的方法存不存在、来自何处。

对编辑器及其用户(程序员)来说,他们看不到动态的东西,只能看到静态的代码。那么,具体到一个方法究竟由谁提供,哪怕是程序作者自己恐怕都无法立刻回答。

一般的编辑器实现类似正则表达式模式匹配:你调用了to_str(),它就找所有提供了to_str()的类;这样大多数情况下能工作,而且不需要多少代码就能实现。
但恰恰对to_str(),这个办法失效了。因为这个方法每个类都有,全列等于没有列;而对method proxy这类应用,它提供的很多方法根本不可能从代码上看到。这就相当于在静态分析时丢掉了一个关键环节。


为解决以上问题,字符串匹配法同样有可能解决;但这样就要穷举匹配各种可能,相当于人工分析代码、并通过前后对比以找到线索,去回答“哪些to_str和当前代码行无关”和“这个proxy究竟提供了哪些方法”问题。

这种做法可行,但非常笨拙,好像杀牛用了水果刀,代码量自然飕飕就上去了,bug也肯定是一出一大坨。


此文作者相当于实现了一个能静态推导运行时类型的预处理器;这个实现提供的能力类似运行时,但无须真正执行程序(那样代价就太大了)。
大概思路就是写一个编译器去检查类型如何“传染”出去。这样,当你查询某个对象的to_str()方法时,他就可以根据“传染逻辑”反推,告诉你这个方法只可能来自哪些类;类似的,对一个method proxy类,他也能回答“根据目前的程序逻辑,这个类能提供哪些方法、这些方法都来自何处”。

这样一来,动态类型的语言一样可以像静态强类型语言一样,在程序编写的同时就得到丰富的方法/类型/参数提示。这种功能,显然是基于模式匹配的手段绝对无法达到的。

这个“静态代码分析”的做法比起字符串模式匹配,起始代码量大,类似杀鸡用牛刀;但遇到棘手的to_str/method proxy之类情况时,反而非常轻松,因为用对了工具。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
15 [报告]
发表于 2012-08-14 18:17 |只看该作者
牛人就不要打工,打工就意味着受气。

论坛徽章:
0
16 [报告]
发表于 2012-08-14 21:19 |只看该作者
回复 15# 狗蛋


    太专业了

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
17 [报告]
发表于 2012-08-14 23:46 |只看该作者
还真没想通怎么对这样的代码做类型推导:
  1. s=eval(sys.readline())
复制代码
Python这种动态类型语言,静态分析基本上就是白费工夫

王同学显然非常看不上Google的Staff Engineer,作为一个Fortune 500的前Staff Engineer,偶的鸭梨山大啊……

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
18 [报告]
发表于 2012-08-15 00:27 |只看该作者
回复 18# windoze


    王同学不用管这个表达式吧

论坛徽章:
0
19 [报告]
发表于 2012-08-15 08:31 |只看该作者
是清华退学的那个王同学吗?
看他写得自己这么牛,那现在在做什么呢,好像没有他的消息了吧。
牛人怎么可能没有动静呢

论坛徽章:
0
20 [报告]
发表于 2012-08-15 10:18 |只看该作者
回LS,其实人家还是有动静的
http://blog.sina.com.cn/s/blog_5d90e82f01018byh.html
这篇博文不错!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP