non*_*ame 48 typescript reason bucklescript
ReasonML(https://reasonml.github.io/)和TypeScript(https://www.typescriptlang.org/)之间有什么权衡?
Tho*_*mas 53
现在有很多针对JavaScript的语言.选择其中一个取决于您的需求和您喜欢的习语.
JavaScript有一个动态类型系统.一些开发人员更喜欢静态的.
TypeScript或Haxe使用静态类型的新语言解决了这个问题,并且只转换为JavaScript.
Flow是一个JavaScript预处理器,它针对同一个问题但不需要学习新语言.如果你只需要一个类型系统,我更喜欢这种方法.
一些JS开发人员想要更多并使用更多的函数式编程习惯用法(代数数据结构,不变性,模式匹配......).很多编程语言都可以做到(OCaml,Haskell,ReasonML,F#,Scala,......).
如果您来自Java或C#世界,TypeScript很容易学习.
如果您从未使用ML语言(OCaml或F#)开发,则ReasonML更难学习
我的建议:
如果您只需要静态类型系统,则应考虑使用TypeScript
如果你需要一个类型系统来做一个react.js或react-native app,你应该考虑ReasonML,因为ReasonReact是对react.js的巨大改进
如果需要编译为js的函数式编程语言,则应考虑ReasonML
gle*_*nsl 36
有很多权衡取舍,其中许多源于ReasonML,技术上只是OCaml,因此继承了OCaml 25年历史的大部分设计决策,这些历史是一种原生编译的语言,很少考虑网络上这个奇怪的JavaScript利基.
但是我认为最大的权衡是ReasonML的声音和灵活类型系统之间的最大权衡,以及TypeScript能够轻松地将全面的静态检查"偷偷摸摸"到现有的JavaScript代码库中.
TypeScript的类型系统明确地设计为不是声音,因此虽然它会在大多数时间为您提供帮助,但它将无法为您提供许多保证.你真的不能完全信任类型系统让你的背部,这是拥有一个适当的静态类型系统的最大优势之一.
TypeScript也受限于避免运行时类型信息的决定,这对于模式匹配等功能是必需的,并且是在ReasonML中使用类型化数据的主要好处.
另一方面,ReasonML要求明确定义自身与现有JavaScript代码之间的边界.类型可以在某种程度上被推断,但它们仍然必须在编译时确定.这使得JavaScript互操作变得更加费力,尤其是当边界随着现有JavaScript代码库的转换而逐渐移动时.在JavaScript中输入一些奇怪的东西并不总是很明显,但它通常是可能的,并且希望只是暂时的,直到所有东西都被转换为ReasonML :)
显然我有偏见,但我希望这并不是因为选择一个明显的赢家,至少因为确实没有.这是一个重要的权衡,至少只要世界不完美.
小智 17
在大型应用程序中,您将需要许多功能,这些功能在ReasonML中默认提供:严格类型,运行时验证(如果编码/解码JSON),快速编译时间,不可变数据.
在TypeScript中,您必须添加:
使用ReasonML:
(只是一张纸条)
把所有实际方面放在一边;
ML系列语言基于称为System-F的类型理论,例如Purescript和Haskell也使用它.
打字稿缺乏如此完善的基础,而是使用了一个具有许多特殊位的新实验型系统(我甚至不确定它是否"正式化").
所以从表面上看,TS的方法似乎"实用",但它引入了必要的复杂性.系统F具有构成系统的少量规则,并且它非常通用,但更容易推理TS的"理论".少即是多.
此外,学习System-F的努力是相当永恒的,并转换为其他更强大的语言,如Purescript.
这是非常不同的.
如果你想编写类型安全代码,两者都是很好的选择.
如果要编写类型安全的JavaScript,则可以选择TypeScript.
如果你想编写类型安全的一些编译成JavaScript的语言,那么ReasonML是众多选项之一.在一些语言中ReasonML的情况下OCAML.
我的偏见:https://medium.com/@basarat/typescript-won-a4e0dfde4b08
| 归档时间: |
|
| 查看次数: |
13051 次 |
| 最近记录: |