2017 年 Crystal 新年目標:1.0
自從我們在 五年前開始這個專案以來,Crystal 已經走了很長一段路。這個專案曾經是一個實驗,看看是否有可能擁有一種編譯式但類似 Ruby 的語言,現在已成為一種趨勢語言,在 GitHub 上有超過 7,000 個星標,並且有將近 1,400 個 Shards。它的受歡迎程度在過去幾年中顯著上升,我們非常自豪地看到我們所建構的東西與開發社群產生如此大的共鳴。
我們對 Crystal 的主要目標是使其蓬勃發展:我們很樂意聽到其他開發人員的成功案例,從許多人開始了解這門語言,到其他人在工作中使用它來解決現實生活中的問題。話雖如此,我們開始研究如何實現這個目標,並尋找該語言被廣泛使用的主要障礙。
主要問題很明顯:穩定性。雖然 Crystal 是一門很棒的語言可以玩玩,但對於許多開發人員來說,投資在工作中使用它來實作一個應該長期維護的系統似乎很冒險。而且有很好的理由:我們仍然將 Crystal 標記為 alpha 階段,即使它已經可以投入生產環境相當長一段時間了。
因此,為了實現我們希望看到該語言成長的目標,我們正在設定一個新年目標,讓 Crystal 在 2017 年達到 1.0 的里程碑。
1.0 的意義
Alpha、beta 和穩定版(即 1.0)對不同的人,甚至在 Crystal 團隊內,可能意味著不同的事情。達到 1.0 里程碑的基本概念是達到一個對語言核心進行重大變更的次數降至最低的點。當然,之後仍然會有更多語言的加入和特性(相信我,會有),甚至對工具或標準函式庫的修改,但我們希望確保遷移到語言的後續版本應該是一件容易的事情。
邁向 1.0 版本的道路
為了達到 1.0,我們需要研究那些可能需要對語言進行重大變更的關鍵功能;我們已經確定了以下幾項
- 平行處理:這是我們目前正在研究的下一個重大項目。雖然纖程對於 並行處理 非常有效,但我們希望該語言能夠利用所有可用的計算能力。考慮到 Crystal 的主要目標之一是提供最佳效能,我們希望不僅為 1.0 做到這一點,實際上也為 beta 版本做到(無論您喜歡對 beta 版本做何定義)。
- Windows 支援:我們知道有很大一部分開發社群在 Windows 上工作,他們希望開始使用 Crystal;此外,Windows 支援將使 Crystal 成為開發跨平台桌面應用程式的好選擇。我們計劃與社群密切合作,以評估並指導實現此目標的工作,並確保該語言的任何關鍵元素都不與 UNIX 特定綁定。
- 型別系統:Crystal 優雅的型別系統和全域型別推斷是其最佳功能之一,但我們知道有幾個點需要檢視,特別是關於泛型及其約束。我們將整理型別系統,甚至開始研究將其形式化的方法,直到我們確信沒有任何意外潛伏在角落。
- 增量編譯:即使目前最大型 Crystal 專案的編譯時間並未過長(Crystal 本身就是一個很好的例子,大約 20 秒),如果我們想改善開發體驗,我們需要縮短這些時間。我們希望在語言中建立一些增量甚至模組化編譯功能的原型,以識別我們可能需要添加的任何潛在限制才能實現這一點;請注意,我們不認為這是 1.0 的必選項,但可能由此產生的語言變更才是必須的,因此需要探索潛在的實作方式。
- 巨集:Crystal 對於動態語言的元編程功能的反應是 編譯時巨集,它提供了一種解決大部分相同問題的方法。巨集可以操作 AST 以輸出新程式碼、呼叫外部程式、存取型別系統,甚至掛鉤到編譯流程中。因此,在 1.0 之前的工作一部分將是檢視它們,並確保它們與語言的其餘部分良好協同運作,因為我們不希望在 1.0 之後對巨集語言進行任何重大變更。
- 語法:與上面的重點類似,一旦 1.0 發布,對語言語法的任何變更都將被凍結。雖然 Crystal 繼承了 Ruby 的大部分語法,但某些 Crystal 特定的項目需要自己的語法。真誠地說,我們不預期這裡會有任何重大變更,但在沒有經過適當檢視的情況下凍結它是很不負責任的。
如何達成目標
考慮到我們仍然計劃同時處理標準函式庫,以及修復一路上出現的任何錯誤,在一年內實現上述所有項目並非易事。
首先,由於我們 Manas 非常希望看到這種情況發生,我們將增加對 Crystal 本身的投入。目前 Manas 中 Crystal 背後的團隊,Ary (asterite)、Juan (waj) 和 Brian (bcardiff),將會加入 Gustavo (ggiraldez)、María (mdavidmanas)、Martín (mverzilli)、Matias (matiasgarciaisaia) 和 我 (spalladino)。我們將協助社群管理、支援、文件編寫、工具、Shards 開發,甚至核心語言開發。即使我們中的一些人已經在空閒時間為該語言做出貢獻,我們現在正在 Manas.Tech 內部正式支持這項工作。
其次,但同樣重要的是,我們計劃利用開源社群的所有力量。我們知道有更多人希望開始為 Crystal 做出貢獻(不僅僅是通過金錢捐贈),他們的專業知識將是一個很大的補充,儘管指導這些工作需要仔細規劃。我們將改進我們的貢獻指南並整理問題追蹤器,以簡化這些流程,幫助保持 社群頻道 的組織,並保持路線圖的最新狀態。
在那之後,從社群的角度來看,我們計劃努力降低新手學習該語言的門檻。我們希望確保明確 Crystal 是什麼以及不是什麼,特別是對於許多直接來自動態語言背景的人。我們不僅會專注於文件編寫,還會專注於教學課程,並協助定義 Crystal 的用例,而這些用例反過來可以塑造語言本身。
後續步驟
儘管我們對 2017 年 Crystal 即將推出的所有內容感到興奮,但我們不想忽略迫在眉睫的後續步驟。我們將首先大力研究平行處理,並利用任何現有的 Windows 支援工作。從社群的角度來看,我們將審查貢獻指南並重新思考 GitHub 問題標籤,然後適當地重新標記問題;我們希望讓新手可以貢獻,也讓社群中更有經驗的成員可以處理問題。
請在此處或通過任何 社群管道 給我們留下您的評論。我們祝您新年快樂,並一如既往,Crystalling 愉快 :-)
如果您想幫助我們實現這個目標,請考慮在 BountySource 上支持 Crystal!