dart 语言是jvm_为什么发明基于 Dart 语言的 flutter 作为跨平台开发?

Flutter选择Dart作为开发语言主要是为了避免Java的政策风险,尤其是Oracle和苹果的限制。Dart没有反射,不支持热更新,并且一开始就采用AOT编译以适应iOS的限制。尽管早期Dart存在性能和语法问题,但现在其类型系统已改进,AOT性能接近JIT,且具有一些独特优点,如hot reload和特定语言特性,使其在跨平台开发中成为一个可接受的选择。
摘要由CSDN通过智能技术生成

简要总结一下:

1. 不用Java是有理由的

2. 2018年之前用Dart完全是兜售私货

3. 现在Dart已经不算特别差,没有什么再更改的理由了

不用Java主要是政策风险,既来自Oracle,也来自苹果。

首先iOS平台一向以来就不怎么待见JVM,其实上各路非原生开发都不怎么待见,但是JVM绝对是最最受到针对的。长期以来,JVM甚至连iOS的实现都没有,跑个 的Java。现在OpenJDK有针对iOS的实现了,但是因为苹果不允许动态生成代码,Hotspot用不了,所以那个JVM是一个独立的实现,叫做Zero,将Java翻译为C。这个实在是让人失去了用JVM的最后动力。毕竟,跨平台用JVM,唯一的动力也就是看中它的性能吧。

同样为了避免来自苹果的政策风险,我们能看到很多flutter/dart的神奇决定,dart压根没有反射,而且也不打算添加;flutter曾计划加入热更新然后移除了;dart的AOT编译性能曾经跟一坨屎一样(后面会说),但flutter自打一开始就抱定AOT编译,坚决不要JIT。都是堵死将来任何一点来自苹果的政策风险

那不用JVM呢,自己写一个跟ART一样的跨平台运行时?朋友,你是想让谷歌再吃Oracle的官司吗?

第二点,当初使用Dart完全是兜售私货

在2018年之前应不应该用Dart?不应该,回答结束。

Flutter吹Dart无论就几点:

开发快。快个锤子,语法糖敢和Kotlin比吗。Dart1.0的类型系统就是一坨*,飞满了dynamic和unsound。2.0修了一大堆,可是那个泛型协变打算什么时候改?

讲个笑话,Dart1.0里List.map的签名是

List map(dynamic f(T x))

标准库里飞dynamic这个操作服不服?

速度快:这个是最让我不能理解的。因为Dart1.0的时候AOT比JIT还慢了不知道多少。Dart1.0的时候,因为类型系统的原因,AOT编译个1+1都得先类型检查然后调用int.`+`,数值运算比JIT能慢上五倍。当年flutter beta版用着这种AOT都敢宣传自己性能好,属实无敌。现在的话,AOT勉强能和JIT打的五五开。离Java差的远了去了。

AOT能力:这个算是一个硬本领了吧。问题是Kotlin不是有LLVM编译能力吗?LLVM锤个现在的Dart AOT不是乱锤。

Hot reload能力:也算一个硬本领。可以更新代码,编译之后现场diff正在运行的kernel。问题是给Kotlin再写一个debug专用运行环境难道很难吗?Kotlin增加这一个后端也不嫌多。

代码描述界面:Dart 2.2之前,Dart还没加入collection literal的模板语法,UI表达能力和Kotlin DSL比起来就是在自取其辱。哪壶不开提哪壶。

综上:采用一条都不成立。说Kotlin全方位碾压Dart一点不为过。Google兜售私货时只好把Javascript拉出来当靶子。

第三点:现在Dart不算特别糟糕,没有换的动力。

现在Dart类型系统算是能看了,AOT能追上JIT了。而且Dart的named arguments和collection literal template syntax这两个小细节确实用户体验不错,async await isolate确实学习成本低,至少不会被全方位碾压了,既然这样那也还算可以接受。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值