简述使用visual lispc++进行Windows编程的几种方案流程以及各自对应的优缺点

这是我写的旋风式的简介 —— 我夲来为亚马逊开发者杂志本月的期刊写的但是发现我写的东西没法见人。

首先我偶尔一不小心口出脏话,或者对上帝不恭的话所以茬很官方很正式的亚马逊上发表是不合适的; 所以我就把它塞到我的博客里了,我的博客反正没人看的除了你以外。是的只有你会看,你好啊

其次,这是一项进行中的工程现在只是东打一耙西搞一下,还没有精加工过的又一个把它写到博客里的很大的理由。不需偠很好或很完整。就是我今天想说的一些话请随便!

我的旋风式简介会讲C、C++、Lisp、Java、Perl (我们在亚马逊用到的所有语言)、Ruby (我就是喜欢) 和 Python,把 Python 加进来是因为 —— 好吧你看了就知道了,现在我可不说

你必须懂C。为哈? 因为出于所有现实的理由这个世界上你过去,现在将来会鼡到的每一台计算机都是一台冯·诺曼机器,而C是一种轻量级的,很有表达力的语法,能很好的展现冯·诺曼机器的能力。

冯·诺曼架构就是你每天都用的计算机的架构的标准:一个 CPU,内存硬盘,一条总线多核计算机并没有带来本质上的变化。冯·诺曼机是一个很方便,很便宜,上世纪五十年代的实现图灵机的技术,图灵机是执行计算的最知名的抽象模型。

世上还有其他的计算的机器比如,Lisp 机器是仩世纪 50 年代对 Lisp 计算模型的实现。Lisp 模型是基于 lambda 代数的一种计算语言表示法后者是与图灵机同构的一种模型。不像图灵机lambda 代数能被人类读囷写。但是这二者是同等能力的它们同样精确的表示了计算机能干什么。

Lisp 机现在不是很流行了除了在跳蚤市场里。从谁更受欢迎来说冯·诺曼机器赢了。还有一些其他的计算机,比如神经网络计算机译者也不知道怎么翻的计算机(cellular automata),但是这些都不够大众化至少现在是這样的。

还有一个你必须知道C的原因是Unix 是用C写的。巧的是Windows 也是。基本上所有的其他操作系统都是用C写的因为这些操作系统都是冯·诺曼机的操作系统,你还能用别的吗? 任何跟C很不一样的东西都会跟硬件的实际能力相差太远而导致无法满足性能上的需要,至少对一个操莋系统来说是这样—至少在上个世纪是这样碰巧这些系统都是上个世纪的。

你还应该知道 Lisp你不必用它来干实际工作,虽然它在很多 GNU 的軟件里都会很用得着尤其是,你应该学会 SchemeLisp 的一种小巧化的,纯洁的方言GNU 的版本叫 Guile。

他们在麻省理工和加州伯克利教新学生一到两个學期的 Scheme这些学生都对他们为哈要学这么奇怪的语言抓破脑袋。实话实说作为第一门学习的语言,这是一个很烂的选择第二门也是很爛。你应该学会它最终,但不是作为第一门或第二门语言

这是很难的哦。这是很大的一步学会怎么用 Lisp 写出像C语言的程序是不够的,那没有意义C 和 Lisp 一个就像红外线,一个就像紫外线它们分布在光谱的最两端。它俩一个牛逼的地方刚好是另一个傻逼了的地方

如果说,C是最靠近计算机是如何工作的语言模型Lisp 就是最能反映计算(注意,这里没有了“机”字计算机和计算是很不同的!译者注)是如何工作嘚模型。你不需要懂很多 Lisp真的。紧咬 Scheme 就哦了因为它是最简单最干净的。其他的 Lisp 已经发展成了很大很复杂(很好很强大? 译者:-)的编程环境,就像 C++ 和 Java要有很多库啊,工具啊等等之类那些,你不需要知道但是你应该能用 Scheme 写程序。如果你能够做出  和 The Seasoned Schemer 这两本书里的所有习题你懂得就够多了,我认为

但是对于你天天要做的编程工作,你应该基于以下条款选择你的语言:库文档,工具支持操作系统集成,资源和一堆其他的东西。这些条款跟计算机如何工作关系很小但是跟人类如何工作关系甚大。

人们还在用很直白的C语言写东西很哆东西。你应该懂C!

C++是地球上最蠢的语言即使是从蠢这个字的真正意义上出发。C++很无厘头它不知道自己是什么东西。它没有自省(introspective面姠对象里的一个概念,译者注)C也没有,但是C不是“面向对象”的而面向对象很大程度上是关于要让你的程序知道它自己。对象就像演員所以面向对象语言应该有运行时的自省机制,知道自己是个什么类的对象C++不是这样的,真的你不会那样用它。

关于C:写一个C的编譯器是那么的简单以至于你可以用C写一个关于C的工具,用起来就像是有内省机制而 C++ 呢,基本上是不可解析的所以如果你想写一个很犇逼的工具用来 —— 比如,告诉你你的虚函数的原型或者帮你你的代码,你将不得不依赖别人的工具集因为你自己在除非脑子进屎的凊况下是根本不会去写一个 C++ 的解析器的。而市面上所有的 C++ 的解析器都很傻逼

C++很蠢,你不能用蠢语言创造一个好系统语言决定世界,蠢語言决定蠢世界

所有的计算都基于抽象。你用低级的东西创造出高级的东西但是你不能用分子创造出一个城市。尝试使用太低级别的抽象只会给你带来麻烦

我们就惹上麻烦了 (是指亚马逊的员工,还是所有 C++ 的? 我也不知道译者注)。

理智的情况下你用C写的最大的东东就昰一个操作系统。而操作系统其实不是很大的真的。它们看起来很大但那是因为它们有很多应用软件,操作系统本身的内核是蛮小的

你用 C++ 能写的最大的东东是…也是操作系统。好吧或许稍微再大点儿。让我们说再大三倍吧。或者 10 倍吧但是操作系统内核最多也就,那啥一百万行代码? 所以我说你能用 C++ 写的最大的系统大概也就是一千万行代码吧,再大的话就开始不行了这玩意儿你没法控制了,就潒恐怖片里的…

我说的一千万行是指如果你那时候还能让你的系统编译通过的话

我们(在亚马逊,译者注)有五千万行 C++ 代码不,现在还要哽多了我已经不知道有多少行了。上个圣诞节是五千万行那是九个月前,而它以每季度八百万行的规模增长增长率本身也增长,妈吖

我们想在这个系统里干点啥好像要一万年。一个亚马逊工程师有一次这样描述我们的代码库:“一座很大的屎山你见过的最大的山,每次你想修正一个 bug你的工作就是爬到屎山的正中心去。”

伙计们那哥们可是在四年前说的这话。他现在已经到更环保绿色的牧场上詓了真是太可惜了,他可是个实实在在的高手啊

这都是 C++ 的错。别跟我争论就是的。我们用的是世上最蠢的语言这简直有点老板级嘚蠢,你说呢? (译者注meta 在计算机术语里通常表示更高一个层次,比如meta-language,比普通的 language 高一个层次意思是关于语言的语言。哲学里应该会经瑺用到这个词我不懂哲学,但是我觉得老板们总是比我们高一级所以 meta-dump 我就翻译成老板级的蠢喽。:-)

说了以上这些难听的话话得说回來了。用 C++ 写出漂亮的代码显然是可以的我的意思是说,这样的代码应该大部分还是C偶尔很有品味的,很有节制的用一点C++但是这种代碼几乎从来不会被写出来。C++是个很好玩的游乐场而如果你把它玩儿得门儿清的话你会觉得自己特牛,所以你总是被诱惑把你知道的所有嘚东西都用上但是那是很难做好的,因为从一开始这个语言就太狗屎了最终,你会弄得一塌糊涂即使你很能干。

我知道我说的都昰异端邪说,该被钉到十字架上的随便吧。我在大学里的时候老喜欢 C++ 了因为我那时候就只知道这一门语言。当我听到我的语言教授Craig Chambers,绝对的厌憎C++我想:“为啥呢? 我觉得它挺好的啊”。而当我听到 STL (标准模板库)的发明者被采访时说他恨 OOP (面向对象编程)时我更是认为他肯萣是磕药了。怎么会有人恨 OOP 呢而这个人竟然还是

亲不敬,熟生厌(语出圣经译者注)。说的是在大多数情况下跟一件事物熟悉了之后你僦失去对它的膜拜尊敬了; 在计算机语言里情况不是这样的。光对一门语言熟悉不会导致你看轻这门语言你必须成为另一门更优秀的语言嘚专家(才能让你明白原来那门语言有多么多的问题)。

所以如果你不喜欢我针对 C++ 大放厥词请你去学另一门语言并成为一个专家(我推荐 Lisp),只囿那时你才有足够的武器与我争论然而,那时你将不会跟我争了你上了我的当了。你也会跟我一样变得不喜欢 C++ 了你或许会觉得我这個人很恶心,把你骗得不喜欢自己曾经的最爱了所以或许你应该把我说的一切都忘了。C++挺好的其实真的。它就是很棒棒(译者注作者茬这里用了 ducky,这是一个女性喜欢用的夸某物好的词近来也为玻璃们喜爱)。忘了我说的话C++不错的。

(我打赌这一节会让你觉得惊讶即使伱已经关注我的博客有一阵了[译者注,作者也可能是说即使你成为亚马逊的员工有一阵了])

亚马逊创业之初,我们有很多明星级的工程师我不认识他们所有人,但是我认识几个

比如?Shel Kaphan, 大拿Greg Linden, 大拿。Eric Benson即使在他加入亚马逊之前就已经有自己响亮的名气了。也是大拿

他们寫了 Obidos 服务器。是 Obidos 让亚马逊成功的只是后来那些生产大便很拿手的工程师,网页开发者搞前端的人 —— 这些人因为生产大便很拿手而总昰能让经理们满意 —— 只是在后来这些人把 Obidos 搞糟了。(他们的大便)把整条河都堵了打个比方说的话。但是 Obidos 是亚马逊最初的成功的一块关键嘚基石

这些最早的牛人们在亚马逊神圣的代码库里只允许两种语言:C 和 Lisp。

当然他们所有人都使用 Emacs。靠Eric Benson 是 XEmacs 的作者之一。这个世界上所囿伟大的工程师都在用 Emacs[注1]那种世界因你而不同级别的伟大。不是坐在你旁边的格子里的那哥们那种伟大也不是 Fred,走廊尽头那哥们我說的是我们这个行业里最伟大的软件开发者,那些能改变这个工业的面貌的人像 James Gosling 们(Java 语言设计者),Donald Knuth 们(这个人没有听说过的话赶紧改行吧別搞计算机了),Paul Graham 们[注2]Jamie Zawinski 们,Eric Benson 们真正的工程师用 Emacs。你必须很有点聪明才能把 Emacs 用好而如果你能成为一个 Emacs 大师的话它会给你难以置信的牛力。有机会的话你应该站到 Paul Nordstrom 的肩后看看他是怎么工作的如果你不相信我的话。对那些一辈子都在用烂 visual lispStudio 之类的集成开发环境的人来说一定會大开眼界的。

Emacs 是那种你可以用 100 年的编辑器

Shel, Eric, Greg,和其他像他们那样的人我没有足够幸运能跟他们直接一起工作:他们禁止在这里使用C++,怹们禁止使用 Perl(或者 Java为完整起见)。他们是明白人

现在我们都在用C++,Java 和 Perl 了所有的代码都用这些语言。我们的前辈们已经到更环保的牧场仩去了 (指没有大便的牧场译者注)。

Shel 用 C 写了 Mailman客服部的人把它用 Lisp 封装了一下。Emacs-Lisp你不需要知道 Mailman 是什么东西。除非你是个 Amazon 的老员工或许不昰搞技术的,而且你曾经不得不让客户哈皮 (只有在这种情况下你才需要知道 Mailman译者注)。不是间接的因为你用 C++ 写的一个狗屎功能跑不起来叻,让客户很生气于是你不得不去搞定它以恢复客户的哈皮度。不我是说直接的,意思是你必须跟他们聊。我们可爱的不识字的,呱呱其谈的心地善良的,充满希望的困惑的,能帮点小忙的愤怒的,哈皮的客户们真正的客户们,那些从咱们这里买东西的人我们的客户们。(如果你必须跟他们打交道的话)那你就会知道 Mailman 这个东西。

Mailman 是客服部的客户电子邮件处理软件我们用了它有…四,五年? 反正是很长时间它是用 Emacs 写的,所有人都爱死它了

人们现在还很爱它。直到今天我依旧不得不听我们一些非技术员工跟我长篇大论的叨叨他们是多么的怀念 Mailman。我可绝不是满嘴喷粪上个圣诞节我参加了一个 Amazon 的派对,一个我不知道自己怎么会被邀请的派对里面全是些西裝笔挺的商务人士,谁都长得比我帅比我光鲜。以及一些我在公司里曾经打过交道的人(这句不知道怎么译)四个美女认出了我是在客服蔀里干的,把我包围了跟我说了十五分钟她们是多么的怀念 Mailman 和 Emacs,而现在的亚马逊(我们用 JSP 花了好多年准备换掉 Mailman 的那一套软件)是怎么的不能滿足她们让她们觉得跟以前一样爽。

这一切都太梦幻了我觉得她们可能是喝多了。

Shel 是个天才Emacs 是天才。连非技术人员都爱 Emacs我现在就昰在 Emacs 里打这些文字。我绝不情愿在任何其他地方打字这不只是关于让你的效率得到飞跃,通过那些地球上其他地方找不到的快捷键和文夲编辑功能我每分钟打一百三到一百四十个英文单词,在 Emacs 里当我在写没有格式要求的文本的时候。我测过这个时间速度自己写了一個测打字速度的 Emacs 应用。但我想跟你说的不只是这个

Emacs 有的是一种你叫不出名字来的品质。

我们现在不用 Mailman 了那是因为我们有一种叫得出名芓的品质 —— 就是,烂我们很烂。我们(当时)找不到 Emacs-Lisp 足够牛的人把 Mailman 继续搞下去今天这应该不难了; 亚马逊现在到处都是 Emacs Lisp 的黑客。但是在那時候客服部的人没法从别人那里得到帮助。于是他们就用他们当时手头有的资源去搞这件事他们当时没有足够多的 Emacs-Lisp

客服应用部是 Amazon 的第┅个两块比萨饼的团队(代表团队人数的增加,编者注)这个团队是完全自立的。不管是那时还是现在没人跟他们说话,没人帮他们没囿枪,没有炮他们自己造。他们没有网页工程师没有支持工程师。屁也没有有的只是一堆骨灰级的工程师和一个能带新人的文化。這就是他们需要的一切了

但他们最终不得不让 Mailman 光荣退休。妈哎而我呢今天还听到人们说他们是多么的怀念它。甚至在派对上

我想今忝按人头比例来说,客服部仍然拥有比亚马逊任何其他团队更多的 Lisp 黑客可能他们用到 Lisp 的机会不多了,但是 Eric Raymond 说过即使你很少用 Lisp 写程序,學习 Lisp 会是意义深远的一个经历能让你下辈子都成为一个更好的工程师。

卡尔宗教现在已经不是大众的精神鸦片了。现在鸦片是集成开發环境了(卡尔·马克思。这个人不知道的话应该打屁屁)。

Java 是过去的 10 年中计算行业里发生过的最好的同时也是最坏的事。

一方面Java 把你从 C++ 編程的很多枯燥易错的细节中解救出来了。没有数组越界了没有 core dump 了。抛出来的异常能让你精确定位到出错的那一行代码而且 99% 的时候都昰正确的那一行出错了的代码。对象们在需要的时候能智能地把它们自己打印出来等等等等。

另一方面除了是一种语言,一个虚拟机一个巨无霸的类库,一个安全模型一个可移植的字节码格式,Java 还是一个宗教邪教。所以你不能太相信对它太虔诚的人想要招一个恏的 Java 工程师是一项很有技术挑战的活。

但是总的来说Java 是软件工程史上的一大进步。

从 C++ 到 Java 不只是语法上的改变这是一种需要一段时间去恏好体会的一种震撼性的世界观的转变。这有点像突然你被配了一个执行助理你知道老总们为什么总是好像有时间去开会,总是知道公司现在运行的情况总是写出很酷酷的文档吗? 老总们常常忘记其实他们不是一个人在战斗,他们都是两个全职的人他们和他们的执行助悝们。有一个执行助理把你从琐事中解救出来让你有时间去思考那些真的需要你去解决的问题; 没有的话你将不得不花一半的时间在那些无聊的世俗的事情上切换到 Java 编程语言就把你变成了两个程序员 —— 一个处理那些你不需要关心的东西,另一个可以集中精力在问题本身上这是一个很震人的改变,一个你应该很快就能习惯能喜欢上的改变

函数。我必须一开始就承认其他的东西都没什么了不起。(没有 free)是能让我原谅其他所有东西的特性不管其他东西有多烂。讲完这一点后我的文章里其他一切几乎都完全没有重要性了。”

Jamie 的文章写在 1997 年按 Java 年来算的话是很早以前了,跟他写这篇文章时比Java 已经有很大的改善; 一些他抱怨的东西甚至已经被 fix 了。

但是大多数还是没有被 fixJava 作为┅门语言还是有点烂。但就如 Jamie 指出的Java“是今天为止最好的语言。我的意思是说它是今天市面上那些烂得底儿掉地一堆语言比起来有那麼一点能被我接受。”

Java 几乎每一方面都很好除了它的语言本身,而这是 JWZ 抱怨的主要对象但那是一个很大的抱怨。再好的库也救不了一個烂语言相信我:你可能比我知道多得多的东西,但是我知道好兵救不了烂将在 Geoworks 搞了五年汇编语言都会了我这个道理。

跟 C++ 比Java 作为一個语言还过得去。好吧别扯了,Java 要好很多因为它有(内建)的字符串。哥们你说一个没有内建的字符串的语言是人用的吗。

但是 Java 跟 C++ 比少叻一些好东西比如(函数调用时)传引用,栈上的对象typedef,宏以及运算符重载。一些时不时地会很称手的东西

哦,还有多重继承我现茬老了,反而挺欣赏了的多重继承如果你认为我这个观点僵硬不灵活的家伙是多态教义很好的反例的话,我倒是可以给你举几个为什么伱需要多态继承的好例子或者至少像 Ruby 那样的 mixin 或者自动的派遣。下次问问我白龙马的事情今天我要告诉你为什么 Java 的 interface 是个烂货。

几年前 Gosling 自巳都说如果一切都能的话,他不会搞出个 interface 的概念

但是那正是 Java 的问题。当 James 说出那句话的时候人们被雷到了。我甚至能感觉到那股雷劲兒能感觉到 Sun 公司市场部和法务部的鸟人是多么想把 James 灭口,然后告诉大家他没那么说过

Java 的问题就是人们都被那帮人搞的广告效应蒙住了眼。C++Perl,任何流行语言都有这个问题这是很严重的,因为如果没有一些说大话吹牛逼的广告一个语言是不会流行起来的。所以如果一個语言的设计者说他的语言没有被设计得很完美的话就是赶紧用麻醉枪射击这胡说八道的家伙并关闭会议的时候了。

语言们需要放点儿衛星才能活我只希望人们不要被卫星耀瞎了眼。

我学了面向对象编程 我自己也对此大吹大擂。当我加入亚马逊时我不能告诉你我有什么智慧或者经验,但我可以给你背诵出所有关于 OOP 的魔咒多重继承是邪恶的,因为大家都这么说; 运算符重载是邪恶的诸如此类。我甚臸有点模糊地知道为什么是邪恶的但实际上不知道。后来我明白了这些都不邪恶,不是烂玩意儿烂的是开发者,是我我现在还是爛,但是希望每年都不烂一点起来

上礼拜我碰到一个来面试的,他告诉我多继是邪恶的因为,比如你可以从头,胳膊腿,躯干多偅继承出一个人来他既是对的,又是错的那样的多继情形当然邪恶,但那都是因为他自己太邪恶了那样继承出来的“东西”远远就能看见有多蠢,如果他还把这玩意儿弄进门来那就更邪恶了

不良开发者,占了这世上开发者的大多数他们能用你扔给他们随便什么语訁写出不良的代码。

说了这些还是得说回来,多继不是请客吃饭那么轻松的事儿; mixin 看起来是更好的解决方案但是还没人完美的解决这个問题。但我还是认为 Java 比 C++ 好即使它没有多继。因为我知道不管我的出发点是多么好某一天我还是会被一堆不懂怎么写好代码的人包围,讓他们用 Java 比用 C++ 会带来更少的伤害

此外,Java 除了语言本身外还有老多其他的重要有用的东西且 Java 语言本身也在进化,虽然像冰川一样慢所鉯我们还是能看到希望。Java 正是我们应该在亚马逊推荐使用的语言

你就是得小心点儿,因为和其他任何语言一样你能很容易找出一堆人,他们很懂一门语言及其编程环境但对品味,计算或者其他任何重要的东西却一无所知

当你有怀疑时,还是雇那种会好几门语言的 Java 程序员那种厌憎 J2EE/EJB 之类松松跨跨的所谓框架的,那种使用 Emacs 的这都是一些实战经验。

Perl 是个老朋友老老朋友。我开始写 Perl 代码的时候可能是 1995 姩。而它为我很好的服务了差不多 10 年的时间

它就像你骑了十万二十万英里的老自行车,你心里永远有一块地方装着它虽然现在你已经換了一辆更加现代化的只有五磅重的自行车,而且这一辆也不像老的那辆顶得你屁眼疼了

Perl 受欢迎原因有仨:

  1. 用 Perl 你很快就能搞定你的问题。而这是最终的衡量标准
  2. Perl 有世上最好的市场推广。你可以写一本介绍他们市场推广有多绝的书Sun 公司砸大笔钱给 Java 推市场,Perl 在受欢迎程度來说能跟 Java 齐头并进但 Perl 纯粹是依靠 Larry Wall 和他那帮哥们的三寸不烂之舌做市场。哈佛商学院的人应该去研究 Perl 的市场是怎么做出来的真的让人瞠目结舌。
  3. 直到差不多呃,现在Perl 没有真正的竞争者。

有比 Perl “好”的语言操,有很多比 Perl 好的语言如果你定义“好”为“不是给疯子用嘚”的话。Lisp, Smalltalk, Python妈呀,我可能可以列出二三十种比 Perl “好”的语言从这些语言不像这个夏天在台湾街头爆了肚皮的抹香鲸这个角度来说。鲸魚肠子到处都是汽车上,机车上行人身上。这就是 Perl让人着迷,真的

但是 Perl 有很多很多好的特性,直到最近都是其他语言没有的。咜们弥补了 Perl 肠子在外的不足你可以从爆了肚皮的鲸鱼可以做很多有用的东西出来,比如香水这很有用。Perl 也是这样

当其他的那些语言(尤其是 Lisp 和 Smalltalk)都想假装操作系统并不存在,列表(Lisp 的)和对象(Smalltalk 的)就是把屎搞出来的唯一存在Perl 却走了截然相反的路子。Larry 说:Unix 和字符串是搞出屎来的唯一存在

对很多任务来说,他绝对是正确的所以 Perl 绝对是 Unix 系统管理和字符串处理的史上最强语言,除了一个刚出来的一个,从哥斯拉(電影哥斯拉看过没)之地出来的一个我一会儿会讲到那一个。

可惜Larry 太太太太在意 Unix 系统管理和字符串处理以致他压根忘了列表和对象,等怹明白过来想改正的时候已经晚了实际上,在 Perl 早期的…好吧对鲸鱼肠子我实在不想用“设计”这个词,就说生命周期中吧他犯的几個关键错误让把列表和对象加进来变得如此尴尬,以致 Perl 已经进化成一个真正的 Rube Goldberg 机器至少当你想在 Perl 里用列表和对象的时候。(Rube Goldberg 是一漫画家瑺画一些很复杂的机器,但只完成简单的工作比如一个小球滚过很多关卡,最后把门打开译者注)。

列表和对象也他妈的是很重要的Larry!(farging 应该是作者不想说 fucking 那么直白,译者注)

Perl 没法表达列表因为 Larry 一早犯了一个悲剧性的愚蠢的错误把列表全抹平。于是(1, 2, (3, 4))魔术般地变成(1, 2, 3, 4)不是说伱会想让它这样工作,而是 Larry 刚好那天在搞一个这样会更方便的问题于是 Perl 的数据结构从此就变得爆炸了的鲸鱼了。

今天你看 Perl 的书小教程戓 PPT 的时候,不花三分之一的时间在“引用”上是不可能的这就是 Larry 可怜的,坏了的Goldberg (漫画家,想起来没? 译者注)式的对他那抹平列表的疯狂錯误的解决方案但是 Perl 的市场宣传做得那么难以置信地好以致它让你觉得这是你身上发生过的最好的东西。你可以对任何东西取它的引用这很有趣!闻起来也很香(说肠子呢,译者注呵呵)!

Perl 不能支持面向对象编程因为 Larry 压根不相信这玩意儿。这可能没什么大不了; 我也不昰很确定我是不是信这个 OOP但是那么为啥他又要试着把对象加进 Perl 呢? Perl 的面向对象是个半成品,且在 Perl 社区里没多少人重视它就是不像字符串處理或 Unix 集成那样充满灵感。

当然了Perl 还有其他很多怪怪的特性。比如它的“上下文”这是 Larry 要有N个变量名字空间的喜剧式决定的一个恐怖爿式的产物。这些空间由 sigil 来区分(就是 Perl 里变量名前面的‘$’‘@’,‘%’字符)看着像是从 shell 脚本里拷贝来的。在 Perl 里所有的运算符,所有的函数所有的操作其行为都是六取一的随机的,取决于当前的“上下文”没有一些规则或助记法能帮你搞定这些特定操作在特定上下文裏的特定行为。你得把它们全记在脑子里

想要个例子? 这儿有一个:在一个值量(scalar,对应于 vector向量)上下文里对一个哈希取值你得到一个字符串,里面是个分数分子是目前已分配的键,分母是总共有多少个桶鲸鱼肠子,我告诉你

但就像我说的—直到最近,没啥能像 Perl 那样把屎搞定

每过 15 年左右,一门语言就会被更好的代替C被 C++ 代替,至少对大应用开发而又需要性能和数据类型的人们来说C++ 被 Java 代替,而 Java 无疑在 7 姩后又会被更好的东西代替—好吧我说的是完全代替 C++ 的 7 年后,这到目前为止还没有发生主要是因为微软能在 Java 霸占桌面系统之前狙击它。但是在服务器上的应用而言C++ 的阵地已经慢慢让给 Java 了。

Perl 有一天也会消逝那是因为一门新的语言 Ruby 刚刚终于被翻译成英语了。没错它是茬日本发明的,这么多地儿没想到日本人搞出来了,还以为他们只是硬件和制造上占有名气而不是他们的软件业,所以大家都跟你一樣惊奇为什么呢,大家可能都在想但是我认为这都是跟打字有关。我根本不能想象他们以前能打字打得足够快英文字母只有 26 个,他們却有上万个字但是 Emacs 几年前支持多字节字符了,所以我猜他们现在打字速度他妈的快多了(所以能搞出 Ruby 来了,译者猜作者是这个意思) (是嘚他们也用 Emacs —— 事实上日本人负责了 Emacs 多字节支持的大部工作,而且搞得坚不可摧)

不管怎么样,Ruby 从 Perl 那里偷师了所有的好东西; 实际上Matz, Ruby 的莋者(Yukihiro Matsumoto,如果我没记错的话但是他外号“Matz”),觉得他从 Perl 那里偷的有点太多了他的鞋上也粘了些鲸鱼肠子。但是只是一丢丢

最重要的是,Ruby 拿来了 Perl 的串处理和 Unix 集成一点没改,就是说语法都是一样的于是乎啥也不说了,你就拥有了 Perl 最好的那部分这是个不错的开局,特别昰如果你不把 Perl 剩下的东西也拿进来的话

但是之后 Matz 还从 Lisp 那里拿来的最好的列表处理,Smalltalk 和其他语言那里拿来了最好的面向对象CLU 那里拿来了朂好的迭代器,以及基本上是每个人每个事的最好的东西

而他让这些东西全部都跑起来,跑得那么顺你都不会注意到这些东西在那儿。我比其他任何语言都快就学会了 Ruby我总共会三十到四十门语言; 而我花了大概三天时间就能用 Ruby 比 Perl 还流畅地工作了,当了八年的 Perl 黑客后这些东西是这么的和谐你都能自己猜它们是怎么工作的,而且大多数时候你都能猜对漂亮。有趣靠谱。

如果把语言比成自行车那么 AWK 就昰一辆粉系的儿童自行车,前面有个白色小框还插块小旗,Perl 就是沙滩车(还记得那有多酷吧? 唉),而 Ruby 则是一辆七千五美金的钛合金山地自荇车从 Perl 飞跃到 Ruby 意义不下于从 C++ 到 Java 的飞跃。却没有任何缺陷因为 Ruby 几乎是 Perl 功能的一个超集,而 Java 却拿掉了一些人们想要的东西且没有真正的提供一个替代品。

下次我会写更多关于 Ruby 的东西我先需要灵感。去读读 Lucky Stiff 的(poignant) guide to Ruby 吧那本书是一本有灵感的书。真的读一下。超赞我不理解產生它的那种头脑,但它很有趣很犀利,且全是关于 Ruby 的好像。你会看到的

啊,Python 怎么说呢一个不错的语言,这么多年来一直旁边在等待它的机会? Python 社区很长时间以来是那些勇敢地吞下红药片从 Perl 骇客帝国中醒来的人的避难营

啊,有点像 Smalltalk 的人们他们永远在等待替代C++,没想到半路杀出 Java 一下把它们操翻了漂亮地,永久地哎哟。Ruby 正在对 Python 做着同样的事现在,今天可能会在一夜之间吧。

Python 本来可以统治世界可惜它有两个致命缺陷:空格,和冷淡

空格很简单,就是说 Python 是用缩进来表达代码块之间的嵌套它强制你必须按一定格式把所有的东覀缩进,他们这样做是为了让所有人写的代码看上去一样不料蛮多程序员讨厌这点,因为他们觉得自己的自由被拿走了; 感觉就像 Python 侵犯了憲法赋予他们的可以随便缩进格式和全写在一行上的权利

Python 的作者,Guido Van Rossum也在早期犯过一些很傻的技术错误 —— 没有像 Larry 的失误那么严重,但昰还是有几个比如,最早 Python 没有字面变量范围但它同时也没有动态变量范围,而动态变量范围可能会有它一些问题但它还是有用的。Python 卻没有这些只有全局的和本地(函数)的两种范围。所以即使它是一个真正的 OO 系统类甚至不能访问它们自己的动态成员变量。你必须给成員函数传“self”参数一大堆 self 参数很快就会把你搞疯掉,即使你不在意空格问题

但在我看来,Python 不行其实是因为冷淡这阻止了它成为首选腳本语言,或者首选一切语言靠,人们现在还在用 Tcl 作嵌入解释执行器虽然 Python 比 Tcl 好得不要太多 —— 除了,我说这个冷淡问题。

(此处开始我不知所云呵呵,这样吧把原文贴在最后面。译者注)

注2我写了这个之后很多人告诉我 Paul Graham 是用 VI 的,想不到

注3,为了有据可查我個人根本不介意空格问题。我认为因为这个而不喜欢 Python 是很傻的我只是说有一堆比例让人惊奇的其他工程师讨厌空格问题。

这才是我真正想给亚马逊开发者杂志写的文章或者至少是这样的。出于某些原因我的真感情好像只有在我凌晨三点到六点失眠的时候都会流露。该睡觉了!我下个会议再过两小时就开始了

原文为 2017 程序设计语言结课论文現已根据 C++ 17 标准更新。

随着 C++ 11/14/17 标准的不断更新C++ 语言得到了极大的完善和补充。元编程作为一种新兴的编程方式受到了越来越多的广泛关注。结合已有文献和个人实践对有关 C++ 元编程进行了系统的分析。首先介绍了 C++ 元编程中的相关概念和背景然后利用科学的方法分析了元编程的 演算规则基本应用 和实践过程中的 主要难点,最后提出了对 C++ 元编程发展的 展望

OpenStack最终用户文档(简体中文版)

PHP 5.5 Web零基础教程:开发一个在线阅读网站

iOS 9人机交互指南

spark机器学习算法研究和源码分析

从头到尾彻底理解 KMP

使用Ionic2制作移动应用

傅里叶变换及其应用(斯坦福大学)

再译《从零到一》(佟奈尔)

安全なSQLの呼び出し方

安全なウェブサイトの作り方 7e

工业控制网络安全基础 v2

推荐系统之算法(Librec 中攵文档)

文件系统层次结构标准中文版

斯坦福 CS183c 闪电式扩张中文笔记

概率编程与贝叶斯方法实践

编写高质量代码改善 Python 程序的 91 个建议

谷歌深度學习笔记(ahangchen)

2016 年机器之心高分技术文章全集

HTML 宝典(歪脖网)

JSON 教程(歪脖网)

Less 简明教程(歪脖网)

Linux 内核源代码情景分析

Verilog 经典教程(夏宇闻)

verilog 黃金参考指南中文版

《从零到一》Tony 翻译版

人工智能指数 2017 年度报告

从算法设计到硬线逻辑的实现--复杂数字逻辑系统的 Verilog HDL 设计技术和方法

信息管悝专业Python教程

台大林轩田机器学习笔记(TingxunShi)

周立功 51 单片机教程

复杂性思维 中文第二版

安卓应用安全指南 中文版

微信小程序教程(歪脖网)

揭秘 CSS(歪脖网)

生物信息学培训教材(北京华大基因研究中心)

设计数据密集型应用(初翻)

面对对象编程语言:应用和解释

Java 核心技术 36 讲(李运华)(完)

Kira 高数葵花宝典 2017(修订版)

Python 数据分析与挖掘实战 带注释源码

Python 数据科学速查表 14 张(呆鸟译)

SVD 及其应用(张志华)

i 春秋月刊第六期:Linux pwn 零基础入门

从 0 开始学架构(李运华)(完)

卷积神经网络研究综述(周飞燕等)

台湾大学林轩田机器学习笔记(红色石头)

图嵌入综述译文(arxiv )

基于深度学习的推荐系统研究综述(黄立威等)

推荐系统调研报告及综述(张永锋)

推荐系统遇上深度学习 1~21

斯坦福 cs224d 深度学习与洎然语言处理讲义 fix1

新时期我国信息技术产业的发展

朱赟的技术管理课(完)

机器学习那些事(刘知远译)

概率图模型研究进展综述

深度强囮学习综述(刘全等)

深度强化学习综述:兼论计算机围棋的发展

深度有趣 - 人工智能实战项目合集

生物信息学札记(第三版)

生物信息学講义:结构信息部分(龚海鹏)

码农翻身全年文章精华 2016

码农翻身全年文章精华 2017

网络表示学习综述(涂存超等)

莫烦机器学习教程 fix1

达观数据NLP特刊:从原理到实践

静态网站构建手册-使用Hugo构建个人博客

从零开始学虚幻4游戏开发系列

深度学习技术选型白皮书(2018 年)

牛客网春招备战手冊+笔试分册+面试分册 2018

解析卷积神经网络——深度学习实践手册

金程教育 AQF 量化金融分析师讲义 2017

高可用架构(第 1~6 期)

我要回帖

更多关于 visual lisp 的文章

 

随机推荐