关于 JIT与AOT,之前整理过《JIT-动态编译与AOT-静态编译:java/ java/ JavaScript/Dart乱谈》,一文不足以概括dart。
大多数主流编程语言是上个世纪开发的:七十年代(如C)、八十年代(如C++)、九十年代(如Java、Python、JavaScript)。这些语言在设计上并没有考虑现代软件开发生态系统:多核CPU、GPU、快速的互联网、移动设备、容器和云等。尽管许多语言中的许多功能都已进行一些改进,如并发等,而且在不断调整自己以适应时代,但它们依然保留了向后兼容性,无法抛弃那些过时的旧功能。
在这方面,Python就做得很好(某种意义上也未必是好事),Python2和Python3两者之间有明确的分界线。很多语言常常会为解决同一个问题提供十余种的方法,同时又没有顾及到开发人员的感受。
从表面上来看,“有人不喜欢花括号,开发了Python;有人在一个周末设计了出了JavaScript;有人因为上班太无聊,于是发明了C语言”。关于编程语言的八卦轶事很多,但归根结底,一个编程语言的诞生一定是需求的推动。
从面向机器的语言、面向过程的语言到面向对象的语言,编程语言的历史也经历了由繁到简。
从汇编 到C/C++ ,然后到Java,衍生的JavaScript,Dart,个人希望其一统大前端开发。
静态类型语言开始总结经验,学习动态类型语言的有点,很多人都提到了类型自动推导,智能指针,内存静态检查等智能功能。同时,不断改进原有能力,如concept,traits等提升模板可维护性。
动态类型语言也在革新,但估摸着,在性能和可维护性双重优势的情况下,静态类型语言会更强势一些。
弱类型的问题大家已经说的很多了,从Javascript到C都有同样的问题,重载都能被搞出来不少幺蛾子。做新语言大概会第一时间绕开这个坑,弱类型带来的好处实在有限。
至于动态或者静态就是取舍问题了,个人认为( 赵磊),靠程序员之间的文档协定来搞定一个大型应用是一个非常挑战的事情,还不如把行为和类型联系起来,通过类型检查来约束行为。人总是有点惰性的,如果照着文档的约定不好实现,很有可能就会偷懒的违背约定,后面的维护就会困难重重。而违反接口层面的规定会直接在编译过程失败。
严格约束带来的好处就在于可以对未知的部分做很多合理假设,通过接口可以确认更多的信息,比如入参会不会被修改、调用会不会产生IO,不至于让开发者调用一下接口还要看看具体实现。
而严格约束也会限制程序的写法,灵活性会受限。所以这几年涌现出来的新语言也是在找这个平衡,很多静态类型的语言也不用显式地声明对象类型,一些动态语言也在加类型约束。
过完年再整理下………………
参考内容:
C、C++、Java到Python,编程入门学习什么语言好?
https://zhuanlan.zhihu.com/p/159606997
现代编程语言大PK,2020年作为程序员的你应该了解这7门编程语言
https://zhuanlan.zhihu.com/p/112949238
为什么 2010 年前后诞生的语言(如 Golang, Rust, Swift)都是强类型 + 静态? - 张汉东的回答 - 知乎
https://www.zhihu.com/question/31100089/answer/216088206
为什么 2010 年前后诞生的语言(如 Golang, Rust, Swift)都是强类型 + 静态? - 赵磊的回答 - 知乎
https://www.zhihu.com/question/31100089/answer/216345665
为什么 2010 年前后诞生的语言(如 Golang, Rust, Swift)都是强类型 + 静态? - 不中的回答 - 知乎
https://www.zhihu.com/question/31100089/answer/59549237
转载本站文章《从java到JavaScript(1),看Dart:对比Java/Go/Swift/Rust》,
请注明出处:
https://www.zhoulujun.cn/html/webfront/AppDev/Dart/8514.html