Home  >  Article  >  Backend Development  >  个人充电,想学一门替代python的语言?

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

WBOY
WBOYOriginal
2016-06-06 16:22:561197browse

本身非程序猿,不过工作和学习中用电脑非常多,以前一直用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乃至汇编,也还是一样会慢到让你吐血的。写法不对,这不是换语言能解决的啦。

如果排除了写法和数据结构设计问题,楼主有木有考虑换个性能好点的机器来跑呢?这可比换语言代价小哦。
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn