从前有一段时间Mathematica...

再过几个星期就是25年前了:1988年6月23日Mathematica推出。

前一晚的深夜,我们还在复制软盘和填充产品盒。但在6月23日的中午,我在圣克拉拉的一个会议中心开始工作Mathematica第一次在公共场合:

Mathematica 1.0版

(是的,这是最初的启动屏幕,是的,Mathematica1.0运行在苹果机及各种Unix工作站电脑;当时的个人电脑还不够强大。)

人们都很兴奋Mathematica能做的。还有一些关于承诺的演讲Mathematica来自各行各业的领导者,包括史蒂夫•乔布斯(当时是在NeXT),尽管他有一段时间没有公开露面,但还是好心地来了。活动上有人很有远见地让所有的演讲者在一份这本书当天刚刚在全国各地的书店上架销售:

Mathematica v1.0发布时发言者的签名

发生了这么多事情Mathematica在此后的25年里。什么开始Mathematica1.0已经变成了一个庞大的系统Mathematica今天。当我看着25周年剪贴簿新利手机下载,看到有这么多的贡献,我感到很骄傲Mathematica对发明、发现和教育的影响:

《Mathematica Story: A Scr新利手机下载apbook》

但对我来说,也许最让我满意的是我所建立的基本原则Mathematica经受住了时间的考验核心思想和语言是如何Mathematica1.0一直坚持到今天(是的,大多数时候都是这样Mathematica1.0代码今天仍然可以运行)。

但是,好吧,在哪里Mathematica从何而来?它是怎么变成现在这个样子的?说来话长,真的。深深缠绕着我自己个人故事.但当我展望未来时,我发现了解历史是如何演变的很有趣。

也许是第一次微弱的朝向Mathematica当我大约6岁的时候,我意识到我可以通过用两把尺子创建一个“加法计算尺”来“自动化”那些繁琐的加法计算。我从来不喜欢计算数学,也不擅长它。但从10岁左右开始,我对物理越来越感兴趣——做物理需要做数学。

电子计算器在我12岁的时候出现了,我立刻就成了一个爱好者。大约在同一时间,我开始使用我的第一台计算机——一个大桌子大小的物体,有8千字的18位内存,主要是用纸带汇编程序编程的。我试着用它来做物理,但没有太大的成功。但在我16岁的时候,我发表了几篇物理学论文,高中毕业后在英国政府实验室工作。“真正的”理论物理学家在那时候基本上不使用计算机。但是我做了。交替使用HP台式计算器(带绘图仪!)和用Fortran编程的IBM大型机。

我只是在做算术。但在我想做的物理中,有各种各样的代数。不仅仅是一点代数知识。大量。费因曼图的表达式有成百上千的项,如果要得到正确答案所有的项都必须是正确的。

我不知道该怎么办。我想象着我的一生都在追寻负号和2的因数。但后来我开始考虑用电脑帮忙。就在那时,有人告诉我,其他人也有这样的想法。我发现了三个程序——所有这些程序都是从大约14年前1962年CERN的一次谈话开始的:Reduce(用LISP编写)、Ashmedai(用Fortran编写)和Schoonschip(用CDC 6000汇编程序编写)。

这些程序是专门的,除了它们的作者,还不清楚有多少人曾经认真使用过它们。它们使用起来相当笨拙:通常情况下,你提交一副牌,然后过一段时间就会得到一个结果——或者更常见的是一个晦涩的错误消息。但我设法开始用它们做物理。

然后在1977年夏天,我发现了阿帕网,也就是现在的互联网。那时候只有256台主机。而@O 236则去了麻省理工学院的一台开放计算机,它运行一个叫做macsyma的程序,这个程序可以做代数运算,并且可以交互使用。我很惊讶使用它的人这么少。但没过多久,我就把大部分时间都花在了上面。我发明了一种工作方式——在机器上来回工作,尝试各种东西,看看会发生什么。通常会做一些奇怪的事情,比如为一个积分列举不同的代数形式,然后“实验”看看哪个是正确的微分。

我的物理论文开始包含各种惊人的公式。人们不再想象我会使用电脑,而是开始认为我一定是某种伟大的人类代数计算器。我的野心越来越大,想和Macsyma做更多的事情。很快我就成了它最大的用户。但在1979年的某个时候,我触到了边缘;我长大。

然后是1979年11月。当时我20岁,刚拿到物理学博士学位。我花了几个星期在欧洲核子研究中心,计划我在(我相信)物理学方面的未来。我得出的一个结论是,要想做好物理,我需要比《麦茜玛》更好的东西。过了一段时间,我决定唯一有机会得到我想要的东西的方法就是我自己建造它。

就这样,我开始了后来的SMP(“符号操作程序”)。我对当时的其他计算机语言有相当广泛的了解,包括“普通的”类似algo的过程语言,以及像LISP和APL这样的语言。起初,当我绘制SMP草图时,我的设计看起来很像我在那些语言中看到的。但渐渐地,随着我对SMP有了更多的了解,我开始尝试自己创造一切。

我想我有一些很好的主意。事实上,甚至我早期的一些SMP设计文档都有一个非常Mathematica喜欢的味道:

早期SMP设计文档

回顾一下文档在美国,SMP是一个相当令人印象深刻的系统,特别是考虑到我开始设计它时只有20岁。但不必多说,并不是《SMP》中的每个想法都是好的。作为一个长期的语言设计鉴赏家,我无法抗拒这篇文章的最后提到几个我“最喜欢”的错误。

即使在我的早期设计中,SMP也是一个大系统。但不管出于什么原因,我一点都不觉得这令人生畏。我只是想继续执行它。我想确保我把每件事都做得尽可能好。我记得我当时在想:“我并不真正了解计算机科学;我最好学会它”。所以我去了书店,买了我能找到的所有关于计算机科学的书——整整半个书架。然后把它们通读了一遍。

我当时在加州理工学院工作。我邀请了世界上所有我能找到的人,他们都曾在相关系统上工作过。我在加州理工学院成立了一个小小的“工作组”,有一段时间还在其中理查德·费曼.于是我开始从校园周围招募人来参与“SMP项目”。

一个重要的早期决定是SMP应该用什么语言编写。Macsyma是用LISP编写的,很多人说LISP是唯一的可能。但是一个名叫Rob Pike的年轻物理学研究生让我相信C语言是“未来的语言”,是正确的选择。(后来,罗布做了各种各样的事情,比如发明了围棋语言。)因此,在1980年初,第一行用于SMP的C代码被编写出来。

研究SMP的小组很有趣。我招募的第一个员工是克里斯·科尔(Chris Cole),他曾在IBM工作,后来成为APL的狂热爱好者,后来创立了一家相当成功的公司,名为Peregrine Systems。然后是有各种不同技能的学生,还有一位编程爱好者教授,他曾与我合作写过一些物理论文。当然,在这一过程中也有一些古怪之处。就像一个人写了非常高效的代码,所有的代码都在一行里,函数的名字很花哨,所以它们的组合读起来就像小笑话。或者是一个相当聪明的本科生,他在这个项目上非常努力,以至于他所有的课程都挂了,然后承诺他不会碰电脑,但很快就被发现向别人口授代码。

我自己为SMP写了很多代码(大约1000行/天)。我做了设计。大部分文档都是我写的。我以前从未管理过大型项目。但不知怎么的,这部分似乎并不难。果然,到1981年6月,SMP第1版开始运行——甚至看起来有点像Mathematica

SMP的输出

在它的时代,SMP是一个非常大的软件系统(尽管它的可执行文件只有不到1兆字节)。它最初的目的是进行数学计算。但在这个过程中,我意识到,即使要做到这一点,我也必须创造一种完整的、相当普遍的、象征性的语言。我认为这有点像物理学,但我不是在处理基本粒子,而是试图找到计算的基本成分。我养成了一种审美观:总是试图把最大的能力塞进数量最少的原语中。有时我会为如何做某件事而困惑数周,但最终我会想出一个设计,然后实施它。

我理解了一切都可以用符号表达来表示的想法。尽管整个符号索引列表的业务阻止了SMP具有“表达式头”的概念,这是如此清晰Mathematica.在符号表达式的内部实现中肯定有一些古怪的地方——最明显的是关于将所有数字存储在浮点数中的古怪想法。(《Schoonschip》(Schoonschip)的作者、后来的诺贝尔物理学奖得主蒂尼·维尔特曼(Tini Veltman)曾告诉我,将数字存储在浮点数中是他做过的最好的决定之一,因为fpu的运算速度比alu快得多。)

在SMP之前,我已经为Macsyma这样的系统编写了许多代码,并且我意识到我一直试图做的事情是说“如果我有一个像这样的表达式,我想把它转换成一个像这样的表达式”。因此,在设计SMP时,由模式表示的符号表达式族的转换规则成为中心思想之一。它不像里面那么干净Mathematica,其中肯定有一些时髦而前卫的想法。但是很多核心元素已经存在了。

最后,从1981年开始的SMP 1.0版本文档的目录具有相当程度的现代性:

SMP v1.0的目录

是的,“图形输出”与“内存管理”放在一起,只是一个很小的部分。还有有趣的“编程僵局”(即系统挂起),以及“统计表达式生成”(即生成随机表达式)。但是“并行处理”和“程序构建”(即代码生成)已经存在了。(SMP甚至有一种创建C代码、编译它的方法,并且非常可怕的是,将它动态链接到正在运行的SMP可执行文件中。)还有许多数学函数和数学运算——尽管远不如《in》强大Mathematica

但是,好吧。所以SMP 1.0在运行。应该怎么处理它?很明显,有很多人会觉得它有用。它只能在相当大的计算机上运行——所谓的“小型机”,比如VAX,它有几个大冰箱那么大,价格几十万美元。但是,我知道有很多研究和工程组织都有这样的机器。

我当时对公司或商业一无所知。但我确实明白,为开发SMP而花钱是很明显的,而获得这些钱的一个好方法就是出售SMP的拷贝。我的第一个想法是去加州理工学院现在被称为“技术转移办公室”的地方,看看他们是否能提供帮助。当时,办公室里基本上只有一个讨人喜欢的老家伙。但几次尝试之后,他显然不知道该做什么。我问他这是怎么回事,因为我认为类似的事情在加州理工学院肯定会经常发生。“嗯,”他说,“问题是,大多数教师都自己去开公司,所以我们从来没有参与。”“哦,”我说,“我可以那样做吗?”他迅速翻阅了学校的规章制度,说道:“软件是有版权的,学校不主张拥有版权,所以,是的,你可以。”

于是我去开了一家公司。但事情没那么简单。因为不久之后,大学行政部门突然决定,不,这是不行的。这句话变得很奇怪——而且下流(“给我一份,我就签了”,等等)。理查德·费曼和默里·盖尔曼替我说情。大学的总统似乎不知道该做什么。有一段时间,一切都陷入了僵局。但最终我们同意,学校将授权他们可能拥有的任何权利——即使他们改变了关于软件的规章制度(后来发现,当他们试图招募计算机科学教员时,这是非常愚蠢的)。

碰巧还有一个“最后的问题”,是由当时的教务长提出的。他声称,如果我在大学工作,并拥有公司的一部分,那么大学和公司之间的执照就会产生利益冲突。“好吧,”我说,“这很容易解决:我要退学。”这似乎是一个大惊喜。但我还是辞职了,并搬到了普林斯顿的高级研究所,正如当时的主任指出的那样,在那里,他们“送出了电脑”约翰·冯·诺依曼死了,所以他们不太担心知识产权。

多年来,我一直想知道加州理工学院到底发生了什么。碰巧,几周前,我同意再次访问加州理工学院(获得“杰出校友奖”),并在教师俱乐部吃午饭,我发现旁边一桌不是别人,正是前加州理工学院的教务长,现在约95转。他对所谓的“沃尔夫勒姆事件”(他被“警告”了吗?)的迅速而深刻的回忆给我留下了深刻的印象,我们的谈话最终使事情解释得更好了一些。

坦白说,这比我想象的还要奇怪。从某种意义上说,这个故事开始于20世纪30年代,当时阿诺德·贝克曼在加州理工学院,发明了酸碱度计,然后离开学校创立了贝克曼仪器公司。到1981年,贝克曼成为了加州理工学院的主要捐赠人,并担任了董事会主席。与此同时,生物系主任李·胡德(Lee Hood)正在发明基因测序仪。他告诉我,他曾多次尝试让贝克曼仪器公司对它产生兴趣,但都失败了,于是他创办了自己的公司(应用生物系统),后来非常成功。有人告诉我,在某个时刻,阿诺德·贝克曼(Arnold Beckman)很生气,并告诉行政部门,他们需要“阻止IP走出校园”。事实证明,当时校园里唯一有意义的事情就是我的SMP项目。当时的教务长表示,他认为自己有责任“处理”这一问题。(嗯,他也是一个化学家,作为物理学家,费曼和盖尔曼声称他有一个“关于物理学家的东西”等等。)

尽管经历了这一切,我命名为计算机数学公司的公司还是成立了。那时候,我仍然认为自己是一个年轻的学者,并没有想象到自己会知道如何经营一家公司。所以我请来了一位CEO,他的年龄刚好是我的两倍。在首席执行官和一些风险投资家的要求下,该公司安排与一家初创公司合并,而这家初创公司正在从事他们认为非常热门的人工智能研发。

与此同时,SMP开始打着“计算机数学”的旗号销售:

数学,计算机

有一些可怕的失误。首席执行官:“让我们构建一台工作站计算机来运行SMP”;我:“不,我们是一家软件公司,我已经看到这个斯坦福大学网络(SUN)系统将会比我们所能建立的任何系统都要好。”然后是被误导的广告公司制作的迷人广告:

为SMP制作的广告

很快我就觉得整件事太令人沮丧了。SMP仍然是一棵摇钱树,尽管这位首席执行官不擅长赚钱,但他擅长筹集资金,经历了令人眼花缭乱的数轮投资,直到多年后终于有了一次平淡无奇的IPO。

与此同时,我在做基础科学的时候度过了一段美好的时光,发现了为基础科学奠定基础的东西一种新的科学.事实上,SMP是我所做事情的一个重要的先驱。因为正是我在为SMP语言发明计算原语方面的成功,促使我思考为自然发明计算原语——并通过研究这些原语的结果来构建一门科学。

你可能会问SMP发生了什么。它一直被卖到之后的某个时候Mathematica被释放了。它的代码从来没有被用过Mathematica.但偶尔我也会启动它,只是想看看它“感觉”如何Mathematica.随着时间的推移,越来越难找到运行SMP的计算机。也许15年前,我们拥有的最后一台可以运行SMP的计算机停止了工作。

嗯,我想,我总是收到一份SMP源代码的个人拷贝,尽管我已经很久没有看它了。那么现在为什么不直接在现代系统上重新编译呢?但后来我想起来了:我有一个“很棒”的主意,我们应该对源代码进行加密。但关键是什么呢?我问了所有我能想到的人。但是没有人记得。

现在已经过去很多年了,我真的很想看到SMP再次运行。这是一个挑战。是加密的C程序的源代码,类似于SMP源代码。实际上,它是进行加密的程序的源代码:大约1981年的Unix crypt实用程序的一个版本,通过改变参数等“巧妙地”修改。有人能破解密码吗?最终将SMP从被锁了这么久的奇怪的数字时间保险箱中解放出来。(这是什么Wolfram | Alpha职业如果上传这个原始文件

Wolfram|Alpha Pro结果在C程序加密像SMP源

但是回到主要的故事。1983年,我停止了SMP的工作,开始在基础科学、软件项目和我的(极具教育意义的)“爱好”——做技术和战略咨询——之间交替。我用了一点SMP,但大部分时间我都在写大量的C代码,通常是把算法、图形和接口粘在一起。

科学我开始得很顺利,很明显有很多重要的事情要做。但我决定不全靠自己,而是让其他人参与进来。作为这个计划的一部分,我决定创办一个研究机构,并收到了来自不同大学的投标。伊利诺斯大学是获胜者,所以在1986年8月我去那里建立了复杂系统研究中心。

但在这一点上,我已经开始担心,我的“其他人做科学”的计划不是很好。在到达伊利诺斯州的短短几周内,我就想出了B计划:尽可能地建造最好的工具,创造最好的个人环境,然后尽我所能地做更多的科学研究。由于我对计算机行业很熟悉,我知道强大的软件系统很快就能在数量庞大的个人电脑上运行。所以我知道,如果我能做一些好的东西,就会有一个好的市场,这将支持一个有趣的公司和环境。

就在1986年8月底,我决定尝试建立我的终极计算系统,它可以完成我想要的所有计算,或者想象我想要的所有计算。

结果当然是Mathematica

从SMP和我的其他软件经验中,我知道了很多应该做什么(不应该做什么)。但是能够从零开始,在没有任何限制的情况下尝试着做出正确的设计是一件令人耳目一新的事情。在SMP中,代数计算一直是中心目标。但在Mathematica在美国,我也想涵盖许多其他领域——数字、图形、编程、界面等等。我想了很多关于这个系统的基础的问题,比如像元胞自动机我学过的基础科学可能是相关的。但我只是不断回到我已经为SMP开发的基本范式。它们的符号表达式和转换似乎完全适合作为一种高级的、但一般的计算表示。

如果不是因为SMP,我肯定会犯很多错误。但SMP基本上告诉了我什么是重要的,什么是不重要的,以及问题在哪里。今天浏览我的档案,我可以看到我从SMP中了解到的问题的苦思过程。然后一个接一个地提出解决方案。

同时,就像SMP一样,我已经组建了一个团队,并开始了实际的实现Mathematica.我还创办了一家公司,这次由我担任首席执行官。每天我都要写很多代码。(令我懊恼的是,相当多的代码仍然在运行Mathematica特别是在模式匹配器和求值器中。)但我最关注的是设计。按照我从SMP开始的实践,我在开发设计时编写文档。我想,如果我不能在文档中清楚地解释一些东西,就没有人会理解它,而且它可能设计得不对。一旦有了文件,我们就知道要实现什么,以及为什么要这样做。

第一个代码Mathematica写于1986年10月。到1987年年中Mathematica开始苏醒过来。我决定将文档作为一本书出版,并且已经写了几百页了。我估计Mathematica1.0将在1988年4月完成。

我对公司的最初计划是专注于研发和分销Mathematica主要是通过电脑制造商。史蒂夫•乔布斯是第一个去的吗Mathematica他与他尚未发布的每一台NeXT电脑达成了捆绑销售的协议。随后又与Sun、Silicon Graphics、IBM和其他一些公司达成了协议。我们开始发送一些测试版Mathematica.尽管这是在网络语言开始传播之前很久的事。一些媒体也开始报道(我仍然喜欢那种冰淇淋):

媒体报道

在1988年春天的某个时候,我们正式将6月23日定为发布日期Mathematica(没有Wolfram | Alpha我不知道它是阿兰·图灵的生日等)。有很多东西要准备。在那些日子里,发布软件不仅仅是扳动一个开关。就像我记得的那样,我们在最后一刻数学书打印出来。于是,我带着硬盘飞到加拿大,在一个漫长的周末里,我亲自照看了一台照相排字机,把它打印出来的胶卷交给了一个在波士顿机场接我的人,并把它送到了打印机那里。尽管如此,在6月23日前不久,我们收到了一些神秘的邮件邀请

1988启动派对邀请函

6月23日中午,房间里填满,我们已经准备好发射了Mathematica进入世界。

Mathematica v1.0盒子

从那时起,25年过去了。我们奠定的基础Mathematica1.0——从我早期的经验中得到了很大的启发——已经被证明是非常健壮的,我们已经能够在它们的基础上进行不断的构建。我的B计划Mathematica,然后用它来做科学,效果很好,并导致了一种新的科学.从Mathematica,我们已经能够建造一个伟大的公司,以及建造类似的东西Wolfram | Alpha.在过去的25年里,我们有幸看到Mathematica以各种方式为世界上的许多事情做出贡献。

附录:SMP教训

SMP是什么样的?下面是一些我为SMP的文档

为文档编写的SMP程序

为文档编写的SMP程序

为文档编写的SMP程序

为文档编写的SMP程序

为文档编写的SMP程序

为文档编写的SMP程序

为文档编写的SMP程序

为文档编写的SMP程序

在某些方面,这些看起来很相似Mathematicaprograms-complete与[...]的功能,{…}列表和->规则.但不知何故,可读性是它的标志Mathematica,相反,SMP程序似乎非常神秘和模糊。

最明显的问题之一是SMP代码杂乱无章字符——分别作为模式和局部变量的前缀出现。在SMP,我没有Mathematica分离模式构造(例如_)的名称(例如x).我认为强调哪些变量是局部的是很重要的,但没有一个微妙的线索,比如颜色。

在SMP中,我已经有了区分immediate(好的)的想法。)及延误(:=)任务。但为了向ALGOL这样的语言致敬,我用相当模糊的词来表示它们::(规则,->直接形式是这样的吗Mathematica,而-->类似于:>S[…]类似于/.

在SMP中,就像在Mathematica,我用大写字母表示内置函数(当时在计算机上区分大小写还是一件相当新鲜的事情)。但是,尽管Mathematica通常使用英文单词作为函数名,SMP使用简短且通常晦涩的缩写。当我在研究SMP时,我非常喜欢Unix的设计,并希望模拟其使用短函数名的做法。如果SMP只有几个功能,这可能是可以的。但是有上百个函数的名字是PsUspb事情开始变得相当难以理解。当然,当时还有另一个问题:许多用户不能快速输入——这就提供了使用短函数名的动机。

为文档编写的SMP程序

现在查看SMP文档很有趣。SMP有很多好点子,其中大部分我又用了一次Mathematica.但它也有一些相当糟糕的想法——令人高兴的是,这些想法不是它的一部分Mathematica.一个坏主意的例子是“变色龙符号”——一听到它就觉得很坏——这些符号只要被使用,就会改变名字。(这是一种本地化的尝试,比如虚拟变量,有点像过度自动化的形式模块)。

还有一些更微妙的错误。从某种意义上说,这是由于试图在统一系统方面走得太远。就像Mathematica, SMP有一个列表的概念,比如{a, b, c}.它还有一些功能,比如f (x).在我努力实现最大可能的统一时,我想也许可以把列表和功能的概念结合起来。

假设有一个列表v = {a, b, c}.(在SMP中,分配是用,所以这个应该被写出来v: {a, b, c})。然后以SMP为例v [2]将提取列表中的第二个元素。但是这个符号看起来很像求函数的值v当它的参数是2。这给了我一个想法,也许我们可以推广列表——不仅有整数索引的元素,还有具有任意符号索引的元素。

在SMP,模式变量间的Mathematica)写$ x.当定义一个函数时f ($ x): $ x ^ 2你可以想象这只是定义f本身具有一个符号索引列表的值:{($ x): $ x ^ 2}.如果您想知道函数是如何定义的,只需键入它的名称f.返回的值将是表示定义的符号索引列表。

普通的vector类型列表可以被认为是类似的{[1]: [2]: b, [3]: c}.我们可以把符号索引混在一起:{[1]: 1, [$x]:$x f[$x-1]}.在一般的符号表达中,部分编号也有一定的统一。在某种程度上,这一切似乎都很美好。为了描述函数和列表的统一概念,我叫ff (x)“投影”x“过滤器”。(有人开玩笑说,定义列表就是“光学长凳”。)

但裂缝开始逐渐出现。举个例子,当人们开始定义v [2]: b、v [3]: c.根据SMP的约定v就会有价值{[2], [3]: c: b}.但是如果我们定义v [1]:?好吧,那v突然不得不重新排序为{a, b, c}

当我们开始处理多参数函数时,情况就更奇怪了。定义一个矩阵是很好的m: {{a、b}, {c, d}},然后m [1]{a、b},要么m [1]m [1] [1]一个.但是如果一个函数有几个参数呢?将f (x, y)和…一样f [x] [y]?嗯,有时人们想要那样,有时不是。所以我必须想出一个属性(" attribute " inMathematica)——我叫-表示每个函数的工作方式。(今天,更多的人可能听说过“curry”这个词,但在当时,这种区别真的很模糊。)

SMP中的符号化索引列表具有一些非常强大和优雅的特性。但最终,当整个系统建立起来的时候,却出现了太多奇怪的事情。所以当我设计的时候Mathematica我决定不使用它们。这些年来,我一直在想他们。现在,SMP已经过去30多年了,我正在开发一些非常有趣的新功能Mathematica这与符号索引表密切相关。

我从smp的设计中学到了很多,然后观察设计是如何进行的。对我来说,一个特别难忘的时刻就是这个。就像Mathematica, SMP纯函数.但不像Mathematica,它没有类似的语法来表示它们。这就意味着它需要一个叫做“标记”的特殊物体)来指示纯函数何时应该给出一个文字、常量和值。嗯,大约在SMP发布5年后,我在看它的一份培训手册。我突然听到一句:“标记是SMP的谜”。在那一刻我意识到:这就是语言设计错误的样子。

SMP在很多方面都是一个非常激进的系统——一种编程语言设计的极端实验。它只勉强支持大多数当时很熟悉的编程构造。相反,它几乎所有的内容都围绕着符号表达式的转换规则。在某些方面,我认为SMP太过陌生了。因为在某种意义上,编程语言要做的就是将人类对计算的概念与计算机能够执行的实际计算联系起来。无论一种语言多么强大,如果人类没有足够的环境来理解它,它也不会有多大用处。这就是为什么Mathematica在美国,我总是尽可能让事物变得熟悉,把不熟悉的事物限制在真正需要的地方,以支持全新的事物。

设计一个系统的其中一件事就是知道什么最终会变得重要。在SMP中,我们花了很多精力在所谓的“语义模式匹配”上。假设有人做了这样的定义F [$x+$y, $x, $y]:= {$x, $y}.很明显这是匹配的f (a + b, a, b).但f(7、3、4)?在SMP,匹配——即使7在结构上不是这种形式x + y美元.这需要很多努力才能实现。在简单的例子中可以很好地看出。但最终,它并不是经常出现——当它出现时,通常是要避免的,因为它通常会让程序的操作变得很难理解。

递归控制也有类似之处。我觉得这样很不好F [$x]: $x没有结束条件f [1])进入一个无限循环试图计算f [1]f [2]等。因为毕竟,在某个点上要乘以0。为什么不直接给出0呢?在SMP中,默认值是0。因为SMP不会一直对递归树的每个分支求值,而是会反复停止并尝试简化所有未求值的分支。它既整洁又巧妙。但当人们开始参数化这种行为时,人们很难理解,最终没有人使用它。

然后还有用户定义的语法。例如,允许用户设置U(说,为…联盟)作为中缀运算符。这种方法非常有效,直到有人想要输入一个名称带有“U”的函数。或者直到一个人完全陷入自己的语法,转移了对任何形式的逃避的解析。

SMP对我来说是一次很好的学习经历。和Mathematica如果我没有先做SMP,就不会这么好。当我反思《SMP》中的“错误”时,有一件事让我非常满意,那就是我认为我今天不会犯这些错误。从SMP到25年Mathematica对我来说,大部分设计问题都属于“简单问题”的范畴。

有趣的是,SMP中经常会出现一些不太好的想法。事实上,我很好奇我的现代设计感,如果我现在运行SMP,我会对它们有什么感觉。这也是我渴望将SMP从它的“数字时间安全,然后得到它再次运行.我希望有人能帮我实现。

9日评论

  1. 作为一个语言极客,我要向你致敬。我正在设计自己的语言,统一函数和lua风格的*哈希表*(性能上可以同时作为列表),它没有统一函数和列表的相同问题,因为顺序是在查询点通过扫描整数索引确定的。其结果基本上是面向函数编程的功夫大师语言,在很大程度上得益于从Mathematica和APL语言中窃取的大量设计/函数。(我的语言的模块系统特别有趣,不知道你会怎么想)

    不管怎样,长话短说,作为一个语言极客,Mathematica的设计确实是天才,比我遇到的任何其他语言都高出一个等级。很长一段时间我都在想为什么Mathematica语言这么好。不是* *的语言为什么是好的,但它是如何可能存在这样一种语言,因为它显然需要一个“开明的worldline”不仅使类似的c风格的语言,但坚持设计通过各种各样的问题,很多其他的人/公司将决定站在错误的一边

    amr
  2. 关于“:=”vs“=”的讨论让我想起了f[x_]:=f[x]=TediousFunction[x]的“memoization”构造,其中TediousFunction[x]是一个复杂的函数,它的评估挑战了主机的资源(这在20世纪90年代很常见)。可以说,这是我最喜欢的Mathematica特性之一。

    MM托马斯
  3. 好故事-谢谢分享!

  4. 谢谢你写了一篇很有趣的文章。当我走到最后的时候,我发现自己在想,在过去的25年里,有哪些潜在的进步是我们没有看到的。毕竟,这几乎和SAINT和Mathematica之间的时间一样长。

    “Circa-1981 Unix crypt”可能是一台256转子的英格玛机。已知的弱点,但更多的细节会有用。

    大卫·戴维斯
  5. 除了……
    这篇文章中说,Crypt用于加密源代码的版本在某种程度上被“修改”了。看看提供的文件,我可以在网上找到的Crypt源代码和这里提供的版本在大小上有更大的差异。原始Crypt = 1,528字节,而SMP Crypt版本为8,313字节。

    我使用的Crypt的参考版本是在这里找到的:
    http://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/crypt.c

    大小上的巨大差异表明,不仅仅是微不足道的修改。

    同样,在Crypt.h文件中,有以下几行:
    #定义PASSNO 8
    #定义PASSLEN 13
    Crypt强制使用13个字符的密钥,这可能就是PASSLEN正在做的,但我在Crypt的在线源代码中找不到PASSNO的参考。我的猜测是,对SMP Crypt所做的修改之一是通过编码器多次“循环”加密文本。为了保持整洁,我认为这是在一个字符一个字符的基础上完成的,而不是使用整个编码的明文。这只是Crypt SMP版本可能的修改之一,它将使Crypt的在线“裂缝”的价值值得怀疑。

    谢谢你!

    乔尔·m .侍从
  6. 感谢你的大脑之旅,从你的角度回顾过去,并想知道为什么你不冒险进入分形,3D动画模型,和其他引人注目的基于数学的分心……所以我非常喜欢这篇文章,再次感谢。

  7. 为了恢复您的加密版本的SMP,我建议您创建一个竞赛,并提供一个值得您付出努力来接受这个挑战的奖品。
    向业余和专业的加密社区推广它。
    奖品可能包括Wolfram产品、订阅、甚至是与Wolfram博士相处的机会,或者一个孩子或一群孩子参加夏令营的机会。这些类型的激励可能会吸引这些群体,并在媒体上吸引公众对任务的关注,从而使解密工作得以完成,同时惠及所有相关方。

  8. 精彩的故事!很高兴听到克里斯·科尔的名字,他是我大一时的(优秀的)物理助教。此外,我的博士工作中广泛使用SMP,我的论文有一个附录,有很多页的SMP代码。

    谢谢你带给我这些回忆!

    延斯
  9. 乔布斯对赢家很有眼光。对wolfram发布的SMP C代码和文档的调查让我更想知道该语言是如何发展到现在这样可用的。多年来,我自己制作了一些语言。很久以前,在大学里,我读了一两次mm的书后,就把“做一个更好的”的想法放在一边:我把它放在一边,因为它已经做得很好了,不需要重做。

    那将是一种耻辱,如果“新群”(wr雇员)变化,阻止老共享笔记本工作(即毫米版本2)。比较和对比提供免费的语言不能用一个小版本后的程序希望长寿,而且往往出于错误的原因。

    这是我对mm笔记本和共享者唯一的希望,他们能体验WR长期以来关于兼容性、扩展和笔记本的声明(就像我到目前为止所做的那样)。我只是提醒新员工,他们会带着产品离开,留下一个复杂的升级链和无法共享的笔记本:除非能找到一种方法来确保它不会发生,除了书印刷:我百分之百肯定它会。谢谢,节日快乐!

Baidu