一种具备快速能力的原型语言

4
作为一名具有强大数学背景的工程学生,我在大学中遇到了一些问题,如下所示:
  • (数值)模拟
  • 人工智能问题
  • 机器人技术
  • 控制系统
  • 还有其他一些
正如您所看到的,有些只是数值问题,而其他问题则需要处理某些符号。目前我正在使用Java,但我对它不是很满意(可能是个人口味原因),现在我正在寻找一种编程语言,在其中可以轻松地原型化新算法,例如Python,而不必关心低级别的事情,但如果需要,可以加快速度,例如并发/并行编程等。(在Python中编写并在C/C++中重写它并不是我喜欢的选项...)
总之:
  • 易于原型设计,但
  • 加速算法的能力
  • 没有Java中的样板代码
  • 语法易于阅读(我知道这可以通过大多数方式实现,但某些语言更鼓励你...)
我在网站上查看了一些信息,比如http://rosettacode.org/,并挑选出了2或3个最喜欢的:Go,Lisp(也许是Haskell),但其他建议也欢迎。

抱歉,忘了,它应该是免费的(尽管我可以在大学里免费获得 MATLAB)。 - Moe
2
我希望有人能用Lisp编写Python,这样我们就可以在编程时享受轻松自如的感觉,而在执行时却不会有额外负担。结合NumPy使用应该是最理想的选择。;-) - phkahler
5个回答

6

如果你花时间让它快起来,使用SBCL的Common Lisp是相当快的。

为什么这符合你的需求呢?

  • 符号计算
  • 良好的数字处理
  • 默认情况下编译成本地代码。

2
默认情况下,它编译为本地代码。 - Rainer Joswig

4

1
尽管被踩了,但是如果我正确理解你的“总结”,Python 是你任务的理想语言... 在 Cython 中编写扩展只需要在 Python 代码中添加一些类型声明... 它使用 distutils 构建过程,没有额外的框架,也没有额外的构建工具... - rocksportrocker
不错的推荐,我从未考虑过Cython,我一定会尝试一下,谢谢。 - Moe

3

尝试使用Clojure,它可以满足您的大部分需求。

  • 使用Java库,编译成Java字节码,并具有Java IDE插件,因此您对Java及其生态系统的现有知识将会很有用。

  • 非常简洁易读,原型设计非常容易。

  • 支持各种不同的并发策略。

  • 性能正在快速提高;典型的操作速度与Java相差不超过2倍,而缓慢的操作通常可以通过最小干扰的更改(例如在某些地方添加一些类型提示以使用Java基元)使其变得快速。


这是一门非常棒的编程语言,但我发现学习通用Lisp更加困难。 - Isaiah

3

一种替代Common Lisp的方案是Scheme的实现。到目前为止,我最喜欢的是Racket。

http://racket-lang.org/

当我第一次接触Lisp时,我从Scheme开始学习,并在几天内就能够掌握它。此外,Racket在Lisp方面是一种相当完整的语言,并且拥有一个不错的IDE - DrRacket。


2
F#如何呢?
F#是一种非常适合原型设计的语言,原因如下:
F#具有交互模式,允许您直接评估代码块,而无需编译整个项目。 类型推断有助于保持代码简洁,并使重构类型层次结构相对轻松。这在生产代码中可能不是很重要,但我发现在原型设计过程中非常有价值。 F#与.NET的集成使得很容易为现有产品开发扩展功能。如果由于时间限制,原型变成了产品,则还可以轻松地将F#代码集成到.NET产品中。 如果原型设计占据了您整个开发过程的重要部分,那么F#确实可以帮助您加速编码。
我认为F#不会比其他.NET语言产生显著更快的代码。特别是纯度(无副作用)的函数式编程风格可以应用于其他编程语言,这意味着在其他语言中编写并发程序同样容易。然而,在F#中这样做“感觉更自然”。
F#具有Option类型,可用于代替null值。关于空指针异常的代码可靠性可以在编译时得到保证,这是一个巨大的优势。
最后,请注意,F#仍在开发中,并存在一些问题,其中一些问题可能会随着时间的推移而消失,但不是全部。例如,请参阅devhawk和Oliver Sturm所说的内容(特别是线性作用域和相互依赖的类等问题,其他问题如重载、更好的Visual Studio集成已经得到解决)。
本文摘自:https://stackoverflow.com/questions/328329/why-should-i-use-f
作者:JOH

你知道Mono项目已经有多成熟了吗?我使用Linux作为我的主要操作系统。 - Moe
我会说Mono已经达到了相当成熟的水平,我从来没有遇到过它出现问题的情况。 - Isaiah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接