开源编程语言的定义是什么?

时间:2009-10-09 23:48:02

标签: open-source programming-languages

像Ruby和Python这样的语言通常被称为开源,但是它们是什么原因呢?

它是开源编译器吗?还是解释器或执行虚拟机?

如果我们谈论编译器,那么C ++是开源的吗?

6 个答案:

答案 0 :(得分:10)

正如其他人所观察到的那样,核心确实没有“开源语言”这样的东西。只有代码才能在最严格的意义上开源。所以可以有开源编译器,运行时,库等。

然而,对于许多语言,实现(编译器/运行时)几乎与语言本身不可分割。这是Ruby,Python等的情况,其中语言由其主要/原始实现有效地定义。虽然这些语言还有其他实现,但主要实现和语言几乎可以互换。在主要实现也是开源的情况下,将它称为开源语言是有道理的,特别是因为这些语言往往具有几乎完全构建并且对开源软件友好的社区。 / p>

答案 1 :(得分:8)

我认为 languages 通常被认为是开源的,而不是实现该语言的软件(无论是编译器还是虚拟机或其他) 。因此,给定的语言可以同时具有开源和非开源实现。例如,有许多闭源C ++编译器,以及开源编译器。

也许人们可以区分由单个实体(例如C#)控制的语言与通过社区贡献(例如Python甚至Java)增长的语言。

答案 2 :(得分:1)

我经常听到“开源语言”适用于根据社区意愿修改的语言。例如,Python有PEP过程,它允许任何有兴趣改变语言本身的语法/语义的人。

C和C ++也是社区驱动的,但由于它们的年龄和普遍性,任何变化都需要不可思议的标准化工作。 C ++ 0x已经设计多年,C只有3个主要版本(K& R,C89,C99)。

由具有极少社区输入的单个实体(例如Java或C#)控制的语言通常被视为“已关闭”,无论可用的实现如何。有可用的Java和.NET VM的GPL实现,但语言的演变不是社区驱动的。有关这可能造成的悲痛的一个例子,请参阅为Java添加闭包的努力。

答案 3 :(得分:1)

我必须承认我从来没有听说过某种语言被称为开源,但我想有一种观察方式就是你给出的两个例子,Ruby和Python,(AFAIK,我不是两者都是专家)非编译语言,而C和C ++都是编译的。

因此,对于客户端Ruby和Python应用程序,使代码可供用户使用,因为它在运行时被解释,而对于编译语言,这是可选的,因为只有编译后的可执行文件是必需的。

当然另一方面,许多Ruby和Python应用程序将是服务器端,例如,作为网站实现的一部分,因此代码在服务器上进行解释,因此最终用户永远不会看到。 / p>

答案 4 :(得分:1)

人们经常使用术语“语言”与整个编程环境同义,包括IDE,实际语言,运行时环境/体系结构和代码库/框架。因此,当您说“开放”时,我立即想到Sun Microsystems将Java框架和VM的代码发布为开源。

然后您就拥有C#/ .Net这样的语言,核心框架类和CLR规范作为标准提交给ECMA。像Mono这样的第三方可以实现这些开放的标准化组件,而无需对技术进行许可,因此即使Microsoft的实施是封闭源(或者只是部分开放)和商业产品,它也可以被描述为在某种程度上开放。在Mono的案例中,他们实现了一些非标准化/开放的外围框架类,这可能是一个合法的灰色区域。

答案 5 :(得分:0)

我们是否可以主要根据GNU许可证来考虑开源语言?或者那应该只是实体[社区,公司等]驱动的标准?