2010-08-04 89 views
2

我最近一直在玩Clojure,它让我思考......语言必须具备哪些功能?

在编程语言之前,您会考虑使用它吗?一个语言会让你注意并观察它,这是什么?

立即想到的事情是可用的工具。我发现有一个非常好的调试器,分析器和可能的REPL都使得使用更愉快的语言。

+1

一点思考后,我决定投票关闭这个问题。这只是太模糊了,这里的答案并不是真的对任何人都有用。 (我知道,我也发布了一个通用答案)。但是,如果缩小一点,我认为这会是一个很好的问题。 – 2010-08-05 04:15:30

回答

5

它觉得我还有前阅读本地方,但我同意100%

  1. 做出愚蠢的东西容易
  2. 使硬的东西可能
+0

你是否想过“简单的事情应该很容易,而且应该是可行的。”拉里沃尔?我也同意,但无可否认,这是一个荒谬的通用要求。 – delnan 2010-08-04 22:59:15

+0

这就是它。通用是的,但老实说,OP的例子是“好的调试器,分析器和可能的REPL”。和大多数的答案在这里:) – 2010-08-04 23:11:44

3

你在看什么对于编程语言之前,你会考虑使用它的选择?

图灵完全是我需要的(尽管不是充分);)

是什么样的语言,这将使你采取通知,并考虑呢?

那么,简洁和可读性可能是我的两个主要因素。我也喜欢丰富的类型系统。

+0

哇,歧视。 ;) – 2010-08-04 21:39:11

2

我想要的是一种不碍事的编程语言。它应该让我考虑手头的问题,而不是如何用语言编写它。

+0

所以你喜欢高级语言。 :D不幸的是,他们在设计上倾向于缓慢而不那么强大。 – 2010-08-04 22:48:55

+0

@Razor Storm:我不认为这是“按设计”。我认为没有足够的时间和精力让他们变得更快更强大,就这些。当然,JavaScript代码无法与手写和完全优化程序集的速度相匹配,但最终我们会达到无关紧要的程度,因为这里会有用于JavaScript/Python/<插入语言的虚拟机>这对于99%的任务来说足够快。 – 2010-08-05 04:06:56

+0

@Razor Storm:另外,还有很多高级语言(主要是功能类语言),它们在设计上其实很快。例如,Haskell甚至可以在某些情况下与C++竞争,特别是涉及到并行时。 – 2010-08-05 04:10:45

2

我不是一个“语言怪胎”,所以当我去寻找一种新语言时,通常是因为我已经知道的任何语言在某种程度上都不是我需要解决的问题的最佳选择 - 因此,我用新语言寻找的主要内容是直接解决当前问题的功能。

除此之外,好的工具支持几乎是一个普遍的要求。

3
  1. 高阶函数
  2. 类型推断(首选)或动态类型
  3. 模式匹配是好的,但不是绝对的要求
  4. 同样为良好的元编程工具
+1

一只小鸟告诉我,有人喜欢OCaml或F#.. :) – Jack 2010-08-04 23:27:59

1

在你考虑使用它之前,你从编程语言中寻找什么?

该语言应该对处理我遇到的任务/问题有用。别的都无所谓。

想一想 - 如果由于某种原因无法使用语言来解决问题,那么可读性,完整性,库,IDE,类型系统和语言功能的可用性有什么意义?

+0

问题是,这些事情意味着你可能会使用该语言来解决你的问题 - 而缺乏这些功能使它可能你将无法解决你的问题,或者至少会更困难。 – 2010-08-05 00:02:54

+0

@Chris Dodd:我不这么认为。我还没有完成至少两种语言的学习(两种功能都很棒),因为它们对于我遇到的任务没有用处。另外,不管你最喜欢的语言有多棒,如果它没有被广泛使用,你会遇到麻烦 - 缺少库,并且获得与该语言相关的编程工作将很困难。有很多人很少使用语言。并没有那么好,但广泛采用的语言。因此,“没有别的事情”。 – SigTerm 2010-08-05 01:05:23

0

这取决于什么语言将被用于。 此外,“功能”可以在问题中更好地定义。

功能的范围可以从“面向对象”,以“动态”,以“JIT编译”,以“强类型”等

0

让语言有一个体面的外交功能接口,使得它可以使用在其世界之外定义的库。 (我说“语言”是因为我希望有一种方法可以做到这一点,而不是几次,每次执行一次。)因此,可以轻松地将语言与现有代码(操作系统,GUI,高级数学库,等等),并开始工作,做有用的事情。没有,语言只能是玩具;我不使用BrainF ** k来做任何相关的事情,这并不是因为它不是图灵完备的,而是因为它不能用图灵完备性来做任何事情。

命名子程序(函数,过程,等等)是一种-的必要了。

0

首先,语言应该给我建,我可以在合理的时间(其中的“合理”的确切值取决于它是多么强大和通用),这让我有效地解决问题,绕到我的头(在大脑周期和打字工作方面,而不是CPU周期),一旦我可以处理它们。换句话说,给我越来越高的抽象,直到他们让我的头部爆炸,然后停止。

当然,我更喜欢的概念,我已经熟悉了很好的实现。例如,Python对迭代器有很大的支持,并且通过添加生成器和生成器表达式来扩展概念(list/dict/set comprehension只是生成器的语法糖)。没有这种强大的迭代器(或根本没有!)的语言更好地为我提供了一种同样或更强大的方式来使用数据结构(例如,递归+模式匹配可以消耗链表,并且在走树时非常方便),或者显示我一种具有不同要求的编程方法/领域(为此语言反过来又是一个很好的解决方案)。我需要有效编程的东西包括一流的函数和某种多态性(最好是参数多态性,但我可以与OOP +标称值相称)。亚型多态如果我必须),理想情况下包括泛型(再次,我是一个参数多态的巨大爱好者)。