Каково определение языка программирования с открытым исходным кодом?

Языки, такие как Ruby и Python, обычно называются open source, но что их делает?

Является ли это компилятором с открытым исходным кодом? или интерпретатором или исполняющей виртуальной машиной?

Если мы говорим о компиляторе, то С++ будет открытым исходным кодом?

Ответы

Ответ 1

В основе, как наблюдали другие, действительно не существует такого понятия, как "язык с открытым исходным кодом". Только код может быть открытым исходным кодом в строгом смысле слова. Таким образом, могут быть компиляторы с открытым исходным кодом, среды выполнения, библиотеки и т.д.

Однако на многих языках реализация (компилятор/время выполнения) почти неотделима от самого языка. Это относится к Ruby, Python и т.д., Где язык эффективно определяется его первичной/первоначальной реализацией. Хотя существуют и другие реализации этих языков, основная реализация и язык практически взаимозаменяемы. В таких случаях, когда первичная реализация также является открытым исходным кодом, имеет смысл ссылаться на нее как на языки с открытым исходным кодом, тем более, что такие языки имеют сообщество, которое также почти полностью создано и дружественное к программному обеспечению с открытым исходным кодом.

Ответ 2

Я не думаю, что языки, как правило, считаются с открытым исходным кодом, а скорее программным обеспечением, реализующим язык (будь то компилятор или виртуальная машина или что-то еще). Из этого следует, что данный язык может иметь как реализацию с открытым исходным кодом, так и не-открытым исходным кодом. Например, существует много компиляторов С++ с закрытым исходным кодом, а также с открытым исходным кодом.

Возможно, можно было бы провести различие между языком, который контролируется одним объектом (например, С#) по сравнению с языком, который выращен через вклад сообщества (например, Python или даже Java).

Ответ 3

Я обычно слышу "язык с открытым исходным кодом", применяемый к языкам, которые изменяются в соответствии с пожеланиями сообщества. Например, Python имеет процесс PEP, который позволяет любому желающему изменить синтаксис/семантику самого языка.

C и С++ также управляются сообществом, хотя из-за их возраста и вездесущности любые изменения требуют невероятной работы по стандартизации. С++ 0x разрабатывался уже много лет, и C видел только 3 основные версии (K & R, C89, C99).

Языки, которые контролируются одним объектом с очень небольшим доступом к сообществу, таким как Java или С#, обычно считаются закрытыми независимо от доступных реализаций. Существуют реализации GPL'd как виртуальных машин Java, так и .NET, но эволюция языка не зависит от сообщества. Например, это может привести к горе, см. Попытки добавить замыкания на Java.

Ответ 4

Я должен признать, что я никогда не слышал о том, что язык называется открытым исходным кодом, но я предполагаю, что один из способов его просмотра состоит в том, что два примера, которые вы указали, Ruby и Python, (AFAIK, и я не являюсь эксперт вообще) оба некомпилированных языка, тогда как C и С++ скомпилированы.

Итак, для клиентских приложений Ruby и Python вам необходимо сделать код доступным для пользователя, поскольку он интерпретируется во время выполнения, тогда как для скомпилированных языков это необязательно, поскольку требуется только скомпилированный исполняемый файл.

Конечно, с другой стороны, многие приложения Ruby и Python будут серверными, например, как часть реализации веб-сайта, поэтому код интерпретируется на сервере и поэтому никогда не отображается конечным пользователем.

Ответ 5

Люди часто используют термин "язык" синонимом всей среды программирования, охватывающей IDE, фактический язык, среду исполнения/архитектуру и библиотеки/рамки кода. Поэтому, когда вы говорите "open", я сразу вспоминаю, что Sun Microsystems выпускает код для фреймворка Java и VM как открытый источник.

Затем у вас есть С#/. Net, где язык, основные классы каркаса и спецификация CLR представлены в ECMA в качестве стандарта. Третьи стороны, такие как Mono, могут реализовать эти открытые, стандартизованные компоненты без лицензии на технологию, и поэтому ее можно описать как открытую до такой степени, хотя реализация Microsoft является закрытым источником (или только частично открытым в любом случае) и коммерческим продуктом. В случае Mono они реализуют некоторые из классов инфраструктуры периферии, которые не стандартизированы/открыты, что потенциально является законной серой областью.

Ответ 6

Можно ли рассматривать язык с открытым исходным кодом в основном с точки зрения лицензий GNU? Или это должен быть только критерий, основанный на сущности [сообщества, компании и т.д.]?