当前位置: 首页 > 科技观察

这美妙的语言,代码写出来后,连作者自己都看不懂!

时间:2023-03-22 10:14:12 科技观察

周末的HelloWorldCafe还是很热闹的,Java、Python、Lisp一行人坐在一起谈笑风生。这时,Java注意到门口有一个脸色阴沉的老人,在咖啡馆门口徘徊,好像不愿意进来。Java上前询问,老人说他叫Forth,他被主人设计成奇形怪状的样子。现在愿意使用它的程序员并不多。他们失去了过去的丰厚收入,只能流落街头。Lisp笑道:“你是什么来的?”老人说:“坐电动车。”“我们都开奔驰,开劳斯莱斯,你开电动车!你开电动车,你好世界咖啡厅都不让你进!”Java请老者入座:“别听Lisp胡说八道,告诉我,你被设计成了什么奇怪的样子?”Forth说:“我被设计成一种基于堆栈的编程语言,你看,你看,例如,如果你想计算3+4.,你必须这样做......”Forth说着拿出了一些他口袋里的漫画。(第一步:将数字3入栈)(第二步:将数字4入栈)(第三步:从栈中取出4和3,执行3+4,将结果7入栈)(Step4:从栈中取出数字7并显示在屏幕上)(图片来源:https://www.forth.com/starting-forth/1-forth-stacks-dictionary/)Java很开心乍一看:“哈哈,漫画不错,这不和我的Java一样吗?我也是基于栈的虚拟机,不信你看coder的文章《我是一个Java Class》翻过来介绍我。”Python也乐了:“是的,我也是基于Stack的虚拟机,我们的工作方式是一样的。”Forth狐疑地问道:“是这样吗?你也一样吗?还有很多程序员雇用你吗?我看你性格开朗,衣着光鲜亮丽,开着豪车,工资也不低吧?”“中等,算不上大富大贵,顶多是小康。既然我们差不多,你干嘛这么落魄!”爪哇问道。“哎,我的编程语法还没告诉你呢,比如你要计算(3+4)*5,程序员要写:”34+5*Java和Python很奇怪:“难道“今天你遇到了吗?传说中的后缀表达式?这种写法对程序员来说太折腾了。”只见Lisp撇撇嘴:“小样本,这个崩了,比我的前缀表达式(*(+34)5)差远了”Java淡定:“那你怎么定义一个函数?比如这个计算平方的函数”publicintsquare(intx){returnx*x;}Forth说:“我这里不叫它函数,它叫Word,一个程序成员需要这样定义它。”:SQUAREDUP*;(注:冒号表示定义的开始,分号表示定义的结束)Java看到熟悉的DUP说:“你这里也有DUP,我的字节码指令也用到了,它复制了最前面的元素堆栈,然后将其压入堆栈,但是为什么这里没有参数?”》你忘了这么快,我是基于栈的编程语言,参数会放在栈中,比如你要计算10的平方,需要这样调用:10SQUARE,展开后相当于10DUP*”10先入栈,DUP会复制栈顶元素,然后入栈.这样栈里就有两个数,都是10,最后调用乘法。Java微微一惊,Forth说:“这没什么,你看看我的IF语句。”:?Negative0