1
0
Fork 0
planet/沈浪熊猫儿/为什么说Scala是JVM上的C++?.tm

77 lines
5.2 KiB
Plaintext
Raw Normal View History

2022-08-29 19:24:27 +08:00
<TeXmacs|2.1.3>
<style|<tuple|generic|chinese>>
<\body>
2022-08-29 19:24:27 +08:00
<doc-data|<doc-title|为什么说Scala是JVM上的C++?>|<doc-author|<author-data|<author-name|沈浪熊猫儿>>>>
2022-08-29 19:24:27 +08:00
<section*|问题原文>
<\quote-env>
2022-08-29 19:24:27 +08:00
如题。以及请大家分析下未来静态语言的主流C++、java、scala三门语言未来的发展方向
</quote-env>
2022-08-29 19:24:27 +08:00
<section*|我的回答>
2022-08-29 19:24:27 +08:00
<subsection*|为什么说Scala是JVM上的C++?>
2022-08-29 19:24:27 +08:00
不知道是谁说Scala是JVM上的C++。这种没有具体展开的话,大概和网上盛传的各种马云语录,比如
<\quote-env>
2022-08-29 19:24:27 +08:00
刚毕业的年轻人应该在一家公司待满五年
</quote-env>
2022-08-29 19:24:27 +08:00
一样没有实际的意义。
2022-08-29 19:24:27 +08:00
把Scala和C++放在一起对比的朋友大概说的是特性多、杂这个特点。最初学习Scala的时候大致把知乎上关于Scala的问答都浏览了一遍。目前印象最深的还是这个问题中
@阅千人而惜知己 的观点。
2022-08-29 19:24:27 +08:00
后来翻译完《Scala实用指南》在写序的时候我把千人的观点浓缩成了一句话
<\quote-env>
2022-08-29 19:24:27 +08:00
Scala的美在于精巧的内核Scala的丑陋在于复杂的实现。
</quote-env>
2022-08-29 19:24:27 +08:00
至于C++我觉得它的复杂程度更甚于Scala。我目前在维护的C++项目GNU
TeXmacsC++的代码行数在20万这个量级项目的作者是一个法国数学家(Joris
van der Hoeven)从90年代至今至少已经有20年的历史了。这个项目对于C++的态度就是非常审慎的没有用C++的标准库或许90年代的时候C++标准库的口碑很差像hashmap、list、string这些容器都是自己实现的内存管理也是自己实现大家有兴趣可以点击文末的链接看一下GNU
TeXmacs的豆瓣小组组长做的一些源代码分析。个人对这些自己实现的容器是不信任的所以最近在逐行Review添加单元测试并做性能测试。
2022-08-29 19:24:27 +08:00
前段时间咨询Joris主要是想用一些handy的C++新特性已经在单元测试和Benchmark代码中使用比如autoJoris和其他的维护者是反对的。其实我也是反对使用绝大部分C++的新特性比如函数式编程的支持从语法上就比Scala差了很多另外在具体的实现上我也是不信任C++编译器的。对于一个比较大型的代码仓库其实很容易就遇到一些编译器的BUG。为了避免把时间浪费在一些无关紧要的细节上聪明的工程师应该懂得取舍。
2022-08-29 19:24:27 +08:00
<subsection*|C++、Java、Scala三门语言未来的发展动向>
2022-08-29 19:24:27 +08:00
语言也是一个工程。一门语言的未来其实要看这门语言的工程项目的发展,和整体生态的发展。
2022-08-29 19:24:27 +08:00
<strong|从项目管理的角度>Scala未来的发展不可限量。Scala项目的一切都已经在Github上了对于开发者来说在Github上给Scala标准库和编译器提交代码实际上变成了一件门槛比较低的事情。
@杨博 很早之前就开始给Scala项目做贡献。我是最近在给Spark做Scala
2.12支持的时候顺手给Scala项目修了一个bug。最近在CSUG微信群里面我鼓吹一个观点给Scala项目做贡献实际上非常简单的。然后
@Uncle Kevin 和 @何品 也开始给Scala提PR。虽然我们目前做的贡献都是非常Trivial的但是不可否认给Scala项目做贡献比给C++和Java做贡献要方便简单很多。这些老派的编程语言在源代码管理和开发者社区建设这点上做得这么差劲其发展自然没有新兴的语言快。我和Uncle
Kevin应该都是2016年之后才正式开始学习Scala的
2022-08-29 19:24:27 +08:00
<strong|至于生态>Java和Scala是绑定在一块的。C++我就呵呵哒了。在阿里云实习的时候看到工程师们为了追求极限的性能和极少资源消耗日志的收集竟然也是用C++写的兼容Linux和Windows线上的环境比较复杂这个日志收集程序把所有依赖的代码都放到了同一个工程中管理包含Boost和Kafka的C
Binding等我直接导入代码KDevelop就崩溃了。可能对于那位骨灰级的C++玩家这很简单而且非常方便看到Boost里面有bug就顺手修了。但是从代码复用的角度JVM生态是完胜的。
2022-08-29 19:24:27 +08:00
最后GraalVM已经横空出世很久了polyglot不再是空中楼阁可以畅想十年之后软件开发可以多么愉悦。而ScalaJS、Scala
Native到那时候想必已经打磨得差不多了。未来Scala程序员完全可以全栈Scala实现的、通用的、抽象的Library完全可以跨平台使用。然而未来的程序员或许仍然无法逃离Java
API、C POSIX API和JavaScript的魔咒。
\;
</body>
<\initial>
<\collection>
<associate|page-medium|papyrus>
<associate|prog-scripts|python>
</collection>
</initial>
<\references>
<\collection>
<associate|auto-1|<tuple|?|?|../../../../.Xmacs/texts/scratch/no_name_21.tm>>
<associate|auto-2|<tuple|?|?|../../../../.Xmacs/texts/scratch/no_name_21.tm>>
<associate|auto-3|<tuple|?|?|../../../../.Xmacs/texts/scratch/no_name_21.tm>>
<associate|auto-4|<tuple|?|?|../../../../.Xmacs/texts/scratch/no_name_21.tm>>
<associate|auto-7|<tuple|1|?|../../../../.Xmacs/texts/scratch/no_name_21.tm>>
</collection>
</references>