首頁  >  文章  >  後端開發  >  个人充电,想学一门替代python的语言?

个人充电,想学一门替代python的语言?

WBOY
WBOY原創
2016-06-06 16:22:561195瀏覽

本身非程序猿,不过工作和学习中用电脑非常多,以前一直用Python,而python也让我很满意,样样都能做,从管理系统到自动化执行程序,再到网上抓资料,真的是很棒,关键是写东西非常快,但最近突然觉得有点腻味了,尤其是想真正写个正经程序的时候,发现那性能简直让人吐血。
当然,这多半是我战斗力太差的缘故,毕竟不是专业搞计算机的。而性能高用得广的语言,Java和C#我都是一窍不通,那个C++我懂个皮毛,基本上就是属于最简单的小程序能写,写个稍复杂的程序就会各种崩的层次,最关键的是这玩意写东西实在是太慢了啊啊啊啊。
最近闲的蛋疼,想学一门性能强一点,程序对资源的占用不要那么夸张的语言,具体来说就是最好是静态语言,最好能带上能用的GC,最好是新一点的,满足我折腾的欲望。
噢,这语言开发效率不能太低了啊,毕竟是个人用的,实在无力去搞一门像C++那样可以造歼星舰,不过在开工之前还得自己提炼矿石的语言。
请各位高手推荐,谢谢。

回复内容:

A Pythonista's irresistible attraction to Rust
除了 GC 之外其它都满足,因为 GC 对程序效率的影响太大啦。当然,也不用你手动管理内存的申请和释放的。 个人充电,想学一门替代python的语言?
好吧,不抖机灵,题主你可以感受一下这个 golang.org/ (可能要翻墙,グレート・ファイアウォール罪大恶极!) Scala可以一战。

在一年多以前,我还是Python的死忠,而现在,我已经彻底投奔Scala了。

原因非常简单,Python的大部分优点Scala都有,并且做得更好。

  • Scala的Collection库相比于Python简直不知道高到哪里去了(就体系来说,恐怕也就Haskell可以与之一战。然而,Scala的Collection库要实用的多)。以前一直觉得Python的list comprehension非常好用,然而Scala有更好的(源于Monad)。
  • Scala代码非常简洁,拥有基于流的类型推导。简单来说,就是动态语言的手感。
  • Scala提供了编译期的类型安全。这是静态语言相比动态语言的优势,而且和类型推导配合,几乎没有增加书写成本
  • 良好的生态系统。其实是JVM的生态系统,来自Java的福利。
  • 运行效率足够。Scala的运行效率和Java在一个量级上,很大程度上取决于你代码的写法(类似于C++之于C),你总是有办法写出和Java代码一样高效的模块(如果真的需要的话)。
  • 良好的编程效率。我个人体验来说,Scala的编程效率肯定是超过Python的,虽然这种体验是建立在自己有足够FP编程经验之上的。实际上Scala的学习同样有助于更好的编写Python代码

- - -

当然,Scala也有一些缺点

  • 学起来有那么一点难。如果之前没有接触过FP可能一开始会误入歧途。我总是看到Java程序员用Scala写的难以直视的Java代码,每次看到这种情况我就感觉到非常可惜,他们无法享受到Scala带来的福利
  • 编译慢。最直观的感受就是MacBook的续航受到了严重的挑战(编译CPU消耗大,持续时间长)
  • JVM的生态圈还是不如Python全面的。科学计算方面,JVM上并没有成熟的社区。

- - -

更新:

评论里面有人建议上代码,当然,我是反对的。我觉得对于Scala的评判完全无法基于第一感觉而来(比如语法),我个人最初接触scala的时候完全感受不到这语言的优雅,因为很多feature你一开始是不能理解的(有一些甚至于到现在都还不能驾驭)。

说起来,我个人转向Scala完全是非常偶然的因素——使用Spark的需要。只不过在使用的过程中Scala给了我意外的惊喜。要不然,我是断然不会轻易往只有JVM支持的语言上投入这么多精力的。

如今,我可以以一个过来人的身份告诉大家,在Scala上的投入是值得的,它确实非常优秀)。

- - -

对于其它一些推荐的语言,我也简单比较一下:

  • Rust。如果我现在想再学一门语言,那毫无疑问,那肯定是Rust。因为我觉得它能cover掉Scala的大部分feature,也具有独特的优点。
  • Go。相比之下,这是一门比较简单的语言,我觉得如果不是有特定的项目驱动,并没有刻意学习的必要。要知道,Go是不支持泛型的。如果你当初写python的时候是list-comprehension到处用的话,断然是不能接受的。
Go语言带 GC,各方面都符合你要求。不过我更喜欢 Rust语言,不过 Rust 不带 GC。 Erlang不算新,性能不赖,功能丰富,速度(特别并发能力)超群。同理Haskell啥的类似,可造歼星舰武器合发动机,不太能造壳儿。

Lisp/Clojure 萌萌哒语言。可以做的事情很多,模块啥的也很多。Lisp家族方言特别多,其中最容易见到的是elisp(重型歼星舰Emacs的插件系统)和Clojure(JVM解释版,轻松勾搭Java)


ECMAScript(javascript是其“方言”)解释执行,执行层有V8有JIT所以速度可观,啥都能造,只是变种啥的太多了,版本一变新特性也层出不穷。

Lua 轻量级解释型,解释器就一c库,随时挂靠C/C++,自带GC。

Rust 新得很,版本间变化较大,轮子不算多但是覆盖面不错。用作用域控制内存而没有使用GC,但仍能很好地自动管理内存使用。被视作C++的接班人之一。 仔细地看了若干遍你的需求,我决定给你推荐Haskell。下面详细分析:

想学一门性能强一点
Haskell在使用GHC编译的情况下性能普遍很赞,这里有一个大概的benchmark: wiki.haskell.org/Benchm

最好是静态语言,最好能带上能用的GC,最好是新一点的
Haskell是静态强类型,Haskell有GC,Haskell上世纪90年代才出现,这么多年一直在加入新的东西

满足我折腾的欲望
毫无压力,Haskell以耐折腾闻名世界,再能折腾的人在Haskell上也能得到满足。有那么一大群精力过剩的人甚至折腾了它十多年

这语言开发效率不能太低
熟练Haskell以后,Haskell的高抽象带来非常高的开发效率。以我为例,写一个简单的lambda calculus interpreter,用Haskell大概只需要100行多一点代码,C++的话至少三百以上,用Haskell的耗时是C++的一半以下。这还是用C++时使用了简单写法的情况,如果用和Haskell一样麻烦的做法搞的话C++代码量和时间至少翻倍。(其实这个例子举得比较无赖-_-)(补充一下,这里的实现里是手撸了一套Parser Combinator的。。。调库的话就超级短了)

毕竟是个人用的,实在无力去搞一门像C++那样可以造歼星舰,不过在开工之前还得自己提炼矿石的语言
恰恰相反,在使用Haskell造歼星舰之前,你需要担心的不是得自己提炼矿石,而是Haskell帮你准备好的零件太多了你得自己好好挑选决定用哪个。

额外说一点学Haskell的好处。学过Haskell以后,学其他语言普遍有非常非常非常大的速度加成,而且Haskell学的越深入,这个加成就越惊人。。。 Crystal
满足你所有需求了. 静态, GC, 新, ruby的语法, 开发起来会很爽. 关键的是, 学习成本还很低. (跟rust比的)
当然, 如果你想要学完了之后能用来干活, 可以考虑kotlin.
同样满足你的这些需求. 人活着不学lisp 那和咸鱼有什么区别? Nim Programming Language
。。。。。 非常好奇楼主你到底写了什么东西?能够让Python都慢到让人吐血的程度。
我靠Python混饭吃这些年,还真没遇到语言的性能门槛。也可能是我做的项目都太low了。
先要确定不是你本身的写法有问题,否则不论你是换Java, C#,C++甚至C乃至汇编,也还是一样会慢到让你吐血的。写法不对,这不是换语言能解决的啦。

如果排除了写法和数据结构设计问题,楼主有木有考虑换个性能好点的机器来跑呢?这可比换语言代价小哦。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn