V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
714105382
V2EX  ›  程序员

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

  •  
  •   714105382 · 2021-12-22 13:14:50 +08:00 via iPad · 12374 次点击
    这是一个创建于 827 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    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
        109
    littlewing  
       2021-12-22 23:28:41 +08:00
    不管啥语言,想要做到极致,你必须了解体系结构内存管理的知识
    waruqi
        110
    waruqi  
       2021-12-22 23:56:11 +08:00 via Android
    c
    GoLand
        111
    GoLand  
       2021-12-23 00:47:04 +08:00 via iPhone
    Python 符合你说的所有点。
    SIGEV13
        112
    SIGEV13  
       2021-12-23 03:46:23 +08:00
    "特别是内存管理等等的细节" 全员退群。
    xnotepad
        113
    xnotepad  
       2021-12-23 04:48:41 +08:00
    从工程的角度来说 go 不错,但是还是推荐 rust 吧。
    mingl0280
        114
    mingl0280  
       2021-12-23 05:04:45 +08:00 via Android
    如果有 1 基本上不可能规避 2 ,你在想桃子吃。
    charlie21
        115
    charlie21  
       2021-12-23 06:43:57 +08:00
    这是错误的问题,给你一个完美语言你也不会满意的
    yulon
        116
    yulon  
       2021-12-23 07:16:51 +08:00
    十全九美 C++ 啊,C++ 写好了比写脚本都爽,列表排第一的居然是 Python ,算了算了
    GiantHard
        117
    GiantHard  
       2021-12-23 08:54:50 +08:00 via Android   ❤️ 1
    我推荐 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
        118
    apateman  
       2021-12-23 09:14:28 +08:00   ❤️ 1
    C#
    darknoll
        119
    darknoll  
       2021-12-23 09:29:55 +08:00
    没啥可研究的,能把活干好就行,用什么语言也不是你自己能决定的
    auto8888
        120
    auto8888  
       2021-12-23 09:38:27 +08:00
    C++ 永远的神
    就是学习曲线太 JB 陡峭了。。。
    LinShiG0ng
        121
    LinShiG0ng  
       2021-12-23 10:37:12 +08:00
    我只熟悉 java ,但是你要求语法简洁,那就把 java 排除掉吧
    1002xin
        122
    1002xin  
       2021-12-23 11:03:59 +08:00
    那就 Rust 或 C#
    Cloutain
        123
    Cloutain  
       2021-12-23 11:26:04 +08:00   ❤️ 1
    C# 还用说吗?
    Itoktsnhc
        124
    Itoktsnhc  
       2021-12-23 11:32:10 +08:00
    C# 好多票
    libook
        125
    libook  
       2021-12-23 11:46:33 +08:00
    1. 应该大多主流语言都可以。
    2. 需要管理内存的基本就得忽略了吧;虽然 Rust 在这方面要好很多,但要说完全不用关心底层细节还是没法做到的。
    3. 新出的语言基本就不用考虑了,以及有重大版本更新产生兼容问题的语言也不用考虑了,JS 和 Python 基本上是万金油; JS 还多一个 Web 前端壁垒,还有 RN 可以玩玩移动 APP 开发,不过好不好用就是另一件事了;不过 Python 在 AI 方面生态比较有优势。
    4. 个人感受里,Python 的设计比较前卫,JS 是哪家特性好就直接拿过来(包括 Python 的一些特性),所以这两个都可以考虑。
    5. IDE 和监测工具现在都挺完善的了;有包管理器,并且支持依赖版本控制的,会比较方便可靠。

    综上所述,你可以试试 JS 和 Python ,不深入了解平时也能用得上。

    没有完美的语言,每种语言都有擅长的领域和不擅长的领域,最好针对不同领域学习不同的语言。

    我个人的想法是同类语言没必要学太多,一类学一种就够了,比如学一个脚本语言+一个系统开发语言。

    注:对于 TS ,我个人觉得 ES6 之前是神,ES6 之后比较鸡肋,缺点主要是没法直接用必须编译,而类型检查用 JSDoc 、ESDoc+相应 IDE 插件可以达到一样的效果,建议在已经掌握 JS 的前提下再根据需求学,虽然也没多少要学的。
    libook
        126
    libook  
       2021-12-23 11:50:40 +08:00
    不管愿不愿意承认,Go 不满足第 4 条是事实,第 3 条也不大满足,第 5 条是十分有争议的; Go 是个专门为解决企业生产上的各种问题而设计的“产品”,不适合满足个人技术上的“追求”。
    popil1987
        127
    popil1987  
       2021-12-23 11:53:21 +08:00
    成年人都选
    C:看《深入理解计算机系统》,学习 Linux 内核,开发 stm32
    Rust:开发高性能应用,SWC 给前端同学省多少时间
    Golang:以太坊这类分布式加密区块链很适合
    Elixir:Phoenix 框架非常适合 Web 开发,各种 Web 应用范式都有,干就完了
    Haskell:开发复杂的业务应用,因为它可太可重用了,不用写大量测试,满足你高生产率的需求
    Python:数据分析,写用完就仍的小工具
    Javascript:Web 前端和小程序垄断地位,不学行吗
    dart:Flutter ,Android 和 iOS 跨端必须要学,为什么不用理 React Native ?其它条件都一样,有静态类型谁还用动态类型啊,让 IDE 帮忙干点活不好吗
    SQL:也是编程语言,不要让 ORM 迷惑了双眼,皈依函数式编程就不需要 ORM 了,SQL 才是真理
    Java 和 C++能看懂源码就好,深入的话太费头发了,你看看两种语言创始人的发量
    Lisp 、R 、Fortran 、Assembly 、Prolog 、APL ,可以都了解下增加下见识
    mauve
        128
    mauve  
       2021-12-23 11:55:24 +08:00
    C#
    oksbsb
        129
    oksbsb  
       2021-12-23 11:59:34 +08:00
    “钻研” 就 rust
    zuosiruan
        130
    zuosiruan  
       2021-12-23 12:18:47 +08:00
    @coderfuns 真牛逼 一个星期 😂
    levelworm
        131
    levelworm  
       2021-12-23 21:40:26 +08:00 via Android
    java c#都没问题。前者是大数据的基础语言,能把 hadoop 等源码都看透了就牛逼了。
    mosom
        132
    mosom  
       2021-12-23 21:44:29 +08:00
    因为项目需求刚开始学 Java ,真的好长好长好长……

    接触过 C/C++/C#、PHP 、Python 、Golang 但就是对 Java 爱不起来(救命)
    meiyoumingzi6
        133
    meiyoumingzi6  
       2021-12-24 09:57:20 +08:00 via iPhone
    不是很建议 python ,尤其是 cpython ,封装太厉害,底层太多实现是 c 写的,有点黑盒的感觉,另外就是,python 太容易写出花来,各种骚操作
    sinnosong1
        134
    sinnosong1  
       2021-12-24 10:23:50 +08:00
    C#,C#会写,java 一点问题都没有。会了 C#约等于你 java 也会了。
    byzf
        135
    byzf  
       2021-12-24 11:31:42 +08:00
    备选方案里有 Java 还有啥好选的。开个团吧。

    比较好的选择:
    Java:找工作最方便。
    python ,C#:非常优秀,各方面和 java 相比见仁见智。
    js:如果能忍受国内有些人比较浮夸的作风外,各方面都不弱于 Java 。
    cpp:除了国内公司更喜欢用 Java 外,什么都好。

    中规中矩的选择:
    golang:除了比不过 Java 以外什么都好。
    php: 生态很好,但应用面相对 Java 没那么广。
    ruby:国外和 Java 五五开,国内和 Java 二八开。

    比较差的选择:
    rust: 很好,但只有区块链招你。
    kotlin: 完全没机会超过 Java ,虽然很好。
    swift:和上面那些语言比起来 swift 真不算啥。
    groovy 、perl ,scala: 不是大众向的东西了,喜欢科研还不如去玩 rust 。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5844 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 01:59 · PVG 09:59 · LAX 18:59 · JFK 21:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.