王垠的几道思考题,你的回答是?

2013-03-15 23:25:55 +08:00
 darasion
http://blog.sina.com.cn/s/blog_5d90e82f0101j529.html

先说我自己,
两道思考题中提到的风格,是我比较喜欢的。

第三道题,
暂时不太懂,半路出家没学过理论。
6935 次点击
所在节点    程序员
31 条回复
zhujinliang
2013-03-19 09:00:12 +08:00
@GTim C语言里一边移动指针一边取出数据或写入数据是多么的惬意。 while(count--) *pBuf++ = 0x00;
fancl20
2013-03-19 10:39:47 +08:00
@cassyfar warn 报的是一个有返回值的函数可能不返回值。
@skydark 估计是说 go 把定义变量和对变量赋值混淆了
GTim
2013-03-19 17:57:38 +08:00
@zhujinliang 我也是
tioover
2013-03-20 08:14:17 +08:00
@skydark
@Alex_L
大半…是猜的…惭愧
作者给了入门连接,说明可能不是什么深的特性,比如gontinue ,而比较简单的特性,看起来又是:=最可疑。感觉上是省略了对类型的声明交给编译器,和++对赋值的省略很像。
zztom
2013-03-20 08:24:19 +08:00
花括号应该是个还习惯,不过我起初加他的理由竟然是为了好看
skydark
2013-03-20 08:35:35 +08:00
@fancl20 @tioover 个人倒是觉得这种编译器自己能推断的事情交给它们做很对啦……
不过又仔细看了下,是因为`:=`允许 redeclaration 吗?不过它的 redeclaration 很受限一般倒是不会出什么问题,但的确会产生看起来是声明+初始化的地方进行了重新赋值的行为……
http://golang.org/ref/spec#Short_variable_declarations
palxex
2013-03-20 09:36:29 +08:00
++这几个例子,拿任意高级语言举例都不错。就放在C里不合适……因为它就是高级语法的汇编。强调的是语句可以几乎直接对应到不长的汇编段落。
i++这种情况下,i强调的是一个内存地址,用图灵机的语言,就是一个具体可以打孔的位置。你对这一个位置强调i2=i1+1,i2跟i1是两个不同的变量……完全没有意义。
在SSA的情况下强调其是两个变量,正是因为"变量"与"地址"的解耦,让更高级的优化成为可能。但这本来就不是C,甚至C++这类语言的设计目的。如果要批判这里,C的指针设计才是更应该批判的,但这就是它的设计——和精髓:可移植汇编语言。unix hater's handbook分析的不错,这个特性让unix和C得以病毒式传播,而且方兴未艾。
关于王垠的第三题,如果要改造图灵机,维持相同的计算能力并规避地址的存在……我简单的大脑当机了若干次也没什么结果。莫非要改造成lambda演算?
alexrezit
2013-03-20 09:46:34 +08:00
@cassyfar
以前用 Xcode 默认的 Apple LLVM 就会报 warning. 因为它需要返回值, 又没有给一个返回值. (其实是编译器没有对 if else 做静态分析以为它没有给一个返回值)

@iEverX
但如果后来又需要加一些其他的判断呢?
iEverX
2013-03-20 12:37:36 +08:00
@alexrezit
如果原来的写法,需要加一些判断你要怎么写,不也是加一个 else if 吗?有什么区别吗
alexrezit
2013-03-20 12:49:45 +08:00
@iEverX
就是说值不能直接返回的情况, 而要二次判断后再返回. 如果按那种写法就需要三处以上的 return 了, 而且每处 return 所在的层级还不同.
iEverX
2013-03-21 21:34:50 +08:00
@alexrezit
不明白你的意思。我认为,这两种写法是完全等价的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/63078

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX