既然有了javascript为什么还要弄出来一个dart?

这几天在学dart和flutter,真的发现dart和js一模一样,知道google为了取代js才有开发出了dart这个语言,但有一个问题有点不明白,google为什么要再去弄一个本来就有的语言?为了取代js弄出来dart,为了取代java弄出来golang,他们为什么要这样呢?

上面的问题有点想不明白,有懂的吗?

阅读 4.6k
avatarAI BotBETA

这个问题涉及到编程语言的发展和选择,以及Google的策略。首先,JavaScript和Dart都是编程语言,它们各有优点和缺点。JavaScript最初被设计为在浏览器中运行,而Dart则是为了在服务器端运行而设计的。

Google开发Dart的原因主要有以下几点:

  1. 性能:Dart的性能优于JavaScript,尤其是在处理大型项目和复杂应用程序时。
  2. 开发效率:Dart的语法更简洁,易于学习,可以提高开发效率。
  3. 跨平台:Dart可以轻松地跨平台运行,这意味着开发人员可以使用相同的代码在多个平台上运行应用程序。
  4. 未来发展:Google认为Dart是未来编程语言的发展方向,因此投入了大量资源进行开发。

至于为什么Google要取代Java开发Golang,原因也是多方面的:

  1. 简洁性:Golang的语法比Java更简洁,易于学习和使用。
  2. 性能:Golang的性能优于Java,尤其是在处理并发和网络请求方面。
  3. 跨平台:Golang可以轻松地跨平台运行,这意味着开发人员可以使用相同的代码在多个平台上运行应用程序。
  4. 开源:Golang是开源的,这意味着任何人都可以使用和修改它。

总之,编程语言的选择是根据具体需求和目标来决定的。不同的语言有不同的优点和缺点,因此需要根据实际情况进行选择。

5 个回答

你要考虑历史进程啊……

Dart 是 2009 年提出来的,2011 年正式公布。

今天你觉得前端技术发展日新月异,每个几个月一大堆新 API 就出来了,仿佛 JS 无所无能。

但十几年前可不是这样的,2011 年 IE 都还有大量市场份额,JS 规范工作推进缓慢,ES4 胎死腹中,浏览器厂商们勾心斗角……我们今天讲前端发展的一个重要里程碑 —— ES6,还要 4 年才会公布。

Google 作为浏览器大厂,在当时肯定是感觉 JS 这么搞下去就完犊子了,所以才想到要另起炉灶的。你问为啥 Google 不去继续发展 JS?当然也努力了啊。但显然人家是没打算把鸡蛋放同一个篮子里,Dart 是做另一手准备而已。毕竟 JS 不是一门 Google 专属的语言,它能不能怎么发展光靠 Google 自己说了又不算。现在我们知道 JS 发展得很好,但十几年前你敢打包票说未来一定是今天这样吗?


至于为啥 Flutter 框架选择了 Dart,这就是另一个话题了。

流传比较广的说法是因为当时 Flutter 想要搞各种事情,都需要编译器级别的底层支持,但当时 Google 内部除了 Dart 组,别的语言组都不鸟 Flutter(因为 Dart 本来就半死不活,没啥事儿干 😂),所以两组人马一拍即合相见恨晚惺惺相惜……


至于 Google 为啥要要去 Java 搞 Go(其实一开始搞 Go 是为了替换掉谷歌内部原有的 C++ 项目的,后来慢慢把 Java 的部分也替代掉了属于“意外之喜”),你怕不是忘它跟甲骨文因为 JDK 打了十多年的官司、最后判赔 88 亿美元吧。虽然后来又翻案了,但这种事情 Google 还怎能再来次“活动复刻”?

Dart的官方网站第一句话就说明了原因:image.png
他与JS不是用一个场景, 也并不是一模一样

为了取代java弄出来golang?

dart和js真的一模一样吗,我这就去写flutter(我真的不知道)

新手上路,请多包涵

不是一摸一样,只是比较相似,作为现代语言,相互借鉴,所以都比较相似,还是有不少区别:

  1. 类型系统:

    • JavaScript: JavaScript是一种动态类型语言,意味着你无需在声明变量时指定其类型,类型会在运行时确定。
    • Dart: Dart是一种静态类型语言,你需要在声明变量时显式指定其类型,类型检查在编译时进行。
  2. 变量声明:

    • JavaScript: 使用varletconst关键字来声明变量,而变量的类型会根据值的类型而变化。
    • Dart: 使用varfinalconst来声明变量,但在Dart中你可以显式指定变量的类型,例如intdouble等。
  3. 函数定义:

    • JavaScript: 使用function关键字来定义函数,函数的参数和返回类型可以不显式指定。
    • Dart: 使用void、参数类型和箭头=>来定义函数,例如void myFunction(int a, int b) => print(a + b);
  4. 类与对象:

    • JavaScript: JavaScript是基于原型的语言,没有经典的类,而是通过原型链实现对象继承。
    • Dart: Dart是基于类的语言,支持类和对象的概念,提供了经典的面向对象编程模型。
  5. 异步编程:

    • JavaScript: 使用回调函数、Promises或async/await来处理异步编程。
    • Dart: 使用Futureasync/await来处理异步编程,使得异步代码更加清晰和易读。
  6. 模块化:

    • JavaScript: 在ES6及以上版本中引入了importexport语法来实现模块化。
    • Dart: Dart从一开始就支持模块化,使用importexport来组织代码。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题