5

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

 2 years ago
source link: https://www.v2ex.com/t/801642
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  程序员

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

  mmdsun · 1 天前 · 3738 次点击

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

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

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

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

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

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

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

45 条回复    2021-09-15 14:07:15 +08:00

TypeError

TypeError   1 天前 via Android   ❤️ 1

scala 多范式,actor,spark
erlang actor,rabbitmq
lua 嵌入式脚本

byzf

byzf   1 天前   ❤️ 1

stm32,让你放弃折腾,专心工作。

ReferenceE

ReferenceE   1 天前 via Android

C#吧,毕竟是学术型语言,可以迁移特性到不同的语言
还有你这个说的.NET 异步机制我不知道你是否真的学过,

ReferenceE

ReferenceE   1 天前 via Android   ❤️ 1

误触了...
说说自己的心得
.NET 的 TAP(Task Based pattern ?)是现在在用,并且是最新最典型的异步模型,你说的后面那两个已经 obsolete
学了这个模型的思维以后,你去看看 JS 语言的异步模型,就那个基于 Promise 的抬手式

设计思想完全是一致的,不过只是 C#静态 Task Generic 比 JS 的 Promise 精细一点罢了

agagega

agagega   1 天前   ❤️ 1

- 尽管 2021 年了,但 Ruby on Rails 的很多理念依旧值得学习
- OCaml 也是挺有意思的语言
- Swift 的面向协议编程
- C++的模版元编程以及 Type-rich programming (C++绝对不是冷门,但这些概念有很多人都没有深究过)
- Objective-C 的运行时实现,以及为什么语法如此鬼畜却有人称赞它优雅

还有就是各种《 7 周 7xxx 》的书啦,里面介绍的东西都挺不错。

mmdsun

mmdsun   1 天前 via Android

@ReferenceE 是的。 还没深入才开始看 APM,有点像 Android 里的 AsnyncTask 。async/await 应该是 stackless coroutine ?

Leviathann

Leviathann   1 天前   ❤️ 1

koka lang
实现了副作用类型
作为函数式语言直接编译到 C 并且无需垃圾回收器或者运行时

2i2Re2PLMaDnghL

2i2Re2PLMaDnghL   1 天前

ponylang,无锁、无竞态条件、Actor 异步模型,而且是从不打断正常代码(因此很容易写出泄漏)的 GC

Svelte 才是真正的 Vue3 (暴言

用 Racket 写一个自己设计的语言。完全可以做出这样的测试语法:
((+ 1 1) . equals . 2)
((/ 1 0) . throws . division_by_zero)

nvkou

nvkou   1 天前

最近在搞 ruby 主要看 meta programing. 用最小的代码做最多的事情

ericgui

ericgui   1 天前

@djyde 怎么用这个写一个 react 的 hello world ? 有 boilerplate 吗?谢谢

gouflv

gouflv   1 天前 via iPhone

@2i2Re2PLMaDnghL 其实 solidjs 更 vue3

ccyu220

ccyu220   1 天前

前端的 Svelte 还是值得推荐的,简洁优雅。

SmiteChow

SmiteChow   1 天前

语言的话 clojure

lyz1990

lyz1990   1 天前

不知道算不算小众,Haskell 可以玩玩

huxiweng

huxiweng   1 天前

ACT.Framework

hccsoul

hccsoul   1 天前

popil1987

popil1987   1 天前

各种函数式编程语言,除去以上提到的,补充
elixir:
后端语言,性能不咋的,实测和 python 的 fastapi 一个级别,但是它能使用 CPU 多个核心
因为是状态不可变,并发异步分布式及其简单,进程模型轻量,干什么事都是起进程即可
支持宏,可以定制语言,即所谓的 DSL,Kernel.SpecialForms 就是自己定义自己
模式匹配和管道,告别 if else
可以使用 erlang 的庞大生态,只需:xxx 调用,erlports 可以使用 python 生态,可以使用 c 语言生态提高性能
缺点就是不是静态类型,意味着不能让编译器(虽然也编译)帮你干点测试的活
elm:
前端语言,基本隔绝 js 生态,最新版本已经是 2019 年,没有大公司支持,但是拥有函数式编程语言的特性,运行和包大小都名列前茅,我的个人项目会完全用 elm 写后台,至于公司项目,建议向 js 生态跪下

efaun

efaun   1 天前

什么叫“值得学习”?高薪有工作才“值得”学习,所以就不会是小众的

byte10

byte10   1 天前

@TypeError lua 这个牛皮,简直就是嵌入式的开发福利 ,理论上有很多的可玩性,可是不知道有多少人会去使用它。

angrylid

angrylid   1 天前 via Android

为啥不能去学个别的领域的知识,拓宽一下知识面

ipwx

ipwx   1 天前

Scala Akka

真不开玩笑,Actor Model 值得学习。虽然我学了之后还是不太会用 Scala,所以用 c++ 撸了一个自己的 Actor model

mascteen

mascteen   1 天前 via Android

shpkng

shpkng   1 天前

@byte10 游戏行业各种 Lua, 用得非常多

scybhe

scybhe   1 天前 via Android

前端 js 框架 Mithril, https://mithril.js.org

liubaicai

liubaicai   1 天前

ruby..rails....

atpking

atpking   1 天前

@liubaicai 我就知道 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

redvoilin

redvoilin   1 天前

ruby on rails

Co1a

Co1a   1 天前 via iPhone

Rust 没人提吗,让你好好管控一下自己的变量

ColinWang

ColinWang   1 天前 via iPhone

Solidity

GeruzoniAnsasu

GeruzoniAnsasu   1 天前

如果要想学一些新语言,那必须要多接触一些不一样的范式。C 系语言无论生了几个孙子,跟它们的爷爷长得都差不多。

但是

Haskell

当真是开了一扇新世界大门,强烈推荐系统地学习一遍。或者 racket/Lisp 也可以。这些函数式语言一下拓宽了我对编程这件事一倍的视野,可以说又重新学了一遍编程,与那些脚本语言根本不可同日而语

joydee

joydee   1 天前

如果对程序分析或者 programming type theory 感兴趣的话,可以尝试学习下 OCaml,虽然很小众。

ReferenceE

ReferenceE   1 天前 via Android

@mmdsun APM 不建议深入研究,看个大概就行了,已经算被证明不接近人脑逻辑的玩意?
你真的想要研究 async 系统,你应该是去深入研究 TAP,明白为什么要这么设计以及底层实现是什么。而不是在这个 APM 上面浪费时间

来自一位"略懂"C#的 async 咸鱼的建议

aristolochic

aristolochic   1 天前

@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

danc   1 天前

还用问吗?当然是 Rust

chanchan

chanchan   1 天前

Lisp/Scheme ?

ytll21

ytll21   1 天前

必须是 Rust

eurry

eurry   1 天前

推荐一波 Vert.x

popil1987

popil1987   8 小时 56 分钟前

@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

aristolochic   7 小时 58 分钟前

@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

2i2Re2PLMaDnghL   5 小时 59 分钟前

@gouflv solidjs 不是 jsx 语法吗,而且也是 [x, setX] = factory() 的做法。
Svelte 作者语:凡是需要 setX(newX) 的都不是响应式编程,最优秀的响应式编程是 Excel 。
你跟我说 malinajs 我也认了。

xingjue

xingjue   4 小时 59 分钟前


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK