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

77 lines
5.2 KiB
Tcl
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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