用這個奇葩的語言來面試,絕對會斃掉90%的人......
先給大家看一幅圖
這是什么鬼?這些層層疊疊、奇奇怪怪的文件夾是干嘛的?
我如果告訴你它實際上是一個程序,你相信嗎?
它還真是一段程序, 相當(dāng)于Python代碼:
- print('h')
這段代碼使用一種叫做Folder的編程語言寫成,也就是說,完全用“文件夾”實現(xiàn)代碼!
這些文件夾只要保證一定的次序,每個文件夾中有一定數(shù)量的子文件夾,它就是程序了! 根本不關(guān)心文件夾下有什么內(nèi)容。
文件夾的名稱根本不重要,所以我們可以把上面的轉(zhuǎn)化成這樣一幅圖:
還是沒有感覺?我用文件夾語言的語法來拆解一下。
這個文件夾表示一個程序的開始,我們暫時把它稱為root
但是這個程序要做什么事情?
我們得看看root的第一個子目錄下有多少個目錄
根據(jù)print語法的規(guī)定,它后面要跟一個表達式,在root的第二個子目錄中描述:
expr的第一個子目錄是這樣的:
那這個“字面量”的類型到底是字符,數(shù)字,還是字符串呢?
根據(jù)文件夾編程語言的語法,需要看expr的第二個子目錄:
那這個字符的值具體是什么呢?需要看expr的第三個子目錄
最后再簡化一下:
稍微學(xué)過一點兒編譯原理知識的同學(xué),估計早就明白了,這不就是一顆抽象語法樹(AST)嗎?
有了AST,我就可以寫個程序,解釋執(zhí)行它了。
針對這個AST,它就是 print('h')。
真相大白,這個所謂的文件夾編程語言就是把代碼編碼到了文件夾當(dāng)中!
用文件夾之間的次序關(guān)系,和文件夾中的子文件夾的數(shù)量來表示信息。
當(dāng)然, 這是一種非常繁瑣的編程語言,如果要寫個Hello World是這個樣子的:
這個Hello World 需要208個文件夾!
你要是用這種方式編程,肯定會發(fā)瘋的。
如果用Folder來做白板編程面試,估計一個Hello World就能斃掉90%的人吧圖片
不過“文件夾編程語言”的作者Daniel Temkin“炫耀”說,雖然文件夾很多,但是卻有一個好處:不占用空間!
當(dāng)然這是不可能的,文件夾的元數(shù)據(jù)肯定是要占據(jù)硬盤空間的。
這樣的編程語言有實際的用處嗎?
恐怕是沒有吧!
但是,它應(yīng)了Linus Tovarlds那句話:Just for Fun 。
自己找點兒樂子,然后從中學(xué)習(xí)一點編譯的知識,這就夠了。
Reddit有個網(wǎng)友評論說,他是一個學(xué)校高性能計算機中心的管理員, 學(xué)生想存儲數(shù)據(jù)的話可以使用免費空間, 超過配額就需要付費。
其中有個學(xué)生想了一個天才的想法,他把要存儲的數(shù)據(jù),編碼成了數(shù)十億個空文件,這樣一分錢都沒有花!因為metadata并不計費。
但是這個計算中新的metadata服務(wù)器就掛掉了,任何人都沒法用高性能計算機了......
這個故事和Folder編程語言有異曲同工之妙。
文件夾編程語言再次提醒我們,我們看到的Python, Java源代碼不過是一種編碼形式,你完全可以用其他編碼形式來存儲信息,例如文件夾,空文件。
所以,發(fā)揮你的想象力,盡情地去找樂子吧 。
Folder語言的具體語法可以到這里查看:
https://esolangs.org/wiki/Folders
代碼在GitHub:
https://github.com/rottytooth/Folders
Python版本不到500行。