大家好,我是 nature 編程語言的作者,自 2021 年第一次提交以來,一直到今天 nature 編程語言達(dá)到了早期可用版本。
隨著 0.5 版本的發(fā)布,nature 編程語言最初的設(shè)計(jì)目標(biāo)已經(jīng)完成,語法 API 基本穩(wěn)定,在 1.0 版本之前不會有大幅的變化。
當(dāng)前版本 nature 源碼支持編譯的目標(biāo)平臺有:
linux/amd64
linux/arm64
darwin/amd64
darwin/arm64
nature 包含一組測試用例及標(biāo)準(zhǔn)庫用來測試基本功能和語法的可用性,包含一組小型項(xiàng)目測試整體可用性,還未經(jīng)過中大型的項(xiàng)目測試。
后續(xù)的核心工作是提升 nature 編程語言的可用性,包括標(biāo)準(zhǔn)庫完善、性能優(yōu)化、收集用戶反饋以及 bug 修復(fù)。
nature 是通用開源編程語言與編譯器,期望為開發(fā)者提供簡潔優(yōu)雅的開發(fā)體驗(yàn),能夠簡單高效構(gòu)建出安全可靠的跨平臺軟件。
特性
? 簡潔、自然、一致性的語法設(shè)計(jì),即使編程初學(xué)者也能夠輕松掌握,快速上手
? 不依賴 llvm 和虛擬機(jī),直接編譯為目標(biāo)平臺機(jī)器碼,并支持交叉編譯
? 部署簡單,基于 musl libc 進(jìn)行純靜態(tài)鏈接,無額外依賴,具備良好的跨平臺特性
? 完善的類型系統(tǒng),支持泛型、聯(lián)合類型、接口、空值安全等
? 和 go 一樣的高性能 GC 實(shí)現(xiàn),具有非常短暫的 STW (Stop The World)
? 和 go 一樣的高性能內(nèi)存分配器實(shí)現(xiàn),類似 google/tcmalloc
? 高性能共享?xiàng)f(xié)程實(shí)現(xiàn),每秒能夠進(jìn)行數(shù)百萬次的協(xié)程切換
? 內(nèi)置 libuv 與協(xié)程協(xié)作處理 IO 事件循環(huán)
? 基于純 C 實(shí)現(xiàn)的高性能 runtime 和編譯器
? 模塊化與包管理系統(tǒng) npkg
? 內(nèi)置常用數(shù)據(jù)結(jié)構(gòu)和簡潔的標(biāo)準(zhǔn)庫 API 實(shí)現(xiàn)
? 使用 try+catch 進(jìn)行錯誤處理,match 進(jìn)行模式匹配、channel 進(jìn)行協(xié)程通信、select 進(jìn)行并發(fā)處理
? 遵循系統(tǒng) ABI,內(nèi)置 c 語言標(biāo)準(zhǔn)庫,可以直接調(diào)用 C 語言標(biāo)準(zhǔn)庫函數(shù)加速代碼開發(fā)
? 編輯器 lsp 支持
○ 高性能內(nèi)存管理方式協(xié)助自動 GC
○ 測試 DSL,希望能夠高效穩(wěn)定利用 AI 編碼
○ macho 跨平臺連接器(目前缺少 macho 鏈接器導(dǎo)致 darwin 平臺無法進(jìn)行交叉編譯)
○ 協(xié)作式調(diào)度系統(tǒng)完善
○ 跨平臺編譯支持 wasm、risc64 平臺
○ 編譯為可讀的 go 編程語言
為什么要實(shí)現(xiàn)這樣一個編程語言?
golang 是我日常工作使用的編程語言,我一次使用 golang 時就被其所驚艷,語法簡單,編程思想簡潔自由,非常便利的進(jìn)行交叉編譯以及部署,擁有非常優(yōu)秀且高性能的 runtime 實(shí)現(xiàn),擁有先進(jìn)的基于 goroutine 的并發(fā)風(fēng)格設(shè)計(jì)等等。
但是 golang 也有一些不方便的地方
語法過于簡潔導(dǎo)致表達(dá)能力不足
類型系統(tǒng)不夠完善
錯誤處理機(jī)制繁瑣
自動 GC 和搶占式調(diào)度的設(shè)計(jì)雖然非常優(yōu)秀,但是也讓 go 的應(yīng)用范圍受限。
包管理方式
interface{}
nature 在設(shè)計(jì)理念上是對 go 編程語言的延續(xù)與改進(jìn),并追尋一定的差異性。
在改善上述問題的同時,nature 擁有和 go 類似但更簡潔的 runtime 、GMP 模型、allocator 、collector 、coroutine 、channel 、std 等等。并且 nature 同樣不依賴 llvm ,有著高效的編譯速度,方便的交叉編譯與部署等,
基于 nature 編程語言已實(shí)現(xiàn)的特性,其適用于游戲引擎和游戲開發(fā)、科學(xué)計(jì)算和 AI 、操作系統(tǒng)和物聯(lián)網(wǎng)、命令行、以及 Web 開發(fā)等領(lǐng)域。
當(dāng) nature 完成所有特性及優(yōu)化時,預(yù)計(jì) nature 可以在任何場景替代 golang 進(jìn)行開發(fā)(轉(zhuǎn)換為可讀 golang 代碼,以最低的試錯成本的使用 nature ,并可以隨時切換回 golang)。并且作為通用編程語言 nature 可以和任何的同類型編程語言進(jìn)行競爭。[注意這還未完成]
兩年前 nature 編程語言還不能使用,但我依舊在 V2EX 進(jìn)行了分享,得到了很多鼓勵,這是讓我堅(jiān)持到可用版本發(fā)布的動力之一。
但我知道, 這依舊有些遲了,我耗費(fèi)了太久的時間,僅僅是又帶來了一個編程語言而已,畢竟這個世界最不缺的就是編程語言。但是當(dāng)我真的去思考類似“我還要繼續(xù)么?我能做好嗎?”這樣的問題的時候,我發(fā)現(xiàn)我已經(jīng)走了很遠(yuǎn)很遠(yuǎn)的路。
歡迎體驗(yàn)反饋~
GitHub:
https://github.com/nature-lang/nature
官網(wǎng):
https://nature-lang.org/
首頁包含一些語法特性示例,可以直接在 playground 嘗試
語法文檔:
https://nature-lang.org/docs/syntax
Playground:
https://nature-lang.org/playground在線嘗試
貢獻(xiàn)指南(點(diǎn)擊右上角切換到中文)
https://nature-lang.org/docs/contribute我在文檔中詳細(xì)介紹了 nature 編程語言是如何實(shí)現(xiàn)的。
nature 和 golang 一樣,有著一個自研的編譯器后端,但 nature 的源碼結(jié)構(gòu)和實(shí)現(xiàn)非常的簡潔。
這讓參與 nature 編程語言的貢獻(xiàn)變得容易且有趣,不再只是編譯器前端 + llvm。
你可以參與 SSA, SIMD, 寄存器分配,匯編器,鏈接器等等有趣的工作來驗(yàn)證你的學(xué)習(xí)成果和想法。你可以通過 issue 表達(dá)你的想法,我會指導(dǎo)你參與貢獻(xiàn)。
這是我用 nature 實(shí)現(xiàn)的一些小項(xiàng)目, 我很喜歡使用 nature 編寫代碼的感覺。
輕量打包工具
https://github.com/weiwenhao/parker
Llama2 推理模型 nature 編程語言實(shí)現(xiàn)
https://github.com/weiwenhao/llama.n
綁定 raylib 實(shí)現(xiàn)的俄羅斯方塊
https://github.com/weiwenhao/tetris
nature 官網(wǎng)的 playground server api 實(shí)現(xiàn)
https://github.com/weiwenhao/playground
本文已獲授權(quán)轉(zhuǎn)載,原文:
https://www.v2ex.com/t/1132910
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.