V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
mmdsun
V2EX  ›  程序员

有什么小众的语言或框架,是值得学习 ?

  •  3
     
  •   mmdsun · 2021-09-14 00:15:24 +08:00 · 7018 次点击
    这是一个创建于 1196 天前的主题,其中的信息可能已经有所发展或是发生改变。

    [请问有什么小众的语言或框架,是值得学习 ? 或者他们有哪些闪光点值得学习的?谢谢!]

    平时总是在自己熟悉的领域编程,平时忽略了很多优秀但冷门的框架语言

    感觉偶尔学习一下其他领域的知识,对自己熟悉的领域也有很大帮助.

    由于领域不同还麻烦大家详细介绍一下,比如:

    学习 Google Android 开发的库 Flow\LiveData 处理数据.

    Reactive Extensions(Rxjava Rxjs 等)库了解 Reactive Programming 编程.

    学习.NET 的 TAP 、EAP 、APM 异步编程模型,对封装多线程操作很有帮助。

    45 条回复    2021-09-15 14:07:15 +08:00
    TypeError
        1
    TypeError  
       2021-09-14 00:40:19 +08:00 via Android   ❤️ 1
    scala 多范式,actor,spark
    erlang actor,rabbitmq
    lua 嵌入式脚本
    byzf
        2
    byzf  
       2021-09-14 00:52:33 +08:00   ❤️ 1
    stm32,让你放弃折腾,专心工作。
    ReferenceE
        3
    ReferenceE  
       2021-09-14 00:53:55 +08:00 via Android
    C#吧,毕竟是学术型语言,可以迁移特性到不同的语言
    还有你这个说的.NET 异步机制我不知道你是否真的学过,
    djyde
        4
    djyde  
       2021-09-14 00:54:04 +08:00   ❤️ 5
    前端的话,可以看看 ReScript https://rescript-lang.org/
    ReferenceE
        5
    ReferenceE  
       2021-09-14 00:57:22 +08:00 via Android   ❤️ 1
    误触了...
    说说自己的心得
    .NET 的 TAP(Task Based pattern ?)是现在在用,并且是最新最典型的异步模型,你说的后面那两个已经 obsolete
    学了这个模型的思维以后,你去看看 JS 语言的异步模型,就那个基于 Promise 的抬手式

    设计思想完全是一致的,不过只是 C#静态 Task Generic 比 JS 的 Promise 精细一点罢了
    agagega
        6
    agagega  
       2021-09-14 01:01:20 +08:00   ❤️ 1
    - 尽管 2021 年了,但 Ruby on Rails 的很多理念依旧值得学习
    - OCaml 也是挺有意思的语言
    - Swift 的面向协议编程
    - C++的模版元编程以及 Type-rich programming (C++绝对不是冷门,但这些概念有很多人都没有深究过)
    - Objective-C 的运行时实现,以及为什么语法如此鬼畜却有人称赞它优雅

    还有就是各种《 7 周 7xxx 》的书啦,里面介绍的东西都挺不错。
    mmdsun
        7
    mmdsun  
    OP
       2021-09-14 01:15:41 +08:00 via Android
    @ReferenceE 是的。 还没深入才开始看 APM,有点像 Android 里的 AsnyncTask 。async/await 应该是 stackless coroutine ?
    Leviathann
        8
    Leviathann  
       2021-09-14 01:53:36 +08:00   ❤️ 2
    koka lang
    实现了副作用类型
    作为函数式语言直接编译到 C 并且无需垃圾回收器或者运行时
    2i2Re2PLMaDnghL
        9
    2i2Re2PLMaDnghL  
       2021-09-14 02:40:23 +08:00
    ponylang,无锁、无竞态条件、Actor 异步模型,而且是从不打断正常代码(因此很容易写出泄漏)的 GC

    Svelte 才是真正的 Vue3 (暴言

    用 Racket 写一个自己设计的语言。完全可以做出这样的测试语法:
    ((+ 1 1) . equals . 2)
    ((/ 1 0) . throws . division_by_zero)
    nvkou
        10
    nvkou  
       2021-09-14 04:53:21 +08:00
    最近在搞 ruby 主要看 meta programing. 用最小的代码做最多的事情
    ericgui
        11
    ericgui  
       2021-09-14 04:57:43 +08:00
    @djyde 怎么用这个写一个 react 的 hello world ? 有 boilerplate 吗?谢谢
    gouflv
        12
    gouflv  
       2021-09-14 08:24:35 +08:00 via iPhone
    @2i2Re2PLMaDnghL 其实 solidjs 更 vue3
    ccyu220
        13
    ccyu220  
       2021-09-14 08:36:43 +08:00
    前端的 Svelte 还是值得推荐的,简洁优雅。
    SmiteChow
        14
    SmiteChow  
       2021-09-14 09:38:17 +08:00
    语言的话 clojure
    lyz1990
        15
    lyz1990  
       2021-09-14 09:40:34 +08:00
    不知道算不算小众,Haskell 可以玩玩
    huxiweng
        16
    huxiweng  
       2021-09-14 09:42:19 +08:00
    ACT.Framework
    hccsoul
        17
    hccsoul  
       2021-09-14 09:45:59 +08:00
    汇编
    popil1987
        18
    popil1987  
       2021-09-14 10:49:39 +08:00
    各种函数式编程语言,除去以上提到的,补充
    elixir:
    后端语言,性能不咋的,实测和 python 的 fastapi 一个级别,但是它能使用 CPU 多个核心
    因为是状态不可变,并发异步分布式及其简单,进程模型轻量,干什么事都是起进程即可
    支持宏,可以定制语言,即所谓的 DSL,Kernel.SpecialForms 就是自己定义自己
    模式匹配和管道,告别 if else
    可以使用 erlang 的庞大生态,只需:xxx 调用,erlports 可以使用 python 生态,可以使用 c 语言生态提高性能
    缺点就是不是静态类型,意味着不能让编译器(虽然也编译)帮你干点测试的活
    elm:
    前端语言,基本隔绝 js 生态,最新版本已经是 2019 年,没有大公司支持,但是拥有函数式编程语言的特性,运行和包大小都名列前茅,我的个人项目会完全用 elm 写后台,至于公司项目,建议向 js 生态跪下
    efaun
        19
    efaun  
       2021-09-14 10:59:37 +08:00
    什么叫“值得学习”?高薪有工作才“值得”学习,所以就不会是小众的
    byte10
        20
    byte10  
       2021-09-14 11:08:23 +08:00
    @TypeError lua 这个牛皮,简直就是嵌入式的开发福利 ,理论上有很多的可玩性,可是不知道有多少人会去使用它。
    angrylid
        21
    angrylid  
       2021-09-14 11:09:54 +08:00 via Android
    为啥不能去学个别的领域的知识,拓宽一下知识面
    ipwx
        22
    ipwx  
       2021-09-14 11:11:34 +08:00
    Scala Akka

    真不开玩笑,Actor Model 值得学习。虽然我学了之后还是不太会用 Scala,所以用 c++ 撸了一个自己的 Actor model
    mascteen
        23
    mascteen  
       2021-09-14 11:14:05 +08:00 via Android
    Lisp
    shpkng
        24
    shpkng  
       2021-09-14 11:39:13 +08:00
    @byte10 游戏行业各种 Lua, 用得非常多
    scybhe
        25
    scybhe  
       2021-09-14 12:17:57 +08:00 via Android
    前端 js 框架 Mithril, https://mithril.js.org
    liubaicai
        26
    liubaicai  
       2021-09-14 12:23:31 +08:00
    ruby..rails....
    atpking
        27
    atpking  
       2021-09-14 12:25:51 +08:00
    @liubaicai 我就知道 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
    redvoilin
        28
    redvoilin  
       2021-09-14 13:05:52 +08:00
    ruby on rails
    Co1a
        29
    Co1a  
       2021-09-14 13:07:40 +08:00 via iPhone
    Rust 没人提吗,让你好好管控一下自己的变量
    ColinWang
        30
    ColinWang  
       2021-09-14 13:18:02 +08:00 via iPhone
    Solidity
    GeruzoniAnsasu
        31
    GeruzoniAnsasu  
       2021-09-14 13:20:19 +08:00   ❤️ 1
    如果要想学一些新语言,那必须要多接触一些不一样的范式。C 系语言无论生了几个孙子,跟它们的爷爷长得都差不多。

    但是

    Haskell

    当真是开了一扇新世界大门,强烈推荐系统地学习一遍。或者 racket/Lisp 也可以。这些函数式语言一下拓宽了我对编程这件事一倍的视野,可以说又重新学了一遍编程,与那些脚本语言根本不可同日而语
    joydee
        32
    joydee  
       2021-09-14 14:03:29 +08:00
    如果对程序分析或者 programming type theory 感兴趣的话,可以尝试学习下 OCaml,虽然很小众。
    ReferenceE
        33
    ReferenceE  
       2021-09-14 14:18:03 +08:00 via Android
    @mmdsun APM 不建议深入研究,看个大概就行了,已经算被证明不接近人脑逻辑的玩意?
    你真的想要研究 async 系统,你应该是去深入研究 TAP,明白为什么要这么设计以及底层实现是什么。而不是在这个 APM 上面浪费时间

    来自一位"略懂"C#的 async 咸鱼的建议
    aristolochic
        34
    aristolochic  
       2021-09-14 14:19:06 +08:00
    @popil1987 自从 Cowboy 转向 HTTP 2 为中心的设计后,性能其实是下降了一些的。除此之外因为 Elixir 不可变,字符串处理也是个大麻烦,一些很简单的任务如果按照常规思路想的话会慢得离谱,内存也大得离谱(虽然 Haskell 也一样)。所以前几年出了 Stream,然后是 GenStage,然后是 BroadWay 。不过要说计算性能的话,真的会有能和基于图灵机模型的语言打的纯函数语言吗?毕竟都是基于 Lambda 演算的。(所以 Erlang/OTP 上的东西一大好处就是让我这样能力不行的人也能占满 CPU 核心

    我比较喜欢 Elixir 的一点主要是工具链做的好。还有 Phoenix 这种看上去很完备但仍然比较轻量(大概是出于显式的考虑,习惯设计脚手架而非宏

    用动态类型大概是因为 BEAM 里 Erlang 的印记太明显了(也不是没有别的静态 BEAM 语言),以及 Dialyzer 也算能用(逃

    另外……Kernel.SpecialForms 是用 Erlang 实现了一个 pass 吧?那个模块只是模式匹配了一些不能 unquote 的,以及 quote 本身。它的宏模型基本和 Lisp 一致,Lisp 都算不上 SpecialForms 自己实现自己。
    danc
        35
    danc  
       2021-09-14 14:28:32 +08:00
    还用问吗?当然是 Rust
    chanchan
        36
    chanchan  
       2021-09-14 15:07:56 +08:00
    Lisp/Scheme ?
    ytll21
        37
    ytll21  
       2021-09-14 15:55:37 +08:00
    必须是 Rust
    wizzer
        38
    wizzer  
       2021-09-14 15:58:18 +08:00
    https://budwk.com 比较小众,但用户也不少
    DreamSaddle
        39
    DreamSaddle  
       2021-09-14 16:07:39 +08:00
    @wizzer 广告?
    eurry
        40
    eurry  
       2021-09-14 16:45:41 +08:00
    推荐一波 Vert.x
    wizzer
        41
    wizzer  
       2021-09-14 17:29:59 +08:00
    @DreamSaddle 开源项目
    popil1987
        42
    popil1987  
       2021-09-15 10:09:51 +08:00
    @aristolochic 函数式语言性能得看问题本质,Rust 也默认不可变,写 React Redux 的 reducer 也不可变,而这两者又是允许可变的,这样设计性能受损同时带来了诸多好处。Haskell 处理 List 是 Lazy 的,不会马上处理 List 全部数据,提高了性能,Elixir 嘛,客观的讲性能方面只能对标 Python 的 FastApi 。写过 FastApi 的朋友可以感受到它的异步,已经很好了,但是存取文件之类的任务也得找相应的异步库。Elixir 的异步就非常流畅了,无脑起进程就好了。提高性能和 Python 一样,使用 C 扩展,C,Go,Rust 都可用。一般任务 GenStage 可替代消息队列,GenServer 让 Redis 可以不用
    工具链确实好,文档更好,学习 Elixir 和库只要看文档就好了,例子丰富。Django Command 都没有 Mix 写个 Task 容易,除了生态比不上 Python
    动态类型真的是不爽啊,不熟悉的函数必须看源码啊,文档都解决不了
    嗯,对不算自己实现自己。Kernel.SpecialForms 构成了 Elixir 所有语法,算是翻译
    aristolochic
        43
    aristolochic  
       2021-09-15 11:08:40 +08:00
    @popil1987 我倒是不太认为 Laziness 就能成为性能的保障。Haskell 自己也说了 Purity 是为了 Laziness,Laziness 是为了 Non-Strict,Non-Strict 学术上是为了区分于 Strict 的 ML 语言提供统一的实验阵地、实践上是为了写出 More composable code,不为了手动确保求值的流式而耗费太多脑力。

    表现上就是可以写一个无尽的递归斐波那契数列,存储历史值使递归栈扁平化,且 GC 能够保证立刻清除不需要的历史数据,就像有一个超厉害的缓存一样。这点在 ghci 和 ghc 编译出来的运行行为不同能够体现,ghci 里运行递归的斐波那契到 1000 位,以后算 1-1000 位都是秒出,即使再要求算 1000+,也是从 999 和 1000 开始的。而 ghc 编译的话由于知道那些值需要,所以不需要的值会立即被 GC 掉。这在 Strict 的语言根本不可能,它们没办法用图来表达值的关系,最终还是面向栈的。

    (怎么感觉变成安利 Haskell 了)

    不过怎么说正常写的 Strict 程序再加上图灵机要求的可变性,是不会比 Non-Strict 加上 Lambda 演算和 Laziness 要求的 Purity 慢的,而且应该说是 Strict 程序往往更快(只要脑子不抽)。所以单从模型上看,使用了 Stream 的 Elixir 程序和 Haskell 写出来是一致的,要说性能有差别也是 BEAM 的开销和类型检查的开销。只不过 Haskell 好说歹说也是静态的、直接编译到机器码的系统语言,还是要和 C/C++啊 Java 啊 Go 啊打一打,这下 List 就到了极限了,才不得已要出“数组”,导致一个学术语言为了解决实践问题搞出了复杂程度堪比 Rust 的“字符串类型矩阵”,还需要常备 cheat sheet,引来了不少老学究的嫌弃。
    2i2Re2PLMaDnghL
        44
    2i2Re2PLMaDnghL  
       2021-09-15 13:07:08 +08:00
    @gouflv solidjs 不是 jsx 语法吗,而且也是 [x, setX] = factory() 的做法。
    Svelte 作者语:凡是需要 setX(newX) 的都不是响应式编程,最优秀的响应式编程是 Excel 。
    你跟我说 malinajs 我也认了。
    xingjue
        45
    xingjue  
       2021-09-15 14:07:15 +08:00
    php
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2724 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:14 · PVG 23:14 · LAX 07:14 · JFK 10:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.