从java到JavaScript(1),看Dart:对比Java/Go/Swift/Rust
关于 JIT与AOT,之前整理过《JIT-动态编译与AOT-静态编译:java/ java/ JavaScript/Dart乱谈》,一文不足以概括dart。
从编程语言生态看Dart
大多数主流编程语言是上个世纪开发的:七十年代(如C)、八十年代(如C++)、九十年代(如Java、Python、JavaScript)。这些语言在设计上并没有考虑现代软件开发生态系统:多核CPU、GPU、快速的互联网、移动设备、容器和云等。尽管许多语言中的许多功能都已进行一些改进,如并发等,而且在不断调整自己以适应时代,但它们依然保留了向后兼容性,无法抛弃那些过时的旧功能。
在这方面,Python就做得很好(某种意义上也未必是好事),Python2和Python3两者之间有明确的分界线。很多语言常常会为解决同一个问题提供十余种的方法,同时又没有顾及到开发人员的感受。
从表面上来看,“有人不喜欢花括号,开发了Python;有人在一个周末设计了出了JavaScript;有人因为上班太无聊,于是发明了C语言”。关于编程语言的八卦轶事很多,但归根结底,一个编程语言的诞生一定是需求的推动。
从面向机器的语言、面向过程的语言到面向对象的语言,编程语言的历史也经历了由繁到简。
从汇编 到C/C++ ,然后到Java,衍生的JavaScript,Dart,个人希望其一统大前端开发。
编程语言进化目前大概有三个阶段:
原始阶段,静态类型语言黄金时代。汇编/ C/C++之类的,重性能,因为那个年代的计算资源相当匮乏。因为硬件能力不足,软件开发人员需要认真管理各类资源,不然系统速度太慢。
这个阶段其实也诞生不少优秀的语言,比如lisp。可是出彩的还是C和C++。
发展阶段,动态类型语言黄金时代。大概是90年代开始,Pentium处理器的出现应该是代表计算机进入了一个新时代,摩尔定律光辉普照,硬件大爆发,瞬间满足了大部分软件的硬件需求,而随着软件规模不断扩大,快速完成高可读性的代码很重要。人力成本是公司最大的一部分。动态语言有效解决该类问题。花在维护上时间大于写新代码的时间,这样的模块都应该用静态语言来写。
这个年代涌现出了不少动态语言,比如Ruby、Python、Lua、JavaScript,当然也少不了Java。都是以人为本,提升生产效率。
动态语言比如PHP JavaScript 或者java 把业务做的差不多,需要重构了,需要高性能了。但是C++ Go swift等传统静态语言开发成本太高(阿里从php到java,京东从asp到java),于是需要新的静态类型语言。
跃进阶段,静态类型语言的新黄金时代。也就是2010年以后,尤其是智能手机、云计算等出现,动态类型语言不满足人民群众日益增长的性能需求,同时暴露了对类型过于宽松而造成的可维护性,可调试性下降。因为规模越来越大的同时,对安全的要求也越来越高了。也就是说,现代对编程语言的需求是:安全和高效率(性能和开发速度),所以就涌现出Golang、Rust、Swift这种强类型静态语言。
Golang的侧重点在于工程化和并发,这也和摩尔定律在CPU上失效进入多核时代有关系。
Rust主打安全和高效(性能+开发速度)。
Swift诞生之初目的很明确了,就是为了替代ObjectiveC,而且也从Rust中取经,也比较注重安全和性能。所以强类型+静态就成为了一种主流选择。(突然感觉D语言有点生不逢时 )
静态类型语言开始总结经验,学习动态类型语言的有点,很多人都提到了类型自动推导,智能指针,内存静态检查等智能功能。同时,不断改进原有能力,如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
从java到JavaScript(1),看Dart:对比Java/Go/Swift/Rust的更多相关文章
- WebView上实现Java与JavaScript交互
在安卓开发上,考虑到开发效率和界面更新,有时使用WebView结合web页面技术,可以快速迭代地开发移动应用.WebView加载资源的速度并不慢,但是如果资源多了,就很慢.图片.css.js.html ...
- protobuf基于java和javascript的使用
目录 ProtoBuf介绍 整理下java和JavaScript的例子 demo测试 java作为服务端+客户端测试 客户端前端调用示例 项目地址 参考 ProtoBuf介绍 ProtoBuf 是go ...
- paip.java 以及JavaScript (js) 的关系以及区别
paip.java 以及JavaScript (js) 的关系以及区别 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...
- 30个深度学习库:按Python、C++、Java、JavaScript、R等10种语言分类
30个深度学习库:按Python.C++.Java.JavaScript.R等10种语言分类 包括 Python.C++.Java.JavaScript.R.Haskell等在内的一系列编程语言的深度 ...
- 成为Java顶尖高手要看的11本书
成为Java顶尖高手要看的11本书 学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 1.能出版出来的书一定是经过反复的思考.雕琢和审核的 ...
- Nashorn 在JDK 8中融合Java与JavaScript之力
从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino.该特性允许开发人员将JavaScript代码嵌入到Java中,甚至从嵌入的JavaScript中调 ...
- Android 中Java和JavaScript交互入门
如何实现JavaScript 和java 交互 实现Java和js交互十分便捷.通常只需要以下几步. WebView开启JavaScript脚本执行 WebView设置供JavaScript调用的交互 ...
- 序列化之protobuf与avro对比(Java)
最近在做socket通信中用到了关于序列化工具选型的问题,在调研过程中开始趋向于用protobuf,可以省去了编解码的过程.能够实现快速开发,且只需要维护一份协议文件即可. 但是调研过程中发现了pro ...
- Protocol Buffer序列化对比Java序列化.
初识 Protocol Buff是谷歌推出的一种序列化协议. 而Java序列化协议也是一种协议. 两者的目的是, 将对象序列化成字节数组, 或者说是二进制数据, 那么他们之间有什么差异呢. proto ...
- Jerry的ABAP, Java和JavaScript乱炖
写这个系列的初衷是SAP Chengdu office有越来越多的应届毕业生加入,这些新同事通过在大学的专业学习,具备了Java和JavaScript背景,但是进入SAP之后大家觉得ABAP没有Jav ...
随机推荐
- 线性dp数字三角形
数字三角形是最裸的题目,没有加入任何的背景,这里就不写了. 下面这道摘花生的题目就是数字三角形的应用 Hello Kitty想摘点花生送给她喜欢的米老鼠. 她来到一片有网格状道路的矩形花生地(如下图) ...
- 将ECharts图表插入到Word文档中
@ 目录 在后端调用JS代码 准备ECharts库 生成Word文档 项目地址 库封装 本文示例 EChartsGen_DocTemplateTool_Sample 如何通过ECharts在后台生成图 ...
- [MDP.NetCore] 使用AzureAD+服務主體,快速建立兩個服務之間的Service身分認證
MDP.AspNetCore.Authentication.AzureAD.Services for Service Principal MDP.AspNetCore.Authentication.A ...
- Educational Codeforces Round 102 (Rated for Div. 2) A~D题
写在前边 链接:Educational Codeforces Round 102 (Rated for Div. 2) 第一场打CF,过了AB两题,不过速度挺慢,C题属实没看懂,D题写了个常规做法之后 ...
- 【VMware NSX-T】在vCenter内直接将Manager设备删除后,ESXi上还遗留N-VDS交换机及网卡被占用等问题的解决方法。
由于之前在实验平台安装了NSX-T的测试环境,但是由于太忙了没怎么测试,后来实验环境出了点小问题,索性就将上面所有虚拟机给清空了.但是没想到上面遗留了NSX-T上创建的N-VDS交换机,还占用了服务器 ...
- 2023-12-02:用go语言,如何求模立方根? x^3=a mod p, p是大于等于3的大质数, a是1到p-1范围的整数常数, x也是1到p-1范围的整数,求x。 p过大,x不能从1到p-1遍
2023-12-02:用go语言,如何求模立方根? x^3=a mod p, p是大于等于3的大质数, a是1到p-1范围的整数常数, x也是1到p-1范围的整数,求x. p过大,x不能从1到p-1遍 ...
- 聊聊数据库连接池 Druid
在 Spring Boot 项目中,数据库连接池已经成为标配,然而,我曾经遇到过不少连接池异常导致业务错误的事故.很多经验丰富的工程师也可能不小心在这方面出现问题. 在这篇文章中,我们将探讨数据库连接 ...
- [复习随笔]python_dcgan网络复习小知识:模型定义
定义参数 dataroot - the path to the root of the dataset folder. We will talk more about the dataset in t ...
- springboot下添加全局异常处理和自定义异常处理
前言 在spring项目中,优雅处理异常,好处是可以将系统产生的全部异常统一捕获处理,自定义的异常也由全局异常来捕获,如果涉及到validator参数校验器使用全局异常捕获也是较为方便. 相关代码: ...
- [CF1844G] Tree Weights
题目描述 You are given a tree with $ n $ nodes labelled $ 1,2,\dots,n $ . The $ i $ -th edge connects no ...