成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

這個(gè)奇葩的語(yǔ)言,代碼寫(xiě)完后連作者自己都看不懂了!

開(kāi)發(fā) 架構(gòu)
周末的Hello World咖啡館依然熱鬧非凡,Java,Python,Lisp等一伙人坐在一起談笑風(fēng)生。這時(shí)候Java注意到門(mén)口來(lái)了一個(gè)面色陰郁的老頭兒,在咖啡館門(mén)口徘徊著,似乎不愿意進(jìn)來(lái)。

 周末的Hello World咖啡館依然熱鬧非凡,Java,Python,Lisp等一伙人坐在一起談笑風(fēng)生。這時(shí)候Java注意到門(mén)口來(lái)了一個(gè)面色陰郁的老頭兒,在咖啡館門(mén)口徘徊著,似乎不愿意進(jìn)來(lái)。

[[280057]]

Java上去詢問(wèn), 老頭兒說(shuō)他叫Forth,被主人設(shè)計(jì)成了一幅古怪的模樣,現(xiàn)在沒(méi)有多少程序員愿意用了,失去了往日豐厚的收入,只有流落街頭。

Lisp笑道:“你坐什么來(lái)的?”

老頭兒說(shuō):“騎電動(dòng)車。”

“我們坐的都是奔馳、勞斯萊斯,你騎電動(dòng)車!你騎電動(dòng)車Hello World咖啡館都不讓你進(jìn)來(lái)啊!”

Java邀請(qǐng)老頭兒入座:“別聽(tīng)Lisp胡扯,你說(shuō)說(shuō),你被設(shè)計(jì)成了什么古怪模樣?”

Forth 說(shuō):“我被設(shè)計(jì)成了一個(gè)基于棧的編程語(yǔ)言,你看看,比如你要計(jì)算 3 + 4 . ,得這么來(lái)......”

Forth說(shuō)著從懷里掏出了幾張漫畫(huà)。

[[280058]]

 

(第一步:把數(shù)字3入棧)

[[280059]]

 

(第二步:把數(shù)字4入棧)

[[280060]]

[[280061]]

 

(第三步:從棧中取出4和3, 執(zhí)行3+4, 把結(jié)果7 入棧)

[[280062]]

 

(第四步:從棧中取出數(shù)字7, 在屏幕上顯示)

(圖片來(lái)源:https://www.forth.com/starting-forth/1-forth-stacks-dictionary/)

Java 一看就樂(lè)了:“哈哈,漫畫(huà)不錯(cuò)啊,這不和我Java是一樣的嗎?我也是基于棧的虛擬機(jī)啊。不信你看看碼農(nóng)翻身介紹我的文章《我是一個(gè)Java Class》。”

Python也樂(lè)了:“沒(méi)錯(cuò),我也是基于棧的虛擬機(jī),咱們的工作方式是一樣的。”

Forth疑惑的問(wèn)道:“是嗎?難道你們也是如此? 是不是還有很多程序員在雇傭你們啊?我看你們樂(lè)呵呵的,穿著光鮮亮麗,開(kāi)豪車,工資不低吧?”

“一般一般,富裕談不上,最多是個(gè)小康。既然咱們差不多,你怎么這么落魄啊!” Java問(wèn)道。

“唉,我還沒(méi)有給你說(shuō)我的編程語(yǔ)法呢, 比如你要計(jì)算(3+4)* 5 ,程序員得這么寫(xiě):”

3 4 + 5 *

Java和Python都大吃一驚:“難道今天遇到傳說(shuō)中的后綴表達(dá)法了? 這種寫(xiě)法可就太讓程序員崩潰了。”

只見(jiàn)Lisp撇撇嘴:“小樣,這就崩潰了,比我的前綴表達(dá)式差遠(yuǎn)了 (* (+ 3 4) 5 ) ”

Java不動(dòng)聲色:“那你如何定義一個(gè)函數(shù)呢?比如這個(gè)計(jì)算平方的函數(shù) ”

  1. public int square(int x){      
  2.     return x * x;  
  3. }  

Forth說(shuō):“在我這里不叫函數(shù),叫Word, 程序員需要這么定義。”

  1. : SQUARE DUP * ; 

(注:冒號(hào)表示開(kāi)始定義,分號(hào)表示結(jié)束定義)

Java看到了熟悉的DUP,說(shuō)到:“你這里也有DUP啊,我的字節(jié)碼指令也用到了,它是把棧頂?shù)脑貜?fù)制一份,再壓入棧中, 但是你這里怎么沒(méi)有參數(shù)啊?”

“你這么快就忘了,我是一個(gè)基于棧的編程語(yǔ)言啊,參數(shù)會(huì)被放到棧中啊, 比如你想計(jì)算10的平方,需要這么調(diào)用:10 SQUARE, 展開(kāi)后就相當(dāng)于 10 DUP *”

10 先被壓入棧中,DUP會(huì)把棧頂?shù)脑貜?fù)制一份,再壓入棧中。這樣棧中就有兩個(gè)數(shù)字了,都是10 , 最后再調(diào)用乘法。

 

看到Java略有驚訝,F(xiàn)orth說(shuō):“這還不算什么, 你看看我的IF語(yǔ)句。”

: ?Negative 0 < IF ." less than 0" THEN ;

這是測(cè)試一個(gè)數(shù)字是不是小于0

-3 ?Negative 會(huì)輸出 less than 0。

 

Java忍不住說(shuō)到:“我去,有點(diǎn)變態(tài)啊,我的腦子中得時(shí)刻想著有一個(gè)棧,所有的操作都是基于這個(gè)棧的!”

Forth有點(diǎn)驚訝:“你不是說(shuō)你是基于棧的虛擬機(jī)嗎?怎么?和我不一樣嗎?”

“我們的虛擬機(jī)確實(shí)是基于棧的,但是我們的語(yǔ)法可是正常的語(yǔ)法啊 !程序員寫(xiě)的時(shí)候,用的是最熟悉的中綴表達(dá)式。”

( 3 + 4 ) * 5 ;

“還有函數(shù)調(diào)用,也是符合直覺(jué)的,編譯成字節(jié)碼以后,才會(huì)在基于棧的虛擬機(jī)上執(zhí)行,有很多不求甚解的程序員都不知道我是基于棧的虛擬機(jī)!”

  1. square(30);  
  2. is_negative(-3); 

Python向Forth投去了同情的目光:“你的主人是怎么想的?讓程序員在編程的時(shí)候,時(shí)刻記住有個(gè)棧的存在,多累人啊!”

“我主人說(shuō)了,基于棧的編程語(yǔ)言非常容易實(shí)現(xiàn),所以非常適合那些內(nèi)存很小/計(jì)算能力受限的計(jì)算機(jī),對(duì)了,你知道打印機(jī)所使用的PostScript嗎?它也是基于一個(gè)基于堆棧的編程語(yǔ)言。”

大家都表示對(duì)PostScript不熟。

Forth說(shuō):“我舉個(gè)更簡(jiǎn)單的例子,比如表達(dá)式計(jì)算吧,如果用你的中綴表達(dá)式 (3+4)* 5 ,你在實(shí)現(xiàn)的時(shí)候得先做詞法分析,然后做語(yǔ)法分析,形成抽象語(yǔ)法樹(shù),必須考慮優(yōu)先級(jí)問(wèn)題。”

 

Java說(shuō):“難道不應(yīng)該這樣嗎?形成抽象語(yǔ)法樹(shù)(AST)是個(gè)通用操作啊。”

Lisp馬上插嘴:“AST大法好,你看我的前綴表達(dá)式,天然就是抽象語(yǔ)法樹(shù)啊, (* (+ 3 4) 5 ) , 我的代碼和數(shù)據(jù)的表示方式是一樣的,代碼可以被當(dāng)作數(shù)據(jù)來(lái)修改...... 算了,說(shuō)了你們也聽(tīng)不懂。”

Forth說(shuō):“我就不用這樣,你看用后綴表達(dá)式,再加上棧,可以直接計(jì)算,多方便。”

 

Java感嘆道:“編譯的過(guò)程包括詞法分析,語(yǔ)法分析,語(yǔ)義分析。我看你的程序甚至不用做語(yǔ)法分析,只要做一個(gè)詞法分析,也就是分詞,然后就可以直接計(jì)算了!”

“是啊,我的語(yǔ)法非常簡(jiǎn)單,或者說(shuō)幾乎沒(méi)有什么語(yǔ)法,我的主人說(shuō)我可能是世界上最簡(jiǎn)單的語(yǔ)言了!”

Java 問(wèn)道:“既然你這么簡(jiǎn)單,怎么沒(méi)有流行起來(lái)啊?”

“這個(gè)......其實(shí)也不能算簡(jiǎn)單,無(wú)論是編寫(xiě)程序還是閱讀程序,腦子中時(shí)刻得想著那個(gè)棧,對(duì)程序員自身的思維水平要求太高,一般人是受不了的, 有人笑話我是一個(gè)write-only的語(yǔ)言,寫(xiě)完以后連作者自己都讀不懂了。”

這幾個(gè)人都笑了起來(lái)。只有Lisp在撇嘴:這還要求高,你還沒(méi)見(jiàn)過(guò)我的宏......

Forth 喝了一杯咖啡,顫巍巍地站起來(lái),騎上門(mén)口的自行車,一溜煙地離開(kāi)了。Java 注視著他的背影,心中感慨,這個(gè)Forth是一個(gè)老兵,他和Lisp一樣,那種“古怪”的表達(dá)方式對(duì)廣大程序員來(lái)說(shuō)都不太友好,想流行起來(lái)很難啊。編程語(yǔ)言就是這樣,沒(méi)有完美的東西,有所得必有所失啊。

 

責(zé)任編輯:武曉燕 來(lái)源: 51CTO專欄
相關(guān)推薦

2013-07-08 10:49:03

程序員代碼看懂代碼

2022-07-26 14:38:08

JavaScriptWeb安全自動(dòng)化

2022-06-16 14:07:26

Java代碼代碼review

2020-03-30 16:45:06

代碼寫(xiě)看不懂

2022-02-07 09:05:00

GitHub功能AI

2019-12-09 08:29:26

Netty架構(gòu)系統(tǒng)

2021-12-09 11:59:49

JavaScript前端提案

2020-03-06 11:30:08

JavaGitHub編程

2022-12-12 07:40:36

服務(wù)器項(xiàng)目Serverless

2025-04-27 09:19:20

代碼GitHubAI

2023-06-30 08:01:04

Reactuse關(guān)鍵詞

2023-01-02 17:22:45

英文版動(dòng)機(jī)程序員

2024-12-09 08:00:00

C++代碼

2014-03-12 09:25:33

產(chǎn)品經(jīng)理Startup

2017-09-19 15:45:39

2021-02-23 10:36:09

Linux命令kmdr

2019-11-18 14:45:13

代碼開(kāi)發(fā)工具

2020-11-06 08:36:04

UI設(shè)計(jì)規(guī)范iOS

2020-09-21 13:06:58

TikTok網(wǎng)絡(luò)安全隱私

2017-06-16 09:22:22

數(shù)據(jù)結(jié)構(gòu)算法鏈表
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲免费高清 | 久草福利 | 伊人免费观看视频 | 欧美一级一 | 一区福利视频 | 久久久久亚洲av毛片大全 | 天天干人人| 亚洲成人av| www.国产精 | 国产不卡在线播放 | 国产日韩精品视频 | 伊人在线 | caoporn国产| 国产精品久久久久久久久久久久午夜片 | 国产精品视频免费观看 | 国产精品国产三级国产aⅴ入口 | 亚洲小视频在线播放 | 亚洲国产精品成人无久久精品 | 欧美黄在线观看 | 日韩综合一区 | 一区二区三区四区在线视频 | 亚洲一页| 一本一道久久a久久精品综合 | 91资源在线 | 久久国产综合 | 剑来高清在线观看 | 精品一区久久 | 精品视频一区二区 | 国产午夜精品视频 | 欧美在线a| 羞羞涩涩在线观看 | 日韩成人免费av | 免费观看的av毛片的网站 | 国产一区二区三区久久久久久久久 | 亚洲精品2区 | 日韩高清国产一区在线 | 一区二区三区四区在线 | 亚洲综合在线播放 | 欧美另类视频在线 | 国产精品久久久久久久久久妞妞 | 日韩av啪啪网站大全免费观看 |