h*i 发帖数: 3446 | 1 https://github.com/yinwang0/lightsabers/blob/
6a66c294d4c4217efebfdeae18ee4697d802f79e/cps.ss
他那段代码的功能,是自动把正常风格的代码转换成CPS风格(Continuation-passing
style)的代码,所以叫CPS transformer。
CPS是啥? 就是一种编程风格,每个函数结尾,不是直接返回结果,而是调用并把结果
传给一个“下一步”函数。当然这个“下一步”函数,也是从外面传进来的,所以CPS
风格的函数要比正常风格的要多一个参数。
CPS有啥用?很多编译器需要。代码转成CPS之后,很多事机器更容易干。
比如说,你想发明一个高大上的能自动作贝叶斯推理的编程语言,就是现在前沿的所谓
叫probablistic programming language的东东,这种语言的执行不是常见的按代码顺
序执行,而是基于对一些随机变量抽样的结果来决定下一步作什么。要实现这样的一个
语言,一个容易的办法,就是把常规代码先转成CPS风格的,在每次调用“下一步”函
数之前作抽样。
另外一个例子,比如golang的这种异步功能,也可以用CPS实现。比如Clojure的core.
async库,就是用类似于CPS但更简单的一种叫Static single assignment form的方法
来实现的。
总之,如果想要打破一般程序执行的方式来干点啥特别的事情,CPS就能用上。 |
n******7 发帖数: 12463 | |
a9 发帖数: 21638 | 3 不就是callback吗?哈哈
passing
CPS
【在 h*i 的大作中提到】 : https://github.com/yinwang0/lightsabers/blob/ : 6a66c294d4c4217efebfdeae18ee4697d802f79e/cps.ss : 他那段代码的功能,是自动把正常风格的代码转换成CPS风格(Continuation-passing : style)的代码,所以叫CPS transformer。 : CPS是啥? 就是一种编程风格,每个函数结尾,不是直接返回结果,而是调用并把结果 : 传给一个“下一步”函数。当然这个“下一步”函数,也是从外面传进来的,所以CPS : 风格的函数要比正常风格的要多一个参数。 : CPS有啥用?很多编译器需要。代码转成CPS之后,很多事机器更容易干。 : 比如说,你想发明一个高大上的能自动作贝叶斯推理的编程语言,就是现在前沿的所谓 : 叫probablistic programming language的东东,这种语言的执行不是常见的按代码顺
|
h*i 发帖数: 3446 | 4 是啊。CPS是callback的一个特例。
他这个代码是把正常代码自动转成CPS,并不是很容易写的。你能手写callback,但肯定
不会写个代码来自动把非callback的代码转成callback的代码。这是开车和造车的区别。
当然了,不作编译器的一般马工,也不用关心这些。
【在 a9 的大作中提到】 : 不就是callback吗?哈哈 : : passing : CPS
|
h*i 发帖数: 3446 | 5 https://github.com/yinwang0/lightsabers/blob/
6a66c294d4c4217efebfdeae18ee4697d802f79e/cps.ss
【在 n******7 的大作中提到】 : 有意思,展开说说? 这40行代码在哪里?
|
n******t 发帖数: 4406 | 6 自動轉不靠譜啊。。。
不自動轉是人都會做。我覺得這種功能實際中怎麼讓人用呢?除了寫編譯器。
别。
【在 h*i 的大作中提到】 : 是啊。CPS是callback的一个特例。 : 他这个代码是把正常代码自动转成CPS,并不是很容易写的。你能手写callback,但肯定 : 不会写个代码来自动把非callback的代码转成callback的代码。这是开车和造车的区别。 : 当然了,不作编译器的一般马工,也不用关心这些。
|
h*i 发帖数: 3446 | 7 我都说了几个用处了啊。任何需要打破程序执行来干特别的事的场合,都可以用CPS来
简化。
个人认为,其实写编译器才是计算机专业人员该干的正事。一般的编程工作逐步都会被
自动化掉成为机器人干的事,或者成为其它专业人员工作的一部分。只有把各种实际工
作需求都变成某种domain specific language,这个过程本身,才是计算机专业人员有
保障的不可替代的工作。现在这个趋势很明显了,稍微复杂点的应用,就会有自己的
DSL。各种所谓轮子,都是些DSL,或者能用DSL来极大的简化和提高生产力。
【在 n******t 的大作中提到】 : 自動轉不靠譜啊。。。 : 不自動轉是人都會做。我覺得這種功能實際中怎麼讓人用呢?除了寫編譯器。 : : 别。
|
n*****3 发帖数: 1584 | 8 赞一个, 解释的深入浅出
说的很对, 现在 Python R 什么的,
我觉得广义上都是 c 的 DSL
【在 h*i 的大作中提到】 : 我都说了几个用处了啊。任何需要打破程序执行来干特别的事的场合,都可以用CPS来 : 简化。 : 个人认为,其实写编译器才是计算机专业人员该干的正事。一般的编程工作逐步都会被 : 自动化掉成为机器人干的事,或者成为其它专业人员工作的一部分。只有把各种实际工 : 作需求都变成某种domain specific language,这个过程本身,才是计算机专业人员有 : 保障的不可替代的工作。现在这个趋势很明显了,稍微复杂点的应用,就会有自己的 : DSL。各种所谓轮子,都是些DSL,或者能用DSL来极大的简化和提高生产力。
|
e*******o 发帖数: 4654 | 9 这个咱看不懂,不过这个是不是只有他才写的出来?
王寅的当务之急是写出个能赚钱或者能发paper 的东西。
PS:
当年王吹的他老师的chezscheme 也开源了。
https://github.com/cisco/ChezScheme
他老师比他牛逼几个数量级吧,写出来的神器,也很少人用。(据说cisco 买了那个
公司之后,一个license都没卖出去)。
当然,一般程序员水平太次,handle 不了神器也是有可能的。 |
n******t 发帖数: 4406 | 10 所以,這東西的關鍵在於判斷什麼是"干特別的事情"的場合,而不是做這件事情本身。
編譯器優化是個開放式命題,本來最早編譯器本身的目的就是忠實翻譯程序員的想法到
硬件上,那個是工程。至於優化這件事情,屬於要把人本來沒"寫好"的代碼變好,這屬
於藝術。
但是我個人覺得企圖去優化某個不該做某件事情的人的行為,作用有限。
【在 h*i 的大作中提到】 : 我都说了几个用处了啊。任何需要打破程序执行来干特别的事的场合,都可以用CPS来 : 简化。 : 个人认为,其实写编译器才是计算机专业人员该干的正事。一般的编程工作逐步都会被 : 自动化掉成为机器人干的事,或者成为其它专业人员工作的一部分。只有把各种实际工 : 作需求都变成某种domain specific language,这个过程本身,才是计算机专业人员有 : 保障的不可替代的工作。现在这个趋势很明显了,稍微复杂点的应用,就会有自己的 : DSL。各种所谓轮子,都是些DSL,或者能用DSL来极大的简化和提高生产力。
|
|
|
c*******v 发帖数: 2599 | 11 CS专业的人应该去写universal Turing Machine
【在 h*i 的大作中提到】 : 我都说了几个用处了啊。任何需要打破程序执行来干特别的事的场合,都可以用CPS来 : 简化。 : 个人认为,其实写编译器才是计算机专业人员该干的正事。一般的编程工作逐步都会被 : 自动化掉成为机器人干的事,或者成为其它专业人员工作的一部分。只有把各种实际工 : 作需求都变成某种domain specific language,这个过程本身,才是计算机专业人员有 : 保障的不可替代的工作。现在这个趋势很明显了,稍微复杂点的应用,就会有自己的 : DSL。各种所谓轮子,都是些DSL,或者能用DSL来极大的简化和提高生产力。
|
x****u 发帖数: 44466 | 12 你应该刷新知识结构了
现在的优化,做的是人类很难做或者技术上做不到的事情
王垠搞得那些东西不是没用,而是已经没搞头了。1950年代的时候CS被称为科学,是因
为当时各个领域黑雾太多,今天这些领域人们感兴趣的东西基本都有结论了,更多的是
工程技术。
【在 n******t 的大作中提到】 : 所以,這東西的關鍵在於判斷什麼是"干特別的事情"的場合,而不是做這件事情本身。 : 編譯器優化是個開放式命題,本來最早編譯器本身的目的就是忠實翻譯程序員的想法到 : 硬件上,那個是工程。至於優化這件事情,屬於要把人本來沒"寫好"的代碼變好,這屬 : 於藝術。 : 但是我個人覺得企圖去優化某個不該做某件事情的人的行為,作用有限。
|
x****u 发帖数: 44466 | 13 垠神的悲剧,就是来源于这种盲目的自我优越感。
40行转CPS已经不是今天的潮流了,现在牛人追求的是,一行代码不写,通过调参和训
练让ANN自动把代码给转过去。
哪怕是写出4行转,或者证明了行数不能少于xx这种结论,也是没卵用。但如果第一个
搞出了神经网络零代码转换,发篇science还是可以的。
passing
CPS
【在 h*i 的大作中提到】 : https://github.com/yinwang0/lightsabers/blob/ : 6a66c294d4c4217efebfdeae18ee4697d802f79e/cps.ss
|
h*h 发帖数: 27852 | 14 王垠不是发paper的料,好在计算机行业基本是工程,他也正好强在工程上
【在 x****u 的大作中提到】 : 垠神的悲剧,就是来源于这种盲目的自我优越感。 : 40行转CPS已经不是今天的潮流了,现在牛人追求的是,一行代码不写,通过调参和训 : 练让ANN自动把代码给转过去。 : 哪怕是写出4行转,或者证明了行数不能少于xx这种结论,也是没卵用。但如果第一个 : 搞出了神经网络零代码转换,发篇science还是可以的。 : : passing : CPS
|
H****S 发帖数: 1359 | 15 这玩意已经过时了。现有的async stream library(rxjava,fs2)能够做的事情要多
得多。 |
h*h 发帖数: 27852 | 16 人写的程序在可预见的将来不会过时
可以转码的ANN本身必须是人写的程序才能实现的(搞计算理论的人可能可以证明?)
ANN的用户在技能上当然比ANN的开发者差几个档次
【在 x****u 的大作中提到】 : 垠神的悲剧,就是来源于这种盲目的自我优越感。 : 40行转CPS已经不是今天的潮流了,现在牛人追求的是,一行代码不写,通过调参和训 : 练让ANN自动把代码给转过去。 : 哪怕是写出4行转,或者证明了行数不能少于xx这种结论,也是没卵用。但如果第一个 : 搞出了神经网络零代码转换,发篇science还是可以的。 : : passing : CPS
|
x****u 发帖数: 44466 | 17 现在做NN的人基本上就是调参,组合各种模块外加刷数据。将来搞个IDE直接拖拉拽也
能干一样的事情。编程只是底层体力活。
而且辛苦的实现了并行算法,又出了CUDA把你虐了。你搞定了CUDA,又有了cuDNN还TMD
不开源,仿都仿不了。
就算你辛苦加入了nvadia,混到了开发第一线,其他厂搞的ANN专用芯片又出来了。。。
【在 h*h 的大作中提到】 : 人写的程序在可预见的将来不会过时 : 可以转码的ANN本身必须是人写的程序才能实现的(搞计算理论的人可能可以证明?) : ANN的用户在技能上当然比ANN的开发者差几个档次
|
w***g 发帖数: 5958 | 18 刚刚看到了Google的TPU,哈哈。
TMD
。。
【在 x****u 的大作中提到】 : 现在做NN的人基本上就是调参,组合各种模块外加刷数据。将来搞个IDE直接拖拉拽也 : 能干一样的事情。编程只是底层体力活。 : 而且辛苦的实现了并行算法,又出了CUDA把你虐了。你搞定了CUDA,又有了cuDNN还TMD : 不开源,仿都仿不了。 : 就算你辛苦加入了nvadia,混到了开发第一线,其他厂搞的ANN专用芯片又出来了。。。
|
l*******m 发帖数: 1096 | 19 neural programmer-interpreter 已经有些有意思的结果了
【在 x****u 的大作中提到】 : 垠神的悲剧,就是来源于这种盲目的自我优越感。 : 40行转CPS已经不是今天的潮流了,现在牛人追求的是,一行代码不写,通过调参和训 : 练让ANN自动把代码给转过去。 : 哪怕是写出4行转,或者证明了行数不能少于xx这种结论,也是没卵用。但如果第一个 : 搞出了神经网络零代码转换,发篇science还是可以的。 : : passing : CPS
|
n******t 发帖数: 4406 | 20
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
您先喝口水,把語言組織好了再來聊哈。
【在 x****u 的大作中提到】 : 你应该刷新知识结构了 : 现在的优化,做的是人类很难做或者技术上做不到的事情 : 王垠搞得那些东西不是没用,而是已经没搞头了。1950年代的时候CS被称为科学,是因 : 为当时各个领域黑雾太多,今天这些领域人们感兴趣的东西基本都有结论了,更多的是 : 工程技术。
|
|
|
x****u 发帖数: 44466 | 21 你打滚除了显示出自己的无知,还有什么意义?
人类很难做 / 技术上做不到都理解不了?
前者最简单例子,就是各种内联,变量提取,针对流水线调整,可以手动做但都是体力
活,编译器可以把你的代码改得面目全非但执行结果等价。
后者大概超出你知识范围了,很多优化是人类不可能实现的。比如jvm可以让一次编译
出的bytecode在不同场景下变化成逻辑结构不一样的最优代码。这个只能机器做。
是因
的是
【在 n******t 的大作中提到】 : : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : 您先喝口水,把語言組織好了再來聊哈。
|
i***e 发帖数: 373 | 22 然后Debug也让机器做,哦耶!
【在 x****u 的大作中提到】 : 你打滚除了显示出自己的无知,还有什么意义? : 人类很难做 / 技术上做不到都理解不了? : 前者最简单例子,就是各种内联,变量提取,针对流水线调整,可以手动做但都是体力 : 活,编译器可以把你的代码改得面目全非但执行结果等价。 : 后者大概超出你知识范围了,很多优化是人类不可能实现的。比如jvm可以让一次编译 : 出的bytecode在不同场景下变化成逻辑结构不一样的最优代码。这个只能机器做。 : : 是因 : 的是
|
w***g 发帖数: 5958 | 23 我记得十多年前yuanyuan zhou在UIUC就做出来用ML debug的框架了,
不过应用起来限制比较多吧。现在DL一上,肯定能做得好很多。
要自动写程序难,自动挑刺还是相对容易点的。
【在 i***e 的大作中提到】 : 然后Debug也让机器做,哦耶!
|
n*******0 发帖数: 2002 | 24 哥哥你说的是认真的么?我就是写编译器的啊,只不过是偏后端代码生成。觉得编译器
基本上存在感很低,不很赚钱的样子。是不是我哪里理解有偏差?求拍。
【在 h*i 的大作中提到】 : 我都说了几个用处了啊。任何需要打破程序执行来干特别的事的场合,都可以用CPS来 : 简化。 : 个人认为,其实写编译器才是计算机专业人员该干的正事。一般的编程工作逐步都会被 : 自动化掉成为机器人干的事,或者成为其它专业人员工作的一部分。只有把各种实际工 : 作需求都变成某种domain specific language,这个过程本身,才是计算机专业人员有 : 保障的不可替代的工作。现在这个趋势很明显了,稍微复杂点的应用,就会有自己的 : DSL。各种所谓轮子,都是些DSL,或者能用DSL来极大的简化和提高生产力。
|
h*i 发帖数: 3446 | 25 认真的啊。
不过我说的是把现实需求变成各种DSL。专门学编译器的人没有能干这个的吧?所以你
们专学编译器的人应该干的事就是作轮子把写编译器变得很容易,让一般马公都能自己
写编译器。
“那我们不就失业了么”。计算机技术的发展不就是不断让人失业么?你不搞,自然有
人搞,与其被别人搞得失业,不如自己把自己搞失业,这才能赚到钱。
【在 n*******0 的大作中提到】 : 哥哥你说的是认真的么?我就是写编译器的啊,只不过是偏后端代码生成。觉得编译器 : 基本上存在感很低,不很赚钱的样子。是不是我哪里理解有偏差?求拍。
|
x****u 发帖数: 44466 | 26 Debug不是PL范围内能解决的问题,不过用神经网络已经可以预测容易出bug的人,时间
和地方了。
【在 i***e 的大作中提到】 : 然后Debug也让机器做,哦耶!
|
x****u 发帖数: 44466 | 27 成熟领域都不容易赚钱,比如炼钢,造纸。
毕竟墙街的投资兴趣来源于潜在增长的可能阿。
【在 n*******0 的大作中提到】 : 哥哥你说的是认真的么?我就是写编译器的啊,只不过是偏后端代码生成。觉得编译器 : 基本上存在感很低,不很赚钱的样子。是不是我哪里理解有偏差?求拍。
|
b***e 发帖数: 1419 | 28 我来用中文给大家解释一下吧。
王垠的代码在数学上严格的定义了goto(callcc in FP)的形式语义。这个结果的确是经
过了多年研究才得到的。在此之前,人们认识到有goto这个东西,也知道怎么用,但是
没有严格的数学模型来描述其语义。所以goto是停留在炼金术的阶段。有了这个数学定
义,goto才进入了化学的殿堂。如果王垠一周内通过全自研得到了goto的形式语义定义
,那的确不是一般人能做到的。至少我做不到。
passing
CPS
【在 h*i 的大作中提到】 : https://github.com/yinwang0/lightsabers/blob/ : 6a66c294d4c4217efebfdeae18ee4697d802f79e/cps.ss
|
x****u 发帖数: 44466 | 29 数理逻辑研究者几十年前就知道这个代码的必然存在,而且还知道其解决不了大多数问
题。
打个比方,你解出了较难的平面几何题,而且发现前人都没有或没有更好的解法,就是
这感觉。
【在 b***e 的大作中提到】 : 我来用中文给大家解释一下吧。 : 王垠的代码在数学上严格的定义了goto(callcc in FP)的形式语义。这个结果的确是经 : 过了多年研究才得到的。在此之前,人们认识到有goto这个东西,也知道怎么用,但是 : 没有严格的数学模型来描述其语义。所以goto是停留在炼金术的阶段。有了这个数学定 : 义,goto才进入了化学的殿堂。如果王垠一周内通过全自研得到了goto的形式语义定义 : ,那的确不是一般人能做到的。至少我做不到。 : : passing : CPS
|
b***e 发帖数: 1419 | 30 请把你的话翻译成中文。
【在 x****u 的大作中提到】 : 数理逻辑研究者几十年前就知道这个代码的必然存在,而且还知道其解决不了大多数问 : 题。 : 打个比方,你解出了较难的平面几何题,而且发现前人都没有或没有更好的解法,就是 : 这感觉。
|
|
|
h*h 发帖数: 27852 | 31 工程上不管什么东西存在,而是要把东西做出来
【在 x****u 的大作中提到】 : 数理逻辑研究者几十年前就知道这个代码的必然存在,而且还知道其解决不了大多数问 : 题。 : 打个比方,你解出了较难的平面几何题,而且发现前人都没有或没有更好的解法,就是 : 这感觉。
|
x****u 发帖数: 44466 | 32 王垠这程序,就相当于大学生证出了一道超过义务教育大纲范围的,数学系教授也头疼
的平面几何题。
这事证明他脑子聪明是没错的,但和学术,工业界都没关系。
【在 b***e 的大作中提到】 : 请把你的话翻译成中文。
|
x****u 发帖数: 44466 | 33 很多东西知道存在即可
做不做看愿不愿意付代价,有没有收获
【在 h*h 的大作中提到】 : 工程上不管什么东西存在,而是要把东西做出来
|
h*h 发帖数: 27852 | 34 工程不这样
空谈在工程界一文不值
【在 x****u 的大作中提到】 : 很多东西知道存在即可 : 做不做看愿不愿意付代价,有没有收获
|
x****u 发帖数: 44466 | 35 算出代价也是工程重要部分
比如王垠搞那些东西,一组合起来就是指数复杂度,所以价值很小
【在 h*h 的大作中提到】 : 工程不这样 : 空谈在工程界一文不值
|
h*h 发帖数: 27852 | 36 你根本不知道王垠具体要搞得是什么东西,就敢说指数复杂度
【在 x****u 的大作中提到】 : 算出代价也是工程重要部分 : 比如王垠搞那些东西,一组合起来就是指数复杂度,所以价值很小
|
x****u 发帖数: 44466 | 37 所以说你对cs是没有丁点了解,lisp衰落是有其数学原因的
【在 h*h 的大作中提到】 : 你根本不知道王垠具体要搞得是什么东西,就敢说指数复杂度
|
h*h 发帖数: 27852 | 38 王垠又没有想推广lisp
【在 x****u 的大作中提到】 : 所以说你对cs是没有丁点了解,lisp衰落是有其数学原因的
|
x****u 发帖数: 44466 | 39 王垠他印第安纳老师,就是这方面的大牛。
但是符号主义是走不远的,这个在70年代就有数学证明。所以之后码农业大发展,利用
人脑这个基于概率而不是数理逻辑的结构解决深层次问题。
【在 h*h 的大作中提到】 : 王垠又没有想推广lisp
|
h*h 发帖数: 27852 | 40 王垠从他老师那儿学到了compiler, 但是并没有说要发扬光大lisp
王垠说了,lisp已死, lisp万岁
【在 x****u 的大作中提到】 : 王垠他印第安纳老师,就是这方面的大牛。 : 但是符号主义是走不远的,这个在70年代就有数学证明。所以之后码农业大发展,利用 : 人脑这个基于概率而不是数理逻辑的结构解决深层次问题。
|
|
|
x****u 发帖数: 44466 | 41 并不是说他要发扬lisp,而是说整个fp,pl理论都面临同样的困境,即单靠数理逻辑解
决大部分问题会不可避免的指数爆炸。
因为这条路不通,所以今天cs的研究热点才在别的地方。王垠缺少某些基础知识,不理
解这个道理。
【在 h*h 的大作中提到】 : 王垠从他老师那儿学到了compiler, 但是并没有说要发扬光大lisp : 王垠说了,lisp已死, lisp万岁
|
h*h 发帖数: 27852 | 42 你根本不了解王垠的立场
王垠是反对FP Overhype 的
【在 x****u 的大作中提到】 : 并不是说他要发扬lisp,而是说整个fp,pl理论都面临同样的困境,即单靠数理逻辑解 : 决大部分问题会不可避免的指数爆炸。 : 因为这条路不通,所以今天cs的研究热点才在别的地方。王垠缺少某些基础知识,不理 : 解这个道理。
|
x****u 发帖数: 44466 | 43 王垠最近还修改了写解释器那篇误导性极强的网帖
【在 h*h 的大作中提到】 : 你根本不了解王垠的立场 : 王垠是反对FP Overhype 的
|