摘要:狀態(tài)目前語言處于設(shè)計階段,很多設(shè)計上的決定已經(jīng)做了,很多還沒做。如果你希望學(xué)習(xí)如何設(shè)計和實現(xiàn)一門語言,那么語言值得一看。以后,語言將能夠解釋自己,從而能使用自身實現(xiàn)編譯器,也就是自舉。
Yin 希望能讓程序員自然而然地表達(dá)他們的想法,它嘗試解決如下問題:
大多數(shù)語言沒能吸取歷史教訓(xùn)
大多數(shù)語言受到宗教性的推崇,擁有一個過于狂熱的社區(qū),因此難以改正自己的錯誤
有些語言為程序員做得太少,有些語言為程序員做得太多
有些語言提供了太少的抽象,有些語言提供了太多的抽象
有些語言太不顧及可用性,游戲語言過于重視可用性而忽視了可用性之外的東西
有些語言從數(shù)學(xué)和邏輯那里學(xué)得太少,有些語言學(xué)得太多
有些語言太不顧及類型,有些語言對類型考慮過多
解決這些問題需要很多程序員的經(jīng)驗。因此 Yin 歡迎程序員貢獻(xiàn)經(jīng)驗和觀點,以便做出最好的決策。
狀態(tài)目前 Yin 語言處于設(shè)計階段,很多設(shè)計上的決定已經(jīng)做了,很多還沒做。如果你希望學(xué)習(xí)如何設(shè)計和實現(xiàn)一門語言,那么 Yin 語言值得一看。
已實現(xiàn)的特性基本類型(整型、浮點、數(shù)組、記錄)
基本操作符(算術(shù))
作為一等公民的函數(shù)(閉包)
類型系統(tǒng)(不完整,union type)
已實現(xiàn)的工具解析器
解釋器
類型檢測
等待實現(xiàn)測試框架
編譯器
運(yùn)行時環(huán)境
示例 數(shù)組[1 2 3 4 5]表達(dá)式
(* (+ 2 3) 4)
yin 語言采用了 lisp 所使用的基于 S 表達(dá)式的語法,這是因為作者認(rèn)為 lisp 的基于 S 表達(dá)式的語法是最簡單、最好看的語法:
避免“歧義”,無需記憶運(yùn)算符優(yōu)先級
基本算術(shù)操作和函數(shù)調(diào)用在語法上達(dá)成完美統(tǒng)一
前綴表達(dá)式和括號,更容易對齊,因而更美觀
類型系統(tǒng)(define fact (fun ([x Int] [-> Int]) (if (= x 0) 1 (* x (fact (- x 1)))))) (fact 5) -- 120
-- 表示注釋。
if 同樣是函數(shù),第一個參數(shù)是條件,第二個參數(shù)是條件成立時的表達(dá)式,第三個參數(shù)是條件不成立時的表達(dá)式。
函數(shù)采用如下格式:
(fun ([x 輸入類型] [-> 輸出類型]) 函數(shù)體)
使用 define 綁定函數(shù)的名字。
交替遞歸判斷奇偶性的函數(shù):
(define even (fun ([x Int] [-> Bool]) (if (= x 0) true (if (= x 1) false (odd (- x 1)))))) (define odd (fun ([x Int] [-> Bool]) (if (= x 0) false (if (= x 1) true (even (- x 1)))))) (even 10) -- true (even 11) -- false (odd 10) -- false (odd 11) -- true實現(xiàn)
Yin 最初使用 Typed Racket 實現(xiàn),然而由于 Racket 系統(tǒng)報錯信息的不精確,造成比較低的開發(fā)效率,因此后來換成了 Java。得益于簡單的語法設(shè)計,Yin 的具有精確報錯定位能力的解析器,實現(xiàn)只花了 2 小時,500 行 Java,且不依賴 Lex、Yacc 類工具。以后,Yin 語言將能夠解釋自己,從而能使用自身實現(xiàn)編譯器,也就是自舉。
許可Yin 語言是開源的,使用 AGPLv3 許可。
相關(guān)鏈接GitHub主頁
Google groups 討論組
Yin 語言的緣起
原文 The Yin Programming Language
編譯 SegmentFault
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/64086.html
摘要:興趣最后該說說的就是興趣問題如果你能對它真正感興趣如果要從事軟件開發(fā)又沒興趣的話趕緊先培養(yǎng)興趣去對看技術(shù)資料就想別人看武俠小說看球賽一樣的話再配合上面提到的幾點踏實先專后廣基礎(chǔ)扎實相信在這一行多少是可以做點東西出來的 踏實 偶然在網(wǎng)上看到《由C#風(fēng)潮想起的-給初學(xué)編程者的忠告》一文. 其中一個角度:避免浮躁,倡導(dǎo)踏實的學(xué)習(xí)方法,我是很認(rèn)同的,但總覺該文作者標(biāo)題-給初學(xué)編程者的忠...
摘要:這里推薦一本書源碼剖析源碼剖析豆瓣這本書把源碼中最核心的部分,給出了詳細(xì)的闡釋,不過閱讀此書需要對語言內(nèi)存模型和指針有著很好的理解。 是否非常想學(xué)好 Python,一方面被瑣事糾纏,一直沒能動手,另一方面,擔(dān)心學(xué)習(xí)成本太高,心里默默敲著退堂鼓? 幸運(yùn)的是,Python 是一門初學(xué)者友好的編程語言,想要完全掌握它,你不必花上太多的時間和精力。 Python 的設(shè)計哲學(xué)之一就是...
摘要:閱讀小札一閱讀前自大學(xué)課上,就開始接觸設(shè)計模式,但對設(shè)計模式卻鮮有研究與實踐。第二部分是核心部分,由淺到深講解個設(shè)計模式。設(shè)計模式遵循的原則所有設(shè)計模式罪訓(xùn)的一條原則就是找出程序中變化的地方,并將變化封裝起來。 閱讀小札 · 閱讀前 自大學(xué)Java課上,就開始接觸設(shè)計模式,但對設(shè)計模式卻鮮有研究與實踐。最近向公司反映和游說技術(shù)提升,得以獲得公司提供購書機(jī)會,借此認(rèn)真學(xué)習(xí)前端學(xué)習(xí)之路的...
摘要:我從沒有聽到有人問如何做一名優(yōu)秀甚至卓越的前端工程師。作為一個優(yōu)秀的前端工程師還需要深入了解以及學(xué)會處理的這些缺陷。再者,優(yōu)秀的前端工程師需要具備良好的溝通能力,因為前端工程師至少都要滿足四類客戶的需求。 我所遇到的前端程序員分兩種: 第一種一直在問:如何學(xué)習(xí)前端? 第二種總說:前端很簡單,就那么一點東西。 我從沒有聽到有人問:如何做一名優(yōu)秀、甚至卓越的WEB前端工程師...
閱讀 2835·2023-04-25 17:59
閱讀 676·2023-04-25 15:05
閱讀 669·2021-11-25 09:43
閱讀 3026·2021-10-12 10:13
閱讀 3532·2021-09-27 13:59
閱讀 3577·2021-09-23 11:21
閱讀 3872·2021-09-08 09:35
閱讀 561·2019-08-29 17:12