我已经掌握了一些语言(粗略的专业知识):Python,C,C++,PHP,Javascript,Haskell,Java,MIPS,x86汇编程序.但是,自从我学会了一个新的,已经差不多2年了,我开始痒了.我有几个标准:
必须(重复:必须)有一个免费的Linux实现
应该与我已经知道的语言不同.换句话说,它应具有让我思考以新方式解决问题的功能.
应该有一些实际应用的潜力.它不需要是下一个Java,但这排除了Brainf*和莎士比亚:)我真的不关心它有多少招聘帖子,但真实世界的应用程序和库是一个加号.
应该至少有足够的免费学习材料来帮助我入门.
我在想Lisp(CL?还有什么?)或OCaml.我已经有了一些使用Haskell的函数式语言的经验(是的,我知道Lisp/OCaml是多范式的).我不是专家 - 例如来自Real World Haskell的部分代码仍然可以扭曲我的大脑,但我理解基本概念和一些高级概念(仿函数,monad).
哪一个选择?我忽略了其他任何语言?另外,您能不能包括一些有用的链接到好书/教程等.
Lisp和OCaml都不是你所知道的超级远方.这里有四个建议,部分是为了内在的兴趣,部分是为了扩展你的视野.
一种逻辑编程语言,可能是Prolog.我没有在网上找到好的资料,但是Sterling和Shapiro 的"Prolog的艺术 "一书非常出色.Clocksin和Mellish的基础教科书也很好.主要的兴趣点是用关系编程而不是函数.
甲纯面向对象语言,无论是 Smalltalk的或自我.如果您只使用混合面向对象语言,您会惊奇地发现纯粹的面向对象是多么美丽.我已经链接到了Smalltalk 的Squeak实现.我个人会建议在处理Self之前学习Smalltalk; 这是一个非常庞大和活跃的社区,软件也很发达.Self站在Smalltalk的肩膀上,是一个更具启发性的设计,但社区规模要小得多.对于那些可以访问ACM数字图书馆的人,我推荐Dave Ungar在HOPL-III上的精彩演讲 ; 这篇论文也很不错.
该图标的编程语言有两个伟大的事情去为它; 一个功能强大且不同寻常的评估模型,带有隐式回溯,以及一个用户可扩展的字符串处理模型,可以将正则表达式全部空洞化.我很遗憾地说Icon从来没有跟上时代的步伐,而且我的所有建议都是最不实用的.事实上,我担心语言会奄奄一息.但它会让你的思绪几乎和Haskell一样,并且在不同的方向上.Icon对于适度大小的字符串处理任务仍然非常有用.
您可以在计算机杂志的 Ralph Griswold撰写的文章中阅读有关图标字符串处理的内容.
该的Lua编程语言是我最后和最激进的建议.它的兴趣不在于新颖的语言特征或范例,而在于语言及其实现的精湛工程.Lua占据了许多领域,包括脚本,游戏,字符串处理和轻量级函数式编程.但它的主要兴趣点是它与C的无缝集成,为了获得全部好处,你应该将一个C库绑定到Lua.
该HOPL-III网站还包含一个优秀的谈话和有关Lua的纸.
Common Lisp和Ocaml都非常有用.如果您已经了解Haskell,那么CL可能是更不同的体验.
SBCL和Clozure CL都是Linux上Common Lisp的非常有用的实现.(关于各种实现的概述:Common Lisp调查.)
作为一个起点,我建议使用Peter Seibel的优秀书籍Practical Common Lisp,它既可以在线获得,也可以打印出来.
社区指针在这里:CLIKI.
Prolog可能就是你要找的.
编辑
第一个评论者是对的,我的回答很短,不太有用,所以:
我首选的实现是SWI-Prolog.我个人从Prolog Programming for Artificial Intelligence中学到了很多东西.它的风格很清晰,它包含很多例子,但我没有任何关于逻辑编程的书(真是太遗憾了),所以我没有比较基础.
Erlang非常有趣,因为它具有超高效的并发模型,并且您可以轻松编写分布式系统(例如,CouchDB是用Erlang编写的).它是一种动态类型的函数式语言,但您也可以以过程的方式编写代码.我学习它的教程叫做"Erlang入门",它几乎涵盖了语言的每个部分.
我打算推荐一些我尚未尝试过的东西,但是要计划,所以你必须自己判断这个.这种语言称为IO,它的特殊之处在于它基于原型,就像JavaScript一样,但也借用了许多其他语言的概念.它的就业市场可能不存在,但我想我提到了这种语言.
否则,Lisp系列中的语言可能与您已知的语言有很大不同.在这方面,我推荐Scheme,在我看来,它比Common Lisp更优雅.您可能在Scheme中感兴趣的新概念是延续.
如果你采取计划路径,花一些时间观看这些视频从1986年.他们是惊人的.
看看Smalltalk吧!Cincom VWST或Smalltalk/X - 不要打扰Squeak,因为接口很糟糕).VAST也不错,但实际上只有Windows中心.并且不要为那些在Smalltalk上嗤之以鼻的怀疑论者而烦恼 - 他们并没有使用它,而是陷入编辑运行调试循环语言和多个文档链接库的泥潭中.:-)
为什么这些Smalltalks - 嗯,他们完整的IDE,内置的GUI工具,你将看到的最佳调试器,在线帮助,并完全独立于底层操作系统.例如,在Linux下运行的ST/X编程可以传输(源代码)到Windows ST/X并且它应该执行.
ST/X是免费的,只有非常小的许可限制,Cincom提供免费的NC(非商业)版本,不受限制.我使用ST/X,因为我更喜欢它提供的默认外观.他们的IDE接口非常相似.
没有IDE和GUI工具的语言只是浪费你的时间,因为世界真的是GUI,无论底层语言有多么糟糕.例如Ruby很棒,但是没有IDE或简单的GUI工具,它真的令人沮丧.
Smalltalk不容易进入,它不完美,(用什么语言?)但学习和使用非常令人满意.现在硬件和操作系统终于赶上了Smalltalks的需求.效率很高.
如果你想利用你的Java和函数式编程知识,并且你想学习一个Lisp,那么试试Clojure.
该实现是免费的,包括Linux在内的跨平台,因为它在JVM上运行.作为一个Lisp,它与大多数其他语言的不同(以有用和美妙的方式)使事情变得有趣.与您列出的语言相比,某些功能(如不可变数据结构,多方法,元数据支持,专注于安全并发等)相当新颖.Clojure非常注重成为一种实用而有用的语言而不是学术语言.它是一种功能性语言,但不是"纯粹的",这可以说是一件好事.您还可以轻松地使用Clojure中的任何Java库.
Clojure是一种新语言,所以到目前为止唯一的书是Programming Clojure,但它是一个非常好的.还有一个维基可能不是完全最新的,因为语言仍在快速发展.该邮件列表和IRC频道都非常友好,热情地问问题.当然,官方网站也是一个很好的资源.