由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Military版 - 王垠的[40 行代码]: 普通琐男码工们都跪安吧!
相关主题
连王垠都被P了,老中码农这行真是没得混 (转载)中国人所有的创造力和想象力全用来发牢骚抱怨和骂娘上了
看不懂王垠的40行代码的人就别逼逼到不了你们公司标准了菌版的人才们觉得linux有后门吗?
万岁, 天才老丘.为什么天朝没有发明任何有用的计算机语言?
王垠的40行代码真牛逼!我有个猜想, 不一定对, 白人智商高的都搞cs了
王垠是个难得的计算机语言天才中国最顶尖的码农在编写j20的飞控软件
四十行代码把人都得罪光了程序员真的挺low b的
代码写好真不容易这差距还是明摆着的
印度公司自测:印工程师仅2%能写高效合格代码龙芯都跟随北斗上天用了
相关话题的讨论汇总
话题: lambda话题: cps话题: cps1话题: 代码话题: fact
进入Military版参与讨论
1 (共1页)
w*******e
发帖数: 15912
1
https://www.zhihu.com/question/20822815
"我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在
GitHub 上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想
象,这样一片普通人看起来像是玩具的 40 行 cps.ss 代码,融入了我一个星期的日日
夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研
究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星
期之内闷头写出来了。我是在说大话吗?代码就摆在那里,自己去看看不就知道了。当
我死后,如果有人想要知道什么是我上半生最重要的“杰作”,也就是这 40 行代码了
。它蕴含的美,超越我给任何公司写的成千上万行的代码。"
有没有人来说说这个东西,我想知道他有没有说大话。
附代码:
;; A simple CPS transformer which does proper tail-call and does not
;; duplicate contexts for if-expressions.
;; author: Yin Wang ([email protected]/* */)
(load "pmatch.scm")
(define cps
(lambda (exp)
(letrec
([trivial? (lambda (x) (memq x '(zero? add1 sub1)))]
[id (lambda (v) v)]
[ctx0 (lambda (v) `(k ,v))] ; tail context
[fv (let ([n -1])
(lambda ()
(set! n (+ 1 n))
(string->symbol (string-append "v" (number->string n)))))]
[cps1
(lambda (exp ctx)
(pmatch exp
[,x (guard (not (pair? x))) (ctx x)]
[(if ,test ,conseq ,alt)
(cps1 test
(lambda (t)
(cond
[(memq ctx (list ctx0 id))
`(if ,t ,(cps1 conseq ctx) ,(cps1 alt ctx))]
[else
(let ([u (fv)])
`(let ([k (lambda (,u) ,(ctx u))])
(if ,t ,(cps1 conseq ctx0) ,(cps1 alt ctx0))))
])))]
[(lambda (,x) ,body)
(ctx `(lambda (,x k) ,(cps1 body ctx0)))]
[(,op ,a ,b)
(cps1 a (lambda (v1)
(cps1 b (lambda (v2)
(ctx `(,op ,v1 ,v2))))))]
[(,rator ,rand)
(cps1 rator
(lambda (r)
(cps1 rand
(lambda (d)
(cond
[(trivial? r) (ctx `(,r ,d))]
[(eq? ctx ctx0) `(,r ,d k)] ; tail call
[else
(let ([u (fv)])
`(,r ,d (lambda (,u) ,(ctx u))))])))))]))
])
(cps1 exp id))))
;;; tests
;; var
(cps 'x)
(cps '(lambda (x) x))
(cps '(lambda (x) (x 1)))
;; no lambda (will generate identity functions to return to the toplevel)
(cps '(if (f x) a b))
(cps '(if x (f a) b))
;; if stand-alone (tail)
(cps '(lambda (x) (if (f x) a b)))
;; if inside if-test (non-tail)
(cps '(lambda (x) (if (if x (f a) b) c d)))
;; both branches are trivial, should do some more optimizations
(cps '(lambda (x) (if (if x (zero? a) b) c d)))
;; if inside if-branch (tail)
(cps '(lambda (x) (if t (if x (f a) b) c)))
;; if inside if-branch, but again inside another if-test (non-tail)
(cps '(lambda (x) (if (if t (if x (f a) b) c) e w)))
;; if as operand (non-tail)
(cps '(lambda (x) (h (if x (f a) b))))
;; if as operator (non-tail)
(cps '(lambda (x) ((if x (f g) h) c)))
;; why we need more than two names
(cps '(((f a) (g b)) ((f c) (g d))))
;; factorial
(define fact-cps
(cps
'(lambda (n)
((lambda (fact)
((fact fact) n))
(lambda (fact)
(lambda (n)
(if (zero? n)
1
(* n ((fact fact) (sub1 n))))))))))
;; print out CPSed function
(pretty-print fact-cps)
;; =>
;; '(lambda (n k)
;; ((lambda (fact k) (fact fact (lambda (v0) (v0 n k))))
;; (lambda (fact k)
;; (k
;; (lambda (n k)
;; (if (zero? n)
;; (k 1)
;; (fact
;; fact
;; (lambda (v1) (v1 (sub1 n) (lambda (v2) (k (* n v2))))))))))
;; k))
((eval fact-cps) 5 (lambda (v) v))
;; => 120
g********t
发帖数: 153
2
CPS, 只要习惯就行, 没什么特别难得



【在 w*******e 的大作中提到】
: https://www.zhihu.com/question/20822815
: "我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在
: GitHub 上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想
: 象,这样一片普通人看起来像是玩具的 40 行 cps.ss 代码,融入了我一个星期的日日
: 夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研
: 究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星
: 期之内闷头写出来了。我是在说大话吗?代码就摆在那里,自己去看看不就知道了。当
: 我死后,如果有人想要知道什么是我上半生最重要的“杰作”,也就是这 40 行代码了
: 。它蕴含的美,超越我给任何公司写的成千上万行的代码。"
: 有没有人来说说这个东西,我想知道他有没有说大话。

r*****t
发帖数: 4793
3
不懂编程,这个是真功夫吧?哪个马公来战?
n****j
发帖数: 1708
4
想起小时候美术课,兄弟把哪吒描得跟样图一模一样,结果还是只得了个良,耿耿于怀
很久



【在 w*******e 的大作中提到】
: https://www.zhihu.com/question/20822815
: "我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在
: GitHub 上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想
: 象,这样一片普通人看起来像是玩具的 40 行 cps.ss 代码,融入了我一个星期的日日
: 夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研
: 究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星
: 期之内闷头写出来了。我是在说大话吗?代码就摆在那里,自己去看看不就知道了。当
: 我死后,如果有人想要知道什么是我上半生最重要的“杰作”,也就是这 40 行代码了
: 。它蕴含的美,超越我给任何公司写的成千上万行的代码。"
: 有没有人来说说这个东西,我想知道他有没有说大话。

w*******e
发帖数: 15912
5
呼唤赵策出手给大家解读。

【在 r*****t 的大作中提到】
: 不懂编程,这个是真功夫吧?哪个马公来战?
r*****t
发帖数: 4793
6
我一看连着10个括弧就觉得有点牛逼似的
w*******e
发帖数: 15912
7
那哥发帖连用20个感叹号岂不是文豪了?

【在 r*****t 的大作中提到】
: 我一看连着10个括弧就觉得有点牛逼似的
j******r
发帖数: 3327
8
这个太难了。我写了2年了才写了6-7页的HTML。还是有一个team随传随到地打下手的情
况下。真是个天才大手笔。

【在 r*****t 的大作中提到】
: 不懂编程,这个是真功夫吧?哪个马公来战?
j******r
发帖数: 3327
9
中国崛起了。我最近发中国贴动不动就10几个零。看得两眼一摸黑。手指都不够用。

【在 r*****t 的大作中提到】
: 我一看连着10个括弧就觉得有点牛逼似的
j******r
发帖数: 3327
10
我说版上青蛙研究生的,你们行行好帮帮你们师兄吧。
相关主题
四十行代码把人都得罪光了中国人所有的创造力和想象力全用来发牢骚抱怨和骂娘上了
代码写好真不容易菌版的人才们觉得linux有后门吗?
印度公司自测:印工程师仅2%能写高效合格代码为什么天朝没有发明任何有用的计算机语言?
进入Military版参与讨论
n****j
发帖数: 1708
11
写程序不是什么“除非接受过专门的训练,你绝对不会理解它们的价值”,你去看大牛
的代码,一目了然让你明白他的思想,这才叫本事。比如下面这行:
return a ? 1 : b ? 2: c ? 3 : 4;
换成 if 的话要 8 行,遇上花括号控那就更多。但是这样写真的很好吗?估计不太熟
的童鞋看到运算符优先级就先尿了,你自己看,大概也要几秒钟检查一下有没有 typo。

【在 w*******e 的大作中提到】
: 那哥发帖连用20个感叹号岂不是文豪了?
m******t
发帖数: 1171
12
牛顿的微积分,爱因斯坦的E=MC2,庞加莱猜想,曾经耗费了人类顶尖头脑几个世纪的
智慧。让我一个星期日日夜夜的心血就看懂了!
他的东西,自以为高深,其实在搞代数的人看来,真的算不了什么。
比他牛的人多了去了,没见人家唧唧歪歪。



【在 w*******e 的大作中提到】
: https://www.zhihu.com/question/20822815
: "我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在
: GitHub 上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想
: 象,这样一片普通人看起来像是玩具的 40 行 cps.ss 代码,融入了我一个星期的日日
: 夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研
: 究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星
: 期之内闷头写出来了。我是在说大话吗?代码就摆在那里,自己去看看不就知道了。当
: 我死后,如果有人想要知道什么是我上半生最重要的“杰作”,也就是这 40 行代码了
: 。它蕴含的美,超越我给任何公司写的成千上万行的代码。"
: 有没有人来说说这个东西,我想知道他有没有说大话。

g********t
发帖数: 153
13
其实就是数学公式, 比如
factorial
(define fact-cps
(cps
'(lambda (n)
((lambda (fact)
((fact fact) n))
(lambda (fact)
(lambda (n)
(if (zero? n)
1
(* n ((fact fact) (sub1 n))))))))))
就是
f(n) = f(n-1) * n
f(0) = 1;
数学公式根简单

【在 r*****t 的大作中提到】
: 不懂编程,这个是真功夫吧?哪个马公来战?
j******r
发帖数: 3327
14
俺看了几秒才搞清楚abc是bullying

typo。

【在 n****j 的大作中提到】
: 写程序不是什么“除非接受过专门的训练,你绝对不会理解它们的价值”,你去看大牛
: 的代码,一目了然让你明白他的思想,这才叫本事。比如下面这行:
: return a ? 1 : b ? 2: c ? 3 : 4;
: 换成 if 的话要 8 行,遇上花括号控那就更多。但是这样写真的很好吗?估计不太熟
: 的童鞋看到运算符优先级就先尿了,你自己看,大概也要几秒钟检查一下有没有 typo。

w*******e
发帖数: 15912
15
看不懂啊,哥不是码工, 平时做计算遇到多值判断哥一般用switch { case...}

typo。

【在 n****j 的大作中提到】
: 写程序不是什么“除非接受过专门的训练,你绝对不会理解它们的价值”,你去看大牛
: 的代码,一目了然让你明白他的思想,这才叫本事。比如下面这行:
: return a ? 1 : b ? 2: c ? 3 : 4;
: 换成 if 的话要 8 行,遇上花括号控那就更多。但是这样写真的很好吗?估计不太熟
: 的童鞋看到运算符优先级就先尿了,你自己看,大概也要几秒钟检查一下有没有 typo。

n****j
发帖数: 1708
16
我觉得挺好,一秒钟就明白干啥的,而且效率相同,除了多占几行打印纸,没毛病

【在 w*******e 的大作中提到】
: 看不懂啊,哥不是码工, 平时做计算遇到多值判断哥一般用switch { case...}
:
: typo。

r*g
发帖数: 3159
17
人是找工作,跟普通码工比。你来个搞代数的比他牛多了,难免是拉虎皮扯大旗。

【在 m******t 的大作中提到】
: 牛顿的微积分,爱因斯坦的E=MC2,庞加莱猜想,曾经耗费了人类顶尖头脑几个世纪的
: 智慧。让我一个星期日日夜夜的心血就看懂了!
: 他的东西,自以为高深,其实在搞代数的人看来,真的算不了什么。
: 比他牛的人多了去了,没见人家唧唧歪歪。
:
: 在

g******e
发帖数: 3760
18
这样写是为了省纸吗?

typo。

【在 n****j 的大作中提到】
: 写程序不是什么“除非接受过专门的训练,你绝对不会理解它们的价值”,你去看大牛
: 的代码,一目了然让你明白他的思想,这才叫本事。比如下面这行:
: return a ? 1 : b ? 2: c ? 3 : 4;
: 换成 if 的话要 8 行,遇上花括号控那就更多。但是这样写真的很好吗?估计不太熟
: 的童鞋看到运算符优先级就先尿了,你自己看,大概也要几秒钟检查一下有没有 typo。

x****u
发帖数: 44466
19
C语言的问号设计出来就是为了这种玩法的,这是基础问题。
你写 1 + 2 * 3,也不需要花时间想想C作者有没有让加法优先于乘法

typo。

【在 n****j 的大作中提到】
: 写程序不是什么“除非接受过专门的训练,你绝对不会理解它们的价值”,你去看大牛
: 的代码,一目了然让你明白他的思想,这才叫本事。比如下面这行:
: return a ? 1 : b ? 2: c ? 3 : 4;
: 换成 if 的话要 8 行,遇上花括号控那就更多。但是这样写真的很好吗?估计不太熟
: 的童鞋看到运算符优先级就先尿了,你自己看,大概也要几秒钟检查一下有没有 typo。

w*****s
发帖数: 2896
20
大家不要走入误区。
最精妙的代码,一是为学术研究之用,或者系统内核或者最底层驱动程序之用,或者有
特殊目的之用。一般的的编程的要求,就是简洁,清晰,明了,而且要有很多的文档说
明。
程序系统的构架,规范,和文档说明才是最主要的,编程的算法和实现只是其中的一部
分。一段代码的精妙固然好,但远不是最重要的。
王垠展示这段代码,是完全恰当的,原因不说了。但大家在平时编程时,千万不要学这
种编程风格。不过有时候要装装逼,显显摆时,我们也是完全能够理解的,就是不要成
了习惯,这就不好了。
相关主题
我有个猜想, 不一定对, 白人智商高的都搞cs了这差距还是明摆着的
中国最顶尖的码农在编写j20的飞控软件龙芯都跟随北斗上天用了
程序员真的挺low b的学会编程,和学会开车一样简单
进入Military版参与讨论
n****j
发帖数: 1708
21
哦?是吗?你确定这个表达式是没有歧义的?

【在 x****u 的大作中提到】
: C语言的问号设计出来就是为了这种玩法的,这是基础问题。
: 你写 1 + 2 * 3,也不需要花时间想想C作者有没有让加法优先于乘法
:
: typo。

g*****a
发帖数: 1112
22
切 老子一个星期杀200只耗子外加做50个克隆测100个序



【在 w*******e 的大作中提到】
: https://www.zhihu.com/question/20822815
: "我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在
: GitHub 上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想
: 象,这样一片普通人看起来像是玩具的 40 行 cps.ss 代码,融入了我一个星期的日日
: 夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研
: 究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星
: 期之内闷头写出来了。我是在说大话吗?代码就摆在那里,自己去看看不就知道了。当
: 我死后,如果有人想要知道什么是我上半生最重要的“杰作”,也就是这 40 行代码了
: 。它蕴含的美,超越我给任何公司写的成千上万行的代码。"
: 有没有人来说说这个东西,我想知道他有没有说大话。

x****6
发帖数: 4339
23
"王垠展示这段代码,是完全恰当的,原因不说了"
这段代码牛逼在那?

【在 w*****s 的大作中提到】
: 大家不要走入误区。
: 最精妙的代码,一是为学术研究之用,或者系统内核或者最底层驱动程序之用,或者有
: 特殊目的之用。一般的的编程的要求,就是简洁,清晰,明了,而且要有很多的文档说
: 明。
: 程序系统的构架,规范,和文档说明才是最主要的,编程的算法和实现只是其中的一部
: 分。一段代码的精妙固然好,但远不是最重要的。
: 王垠展示这段代码,是完全恰当的,原因不说了。但大家在平时编程时,千万不要学这
: 种编程风格。不过有时候要装装逼,显显摆时,我们也是完全能够理解的,就是不要成
: 了习惯,这就不好了。

b*******8
发帖数: 37364
24
奥妙就在“原因不说了”

【在 x****6 的大作中提到】
: "王垠展示这段代码,是完全恰当的,原因不说了"
: 这段代码牛逼在那?

x****6
发帖数: 4339
25
靠,你不是马工,天天在这里外行人艹内行人的心是几个意思?

【在 w*******e 的大作中提到】
: 看不懂啊,哥不是码工, 平时做计算遇到多值判断哥一般用switch { case...}
:
: typo。

s***c
发帖数: 1926
26
lisp style?
p********e
发帖数: 6030
27
你要不是业内人,肯定看不懂。

【在 x****6 的大作中提到】
: "王垠展示这段代码,是完全恰当的,原因不说了"
: 这段代码牛逼在那?

x****6
发帖数: 4339
28
编个程序,能有那么精深吗?!刚google可以下,他用的风格叫做Continuation-
passing style。是一种装逼的风格。但是并不比direct style高明。
莫装逼,装逼遭雷劈。

【在 b*******8 的大作中提到】
: 奥妙就在“原因不说了”
x****6
发帖数: 4339
29
您是业内吗?请赐教!

【在 p********e 的大作中提到】
: 你要不是业内人,肯定看不懂。
m******t
发帖数: 1171
30
你的这个才是推荐的方式, 可读性强, 容易维护, 性能也不差.
很多优化是可以交给编译器自己完成的. 装逼的十个括号))))))))))在性能上其实没有
什么优势, 因为编译器是能够优化switch的.

【在 w*******e 的大作中提到】
: 看不懂啊,哥不是码工, 平时做计算遇到多值判断哥一般用switch { case...}
:
: typo。

相关主题
多少码农有本事开发一套新语言的看不懂王垠的40行代码的人就别逼逼到不了你们公司标准了
杀器还是噱头?详解华为的操作系统万岁, 天才老丘.
连王垠都被P了,老中码农这行真是没得混 (转载)王垠的40行代码真牛逼!
进入Military版参与讨论
m******t
发帖数: 1171
31
搞编程, 研究方面的, 搞深了, 其实就是代数.
普通的软件工程师, 要的是简洁, 可读性强, 可维护性强, 可重用性强. 不要over
engineering. 人要有team work的能力. 这就是为什么他的雇主不喜欢他的原因.
他这种人, 走到哪里都说哪里不好. 那他就该做个有原创的东西出来证明自己. 但是他
又没有, 无非是解了两道奥数题似的.

【在 r*g 的大作中提到】
: 人是找工作,跟普通码工比。你来个搞代数的比他牛多了,难免是拉虎皮扯大旗。
s*****r
发帖数: 11545
32
俺明白了。。。
王银那是奇迹引桥,装逼。
他那些东西就是工匠层次的花里胡哨,把简单明了的东西玄乎化,欺负俺生物千老的智
商,呸!
h****g
发帖数: 11365
33
我虽然不是码农,但是也写点程序。对于我们这种低级工种,首先应该强调可读性吧,
别几年以后把他自己绕进去了。
不知道高级码农怎么想。
m******t
发帖数: 1171
34
高级码工也是要求可读性强。大巧若拙。
万一有个bug(再高级的码工也不能保证没有bug),那么以后岂不是要折腾死人。
高级主要是高级在系统设计和构架的能力。能够让大型的复杂的项目有条不紊的开发下
去,控制复杂度。
高级不是高级在写一段代码。

【在 h****g 的大作中提到】
: 我虽然不是码农,但是也写点程序。对于我们这种低级工种,首先应该强调可读性吧,
: 别几年以后把他自己绕进去了。
: 不知道高级码农怎么想。

c****3
发帖数: 10787
35
码公白干了。
码公最主要的是要能留下bug,完美无缺的代码,你就等着失业吧。

【在 h****g 的大作中提到】
: 我虽然不是码农,但是也写点程序。对于我们这种低级工种,首先应该强调可读性吧,
: 别几年以后把他自己绕进去了。
: 不知道高级码农怎么想。

s*****r
发帖数: 11545
36
谁管几年后的事?这市场,明年可能就被踢出门了,写一些复杂的代码正好为后人创造
就业,功德无量。

【在 h****g 的大作中提到】
: 我虽然不是码农,但是也写点程序。对于我们这种低级工种,首先应该强调可读性吧,
: 别几年以后把他自己绕进去了。
: 不知道高级码农怎么想。

c****3
发帖数: 10787
37
就是,人家阿三最精通此道了。
公司又不是你家开的,资本家踢你的时候,和踢一条狗没啥区别。
所以写代码,留下bug,在让人看了,在似懂非懂之间,是最高级的码公

【在 s*****r 的大作中提到】
: 谁管几年后的事?这市场,明年可能就被踢出门了,写一些复杂的代码正好为后人创造
: 就业,功德无量。

j******r
发帖数: 3327
38
还是俺们写HTML的高大上。一切问题(忘了配对啦)都是写浏览器的错。而且无穷的
job security。尼玛这浏览器更新换代几个月就得一次啊。

【在 m******t 的大作中提到】
: 高级码工也是要求可读性强。大巧若拙。
: 万一有个bug(再高级的码工也不能保证没有bug),那么以后岂不是要折腾死人。
: 高级主要是高级在系统设计和构架的能力。能够让大型的复杂的项目有条不紊的开发下
: 去,控制复杂度。
: 高级不是高级在写一段代码。

D***n
发帖数: 6804
39
那破代码算鸟,这个呢?
float InvSqrt(float x)
{
float xhalf = 0.5f * x;
int i = *(int*)&x; // get bits for floating value
i = 0x5f375a86 - (i >> 1); // gives initial guess y0
x = *(float*)&i; // convert bits back to float
x = x * (1.5f - xhalf * x * x); // Newton step, repeating increases
accuracy
return x;
}
s*****r
发帖数: 11545
40
确实比搞生物的牛逼

【在 D***n 的大作中提到】
: 那破代码算鸟,这个呢?
: float InvSqrt(float x)
: {
: float xhalf = 0.5f * x;
: int i = *(int*)&x; // get bits for floating value
: i = 0x5f375a86 - (i >> 1); // gives initial guess y0
: x = *(float*)&i; // convert bits back to float
: x = x * (1.5f - xhalf * x * x); // Newton step, repeating increases
: accuracy
: return x;

相关主题
王垠的40行代码真牛逼!代码写好真不容易
王垠是个难得的计算机语言天才印度公司自测:印工程师仅2%能写高效合格代码
四十行代码把人都得罪光了中国人所有的创造力和想象力全用来发牢骚抱怨和骂娘上了
进入Military版参与讨论
w****e
发帖数: 1883
41
这种风格有啥难的?写过PERL或者Q/KDB+的人估计都写过类似的东西。恨不得一个程序
一行就写完,除了作者谁TM都看不懂是干啥的。就连作者,过半年也费半天劲才看明白。
王银(以及给他捧臭脚的那些人),根本就不明白,代码就是工具,不是你装逼的利器
。这种号称用最短的代码解决一个什么大问题,基本上都是本科刚毕业的小屁孩追求的
东西,既是给自己找不痛快也是给同事找不痛快。
我的team,我就明确跟他们说的清清楚楚,Q的代码你给我按C写,KDB的代码按SQL写,
给分行分行,该注释注释,什么匿名函数,统统不许用。写完互相review, 要是谁写的
代码别人不能一目了然知道目的,也不能看两遍就明白细节的,统统给我重写。
h*i
发帖数: 3446
42
他用的是正常风格在写代码。他这段代码的功能,是自动把正常风格的代码转换成CPS
风格的代码,所以叫CPS transformer。
CPS是啥? 就是一种编程风格,每个函数结尾,不是直接返回结果,而是调用并把结果
传给一个“下一步”函数。CPS有啥用?很多编译器需要。代码转成CPS之后,很多事机
器更容易干。
比如说,你想发明一个高大上的能自动作贝叶斯推理的编程语言,就是现在前沿的所谓
叫probablistic programming language的东东,这种语言的执行不是常见的按代码顺
序执行,而是基于对一些随机变量抽样的结果来决定下一步作什么。要实现这样的一个
语言,一个容易的办法,就是把常规代码先转成CPS风格的,在每次调用“下一步”函
数之间作抽样。

【在 x****6 的大作中提到】
: 编个程序,能有那么精深吗?!刚google可以下,他用的风格叫做Continuation-
: passing style。是一种装逼的风格。但是并不比direct style高明。
: 莫装逼,装逼遭雷劈。

h*i
发帖数: 3446
43
手写CPS很难写对,也不必要。CPS是一些编译器需要,所以需要有这么个CPS 翻译器来
翻译。
他这个翻译器的代码本身不是CPS风格的,是正常风格。

白。

【在 w****e 的大作中提到】
: 这种风格有啥难的?写过PERL或者Q/KDB+的人估计都写过类似的东西。恨不得一个程序
: 一行就写完,除了作者谁TM都看不懂是干啥的。就连作者,过半年也费半天劲才看明白。
: 王银(以及给他捧臭脚的那些人),根本就不明白,代码就是工具,不是你装逼的利器
: 。这种号称用最短的代码解决一个什么大问题,基本上都是本科刚毕业的小屁孩追求的
: 东西,既是给自己找不痛快也是给同事找不痛快。
: 我的team,我就明确跟他们说的清清楚楚,Q的代码你给我按C写,KDB的代码按SQL写,
: 给分行分行,该注释注释,什么匿名函数,统统不许用。写完互相review, 要是谁写的
: 代码别人不能一目了然知道目的,也不能看两遍就明白细节的,统统给我重写。

m******t
发帖数: 1171
44
这种属于数值计算的bit level hack代码。这个是个经典。在游戏业内广泛使用。
数值计算的东西不是普通程序员搞的。
一般还要陪一个technical report来解释和评价性能。
王要是是能搞出这种代码,那么他也就牛了,在数值计算领域。
看看人家William Kahan。

【在 D***n 的大作中提到】
: 那破代码算鸟,这个呢?
: float InvSqrt(float x)
: {
: float xhalf = 0.5f * x;
: int i = *(int*)&x; // get bits for floating value
: i = 0x5f375a86 - (i >> 1); // gives initial guess y0
: x = *(float*)&i; // convert bits back to float
: x = x * (1.5f - xhalf * x * x); // Newton step, repeating increases
: accuracy
: return x;

h*h
发帖数: 27852
45
王垠的是微积分,你这个是四则运算

【在 D***n 的大作中提到】
: 那破代码算鸟,这个呢?
: float InvSqrt(float x)
: {
: float xhalf = 0.5f * x;
: int i = *(int*)&x; // get bits for floating value
: i = 0x5f375a86 - (i >> 1); // gives initial guess y0
: x = *(float*)&i; // convert bits back to float
: x = x * (1.5f - xhalf * x * x); // Newton step, repeating increases
: accuracy
: return x;

D****y
发帖数: 2207
46
编译器表示不服

CPS

【在 h*i 的大作中提到】
: 他用的是正常风格在写代码。他这段代码的功能,是自动把正常风格的代码转换成CPS
: 风格的代码,所以叫CPS transformer。
: CPS是啥? 就是一种编程风格,每个函数结尾,不是直接返回结果,而是调用并把结果
: 传给一个“下一步”函数。CPS有啥用?很多编译器需要。代码转成CPS之后,很多事机
: 器更容易干。
: 比如说,你想发明一个高大上的能自动作贝叶斯推理的编程语言,就是现在前沿的所谓
: 叫probablistic programming language的东东,这种语言的执行不是常见的按代码顺
: 序执行,而是基于对一些随机变量抽样的结果来决定下一步作什么。要实现这样的一个
: 语言,一个容易的办法,就是把常规代码先转成CPS风格的,在每次调用“下一步”函
: 数之间作抽样。

D****y
发帖数: 2207
47
编程风格对编译器来说根本不重要,对读程序的人才重要。
举个简单的例子:你写
if (c) a = b
或者写
if (c)
a = b
或者写
if
(c)
a
=
b
对编译器来讲都是一回事。
退一万步讲,如果风格真这么重要并且可以自动转换的话,把这段自动转换的代码内嵌
在编译器内就好了。从用户的角度看,这CPS风格就不再对编译器重要了。

CPS

【在 h*i 的大作中提到】
: 他用的是正常风格在写代码。他这段代码的功能,是自动把正常风格的代码转换成CPS
: 风格的代码,所以叫CPS transformer。
: CPS是啥? 就是一种编程风格,每个函数结尾,不是直接返回结果,而是调用并把结果
: 传给一个“下一步”函数。CPS有啥用?很多编译器需要。代码转成CPS之后,很多事机
: 器更容易干。
: 比如说,你想发明一个高大上的能自动作贝叶斯推理的编程语言,就是现在前沿的所谓
: 叫probablistic programming language的东东,这种语言的执行不是常见的按代码顺
: 序执行,而是基于对一些随机变量抽样的结果来决定下一步作什么。要实现这样的一个
: 语言,一个容易的办法,就是把常规代码先转成CPS风格的,在每次调用“下一步”函
: 数之间作抽样。

n*****k
发帖数: 2801
48
这哥们,这辈子就是毁在尽搞些没用的奇技淫巧还自以为那是真牛逼上了。LaTeX VS
word是一个道理。
性格决定命运



【在 w*******e 的大作中提到】
: https://www.zhihu.com/question/20822815
: "我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在
: GitHub 上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想
: 象,这样一片普通人看起来像是玩具的 40 行 cps.ss 代码,融入了我一个星期的日日
: 夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研
: 究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星
: 期之内闷头写出来了。我是在说大话吗?代码就摆在那里,自己去看看不就知道了。当
: 我死后,如果有人想要知道什么是我上半生最重要的“杰作”,也就是这 40 行代码了
: 。它蕴含的美,超越我给任何公司写的成千上万行的代码。"
: 有没有人来说说这个东西,我想知道他有没有说大话。

B*Q
发帖数: 25729
49
这个。。。
是茴字的第几种写法?
s****u
发帖数: 1433
50
这代码让我想起了当年APPLE编程大赛。
就是一行APPLE程序,能完成多么多么复杂的功能。
要知道,那时候,内存,外存都是用BYTE计算的。
所以,那个编程大赛的胜利者其实还是很牛逼的。
但是,今天,我保证你没有听说过这个胜利者。
好的程序,代码和注释比例应该在1:2左右。
所以,这个代码,不及格。呵呵。
相关主题
菌版的人才们觉得linux有后门吗?中国最顶尖的码农在编写j20的飞控软件
为什么天朝没有发明任何有用的计算机语言?程序员真的挺low b的
我有个猜想, 不一定对, 白人智商高的都搞cs了这差距还是明摆着的
进入Military版参与讨论
d*******p
发帖数: 2525
51
除了自娱自乐的人,真在正常软件上班的人需要遵守一个基本的原则:写的代码要清晰
明白,并加上足够的comments,让其他人能很容易的看明白。
楼主列的那些花样,是给自己找不痛快,要出了bug,那种代码风格需要多花几倍的时
间来查找问题。
D****y
发帖数: 2207
52
没去看代码,但看了知乎的一些评论,如果评论说的是他的代码作的事情的话,那么什
么顶尖科学家10多年的研究,看懂论文都不止一个月实在是言过其实了。这件事的基础
知识在1998年出版的Advanced Compiler Design and Implementation的第15章第1节,
Tail-Call Optimization.理解Tail-Call Optimization的人要理解这个想法不会超过5
分钟。



【在 w*******e 的大作中提到】
: https://www.zhihu.com/question/20822815
: "我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在
: GitHub 上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想
: 象,这样一片普通人看起来像是玩具的 40 行 cps.ss 代码,融入了我一个星期的日日
: 夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研
: 究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星
: 期之内闷头写出来了。我是在说大话吗?代码就摆在那里,自己去看看不就知道了。当
: 我死后,如果有人想要知道什么是我上半生最重要的“杰作”,也就是这 40 行代码了
: 。它蕴含的美,超越我给任何公司写的成千上万行的代码。"
: 有没有人来说说这个东西,我想知道他有没有说大话。

D****y
发帖数: 2207
53
不是所有软件都是运行在电脑上的,一些小芯片上的软件还是需要小心计算存储的使用
的当然很多事情都是针对这些小型芯片的编译在做了,通常这种问题编译器都能解决得
比人好。时代不一样了,环境也不一样了,优劣的标准自然也都不一样了

【在 s****u 的大作中提到】
: 这代码让我想起了当年APPLE编程大赛。
: 就是一行APPLE程序,能完成多么多么复杂的功能。
: 要知道,那时候,内存,外存都是用BYTE计算的。
: 所以,那个编程大赛的胜利者其实还是很牛逼的。
: 但是,今天,我保证你没有听说过这个胜利者。
: 好的程序,代码和注释比例应该在1:2左右。
: 所以,这个代码,不及格。呵呵。

n****j
发帖数: 1708
54
好的代码几乎不需要注释

【在 s****u 的大作中提到】
: 这代码让我想起了当年APPLE编程大赛。
: 就是一行APPLE程序,能完成多么多么复杂的功能。
: 要知道,那时候,内存,外存都是用BYTE计算的。
: 所以,那个编程大赛的胜利者其实还是很牛逼的。
: 但是,今天,我保证你没有听说过这个胜利者。
: 好的程序,代码和注释比例应该在1:2左右。
: 所以,这个代码,不及格。呵呵。

m*****n
发帖数: 251
55
这个蠢货。
来,看看我的
如果有人想要知道什么是我半分钟最重要的“杰作”,也就是这 几行代码了。
它蕴含的美,超越我给任何公司写的成千上万行的代码。
知道是干啥的吧
section .code align=4
_main:
push ebp
mov ebp, esp
push dword 0x28
call _f
add esp, 0x4
mov esp, ebp
pop ebp
ret
_f:
push ebp
mov ebp, esp
cmp [ ebp + 0x8 ], dword 0x2
jge .L0
mov eax, [ ebp + 0x8 ]
mov esp, ebp
pop ebp
ret
.L0:
mov esi, [ ebp + 0x8 ]
sub esi, 0x2
push dword esi
call _f
add esp, 0x4
mov esi, eax
push esi
mov edi, [ ebp + 0x8 ]
sub edi, 0x1
push dword edi
call _f
add esp, 0x4
mov edi, eax
pop esi
add esi, edi
mov eax, esi
mov esp, ebp
pop ebp
ret
l****o
发帖数: 5435
56
奏是。
丫们懂个p啊

【在 n****j 的大作中提到】
: 好的代码几乎不需要注释
D****y
发帖数: 2207
57
这有啥,下面这段是我4年前干的,我把注释马赛克了,求看懂

【在 m*****n 的大作中提到】
: 这个蠢货。
: 来,看看我的
: 如果有人想要知道什么是我半分钟最重要的“杰作”,也就是这 几行代码了。
: 它蕴含的美,超越我给任何公司写的成千上万行的代码。
: 知道是干啥的吧
: section .code align=4
: _main:
: push ebp
: mov ebp, esp
: push dword 0x28

k*******g
发帖数: 7321
58
re

白。

【在 w****e 的大作中提到】
: 这种风格有啥难的?写过PERL或者Q/KDB+的人估计都写过类似的东西。恨不得一个程序
: 一行就写完,除了作者谁TM都看不懂是干啥的。就连作者,过半年也费半天劲才看明白。
: 王银(以及给他捧臭脚的那些人),根本就不明白,代码就是工具,不是你装逼的利器
: 。这种号称用最短的代码解决一个什么大问题,基本上都是本科刚毕业的小屁孩追求的
: 东西,既是给自己找不痛快也是给同事找不痛快。
: 我的team,我就明确跟他们说的清清楚楚,Q的代码你给我按C写,KDB的代码按SQL写,
: 给分行分行,该注释注释,什么匿名函数,统统不许用。写完互相review, 要是谁写的
: 代码别人不能一目了然知道目的,也不能看两遍就明白细节的,统统给我重写。

D****y
发帖数: 2207
59
同意,好的代码非码农都能应该能看懂才是,程序设计语言也是语言,语言的功能就是
交流
说一口无法与人交流的语言,在现实生活中那叫智障。

【在 n****j 的大作中提到】
: 好的代码几乎不需要注释
k*******g
发帖数: 7321
60
汇编?

【在 m*****n 的大作中提到】
: 这个蠢货。
: 来,看看我的
: 如果有人想要知道什么是我半分钟最重要的“杰作”,也就是这 几行代码了。
: 它蕴含的美,超越我给任何公司写的成千上万行的代码。
: 知道是干啥的吧
: section .code align=4
: _main:
: push ebp
: mov ebp, esp
: push dword 0x28

相关主题
龙芯都跟随北斗上天用了杀器还是噱头?详解华为的操作系统
学会编程,和学会开车一样简单连王垠都被P了,老中码农这行真是没得混 (转载)
多少码农有本事开发一套新语言的看不懂王垠的40行代码的人就别逼逼到不了你们公司标准了
进入Military版参与讨论
D****y
发帖数: 2207
61
他那是编译器编译出来的

【在 k*******g 的大作中提到】
: 汇编?
j******r
发帖数: 3327
62
尼玛和俺20年前干的差不多

【在 D****y 的大作中提到】
: 这有啥,下面这段是我4年前干的,我把注释马赛克了,求看懂
m*****n
发帖数: 251
63
你丫更狠!

【在 D****y 的大作中提到】
: 这有啥,下面这段是我4年前干的,我把注释马赛克了,求看懂
h*h
发帖数: 27852
64
狗屁

【在 s****u 的大作中提到】
: 这代码让我想起了当年APPLE编程大赛。
: 就是一行APPLE程序,能完成多么多么复杂的功能。
: 要知道,那时候,内存,外存都是用BYTE计算的。
: 所以,那个编程大赛的胜利者其实还是很牛逼的。
: 但是,今天,我保证你没有听说过这个胜利者。
: 好的程序,代码和注释比例应该在1:2左右。
: 所以,这个代码,不及格。呵呵。

m*********r
发帖数: 1797
65
这种代码不会过我们的 code review, 哈哈



【在 w*******e 的大作中提到】
: https://www.zhihu.com/question/20822815
: "我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在
: GitHub 上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想
: 象,这样一片普通人看起来像是玩具的 40 行 cps.ss 代码,融入了我一个星期的日日
: 夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研
: 究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星
: 期之内闷头写出来了。我是在说大话吗?代码就摆在那里,自己去看看不就知道了。当
: 我死后,如果有人想要知道什么是我上半生最重要的“杰作”,也就是这 40 行代码了
: 。它蕴含的美,超越我给任何公司写的成千上万行的代码。"
: 有没有人来说说这个东西,我想知道他有没有说大话。

w*****s
发帖数: 2896
66
我不知道王垠是谁,没去查过,也不知道他为什么火了。咱们仅仅从楼主所给出的信息
中做个推断,就事论事。
王垠的这段代码,是不太容易看得懂,但短小精悍有美感。他用不常见的的编程语言,
实现了一个高大上的研究成果,应该说是达到了他的目的:就是我很牛,你们拜服吧。
王垠提到,他用很短的时间,只一个星期,搞懂了一项成果,而这,是一些顶尖专家花
了十多年的才研究出来的。由此看来,普通人肯定是都不懂的,即便是专业人员,也需
要花“不止一个月的时间”,你说他牛不牛啊,牛!
读懂了这项成果之后,还得把这方案转化为程序算法,就是把抽象的概念和他们之间的
逻辑联系,具体实现的过程以程序流程的方法表示出来。这算法的好坏差别太大了,差
几个数量级都有可能。看王垠这洋洋得意的样子,这算法应该是相当不错,这应该也是
他引以为豪的亮点之一。算法是个黑箱,不给你讲解一下,外人根本无从知晓,因为实
现的方法可以有很多,条条大路通罗马,所以这是一个隐秘的东西。
接下去是编程了,王垠不用常规的编程语言,而选了一个cps.ss,有其原因。一是程序
简短,二是程序漂亮,外行人看着象看天书,却依然叹服它的美感,而这正是王垠要达
到的目的。他写道"它蕴含的美,超越我给任何公司写的成千上万行的代码。",他赤裸
裸地告诉你,他也为代码的美而陶醉。三是确保别人看不懂。是的,他无意让你知道他
写了些什么,他只保证你编译运行这段代码,能得到预计的结果。这cps.ss本来就比流
行的编程语言要难懂的多,而且因为较偏,能看得懂的人就更少了。还有,程序是根据
算法来编写得,他的算法没公开,你怎么解读?要知道,这不是简单的以教学为目的的
基本算法,而是对一项很难的研究成果的进行程序实现的算法。这实现过程,又有很多
种方案,你都不知道他用了那一件,所以光是这算法,不给注释,你可能就无法理解,
更不要谈去理解这程序了。我看到有些索男在嚷嚷,叫某某大牛过来解读,告诉你,没
用,大牛不是上帝,不是什么都懂的。
总结一下吧:时间短,事情难,但,王垠牛逼,大功告成。
以短短的一星期的时间,和短短的 40行 cps.ss 代码,王垠成功装逼,你能行吗?所
以他应该还是有几下子的,大家可以羡慕,就不要嫉妒了。还有你们写代码,就不要东
施效颦了,他这么做是有特殊原因的,在公司里,这种是不合格的。
说了这么多了,我自己都烦了,好了,我已解释了上次提到的“原因”了。看到了吧,
我当时不说是因为真要说一说其实还是挺麻烦的。

【在 x****6 的大作中提到】
: "王垠展示这段代码,是完全恰当的,原因不说了"
: 这段代码牛逼在那?

w***u
发帖数: 17713
67
哥公司绝对禁止这么个写法,连最简单的if句子都的双大括号齐全各占一行,任何引起
阅读歧义可能性的运算必需用小括号圈起来,能写1==n就不写n==1。原来我还觉得多余
,久了觉得做得很对。

typo。

【在 n****j 的大作中提到】
: 写程序不是什么“除非接受过专门的训练,你绝对不会理解它们的价值”,你去看大牛
: 的代码,一目了然让你明白他的思想,这才叫本事。比如下面这行:
: return a ? 1 : b ? 2: c ? 3 : 4;
: 换成 if 的话要 8 行,遇上花括号控那就更多。但是这样写真的很好吗?估计不太熟
: 的童鞋看到运算符优先级就先尿了,你自己看,大概也要几秒钟检查一下有没有 typo。

w*****s
发帖数: 2896
68
我说过,我这是就事论事。要是王垠骗人耍我们,那我也就不能保证了。
x****6
发帖数: 4339
69
谢谢科普!
那他这个transformer的代码牛在哪呢?

CPS

【在 h*i 的大作中提到】
: 他用的是正常风格在写代码。他这段代码的功能,是自动把正常风格的代码转换成CPS
: 风格的代码,所以叫CPS transformer。
: CPS是啥? 就是一种编程风格,每个函数结尾,不是直接返回结果,而是调用并把结果
: 传给一个“下一步”函数。CPS有啥用?很多编译器需要。代码转成CPS之后,很多事机
: 器更容易干。
: 比如说,你想发明一个高大上的能自动作贝叶斯推理的编程语言,就是现在前沿的所谓
: 叫probablistic programming language的东东,这种语言的执行不是常见的按代码顺
: 序执行,而是基于对一些随机变量抽样的结果来决定下一步作什么。要实现这样的一个
: 语言,一个容易的办法,就是把常规代码先转成CPS风格的,在每次调用“下一步”函
: 数之间作抽样。

m*****n
发帖数: 1631
70
正经科班出身都知道,好代码的第一条标准是可读性好。
王垠的码,说明他的脑子没受到足够的CS训练。



【在 w*******e 的大作中提到】
: https://www.zhihu.com/question/20822815
: "我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在
: GitHub 上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想
: 象,这样一片普通人看起来像是玩具的 40 行 cps.ss 代码,融入了我一个星期的日日
: 夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研
: 究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星
: 期之内闷头写出来了。我是在说大话吗?代码就摆在那里,自己去看看不就知道了。当
: 我死后,如果有人想要知道什么是我上半生最重要的“杰作”,也就是这 40 行代码了
: 。它蕴含的美,超越我给任何公司写的成千上万行的代码。"
: 有没有人来说说这个东西,我想知道他有没有说大话。

相关主题
看不懂王垠的40行代码的人就别逼逼到不了你们公司标准了王垠是个难得的计算机语言天才
万岁, 天才老丘.四十行代码把人都得罪光了
王垠的40行代码真牛逼!代码写好真不容易
进入Military版参与讨论
x****6
发帖数: 4339
71
谢谢! 受教了!

【在 w*****s 的大作中提到】
: 我不知道王垠是谁,没去查过,也不知道他为什么火了。咱们仅仅从楼主所给出的信息
: 中做个推断,就事论事。
: 王垠的这段代码,是不太容易看得懂,但短小精悍有美感。他用不常见的的编程语言,
: 实现了一个高大上的研究成果,应该说是达到了他的目的:就是我很牛,你们拜服吧。
: 王垠提到,他用很短的时间,只一个星期,搞懂了一项成果,而这,是一些顶尖专家花
: 了十多年的才研究出来的。由此看来,普通人肯定是都不懂的,即便是专业人员,也需
: 要花“不止一个月的时间”,你说他牛不牛啊,牛!
: 读懂了这项成果之后,还得把这方案转化为程序算法,就是把抽象的概念和他们之间的
: 逻辑联系,具体实现的过程以程序流程的方法表示出来。这算法的好坏差别太大了,差
: 几个数量级都有可能。看王垠这洋洋得意的样子,这算法应该是相当不错,这应该也是

s******y
发帖数: 28562
72
写得再怎么花哨的编码,最后让编译器一弄就不知道成什么样了。写成这样未必就运行
效率高,但是对于debug 很麻烦。
如果这个就是他的编码方式,也难怪他哪个公司都呆不长。



【在 w*******e 的大作中提到】
: https://www.zhihu.com/question/20822815
: "我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在
: GitHub 上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想
: 象,这样一片普通人看起来像是玩具的 40 行 cps.ss 代码,融入了我一个星期的日日
: 夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研
: 究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星
: 期之内闷头写出来了。我是在说大话吗?代码就摆在那里,自己去看看不就知道了。当
: 我死后,如果有人想要知道什么是我上半生最重要的“杰作”,也就是这 40 行代码了
: 。它蕴含的美,超越我给任何公司写的成千上万行的代码。"
: 有没有人来说说这个东西,我想知道他有没有说大话。

h*h
发帖数: 27852
73
王垠这个程序不是一般应用程序,用的也不是常用语言。
程序的注释不是让完全不懂那门语言和算法逻辑的人看懂程序的。说什么过不了你们公
司code review的,你们公司用这语言吗?
真要看他的应用程序风格,看他的java程序
D***n
发帖数: 6804
74
呵呵,我好奇一个事情:
他为什么用Scheme而不是C或者javascript写呢?
是因为其他CPS例子都是用scheme写的么?呵呵呵。

【在 h*h 的大作中提到】
: 王垠这个程序不是一般应用程序,用的也不是常用语言。
: 程序的注释不是让完全不懂那门语言和算法逻辑的人看懂程序的。说什么过不了你们公
: 司code review的,你们公司用这语言吗?
: 真要看他的应用程序风格,看他的java程序

r*g
发帖数: 3159
75
前面有个说Q/kDb+的。写q的家伙有个一页紙的k语言解释器原型,要是贴出来,怕也是
一堆喷他风格难懂,过不了code review的。喷风格实在是没内容。
D****y
发帖数: 2207
76
其实说穿了没什么,我干的事20年前写病毒的那些家伙干起来熟门熟路。我要在程序运
行的时候实时修改正在运行的代码,才写那么一小段二进制码的其实我没完全把注释全
都马赛克,有一条call指令漏了半张脸,真正要干的事情,都是通过这条call指令去做
的。
但除了这种真的特殊用途的代码外,我绝对认为好的码农应该追求自己的代码,给没有
受过编程训练的相关行业人士看也能看懂。比如做金融软件的码农写的代码就应该能让
没学过编程的金融学家能看懂。

【在 m*****n 的大作中提到】
: 你丫更狠!
D****y
发帖数: 2207
77
就别扯什么研究10年,看懂一个月了,就是Tail-Call Optimization的一个扩展,
Tail-Call Optimization 20年前就进教科书了。而且这个扩展写篇论文就算了,
在实际应用中实在是让人头皮发麻,真这么干的话很多系统软件的前提假设都被
打破了。

【在 w*****s 的大作中提到】
: 我不知道王垠是谁,没去查过,也不知道他为什么火了。咱们仅仅从楼主所给出的信息
: 中做个推断,就事论事。
: 王垠的这段代码,是不太容易看得懂,但短小精悍有美感。他用不常见的的编程语言,
: 实现了一个高大上的研究成果,应该说是达到了他的目的:就是我很牛,你们拜服吧。
: 王垠提到,他用很短的时间,只一个星期,搞懂了一项成果,而这,是一些顶尖专家花
: 了十多年的才研究出来的。由此看来,普通人肯定是都不懂的,即便是专业人员,也需
: 要花“不止一个月的时间”,你说他牛不牛啊,牛!
: 读懂了这项成果之后,还得把这方案转化为程序算法,就是把抽象的概念和他们之间的
: 逻辑联系,具体实现的过程以程序流程的方法表示出来。这算法的好坏差别太大了,差
: 几个数量级都有可能。看王垠这洋洋得意的样子,这算法应该是相当不错,这应该也是

D****y
发帖数: 2207
78
哈哈,突发奇想,以后面试让看这段代码,但凡号称能看懂的统统不要

【在 h*h 的大作中提到】
: 王垠这个程序不是一般应用程序,用的也不是常用语言。
: 程序的注释不是让完全不懂那门语言和算法逻辑的人看懂程序的。说什么过不了你们公
: 司code review的,你们公司用这语言吗?
: 真要看他的应用程序风格,看他的java程序

H**r
发帖数: 10015
79

攻击王垠的基本没摸到点上
人用的语言又不是主流语言,fp的模式也不是主流,programming language这玩意儿版
上基本就没几个人入门的。
连注解是代码两倍的奇谈怪论都出来了。
直接承认不懂没什么丢人的,就算是PhD不是做这个方向的不懂也很正常。别死撑。不
懂又不代表承认王垠牛逼,只是无法判断。

【在 h*h 的大作中提到】
: 王垠这个程序不是一般应用程序,用的也不是常用语言。
: 程序的注释不是让完全不懂那门语言和算法逻辑的人看懂程序的。说什么过不了你们公
: 司code review的,你们公司用这语言吗?
: 真要看他的应用程序风格,看他的java程序

j**********r
发帖数: 3798
80
的确不懂,学术界有的是懂的。一个读了10几年研究生连篇论文都憋不出来,到处被退
学的傻逼。现在弄个作业来装B?
业界比钱,学界比论文,啥都没有的就闭嘴吧。
相关主题
印度公司自测:印工程师仅2%能写高效合格代码为什么天朝没有发明任何有用的计算机语言?
中国人所有的创造力和想象力全用来发牢骚抱怨和骂娘上了我有个猜想, 不一定对, 白人智商高的都搞cs了
菌版的人才们觉得linux有后门吗?中国最顶尖的码农在编写j20的飞控软件
进入Military版参与讨论
D****y
发帖数: 2207
81
你除了说你们不懂以外还有什么论据可以支持你的观点的么?
这里有一个研究Compiler出身,在Compiler,Interpreter,Simulator,Virtual
Machine上摸爬滚打了20来年的Ph.D。我承认我不会他用的语言,但是我能看懂别人说
的人话,能在5分钟内理解他到底在做什么,好处是什么问题在哪里。
我的观点如下:
1.他所实现的不过是一个20来年前已经上教科书的经典编译优化的扩展,熟悉编译优化
技术的人完全可以在5分钟内理解这个问题的本质。而这个扩展本身在10多年前就已经
被学术界讨论过,也发表过。
2.我不认为工业界会欢迎这样的优化,因为这个破坏了一些系统级的假设,而所得到的
好处并不是很大,并且它所解决的问题也不是没有其他替代方案可以用的。引入如此优
化的工具可以单独工作,但是无法与其他通用软件协作(这一点与这段代码本身的不可
读性有着高度的自洽性),这在今天的计算机世界是非常可怕的一件事。
3.计算机发展到今天,写代码更多的已经不是给机器看了,而是给人看的。怎么把人看
的代码翻译给机器看那是编译器的工作,在这个方向上,人做得再好也不过是给编译器
省力气。人花上一周给编译器省千分之一秒的时间,我可以说干这事的人是在做无用功
。如果连这笔帐都算不清楚的话,很难说这个人能有多牛。更大的一笔帐是明明可以用
初级码农都能看懂的方式来实现,并让初级码农来维护的代码,非要搞得晦涩难懂,最
后只能是增加维护成本。
4.不带恶意地揣测一下,王完全是沉浸在自己封闭的世界里,他的语言不是用来跟人交
流的,他的程序也不是与其它软件一起协作的。不要忘了,这是一个开放,互联,协作
的世界,这种方式早10年就已经被淘汰了,而他在这条被淘汰的路上走得太远,几近走
火入魔。
5.关于注释,我的观点是不需要注释就能让低级码农甚至非码农看懂的代码是质量最高
的,通过注释能让低级码农看懂的其次,低级码农看不懂的代码最差。借用一段鸡汤故
事,忘记借的是那个作家的名头了,说他每次写完新的作品都要读给自己的女佣听,并
根据女佣的反馈来修改,直到他不识字的女佣能完全领会他作品的精髓为止。我觉得今
天的业内人士应该学学这位作家。
倚老卖老(其实也不是很老)一下,说了很多是希望这个行业的年轻人不要被误导,前
赴后继地走上一条已经被淘汰10多年的不归路。

【在 H**r 的大作中提到】
: 对
: 攻击王垠的基本没摸到点上
: 人用的语言又不是主流语言,fp的模式也不是主流,programming language这玩意儿版
: 上基本就没几个人入门的。
: 连注解是代码两倍的奇谈怪论都出来了。
: 直接承认不懂没什么丢人的,就算是PhD不是做这个方向的不懂也很正常。别死撑。不
: 懂又不代表承认王垠牛逼,只是无法判断。

h*h
发帖数: 27852
82
你见过几个compiler code不需要注释就能让低级码农甚至非码农看懂的或者通过注释
能让低级码农看懂的?

【在 D****y 的大作中提到】
: 你除了说你们不懂以外还有什么论据可以支持你的观点的么?
: 这里有一个研究Compiler出身,在Compiler,Interpreter,Simulator,Virtual
: Machine上摸爬滚打了20来年的Ph.D。我承认我不会他用的语言,但是我能看懂别人说
: 的人话,能在5分钟内理解他到底在做什么,好处是什么问题在哪里。
: 我的观点如下:
: 1.他所实现的不过是一个20来年前已经上教科书的经典编译优化的扩展,熟悉编译优化
: 技术的人完全可以在5分钟内理解这个问题的本质。而这个扩展本身在10多年前就已经
: 被学术界讨论过,也发表过。
: 2.我不认为工业界会欢迎这样的优化,因为这个破坏了一些系统级的假设,而所得到的
: 好处并不是很大,并且它所解决的问题也不是没有其他替代方案可以用的。引入如此优

h*h
发帖数: 27852
83
你根本不懂编程,还是闭嘴吧

的确不懂,学术界有的是懂的。一个读了10几年研究生连篇论文都憋不出来,到处被退

【在 j**********r 的大作中提到】
: 的确不懂,学术界有的是懂的。一个读了10几年研究生连篇论文都憋不出来,到处被退
: 学的傻逼。现在弄个作业来装B?
: 业界比钱,学界比论文,啥都没有的就闭嘴吧。

D***n
发帖数: 6804
84
你太较真了,其实这段程序作者恐怕就是照猫画虎。
最明显的证据就是他用的是Scheme,一个相对少见的语言。我在网上搜了一下,这个问
题的例子几乎都是Scheme写的。
如果他真的master了,显然应该用主流语言,比如Javascript写。JS写实用性应用性很
强,但是逼格可能就下来了。

【在 D****y 的大作中提到】
: 你除了说你们不懂以外还有什么论据可以支持你的观点的么?
: 这里有一个研究Compiler出身,在Compiler,Interpreter,Simulator,Virtual
: Machine上摸爬滚打了20来年的Ph.D。我承认我不会他用的语言,但是我能看懂别人说
: 的人话,能在5分钟内理解他到底在做什么,好处是什么问题在哪里。
: 我的观点如下:
: 1.他所实现的不过是一个20来年前已经上教科书的经典编译优化的扩展,熟悉编译优化
: 技术的人完全可以在5分钟内理解这个问题的本质。而这个扩展本身在10多年前就已经
: 被学术界讨论过,也发表过。
: 2.我不认为工业界会欢迎这样的优化,因为这个破坏了一些系统级的假设,而所得到的
: 好处并不是很大,并且它所解决的问题也不是没有其他替代方案可以用的。引入如此优

h******k
发帖数: 810
85
javac...

【在 h*h 的大作中提到】
: 你见过几个compiler code不需要注释就能让低级码农甚至非码农看懂的或者通过注释
: 能让低级码农看懂的?

b***y
发帖数: 14281
86
实际执行的时候还是和if else一样处理。这就是吃饱了撑的。

typo。

【在 n****j 的大作中提到】
: 写程序不是什么“除非接受过专门的训练,你绝对不会理解它们的价值”,你去看大牛
: 的代码,一目了然让你明白他的思想,这才叫本事。比如下面这行:
: return a ? 1 : b ? 2: c ? 3 : 4;
: 换成 if 的话要 8 行,遇上花括号控那就更多。但是这样写真的很好吗?估计不太熟
: 的童鞋看到运算符优先级就先尿了,你自己看,大概也要几秒钟检查一下有没有 typo。

b***y
发帖数: 14281
87
当然不是。
return a?1:2很清楚,多了就是找死。1+2*3是为了简便,但是公式一旦复杂度增加到
一定程度就需要用括号来代替优先级。

【在 x****u 的大作中提到】
: C语言的问号设计出来就是为了这种玩法的,这是基础问题。
: 你写 1 + 2 * 3,也不需要花时间想想C作者有没有让加法优先于乘法
:
: typo。

m*********w
发帖数: 6004
88

不知道老師的心態是什麼...(嘆)(攤手)

【在 n****j 的大作中提到】
: 想起小时候美术课,兄弟把哪吒描得跟样图一模一样,结果还是只得了个良,耿耿于怀
: 很久
:
: 在

s*********y
发帖数: 689
89
这是一个有水平的好帖子。

【在 D****y 的大作中提到】
: 你除了说你们不懂以外还有什么论据可以支持你的观点的么?
: 这里有一个研究Compiler出身,在Compiler,Interpreter,Simulator,Virtual
: Machine上摸爬滚打了20来年的Ph.D。我承认我不会他用的语言,但是我能看懂别人说
: 的人话,能在5分钟内理解他到底在做什么,好处是什么问题在哪里。
: 我的观点如下:
: 1.他所实现的不过是一个20来年前已经上教科书的经典编译优化的扩展,熟悉编译优化
: 技术的人完全可以在5分钟内理解这个问题的本质。而这个扩展本身在10多年前就已经
: 被学术界讨论过,也发表过。
: 2.我不认为工业界会欢迎这样的优化,因为这个破坏了一些系统级的假设,而所得到的
: 好处并不是很大,并且它所解决的问题也不是没有其他替代方案可以用的。引入如此优

c****3
发帖数: 10787
90
他的博客里面评价各种技术的文章,比他自我吹嘘的代码有价值。
他自己意识不到,计算机行业不是比技术的,是比你能不能赚钱的。
因为这里面每个技术都是实用的,只不过有的太热门,导致竞争过度。有的现在没市场
,将来有市场,但是没有人能发掘。
只要有用户需求,就算DOS当年做的象狗屎一样,为学术界不耻,人家照样占据几乎全
部个人电脑市场。
相关主题
程序员真的挺low b的学会编程,和学会开车一样简单
这差距还是明摆着的多少码农有本事开发一套新语言的
龙芯都跟随北斗上天用了杀器还是噱头?详解华为的操作系统
进入Military版参与讨论
D****y
发帖数: 2207
91
大多数初级码农看不懂Compiler的Code不是因为Code本身晦涩难懂而是他们缺乏
Compiler的背景知识。对于初步具备Compiler背景知识的人来说不管是Gcc还是LLVM的
代码都很容易懂。我二十年前刚入这一行的时候就是从Gcc源码起步的,今天Gcc的源码
质量更是比20年前有了质的飞跃,而LLVM的代码质量要比Gcc的更好。在学术界,
Stanford的SUIF和UMN的Agassiz都是构架很不错,容易上手的Compiler

【在 h*h 的大作中提到】
: 你见过几个compiler code不需要注释就能让低级码农甚至非码农看懂的或者通过注释
: 能让低级码农看懂的?

D****y
发帖数: 2207
92
就这个例子而言,if else和?:还是有区别的
if(c)
d = a++;
else
d = a--;
的结果与
d = c ? a++ : a--;
的结果一样么?
当然这只是我临时编造出来的例子,只是想说明就语义分析来讲,编译器要做得比大多
数码农好得多,也准确得多,真的别把自己有限的精力浪费在这种事情上。用编程语言
把自己想要实现的算法表述清楚准确没有歧义(对人来说)才是更重要的。

【在 b***y 的大作中提到】
: 实际执行的时候还是和if else一样处理。这就是吃饱了撑的。
:
: typo。

z**********i
发帖数: 9546
93
赞,谢扫盲。
[在 mayliszt (mayliszt) 的大作中提到:]
:高级码工也是要求可读性强。大巧若拙。
:万一有个bug(再高级的码工也不能保证没有bug),那么以后岂不是要折腾死人。
:高级主要是高级在系统设计和构架的能力。能够让大型的复杂的项目有条不紊的开发
下去,控制复杂度。
:高级不是高级在写一段代码。
D***n
发帖数: 6804
94
语法树AST那里可能有点区别,但是实际后台会有区别吗?不好说,现在后台各种优化。
好久不搞了,不过像这个例子,
很有可能**会做分支优化,因为C并不参与分支的计算,
所以可以同时算d=a++和d=a--和if(C),再根据判断结果选择使用哪个d。
(只是大意,别和我较真)

【在 D****y 的大作中提到】
: 就这个例子而言,if else和?:还是有区别的
: if(c)
: d = a++;
: else
: d = a--;
: 的结果与
: d = c ? a++ : a--;
: 的结果一样么?
: 当然这只是我临时编造出来的例子,只是想说明就语义分析来讲,编译器要做得比大多
: 数码农好得多,也准确得多,真的别把自己有限的精力浪费在这种事情上。用编程语言

D****y
发帖数: 2207
95
这两段代码执行完毕后,a的值分别是什么?想不明白,但又有兴趣的可以自己写一小
段代码试试看,也就是半分钟的事情。我想说的是,在这个例子中,问号表达式对编译
器来说是没有歧义的,但是是很容被人误读的,因为问号表达式不存在于自然语言中,
而if else在自然语言中是有非常清晰的存在的。
非常感谢你主动献身来论证我的观点 ;-)

化。

【在 D***n 的大作中提到】
: 语法树AST那里可能有点区别,但是实际后台会有区别吗?不好说,现在后台各种优化。
: 好久不搞了,不过像这个例子,
: 很有可能**会做分支优化,因为C并不参与分支的计算,
: 所以可以同时算d=a++和d=a--和if(C),再根据判断结果选择使用哪个d。
: (只是大意,别和我较真)

D***n
发帖数: 6804
96
谢谢指教,那请你解释一下为啥值不一样?

【在 D****y 的大作中提到】
: 这两段代码执行完毕后,a的值分别是什么?想不明白,但又有兴趣的可以自己写一小
: 段代码试试看,也就是半分钟的事情。我想说的是,在这个例子中,问号表达式对编译
: 器来说是没有歧义的,但是是很容被人误读的,因为问号表达式不存在于自然语言中,
: 而if else在自然语言中是有非常清晰的存在的。
: 非常感谢你主动献身来论证我的观点 ;-)
:
: 化。

D****y
发帖数: 2207
97
问号表达式冒号两边是两个子表达式,而if else的两个分支是两个语句。
在语法上,表达式的每一个子表达式都是必须被计算的而if else的两个分支语句中只
有一个会被执行。这是问号表达式与if else语句的细微差别之一。但也是最容易被人
忽略的差别之一,最大的原因还是问号表达式不存在于自然语言中,所以人们很自然会
在自然语言中寻找它的替代品,从而忽略了它与替代品之间的这些细微差别。而这些细
微差别往往就是bug的根源。

【在 D***n 的大作中提到】
: 谢谢指教,那请你解释一下为啥值不一样?
c********e
发帖数: 2726
98
太复杂了!我喜欢简单的:如e=mc2
D***n
发帖数: 6804
99
这我就不懂了,C语言标准里不是这么说的:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
6.5.15 Conditional operator
Semantics 4
The first operand is evaluated; there is a sequence point between its
evaluation and the evaluation of the second or third operand (whichever is
evaluated). The second operand is evaluated only if the first compares
unequal to 0; the third operand is evaluated only if the first compares
equal to 0;
第二、第三个operand是否被evaluated取决于第一个operand,就是?之前的值。所以子
表达式按照标准只应该被evaluate一个。

【在 D****y 的大作中提到】
: 问号表达式冒号两边是两个子表达式,而if else的两个分支是两个语句。
: 在语法上,表达式的每一个子表达式都是必须被计算的而if else的两个分支语句中只
: 有一个会被执行。这是问号表达式与if else语句的细微差别之一。但也是最容易被人
: 忽略的差别之一,最大的原因还是问号表达式不存在于自然语言中,所以人们很自然会
: 在自然语言中寻找它的替代品,从而忽略了它与替代品之间的这些细微差别。而这些细
: 微差别往往就是bug的根源。

D****y
发帖数: 2207
100
Good Point!!!!
呵呵,我也想当然了,我自证了一把自己的观点。这个问题应该去看unary expression
的标准,而不是conditional expression的标准。

【在 D***n 的大作中提到】
: 这我就不懂了,C语言标准里不是这么说的:
: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
: 6.5.15 Conditional operator
: Semantics 4
: The first operand is evaluated; there is a sequence point between its
: evaluation and the evaluation of the second or third operand (whichever is
: evaluated). The second operand is evaluated only if the first compares
: unequal to 0; the third operand is evaluated only if the first compares
: equal to 0;
: 第二、第三个operand是否被evaluated取决于第一个operand,就是?之前的值。所以子

相关主题
连王垠都被P了,老中码农这行真是没得混 (转载)王垠的40行代码真牛逼!
看不懂王垠的40行代码的人就别逼逼到不了你们公司标准了王垠是个难得的计算机语言天才
万岁, 天才老丘.四十行代码把人都得罪光了
进入Military版参与讨论
m******t
发帖数: 1171
101
? A : B; 只会evaluate A和B中的一个。
赶紧在原帖上注明一下,别误导后来人。

【在 D****y 的大作中提到】
: 问号表达式冒号两边是两个子表达式,而if else的两个分支是两个语句。
: 在语法上,表达式的每一个子表达式都是必须被计算的而if else的两个分支语句中只
: 有一个会被执行。这是问号表达式与if else语句的细微差别之一。但也是最容易被人
: 忽略的差别之一,最大的原因还是问号表达式不存在于自然语言中,所以人们很自然会
: 在自然语言中寻找它的替代品,从而忽略了它与替代品之间的这些细微差别。而这些细
: 微差别往往就是bug的根源。

D****y
发帖数: 2207
102
还是留着吧,看看一个干了20年compiler的老鸟也会犯想当然的错误,给别人一个警醒
,也从侧面说明不要使用那些奇技淫巧的重要性。

【在 m******t 的大作中提到】
: ? A : B; 只会evaluate A和B中的一个。
: 赶紧在原帖上注明一下,别误导后来人。

c******3
发帖数: 6509
103
这个代码不牛,牛的是下面留言的“数据压缩”大神,才入行15年就吹的这么强大。让
我们这些混了近30多年的咋活啊...
还不如把当年美国的一个“永动机式压缩”专利放在招股书里面得了。
这个传说中的专利,可以把任意电影压缩到1 bit,也就是可以纸上花一条线就可以代
表无限时长的电影。这才是太极的真谛,当年也不知道谁审理的,竟然通过了。
s******8
发帖数: 4192
104
How to write Unmaintainable Code sample #1.
h*h
发帖数: 27852
105
首创啊,乐意交专利费为什么拦着?

【在 c******3 的大作中提到】
: 这个代码不牛,牛的是下面留言的“数据压缩”大神,才入行15年就吹的这么强大。让
: 我们这些混了近30多年的咋活啊...
: 还不如把当年美国的一个“永动机式压缩”专利放在招股书里面得了。
: 这个传说中的专利,可以把任意电影压缩到1 bit,也就是可以纸上花一条线就可以代
: 表无限时长的电影。这才是太极的真谛,当年也不知道谁审理的,竟然通过了。

b***y
发帖数: 14281
106
扯淡。别不懂装懂。
问号表达式一样只执行一半,这是非常重要的常识,很多时候程序依赖这个,比方
d=a.size()>0?0:a[0]
这个句子不会造成segmentation fault。你是不是马农?比我这个业余的还不如。

【在 D****y 的大作中提到】
: 问号表达式冒号两边是两个子表达式,而if else的两个分支是两个语句。
: 在语法上,表达式的每一个子表达式都是必须被计算的而if else的两个分支语句中只
: 有一个会被执行。这是问号表达式与if else语句的细微差别之一。但也是最容易被人
: 忽略的差别之一,最大的原因还是问号表达式不存在于自然语言中,所以人们很自然会
: 在自然语言中寻找它的替代品,从而忽略了它与替代品之间的这些细微差别。而这些细
: 微差别往往就是bug的根源。

b***y
发帖数: 14281
107
compiler都是先写好算法,然后按照算法和语法定义自动产生的,人工最多找点优化的
方案,这年头谁吃饱了撑的自己写compiler code。

【在 D****y 的大作中提到】
: 大多数初级码农看不懂Compiler的Code不是因为Code本身晦涩难懂而是他们缺乏
: Compiler的背景知识。对于初步具备Compiler背景知识的人来说不管是Gcc还是LLVM的
: 代码都很容易懂。我二十年前刚入这一行的时候就是从Gcc源码起步的,今天Gcc的源码
: 质量更是比20年前有了质的飞跃,而LLVM的代码质量要比Gcc的更好。在学术界,
: Stanford的SUIF和UMN的Agassiz都是构架很不错,容易上手的Compiler

m******t
发帖数: 1171
108
? : 和 if else的区别并不是这个。 他们都只evaluate一个分支。
他们的区别是:
? : 可以用在constexpr中,C++11的特性。
而if else不可以。

【在 D****y 的大作中提到】
: 问号表达式冒号两边是两个子表达式,而if else的两个分支是两个语句。
: 在语法上,表达式的每一个子表达式都是必须被计算的而if else的两个分支语句中只
: 有一个会被执行。这是问号表达式与if else语句的细微差别之一。但也是最容易被人
: 忽略的差别之一,最大的原因还是问号表达式不存在于自然语言中,所以人们很自然会
: 在自然语言中寻找它的替代品,从而忽略了它与替代品之间的这些细微差别。而这些细
: 微差别往往就是bug的根源。

D****y
发帖数: 2207
109
优化才是Compiler的核心技术,语言和平台的支持并不是,在Compiler里,支持语言特
性和平台特性的代码通常不到20%

【在 b***y 的大作中提到】
: compiler都是先写好算法,然后按照算法和语法定义自动产生的,人工最多找点优化的
: 方案,这年头谁吃饱了撑的自己写compiler code。

n****j
发帖数: 1708
110
呵呵,我随手写个例子引起好几楼的讨论,起码说明这个写法是有歧义的。
实际上,首先我没说这个是 C,其次问号和 if 的执行效率也是有细微不同的。

【在 b***y 的大作中提到】
: 扯淡。别不懂装懂。
: 问号表达式一样只执行一半,这是非常重要的常识,很多时候程序依赖这个,比方
: d=a.size()>0?0:a[0]
: 这个句子不会造成segmentation fault。你是不是马农?比我这个业余的还不如。

相关主题
四十行代码把人都得罪光了中国人所有的创造力和想象力全用来发牢骚抱怨和骂娘上了
代码写好真不容易菌版的人才们觉得linux有后门吗?
印度公司自测:印工程师仅2%能写高效合格代码为什么天朝没有发明任何有用的计算机语言?
进入Military版参与讨论
D****y
发帖数: 2207
111
恩,有歧义说明不是好的写法。不过对于简单的if,Compiler是有能力把它转换成类似
于问号的实现的,效率倒不是问题,重要的还是容易引起误解。

【在 n****j 的大作中提到】
: 呵呵,我随手写个例子引起好几楼的讨论,起码说明这个写法是有歧义的。
: 实际上,首先我没说这个是 C,其次问号和 if 的执行效率也是有细微不同的。

m*****n
发帖数: 251
112
总算来了个有真知灼见的
赞一个

【在 D****y 的大作中提到】
: 你除了说你们不懂以外还有什么论据可以支持你的观点的么?
: 这里有一个研究Compiler出身,在Compiler,Interpreter,Simulator,Virtual
: Machine上摸爬滚打了20来年的Ph.D。我承认我不会他用的语言,但是我能看懂别人说
: 的人话,能在5分钟内理解他到底在做什么,好处是什么问题在哪里。
: 我的观点如下:
: 1.他所实现的不过是一个20来年前已经上教科书的经典编译优化的扩展,熟悉编译优化
: 技术的人完全可以在5分钟内理解这个问题的本质。而这个扩展本身在10多年前就已经
: 被学术界讨论过,也发表过。
: 2.我不认为工业界会欢迎这样的优化,因为这个破坏了一些系统级的假设,而所得到的
: 好处并不是很大,并且它所解决的问题也不是没有其他替代方案可以用的。引入如此优

D***n
发帖数: 6804
113
回到正题。我又看了一遍那个Code,又去看了看CPS,嗐,不就是callback么?
说实话,现在callback的各种实现和花样在javascript下很多很成熟了
这个程序长不了,到后面明显出现了callback hell,一长串的右括号。
而且callback hell的debugging才让人抓狂,所以毫不奇怪他废了这么多功夫。

【在 D****y 的大作中提到】
: 你除了说你们不懂以外还有什么论据可以支持你的观点的么?
: 这里有一个研究Compiler出身,在Compiler,Interpreter,Simulator,Virtual
: Machine上摸爬滚打了20来年的Ph.D。我承认我不会他用的语言,但是我能看懂别人说
: 的人话,能在5分钟内理解他到底在做什么,好处是什么问题在哪里。
: 我的观点如下:
: 1.他所实现的不过是一个20来年前已经上教科书的经典编译优化的扩展,熟悉编译优化
: 技术的人完全可以在5分钟内理解这个问题的本质。而这个扩展本身在10多年前就已经
: 被学术界讨论过,也发表过。
: 2.我不认为工业界会欢迎这样的优化,因为这个破坏了一些系统级的假设,而所得到的
: 好处并不是很大,并且它所解决的问题也不是没有其他替代方案可以用的。引入如此优

j**********r
发帖数: 3798
114
MIT上比我能码的不多,别跟我老瞎叫板。

【在 h*h 的大作中提到】
: 你根本不懂编程,还是闭嘴吧
:
: 的确不懂,学术界有的是懂的。一个读了10几年研究生连篇论文都憋不出来,到处被退

h*h
发帖数: 27852
115
发信人: jobhuntinger (jobhuntinger), 信区: JobHunting
标 题: Re: 王垠的[40 行代码]: 普通琐男码工们都跪安吧! (转载)
发信站: BBS 未名空间站 (Thu May 19 15:10:43 2016, 美东)
我老不懂编程语言,就问几个问题。这40行代码成为啥系统的核心代码,挣了多少钱没
有?
如果没有,但是学术上很牛逼,那么发在什么peer review的论文上没有?
如果都没有,那不就是然并卵。同样的东西找个做compiler的博士生几天就给做了,是
40行还是4000行有区别吗?程序是用来跑的,不是用来比短的。
业界看钱,学界看论文。都没有的跟孔乙己show off会写四种回字一个性质。
j**********r
发帖数: 3798
116
你这外行,编程和编程语言根本就不是一个东西。用锤子和做锤子的区别。

【在 h*h 的大作中提到】
: 发信人: jobhuntinger (jobhuntinger), 信区: JobHunting
: 标 题: Re: 王垠的[40 行代码]: 普通琐男码工们都跪安吧! (转载)
: 发信站: BBS 未名空间站 (Thu May 19 15:10:43 2016, 美东)
: 我老不懂编程语言,就问几个问题。这40行代码成为啥系统的核心代码,挣了多少钱没
: 有?
: 如果没有,但是学术上很牛逼,那么发在什么peer review的论文上没有?
: 如果都没有,那不就是然并卵。同样的东西找个做compiler的博士生几天就给做了,是
: 40行还是4000行有区别吗?程序是用来跑的,不是用来比短的。
: 业界看钱,学界看论文。都没有的跟孔乙己show off会写四种回字一个性质。

1 (共1页)
进入Military版参与讨论
相关主题
龙芯都跟随北斗上天用了王垠是个难得的计算机语言天才
学会编程,和学会开车一样简单四十行代码把人都得罪光了
多少码农有本事开发一套新语言的代码写好真不容易
杀器还是噱头?详解华为的操作系统印度公司自测:印工程师仅2%能写高效合格代码
连王垠都被P了,老中码农这行真是没得混 (转载)中国人所有的创造力和想象力全用来发牢骚抱怨和骂娘上了
看不懂王垠的40行代码的人就别逼逼到不了你们公司标准了菌版的人才们觉得linux有后门吗?
万岁, 天才老丘.为什么天朝没有发明任何有用的计算机语言?
王垠的40行代码真牛逼!我有个猜想, 不一定对, 白人智商高的都搞cs了
相关话题的讨论汇总
话题: lambda话题: cps话题: cps1话题: 代码话题: fact