Каково определение языка программирования с открытым исходным кодом?
Языки, такие как 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? Или это должен быть только критерий, основанный на сущности [сообщества, компании и т.д.]?