Kotlin到Dart的簡單翻譯器的坑基本上填完了
先上鏈接:ice1000/Kt2Dart
這是什麼?
這是一個使用Kotlin代碼並將其轉換成Dart的翻譯器。
為什麼寫這個?
因為我想 Make Flutter Great Again 。
Flutter,用Dart寫就,是一個十分漂亮的移動開發框架。但是Dart太弱了,因為它是動態類型的,而且沒有null safe。
Kotlin更強大。如果我們能結合漂亮的Flutter與強大/安全的Kotlin,世界就和平了(
另外,由於您的源代碼是從Kotlin翻譯過去的,您可以使用Sound Dart(Strong Dart指的是同一個東西)編譯器來編譯生成的Dart代碼。
您可能應該需要使用Kotlin的JavaScript模式(這樣您就可以用dynamic類型了)。
局限
Kt2Dart支持功能齊全的Kotlin(因為我根據嚴格的語法定義寫這個解析器),但是我不會支持這些功能:
- Extensions Labels(label break / continue,label return)
- import as
- Anonymous Classes
- if / when 表達式
- 類型安全的閉包(dart的閉包類型函數沒有范型的)
- 解構聲明({(a:Int,b:Int):Pair <Int,Int> - > xxx})
這些功能不完全支持:
- 命名(比如System.`in`會被直接轉換成 System.in)(鏈接是識別錯誤)
- 泛型(Dart的泛型是協變的)
Kotlin的這種(高級)語言特徵太過於複雜(它需要太多的編譯期分析,而Kt2Dart只是一個簡單的工具)。當檢測到這些內容時,這個工具會給出warning,並寫在注釋裡面。
為什麼用Haskell
因為 Parser Combinator太好用了(劃掉)我想練習我的Haskell技能。
我其實是Haskell的初學者,所以如果你發現任何Naive的代碼,請隨時告訴我,雖然我用了hlint(
為什麼這篇文章看起來這麼彆扭
因為我只是修改了下谷歌翻譯的項目README(
看不懂這篇文章的中文怎麼辦
ice1000/Kt2Dart
推薦閱讀:
※Haskell的遞歸
※將 Haskell 翻譯為 Rust, C# (上)標準庫
※Haskell的>>是如何實現的?如果是\_->i d,那第一個參數豈不是會因為惰性求值而不被求值?
※使用 Haskell 編寫靈活的 Parser (上)
※為什麼 Haskell 可以把各類多態都 AOT 成機器碼,CLR 卻做不到?