/tmp/duangsuse.sock
这个博主 30 年的技术积累真的不是盖的啊! 为什么眼界就这么开阔;观点就这么有力度 而且从最小的一行代码到实际跨国级别的服务架构 都这么深刻,还了解过这个行业多久之前的历史和知名的人物、重要的软件作品和观点文化 真的是优秀啊!
其实一个人有自己信仰的理念、有自己崇拜的人是很正常的 #dev #statement
计算机科学、或者所有这些有着不一样理想的领域,都不缺乏各种做的很不错的人,比如 CS 吧,Emacs 的作者 Stallman,MIT AI 实验室之前出来过 63 年开发出 Scheme 的 Guy Steele, Sussman、John McCarthy、算法领域的 CLRS、密码学的 Diffie-Hellman、创造了 RSA 的三个人、第一门被广为使用高级程序设计语言 Fortran 的设计者、C89 原型的设计者 Ken Thompson、Dennis、BCPL/CPL 的理论家、组合子领域的 Moses Schönfinkel, Haskell, Church, Kleene、各种逻辑学家/数学家、在二战时期破译纳粹密码的人、还有在各种人们生产生活中改变了世界(比如各种网络层上应用的东西)的那些了不起的程序员发明家,Alan Kay、C++ STL 的作者 Alexander Stepanov、Aaron Swartz、Python 之父、James Gosling、Matz,他们做了了不起的事情,也有自己身上发光的地方,不都值得被崇拜吗?
中国有句古话(🐸)叫做『美人在骨不在皮』
同样的,这些人不仅仅是有着在业内行外都让人瞩目的成就或者广为人知的事迹 — 但不止存在这些,还有他们所伸张的东西,他们的信仰、他们技术上的创意、他们的影响和美德,这和『肤浅表面』是无关的。概率,不能说明事情本身。
都说宗教有信仰自由,喜欢 Linux、P2P、Freedom、各种『小众』文化的人,在优秀的程序员里其实也不是少数,为什么就要和这点信仰过不去呢?
信仰也是上进的,是因为你的认同,因为你也想过或者要做同样的事情 这是一种坚持
有人看不起那些崇拜明星的人或者喜欢年轻娱乐圈『小鲜肉』的人,觉得他们就是看个脸皮,就这个问题我保持中立,但是,如果是对那些真正的『前辈』,做过了不起事情的人 难道『认可』『共鸣』甚至『崇拜』 就是错误的吗?
崇拜是你的自由,不是所有崇拜都是类似宗教信仰一样的无判断 完全服从的崇拜。这个博客作者的观点和视角真的令我非常折服。
希望大家在评价前,记得三思哦~
如果你有理由,为什么不能敬仰 ,只要你觉得他们很好、你认同他们(虽然这显然不怎么样...)、或者你希望自己能够做到他们的某一个发光点,在保持客观公正评价的同时,对他们有应有的尊敬甚至崇拜,有何不可。
反而是没有所敬仰的人才是很可怕的 — 因为这可能意味着你『目中无人』 — 甚至是危险的,因为这可能意味着你的见识还不够,你不知道有那么多有比你强、比你,不知道他们到底有多 NB,你们之前的差距有多大,容易使你膨胀、容易使你自满、容易使你停止那一点好奇的脚步,阻止你真正的进步,甚至使得你目中无人、自以为是地去做一些 会觉得是黑历史的事情 — 太危险了!
最后关于这个 @drakeet 崇拜王垠呢... 自然是很有理的。我没有自己打脸,但是我只是批评了他『崇拜』的表面,我上面发的还真就是『自以为不一样』 — 你看,(1) 不管我看不看王垠的博客,首先我是有在做他讲的那些理论的,这一点有实际编程经验可以作证(Kotlin Lime S-exp 编程语言、FP.js、FP.js 的解析组合子和 DefLang、MonkeyVM、LLVM 的代码生成尝试、Haskell BinOps、C++ 实现二元操作解析器 什么的,宽泛的类型理论我也有讲一些)
(2) 我“转发”一些崇拜的人的观点时,总会加上自己的看法,我不为崇拜而崇拜,我真的是非常看得起他们的某些发光点(虽然有贬低别人抬高自己的嫌疑,说明白话,但 drakeet 对王垠的崇拜,我从来没见过他有着实地去实践王垠推崇的东西,也没见他公开品读王垠的文章,我还不知道他究竟是喜欢王垠哪一点,并且在绝对有实践时间的前提下,他也没有去真正耐心阅读王垠的文章,这种文章是需要看三遍以上的。)(我觉得,如果他真的看懂了,开个玩笑,以他的性格一定会立刻到处发布,为那些引用有意思的信息 拍案叫绝的emmm)
计算机科学、或者所有这些有着不一样理想的领域,都不缺乏各种做的很不错的人,比如 CS 吧,Emacs 的作者 Stallman,MIT AI 实验室之前出来过 63 年开发出 Scheme 的 Guy Steele, Sussman、John McCarthy、算法领域的 CLRS、密码学的 Diffie-Hellman、创造了 RSA 的三个人、第一门被广为使用高级程序设计语言 Fortran 的设计者、C89 原型的设计者 Ken Thompson、Dennis、BCPL/CPL 的理论家、组合子领域的 Moses Schönfinkel, Haskell, Church, Kleene、各种逻辑学家/数学家、在二战时期破译纳粹密码的人、还有在各种人们生产生活中改变了世界(比如各种网络层上应用的东西)的那些了不起的程序员发明家,Alan Kay、C++ STL 的作者 Alexander Stepanov、Aaron Swartz、Python 之父、James Gosling、Matz,他们做了了不起的事情,也有自己身上发光的地方,不都值得被崇拜吗?
中国有句古话(🐸)叫做『美人在骨不在皮』
同样的,这些人不仅仅是有着在业内行外都让人瞩目的成就或者广为人知的事迹 — 但不止存在这些,还有他们所伸张的东西,他们的信仰、他们技术上的创意、他们的影响和美德,这和『肤浅表面』是无关的。概率,不能说明事情本身。
都说宗教有信仰自由,喜欢 Linux、P2P、Freedom、各种『小众』文化的人,在优秀的程序员里其实也不是少数,为什么就要和这点信仰过不去呢?
信仰也是上进的,是因为你的认同,因为你也想过或者要做同样的事情 这是一种坚持
有人看不起那些崇拜明星的人或者喜欢年轻娱乐圈『小鲜肉』的人,觉得他们就是看个脸皮,就这个问题我保持中立,但是,如果是对那些真正的『前辈』,做过了不起事情的人 难道『认可』『共鸣』甚至『崇拜』 就是错误的吗?
崇拜是你的自由,不是所有崇拜都是类似宗教信仰一样的无判断 完全服从的崇拜。这个博客作者的观点和视角真的令我非常折服。
希望大家在评价前,记得三思哦~
如果你有理由,为什么不能敬仰 ,只要你觉得他们很好、你认同他们(虽然这显然不怎么样...)、或者你希望自己能够做到他们的某一个发光点,在保持客观公正评价的同时,对他们有应有的尊敬甚至崇拜,有何不可。
反而是没有所敬仰的人才是很可怕的 — 因为这可能意味着你『目中无人』 — 甚至是危险的,因为这可能意味着你的见识还不够,你不知道有那么多有比你强、比你,不知道他们到底有多 NB,你们之前的差距有多大,容易使你膨胀、容易使你自满、容易使你停止那一点好奇的脚步,阻止你真正的进步,甚至使得你目中无人、自以为是地去做一些 会觉得是黑历史的事情 — 太危险了!
最后关于这个 @drakeet 崇拜王垠呢... 自然是很有理的。我没有自己打脸,但是我只是批评了他『崇拜』的表面,我上面发的还真就是『自以为不一样』 — 你看,(1) 不管我看不看王垠的博客,首先我是有在做他讲的那些理论的,这一点有实际编程经验可以作证(Kotlin Lime S-exp 编程语言、FP.js、FP.js 的解析组合子和 DefLang、MonkeyVM、LLVM 的代码生成尝试、Haskell BinOps、C++ 实现二元操作解析器 什么的,宽泛的类型理论我也有讲一些)
(2) 我“转发”一些崇拜的人的观点时,总会加上自己的看法,我不为崇拜而崇拜,我真的是非常看得起他们的某些发光点(虽然有贬低别人抬高自己的嫌疑,说明白话,但 drakeet 对王垠的崇拜,我从来没见过他有着实地去实践王垠推崇的东西,也没见他公开品读王垠的文章,我还不知道他究竟是喜欢王垠哪一点,并且在绝对有实践时间的前提下,他也没有去真正耐心阅读王垠的文章,这种文章是需要看三遍以上的。)(我觉得,如果他真的看懂了,开个玩笑,以他的性格一定会立刻到处发布,为那些引用有意思的信息 拍案叫绝的emmm)
/tmp/duangsuse.sock
要做到——知其然,知其所以然。所以,只能不断的学习基础知识以及和这个技术关联的知识,就像Wikipeida一样,当你进入一个词条的时候,就会伴随时一堆新词条,于是,当多年后,我看到 “知识广度是深度的副产品” 这句话时,简直就是说到我的心里去了。 https://coolshell.cn/articles/17446.html 真的是说到我的心里去了 #statement #coolshell
至于为什么共鸣呢?因为我之前也拿『深度』和『广度』去比喻一个人的『技术层次/水平』(真正的相同观点不止这一处),即使之前我都不知道这个作者居然和我的观点有这么多相通之处。因为观点相投,所以(我个人)觉得作者真的很优秀。
https://coolshell.cn/articles/4235.html #coolshell (翻译文
#\№你不知道你不知道的
如果不是看到了类似冰封哥、Sleepwalking 这样的真·天才(不要欺骗自己了吧,『明明他们的努力也看在眼里呢』),知道自己到底有多菜,我恐怕不会像今天这么谦虚(迫真)了。
与此同时,我们所有的人都在相互地克隆和模仿(译注:参看中国的C2C)。你需要一个Java程序员,我是一个Java程序员,你也是一个Java程序员,我的邻居也是一个Java程序员。我们之间有什么差别?其实,基本没有差别。好吧,我有一些jQuery的经历,太好,所以,你知道怎么来做一个折叠式的菜单?当然,我可以Google一下,然后剽窃别人最好的代码给你 :)中国编程抄袭之风的确是 🌚
#\№你不知道你不知道的
这个世界上有几十亿行代码可以被 几百万行更快,更清楚,更简单的代码所取代,因为无论是谁来写,他都不可能知道他所不知道的东西。非常赞同这个观点,我自己就是这个理念的真实例子
我怎么就只知其一不知其二呢?...?到底是不知道技巧,不知道还能有这种变换方式怎么得出这个简单的结论,由此写出比别人短十行好看十倍的代码,这才是简单背后最复杂的事情啊!
我怎么就看不到 100 = 1 * 10 * 10 呢?
人和人之间的差距到底是什么,就叫理论大佬列几个式子让学生写、FP 大佬列引两条式子,费三四分钟写一行、OI 大佬想一分钟费五分钟写七八行 pass、你断断续续想半天,最后写十分钟改两分钟,最终成品四五行、小部分人想五分钟写十分钟暴力查错二十分钟弄出来十几行易错/难维护/难看懂/低性能的代码、绝大部分人想半天觉得莫名其妙,查下资料抄过来解决,找不到就玩完了、少部分人,完全写不出来。—
和高手在一起工作真是超爽无比。你也许以前经历过,他们每说的一件事总是新鲜的,总是有意思的,你能从他们每一行的代码中学到很多小技巧,你几乎可以感觉到你的大脑在不断膨胀:)。大佬们真的总是非常有趣的,你看我实现 Lime 的时候、我写 FP.js 解析组合子的时候、我写可动态二元优先级的 infix 链解析器的时候、我写 SIMD /并行计算的时候,哪个的初始原因不是看到了大佬在做,然后我了解理论后,也手痒写了类似的?
如果不是看到了类似冰封哥、Sleepwalking 这样的真·天才(不要欺骗自己了吧,『明明他们的努力也看在眼里呢』),知道自己到底有多菜,我恐怕不会像今天这么谦虚(迫真)了。
“很多时候,你缺少的不是知识而是热情”!我也 echo 一下
酷 壳 - CoolShell
程序员的谎谬之言还是至理名言? | 酷 壳 - CoolShell
https://coolshell.cn/articles/3005.html #Java
对 JavaEE 的复杂化讽刺的很好.... 不得不说,这个例子里对设计模式的使用的确非常无聊,什么 DirectoryFactory, Directory, Descriptor, Service, Model Factory ServiceLocator, Model Factory, Model, Bean getter, Context... 我去... 起一大堆有时候还真是不必要的名字,到处『松耦合』... 我都快记不住这些名词了,什么 Adapter、什么 Strategy、Facade、Command... 尤其是 Adapter 什么的,起一个莫名其妙的名字,真的有必要? loadFromFile / writeTo(OutputImpl) 有这么困难?为什么非得取个带设计模式的名字? Kotlin 的 『Singleton 模式』就是一个
对 JavaEE 的复杂化讽刺的很好.... 不得不说,这个例子里对设计模式的使用的确非常无聊,什么 DirectoryFactory, Directory, Descriptor, Service, Model Factory ServiceLocator, Model Factory, Model, Bean getter, Context... 我去... 起一大堆有时候还真是不必要的名字,到处『松耦合』... 我都快记不住这些名词了,什么 Adapter、什么 Strategy、Facade、Command... 尤其是 Adapter 什么的,起一个莫名其妙的名字,真的有必要? loadFromFile / writeTo(OutputImpl) 有这么困难?为什么非得取个带设计模式的名字? Kotlin 的 『Singleton 模式』就是一个
object Simpleton {}, 模板双检锁 Singleton 应该被视为耻辱,而不是了不得的见闻酷 壳 - CoolShell
代码重构的一个示例 | | 酷 壳 - CoolShell
还记得以前和大家提到过的《各种流行的编程风格》吗?有一些人问我那些编程风格具体是什么样子的。下面是一个代码重构的实例,让我们看看那个流行的编程风格是实践是什么样的。下面的这个实践不是虚构,如有雷同,请对号入座。 首先,我们有一个表达式如下所示: 很明显,这个表达式的变量名太没意义了,很不利于程序的可读性,所以,我们需要取一个有意义的变量名: 很好,不过,那个常量7是hard-code或是一个Mag
/tmp/duangsuse.sock
https://coolshell.cn/articles/3005.html #Java 对 JavaEE 的复杂化讽刺的很好.... 不得不说,这个例子里对设计模式的使用的确非常无聊,什么 DirectoryFactory, Directory, Descriptor, Service, Model Factory ServiceLocator, Model Factory, Model, Bean getter, Context... 我去... 起一大堆有时候还真是不必要的名字,到处『松耦合』...…
Facade 我想了半天,其实这些观点也有不是很正确的,正确全面的看待设计模式。
/tmp/duangsuse.sock
很抱歉 看起来今天是没有办法了呢... 我有 1. 做事情耐心不够持久 2. 做完一件事情就很松懈 的坏毛病... 不过也是蛮需要体谅的,毕竟我做任何事情都很难考虑到身体 这个暑假,我在写 Promise-Java 的时候,(对 Break timer 的容忍)已经是极限了 实际上之后我根本从没有在安排下休息一分钟,像这样子一直工作 是不行了呢... (另一方面,其实我打字的速度也没有得到太多的提升,反而不如从前了呢...) 不过总之,我还是勉强对这个暑假 满意 虽然咸鱼过太多,但多少有点进步。不用再…
#life #statement 目前为止,我对自己 对这些 程序 和 模型 的水平,也就是感觉不高不低 这个样子吧
我不想刻意把自己弄成 什么都不懂的样子,也的确没啥水平,就是那个样子而已
我还有很多不足,还有很多没有尝试的东西,但是我对『新东西』 也开始能够找到自己的直觉了,我不害怕以后面临怎么样的实践挑战
两年 呢,或许是一个不错的开端,这样。
只能说是 『在青空下 等 你 再一次 的 出现』 吧。
是以后打算是比较少的有机会呢。
酷壳 #coolshell 上也有些话,贪婪算法(greedy algorithm) 不是不好,但是只看局部最优解 是不行的
要更好的答案,要更优的解,就要看的远一些 广一些,多利用之前别人的经验做决断 来优化自己的结果。 要学会动态规划,学会看之前的经验,然后再在两个选择之间算开销、做均衡
一个侧面的最优解 ,未必就是一生的最优解呢...
我不想刻意把自己弄成 什么都不懂的样子,也的确没啥水平,就是那个样子而已
我还有很多不足,还有很多没有尝试的东西,但是我对『新东西』 也开始能够找到自己的直觉了,我不害怕以后面临怎么样的实践挑战
两年 呢,或许是一个不错的开端,这样。
只能说是 『在青空下 等 你 再一次 的 出现』 吧。
是以后打算是比较少的有机会呢。
酷壳 #coolshell 上也有些话,贪婪算法(greedy algorithm) 不是不好,但是只看局部最优解 是不行的
要更好的答案,要更优的解,就要看的远一些 广一些,多利用之前别人的经验做决断 来优化自己的结果。 要学会动态规划,学会看之前的经验,然后再在两个选择之间算开销、做均衡
一个侧面的最优解 ,未必就是一生的最优解呢...
/tmp/duangsuse.sock pinned «#life #statement 目前为止,我对自己 对这些 程序 和 模型 的水平,也就是感觉不高不低 这个样子吧 我不想刻意把自己弄成 什么都不懂的样子,也的确没啥水平,就是那个样子而已 我还有很多不足,还有很多没有尝试的东西,但是我对『新东西』 也开始能够找到自己的直觉了,我不害怕以后面临怎么样的实践挑战 两年 呢,或许是一个不错的开端,这样。 只能说是 『在青空下 等 你 再一次 的 出现』 吧。 是以后打算是比较少的有机会呢。 酷壳 #coolshell 上也有些话,贪婪算法(greedy…»
Forwarded from 《一天世界》博客 (Lawrence Li (自由閪如一))
我们不是比谁能摘下有色眼镜,而是比谁的有色眼镜更帅气。「We like our own stickers better」就是这个意思。
/tmp/duangsuse.sock
https://coolshell.cn/articles/4235.html #coolshell (翻译文 与此同时,我们所有的人都在相互地克隆和模仿(译注:参看中国的C2C)。你需要一个Java程序员,我是一个Java程序员,你也是一个Java程序员,我的邻居也是一个Java程序员。我们之间有什么差别?其实,基本没有差别。好吧,我有一些jQuery的经历,太好,所以,你知道怎么来做一个折叠式的菜单?当然,我可以Google一下,然后剽窃别人最好的代码给你 :) 中国编程抄袭之风的确是 🌚 #\№你不知道你不知道的…
为什么酷壳的作者水平那么高,评论者的水平大多数不怎么样呢?
何况我看评论的人似乎并没有那么多... 评论区里也没有太多拿干货出来说事的人...
虽然都是正经的程序员,可是感觉他们了解的似乎又有点太少了,为什么都是在问一些文章里说的很明白的问题了呢...
何况我看评论的人似乎并没有那么多... 评论区里也没有太多拿干货出来说事的人...
虽然都是正经的程序员,可是感觉他们了解的似乎又有点太少了,为什么都是在问一些文章里说的很明白的问题了呢...
😅 评论回复的好像有点多了.... 貌似整个最新评论都是我的名字... 不知道有没有给皓哥造成影响
还是不要写这么长... 多看点书 少在别人的博客答问题... 何况时间也是很宝贵,不是么...
还是不要写这么长... 多看点书 少在别人的博客答问题... 何况时间也是很宝贵,不是么...
/tmp/duangsuse.sock
为什么酷壳的作者水平那么高,评论者的水平大多数不怎么样呢? 何况我看评论的人似乎并没有那么多... 评论区里也没有太多拿干货出来说事的人... 虽然都是正经的程序员,可是感觉他们了解的似乎又有点太少了,为什么都是在问一些文章里说的很明白的问题了呢...
关键是我看到很多人对某些知识的理解太表面太浅层了.... 就是一个名字
我思量着,知道名字,你不去学它,它这个名字有什么用呢?
Mr.Liu说道:
2013年12月28日 12:17
the little scheme 可以一读, — The Little Schemer...
我思量着,知道名字,你不去学它,它这个名字有什么用呢?
Mr.Liu说道:
2013年12月28日 12:17
the little scheme 可以一读, — The Little Schemer...
/tmp/duangsuse.sock
#ACG #Life E-Hentai 又开张喽~ <3
突然觉得会弄数据库好棒的感觉
有运维 Web
HTML, JavaScript, CSS, Flash(迫真), ASP.NET(迫真), Silverlight(迫真), PHP, MySQL, ReactJS, JQuery, Express, Django, htaccess/mod_rewrite
SQL 还有各种 JOIN
有运维 Web
HTML, JavaScript, CSS, Flash(迫真), ASP.NET(迫真), Silverlight(迫真), PHP, MySQL, ReactJS, JQuery, Express, Django, htaccess/mod_rewrite
SQL 还有各种 JOIN
#CS #PLT 入门级别的回答们 #CoolShell
+ 也不要太较真成『语法糖主义』…
也不要太较真成『语法糖主义』… Java 5 之前没 Generics 的时候代码不还是照样写、Assembler 那时没有 C 不还是可以编程,C 从 89 到 17 加了多少特性,vararg、complex、block、pack,多少也是『可有可无』的,甚至因为有内联汇编和底层访问性、低层次的规范,你都可以内联汇编给它“加特性”,你甚至可以说,C 就是汇编的语法糖,哪怕它让代码机器平台无关、提供了类型检查
C++ 的 block 的确是没啥革命性的变更,但是一切皆语法糖这个观点太表面了…
+ 另外你所说的 environment 模型是指 Scheme 系基于 Lambda 演算程序设计语言的 Lexical scoping 变量解析吗?
另外你所说的 environment 模型是指 Scheme 系基于 Lambda 演算程序设计语言的 Lexical scoping 变量解析吗?
Lisp 里这样的… 我还是用 Racket 吧(我不会 R*RS,但多范式融合的也就是那个样子),怎么说,Lisp 首先这个语言本身已经很老了并且也对很多人不那么可获取、其次它的名称被滥用的很严重,有一大堆 『Lisp 方言』 和 『C-like 语言』了…. 我…..
+ First-class 在 PLT(Programing Language Theory)里是指『能够被作为“子程序”的参数、返回值』使 用的一种『值』。
First-class 在 PLT(Programing Language Theory)里是指『能够被作为“子程序”的参数、返回值』使用的一种『值』。
C 里面有函数指针、但一些语言(很难举出例子… 因为又要有子程序又不能有函数指针,我举 Bash 吧)就不存在『函数指针』
同样的,一些语言里没有『变量』而只有『等式』『定义』『侧面』『式子(Term)』这些与之类似的概念,可能在使用上也有相通并且经常被弄混,但把他们混为一谈偏偏就是不准确的
何况〖变量化函数〗这个名称本身也有点不准确 — 是不是说函数就不能被作为参数和返回值呢?虽然很多语言都在低层使用了本地变量来管理参数的状态分配,是不是就意味着子程序的『参数』和『返回值』都是『变量』呢?
而且函数式里说的这个『first-class functions』远远不止一个 functions,还有它依赖的 data,这是一个容易被忽视的侧面。
有的时候我们就是需要一个可以进行『操作』的『值』而已,不需要关心它们是来自『变量』还是『参数』、他们是不是一个『函数变量』。
这个特性就是 1932 年 Lambda calculus 的 lexical scoping,这里 讲的很清楚
任何新知识对任何人来说都是突兀的,所以我们在第一次见到某种概念的时候应该学会闭嘴。我第一次听王垠骂 Type Theory Hindley-Milner 类型推导和 Haskell 的惰性计算引用透明的时候也无脑跟着骂了(那时候是一行 Haskell 都没有看过….)…. 现在是极其后悔 为什么要无脑跟风(给一点建议…)
和变量这个东西有『相通』(都能用)之处,但还是很不一样的。
就像上面那个拿『引用透明』换『确定性』(这个还有和线程安全的某种特例混淆的风险)的人一样,能够准确的就尽可能做到准确,这不正是酷壳大部分技术文和科普/人文写作的风格吗?有多少技术博客还会专门列个引用表给人去找上面的一手资料…
+ 未必啊,我们只是使用了接口,没有规定必须得怎样实现
未必啊,我们只是使用了接口,没有规定必须得怎样实现
for/while 是经典顺序逻辑编程里常用的循环,但实际上计算远远不止这一种可能,有复杂的数据库查询可以分到很多台计算机上去做、复杂的 ray tracing 渲染可以分到计算集群去做,单机对于 DIP 处理/计算机视觉/3D 计算/着色 什么的,未必就 for/while 这一种,比如 X86 的 SIMD 特性(SSE/AVX 什么的)就可以让你一下子处理一批数据,批量完成加减乘除取余什么的,这种情况 map 的语义远远比 for index 好,编译器也更敢做优化一些
+ 也不要太较真成『语法糖主义』…
也不要太较真成『语法糖主义』… Java 5 之前没 Generics 的时候代码不还是照样写、Assembler 那时没有 C 不还是可以编程,C 从 89 到 17 加了多少特性,vararg、complex、block、pack,多少也是『可有可无』的,甚至因为有内联汇编和底层访问性、低层次的规范,你都可以内联汇编给它“加特性”,你甚至可以说,C 就是汇编的语法糖,哪怕它让代码机器平台无关、提供了类型检查
C++ 的 block 的确是没啥革命性的变更,但是一切皆语法糖这个观点太表面了…
+ 另外你所说的 environment 模型是指 Scheme 系基于 Lambda 演算程序设计语言的 Lexical scoping 变量解析吗?
另外你所说的 environment 模型是指 Scheme 系基于 Lambda 演算程序设计语言的 Lexical scoping 变量解析吗?
Lisp 里这样的… 我还是用 Racket 吧(我不会 R*RS,但多范式融合的也就是那个样子),怎么说,Lisp 首先这个语言本身已经很老了并且也对很多人不那么可获取、其次它的名称被滥用的很严重,有一大堆 『Lisp 方言』 和 『C-like 语言』了…. 我…..
(define counter可是要用到副作用啊… 什么是消息传递模型,大概就是类似面向对象 Builder pattern 那个数据依赖构建吧,一般都是高阶函数引用 UpValue… 并且传递的消息,一般都是 immutable 的数据模型对象啊?
(lambda [n] (+ n 1))) ; your definition above
(define effect-couter
(lambda [n] [lambda [] (set! n (+ n 1)) n])) ; using side-effects upvalue assignment like what we does in JavaScipt
(define time-a (effect-counter 0))
(display (a)) ; 1
(display (a)) ; 2
+ First-class 在 PLT(Programing Language Theory)里是指『能够被作为“子程序”的参数、返回值』使 用的一种『值』。
First-class 在 PLT(Programing Language Theory)里是指『能够被作为“子程序”的参数、返回值』使用的一种『值』。
C 里面有函数指针、但一些语言(很难举出例子… 因为又要有子程序又不能有函数指针,我举 Bash 吧)就不存在『函数指针』
同样的,一些语言里没有『变量』而只有『等式』『定义』『侧面』『式子(Term)』这些与之类似的概念,可能在使用上也有相通并且经常被弄混,但把他们混为一谈偏偏就是不准确的
何况〖变量化函数〗这个名称本身也有点不准确 — 是不是说函数就不能被作为参数和返回值呢?虽然很多语言都在低层使用了本地变量来管理参数的状态分配,是不是就意味着子程序的『参数』和『返回值』都是『变量』呢?
而且函数式里说的这个『first-class functions』远远不止一个 functions,还有它依赖的 data,这是一个容易被忽视的侧面。
function konst(x) {
return function immediate() { return x; }; }
let a = konst(1);
console.log(a()) // 1
如果真的只有一个『函数指针』,那这个 x 变量应该从哪里来?所以对于好的程序员,闭包和匿名函数不应混淆,哪怕是概念都应该尽可能做到准确无歧义。有的时候我们就是需要一个可以进行『操作』的『值』而已,不需要关心它们是来自『变量』还是『参数』、他们是不是一个『函数变量』。
这个特性就是 1932 年 Lambda calculus 的 lexical scoping,这里 讲的很清楚
任何新知识对任何人来说都是突兀的,所以我们在第一次见到某种概念的时候应该学会闭嘴。我第一次听王垠骂 Type Theory Hindley-Milner 类型推导和 Haskell 的惰性计算引用透明的时候也无脑跟着骂了(那时候是一行 Haskell 都没有看过….)…. 现在是极其后悔 为什么要无脑跟风(给一点建议…)
和变量这个东西有『相通』(都能用)之处,但还是很不一样的。
就像上面那个拿『引用透明』换『确定性』(这个还有和线程安全的某种特例混淆的风险)的人一样,能够准确的就尽可能做到准确,这不正是酷壳大部分技术文和科普/人文写作的风格吗?有多少技术博客还会专门列个引用表给人去找上面的一手资料…
+ 未必啊,我们只是使用了接口,没有规定必须得怎样实现
未必啊,我们只是使用了接口,没有规定必须得怎样实现
for/while 是经典顺序逻辑编程里常用的循环,但实际上计算远远不止这一种可能,有复杂的数据库查询可以分到很多台计算机上去做、复杂的 ray tracing 渲染可以分到计算集群去做,单机对于 DIP 处理/计算机视觉/3D 计算/着色 什么的,未必就 for/while 这一种,比如 X86 的 SIMD 特性(SSE/AVX 什么的)就可以让你一下子处理一批数据,批量完成加减乘除取余什么的,这种情况 map 的语义远远比 for index 好,编译器也更敢做优化一些
酷 壳 - CoolShell
C/C++语言中闭包的探究及比较 | | 酷 壳 - CoolShell
(感谢投稿人 @思禽饮霜 ) 这里主要讨论的是C语言的扩展特性block。该特性是Apple为C、C++、Objective-C增加的扩展,让这些语言可以用类Lambda表达式的语法来创建闭包。前段时间,在对CoreData存取进行封装时(让开发人员可以更简洁快速地写相关代码),我对block机制有了进一步了解,觉得可以和C++ 11中的Lambda表达式相互印证,所以最近重新做了下整理,分享给大