想深入钻研一门语言 请大家出出主意

2021-12-22 13:14:50 +08:00
 714105382

需要满足以下五条要求 1 支持多范式编程,表达能力强大 2 充分隐藏计算机体系结构的细节,特别是内存管理等等的细节 3 生态丰富,有大量的工具和库 4 语法设计现代,代码较为简洁,开发效率高 5 具有先进的 完善的工具链支持 比如 编译器 IDE 调试工具 运行监测工具之类

目前备选 python java C# js php groovy ruby swift perl kotlin scala

请大家帮我做做排除法 或者分析一下 n 这些语言不符合上面哪些要 如果没十全十美的 或许可以矬子里拔将军 最后我能选出一个

14174 次点击
所在节点    程序员
135 条回复
vhysug01
2021-12-22 21:38:20 +08:00
lisp+python 完成新版 SICP 作业
CommandZi
2021-12-22 21:43:46 +08:00
Swift
hikarugo
2021-12-22 22:01:26 +08:00
没必要专门研究锤子,更多的时间拿来用锤子实践做不同的事才是更好的选择
KrisChan
2021-12-22 22:16:44 +08:00
钓鱼么?
为什么要带有立场的学习呢?
不同语言都有不同的适用场景,你提到的这些要求,多数你去调研一下社区,看看官方的 tutorial ,不就可以得到一些初步的结论了么?
你的所谓“钻研”是指什么呢,是对语言本身的研究,最终在编程语言的顶级会议上发 paper 么?还是用这门语言做一些工业级的项目呢?可能不同的目标会影响你的行为吧。
L4Linux
2021-12-22 22:17:29 +08:00
Common Lisp/Emacs Lisp
Ayanokouji
2021-12-22 22:19:38 +08:00
Swift 的语法很棒,但是在服务器端的进展太慢,kotlin 的语法大量借鉴 swift ,可以使用 java 全部生态,编译速度也还可以,另外还支持 js 、native (虽然还不咋滴),最近还更新了 Compose Multiplatform 支持桌面和 web ,而且 kt 有 java 基础学习也挺快的
EscYezi
2021-12-22 22:32:21 +08:00
首先排除繁琐的 java 和简陋的 golang ,kotlin 全部都符合
ecnelises
2021-12-22 22:39:05 +08:00
这么多楼好像都只说了一种语言,有些语言甚至都没提到。聊点个人看法。

Python
======
算是很多非职业程序员会学习的编程语言,在脚本语言这行里发迹比较早,所以很多 Linux 发行版都会有它。语法中规中矩,除了缩进表示代码层级这点有争议,语言上其他没有让人很恶心的地方,也没有什么难以割舍。Python 比较常用的领域有 C++项目的构建系统、人工智能、若干系统维护的工作,还有一些 Web 项目会用 Python 做。比较大的优点是容易找到有 Python 的环境以及至少会点 Python 的人。

Java
======
用「永远的神」来形容 Java 是没什么问题的。几十年的生态积累非常庞大,如果用它做项目也几乎不用担心招不到人这个问题。Spring 等框架过于复杂,还有 Java 做的桌面程序性能不佳等毛病,让大家对 Java 印象不太好。不过连 Golang 都可以有泛型,那 Java 自然也是可以现代化的。也算是和 Python 挺像,在各自的领域里中规中矩,如果真的不知道选什么,那选它不会有啥大错。多年来许多人觉得 Java 和 C++是竞争对手,至少在今天事实并非如此,它们的优点几乎不重合。

C♯
======
最早是以 Better Java 的形象出道的,时至今日似乎已经走出一条自己的路。曾经有个笑话,说 C♯为什么没有 Spring 这种框架,答案是因为微软没有春天。还有个笑话是说 Java 程序员都戴眼睛,因为他们 can’t see sharp 。这俩笑话其实反映出 C♯的特点,就是语言特性远比 Java 丰富,写起来更爽,但生态不够好,招人更难。如果单纯为学习目的,C♯很值得了解,毕竟其父是 Anders Hejlsberg ,编译器领域上古大佬。

JavaScript
======
一说是披着 Java 语法皮的 Lisp ,几乎绕不开的语言。早年乏善可陈,除了原型继承和对象模型和其他语言差异较大值得了解。因为赶上好时代,一方面性能在各家军备竞赛下彻底高出其他脚本语言一个档次,另一方面各种语言变种层出不穷试图弥补其语言缺陷。到今天算是强大的现代语言,还自带可能是地球上最丰富的库和工具生态( Java 人家至少没什么人天天想着拿 AST 搞事)。不是你想不想学的问题,时至今日做开发没法绕过它,而且在几乎所有主流平台上都能找到自带的 JavaScript 运行时。这个圈子的程序员一个比一个能整活,人称码农娱乐圈。

PHP
======
「最好的语言」,最早就是一个能编程的模版引擎,Web 领域干简单的活没人比它更快,LAMP 这个缩写简直是一个时代的回忆。后来 PHP 也加了很多东西,包括模仿 Rails 的 Laravel 以及 Swoole ,不过不妨碍大家还是按照它曾经的定位玩。语言方面可以玩的不算多。

Ruby
======
这个在国内算是大冷门吧,不过是我最喜欢的语言之一。Ruby 和 JavaScript 有点像同父异母从小分家的两兄弟,都被人说是批皮的 Lisp 。Ruby 有 Perl 风格的简洁操作、完整的面向对象和函数式能力。高度的动态性使得它表达能力非常强,参考 Sinatra 这样的微型 Web 框架。到 2021 年,Ruby on Rails 依然是 Web 开发领域的最强生产力,这么多年在这块也积累下了不少生态。此前被诟病的几个缺点(没有 JIT 、没有静态类型检查工具、缺少完善方便的异步 I/O )从 3.0 开始也在被一个个解决。问题是会的人不多,但非常值得个人学习 /写个人项目。

Perl
======
当年骆驼书没看多少页就弃坑了。在类 UNIX 系统上 Perl 可能比 Python 更常见,处理字符串和正则的语法非常简洁强大,以至于有人说这个语言是 Write-only 的,就是写一次以后自己就看不懂了。如今应该只有一些历史悠久的系统里能看到 Perl 的大量使用(新项目里取而代之的往往是 Python )。Perl 6 做了很多年,除了那个极其鬼畜的 Logo 外,好像很少听说新消息。如果能接受 Perl 的奇葩语法,学一学也是挺有意思的。

Scala
======
对 Scala 了解不多,不多扯淡了。主要印象就是把函数式编程和面向对象缝得比较好,类型系统比主流这些语言强。还有就是因为跑在 JVM 上,所以也能受益于 Java 生态。作者 Martin Odersky 也是编程语言和编译器大佬。没接触过这类语言的话,学学 Scala 应该能开眼界。

Swift
======
大家都知道 Swift 背后是宇宙市值最高公司苹果。但 Swift 算是成也苹果败也苹果。2014 年 Swift 发布,2015 年开源,基本和 Rust 1.0 同一个时间,也都基于 LLVM ,如今两者在 GitHub 的 star 数也差不多。但就业界前景而言,Swift 和 Rust 看起来越差越远。Swift 的核心团队和 LLVM/Clang 相当重合,所以无论是编译器实现还是语言设计,Swift 都有不少出彩之处(更何况极不尊重兼容性的苹果在 Swift 早期,每年都要对语言进行大量破坏性修改,被人调侃一年一个新语言,直到 Swift 4 语言核心才基本稳定,好处就是很多坑被扔掉了),比如多范式的异常处理,算是众多语言里比较之下相当舒适的。如果说 Golang 是所谓的大道至简;那么 Swift 奉行的就是兼容并包,拥有主流编程语言里最多的关键字,最新版加入了 async/await/actor ,接下来的 6.0 还会加入所有权机制,更远还有和 C++的无缝互操作。Swift 社区一直有更远大的理想,比如进军服务端。但终究还是要为苹果的生态服务。Swift 就像班级里那个门门功课考 80 ,每周还有半天缺课(指兼容 Objective-C )的学生,自然不如那些一些科目满分,另一些不及格的学生引老师注意。BTW ,Swift 的编译器是 C++写的,在这些编译型语言里,算是少数没有自举的。

Kotlin 和 Groovy 了解不多。从 Compose 这个项目就能看出,Kotlin 也充满野心,除了 JVM ,也能编译到 Native 和 JavaScript. Kotlin 、C♯和 Swift 像是奇特的结拜三兄弟,不怕 Feature 多,就怕糖不够甜,各自肩负着父辈平台的野心。

还有一个楼主没有提到的就是 Rust ,工具链完善,性能足够好,生态也在越来越丰富,很对一部分函数式爱好者的胃口。但没有 C++经历恐怕不好理解复杂的语言规则是要解决什么问题,而且乱七八糟的符号有点多,代码看着快跟 Logo 一样丑…
littlewing
2021-12-22 23:28:41 +08:00
不管啥语言,想要做到极致,你必须了解体系结构内存管理的知识
waruqi
2021-12-22 23:56:11 +08:00
c
GoLand
2021-12-23 00:47:04 +08:00
Python 符合你说的所有点。
SIGEV13
2021-12-23 03:46:23 +08:00
"特别是内存管理等等的细节" 全员退群。
xnotepad
2021-12-23 04:48:41 +08:00
从工程的角度来说 go 不错,但是还是推荐 rust 吧。
mingl0280
2021-12-23 05:04:45 +08:00
如果有 1 基本上不可能规避 2 ,你在想桃子吃。
charlie21
2021-12-23 06:43:57 +08:00
这是错误的问题,给你一个完美语言你也不会满意的
yulon
2021-12-23 07:16:51 +08:00
十全九美 C++ 啊,C++ 写好了比写脚本都爽,列表排第一的居然是 Python ,算了算了
GiantHard
2021-12-23 08:54:50 +08:00
我推荐 F#

1. 类似 ocaml 的函数式编程语言,自带不可变数据结构
兼容 .Net 生态,支持完整的面向对象编程范式

2. 大多数 F# 程序运行在 .Net Runtime 之上,开发者不用关心 GC

3. 如果你要让 F# 运行在 .Net 平台上,有 Nuget 包管理可以用,生态非常丰富,从机器学习到移动端应用开发,都有支持
如果你要让 F# 运行在浏览器平台上,那么整个 npm 的资源也可以为你所用

4. 语法上每年都有更新,[同样的程序,写起来比 C# 要简洁] ( https://fsharpforfunandprofit.com/why-use-fsharp/)


5. 可以跟 C# 用同一套 IDE 、性能诊断工具,除了 MS Visual Studio 之外,还可以使用 VS Code 、JetBrains Rider 来开发

BTW ,楼主好像对 haskell 这种偏学院派的函数式语言不太感冒,这跟 F# 的设计初衷也有点类似。因为 F# 开发者认为 Monad 在绝大多数程序员实际业务开发中用的很少,且为了跟 .Net 生态兼容, 所以 F# 没有提供高阶类型的特性。不在意这一点的话,F# 确实是不错的 side project 语言。
apateman
2021-12-23 09:14:28 +08:00
C#
darknoll
2021-12-23 09:29:55 +08:00
没啥可研究的,能把活干好就行,用什么语言也不是你自己能决定的
auto8888
2021-12-23 09:38:27 +08:00
C++ 永远的神
就是学习曲线太 JB 陡峭了。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/823731

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX