先上链接: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(