Kotlin到Dart的簡單翻譯器的坑基本上填完了

先上鏈接:ice1000/Kt2Dart

這是什麼?

這是一個使用Kotlin代碼並將其轉換成Dart的翻譯器。

為什麼寫這個?

因為我想 Make Flutter Great Again

Flutter,用Dart寫就,是一個十分漂亮的移動開發框架。但是Dart太弱了,因為它是動態類型的,而且沒有null safe。

Kotlin更強大。如果我們能結合漂亮的Flutter與強大/安全的Kotlin,世界就和平了(

另外,由於您的源代碼是從Kotlin翻譯過去的,您可以使用Sound DartStrong 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 卻做不到?

TAG:Kotlin | Dart | Haskell |