16-10-2023
Семантика: | |
---|---|
Тип исполнения: | |
Появился в: | |
Автор(ы): | |
Релиз: |
5.4.6[3] (16 августа 2012) |
Типизация данных: | |
Испытал влияние: | |
Сайт: |
www.php.net |
PHP (англ. PHP: Hypertext Preprocessor — «PHP: препроцессор гипертекста»; первоначально Personal Home Page Tools[4] — «Инструменты для создания персональных веб-страниц») — скриптовый язык[5] программирования общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков программирования, применяющихся для создания динамических веб-сайтов.[6]
Язык и его интерпретатор разрабатываются группой энтузиастов в рамках проекта с открытым кодом.[7] Проект распространяется под собственной лицензией, несовместимой с GNU GPL.
Содержание |
В области программирования для сети Интернет PHP — один из популярных скриптовых языков (наряду с JSP, Perl и языками, используемыми в ASP.NET) благодаря своей простоте, скорости выполнения, богатой функциональности, кроссплатформенности и распространению исходных кодов на основе лицензии PHP.
Популярность в области построения веб-сайтов определяется наличием большого набора встроенных средств для разработки веб-приложений[8]. Основные из них:
В настоящее время PHP используется сотнями тысяч разработчиков. Согласно рейтингу корпорации TIOBE, базирующемся на данных поисковых систем, в апреле 2011 года PHP находился на 5 месте среди языков программирования.[6] К крупнейшим сайтам, использующим PHP, относятся Facebook, ВКонтакте, Wikipedia и др.
Входит в LAMP — распространённый набор программного обеспечения для создания и хостинга веб-сайтов (Linux, Apache, MySQL, PHP).
Хотя PHP и не слишком распространён в данном качестве, его можно использовать и для создания GUI-приложений.
Для создания кроссплатформенных приложений служат пакеты PHP-GTK и PHP-Qt, представляющие собой обёртки для соответствующих популярных библиотек виджетов.
Для тех, кого интересует программирование с использованием Windows API, существует две альтернативы. Во-первых, это open source пакет WinBinder[9]. Его ядро представляет собой написанное на C расширение php — php_winbinder.dll. В состав WinBinder включён также визуальный редактор форм (см. скриншот), написанный с использованием самого WinBinder. Но, по сути, WinBinder является простой обёрткой к WinAPI, и программирование с его использованием — достаточно низкоуровневое.
Второй альтернативой является интегрированная среда Devel Studio[10], ориентированная, прежде всего, на начинающих программистов.[11]
Также существует реализация PHP для .NET/Mono под названием Phalanger. Результатом компиляции PHP кода в Phalanger может быть любое .NET-приложение, будь то серверное или десктопное.
В 1994 году датский программист Расмус Лердорф создал набор скриптов на Perl/CGI для вывода и учёта посетителей его онлайн-резюме, обрабатывающий шаблоны HTML-документов. Лердорф назвал набор Personal Home Page (Личная Домашняя Страница). Вскоре функциональности и быстроты Perl — интерпретатора скриптов — перестало хватать, и Лердорф разработал с использованием языка C новый интерпретатор шаблонов PHP/FI (англ. Personal Home Page / Forms Interpreter — «Личная Домашняя Страница / Интерпретатор форм»).
В 1997 году после длительного бета-тестирования вышла вторая версия обработчика, написанного на C — PHP/FI 2.0. Её использовали около 1 % (приблизительно 50 тысяч) всех интернет-доменов мира.[4]
Версия PHP 3.0 подверглась значительной переработке, определившей современный облик и стиль языка программирования. В 1997 году два израильских программиста, Энди Гутманс и Зеев Сураски, полностью переписали код интерпретатора. PHP 3.0 был официально выпущен в июне 1998 года.[4]
Одной из сильнейших сторон PHP 3.0 была возможность расширения ядра дополнительными модулями. Впоследствии интерфейс написания расширений привлёк к PHP множество сторонних разработчиков, работающих над своими модулями, что дало PHP возможность работать с огромным количеством баз данных, протоколов, поддерживать большое число API. Большое количество разработчиков привело к быстрому развитию языка и стремительному росту его популярности. С этой версии акроним php расшифровывается как «PHP: hypertext Preprocessor», вместо устаревшего «Personal Home Page».
К зиме 1998 года, практически сразу после официального выхода PHP 3.0, Энди Гутманс и Зеев Сураски начали переработку ядра PHP. В задачи входило увеличение производительности сложных приложений и улучшение модульности базиса кода PHP. Новый движок, названный Zend Engine, успешно справлялся с поставленными задачами и впервые был представлен в середине 1999 года. PHP 4.0, основанный на этом движке и принёсший с собой набор дополнительных функций, официально вышел в мае 2000 года. В дополнение к улучшению производительности, PHP 4.0 имел ещё несколько ключевых нововведений, таких как поддержка сессий, буферизация вывода, более безопасные способы обработки вводимой пользователем информации и несколько новых языковых конструкций.
Пятая версия PHP была выпущена разработчиками 13 июля 2004 года. Изменения включают обновление ядра Zend (Zend Engine 2), что существенно увеличило эффективность интерпретатора. Введена поддержка языка разметки XML. Полностью переработаны функции ООП, которые стали во многом схожи с моделью, используемой в Java. В частности, введён деструктор, открытые, закрытые и защищённые члены и методы, окончательные члены и методы, интерфейсы и клонирование объектов. В последующих версиях также были введены пространства имён, замыкания и целый ряд достаточно серьёзных изменений, количественно и качественно сравнимых с теми, которые появились при переходе на PHP 5.0.
Шестая версия PHP разрабатывалась[12] с октября 2006 года. Было сделано[13][14] множество нововведений, как, например, исключение из ядра регулярных выражений POSIX и «длинных» суперглобальных массивов, удаление директив safe_mode, magic_quotes_gpc и register_globals из конфигурационного файла php.ini. Одним из основных новшеств должна была стать поддержка Юникода.[15]. Однако в марте 2010 года разработка PHP6 была признана бесперспективной[16] из-за сложностей с поддержкой Юникода. Исходный код PHP6 перемещён на ветвь, а основной линией разработки стала версия 5.4.
Синтаксис PHP подобен синтаксису языка Си. Некоторые элементы, такие как ассоциативные массивы и цикл foreach, заимствованы из Perl.
Для работы программы не требуется описывать какие-либо переменные, используемые модули и т. п. Любая программа может начинаться непосредственно с оператора PHP.
Простейшая программа Hello world на PHP выглядит следующим образом:
<?php echo 'Hello, world!'; ?>
PHP исполняет код, находящийся внутри ограничителей, таких как <?php ?>
. Всё, что находится вне ограничителей, выводится без изменений. В основном это используется для вставки PHP-кода в HTML-документ, например, так:
<html> <head> <title>Тестируем PHP</title> </head> <body> <?php echo 'Hello, world!'; ?> </body> </html>
Помимо ограничителей <?php ?>
, допускается использование дополнительных вариантов, таких как <? ?>
и <script language="php"> </script>
. Кроме того, до версии 6.0 допускается использование ограничителей языка программирования ASP <% %>
(конструкции <? ?>
и <% %>
могут быть выключены в конфигурационном файле php.ini).
Имена переменных начинаются с символа $, тип переменной объявлять не нужно. Имена переменных, функций и классов чувствительны к регистру. Константы также чувствительны к регистру. Переменные обрабатываются в строках, заключённых в апострофы или двойные кавычки, и heredoc-строках (строках, созданных при помощи оператора <<<).
PHP рассматривает переход на новую строку как пробел, так же как HTML и другие языки со свободным форматом. Инструкции разделяются с помощью точки с запятой (;), за исключением некоторых случаев, после объявления конструкции if/else и циклов.
PHP поддерживает три типа комментариев: в стиле языка Си (ограниченные /* */), C++ (начинающиеся с // и идущие до конца строки) и оболочки UNIX (с # до конца строки).
PHP является языком программирования с динамической типизацией, не требующим указания типа при объявлении переменных, равно как и самого объявления переменных. Преобразования между скалярными типами зачастую осуществляются неявно без дополнительных усилий (впрочем, PHP предоставляет широкие возможности и для явного преобразования типов).
К скалярным типам данных относятся:
К нескалярным типам относятся:
К псевдотипам[17] относятся:
Диапазон целых чисел (integer) в PHP зависит от платформы (обычно, это диапазон 32-битных знаковых целых чисел, то есть, от −2 147 483 648 до 2 147 483 647). Числа можно задавать в десятичной, восьмеричной и шестнадцатеричной системах счисления. Диапазон вещественных чисел (double), также, зависит от платформы (для 32-битной архитектуры диапазон позволяет оперировать числами от ±1.7×10−308 до ±1.7×10+308).
PHP предоставляет разработчикам логический тип (boolean), способный принимать только два значения TRUE («истина») и FALSE («ложь»). При преобразовании в логический тип число 0, пустая строка, ноль в строке «0», NULL и пустой массив считаются равными FALSE. Все остальные значения автоматически преобразуются в TRUE.
Специальный тип NULL предназначен для переменных без определённого значения. Единственным значением данного типа является константа NULL. Тип NULL принимают неинициализированные переменные, переменные инициализированные константой NULL, а также переменные, удалённые при помощи конструкции unset().
Ссылки на внешние ресурсы имеют тип «ресурс» (resource). Переменные данного типа, как правило, представляют собой дескриптор, позволяющий управлять внешними объектами, такими как файлы, динамические изображения, результирующие таблицы базы данных и т. п.
Массивы (array) поддерживают числовые и строковые ключи и являются гетерогенными. Массивы могут содержать значения любых типов, включая другие массивы. Порядок элементов и их ключей сохраняется. Не совсем корректно называть php-массивы массивами, на самом деле это, скорее всего, упорядоченный хеш. Возможно неожиданное поведение при использовании цикла for
со счетчиком вместо foreach
. Так, например, при сортировке массива с численными индексами функциями из стандартной библиотеки, сортируются и ключи тоже.
Указатель на функцию в PHP может быть представлен замыканием или псевдотипом callback. Замыкание доступно с версии 5.3 и в коде выглядит как простое определение функции, в которую явно можно утянуть значения из контекста, например:
function($args..$argsN) use($ctxVar,$ctxVar1) { definition ; }
callback тип может быть представлен:
Для проверки является ли значение вызываемым следует использовать is_callable($var)
Обращение к переменным осуществляется с помощью символа $, за которым следует имя переменной. Данная конструкция может быть применена также для создания динамических переменных и функций.[18] Например:
$a = 'I am a'; // Запись значения в переменную $a echo $a; // Вывод переменной $а $b = 'a'; echo $$b; // Вывод переменной $а (дополнительный $ перед переменной $b) echo ${'a'}; // Вывод переменной $a function_name(); // Вызов функции function_name $c = 'function_name'; $c(); // Вызов функции function_name, $d = 'Class_name'; $obj = new Class_name; // Создание объекта класса Class_name $obj = new $d(); // Создание объекта класса Class_name $obj->b; // Обращение к полю b объекта $obj->c(); // Вызов метода c() объекта $obj->$b; // Обращение к полю a объекта, так как $b = 'a' $obj->$c(); // Вызов метода function_name() объекта, так как $c = 'function_name'
В PHP echo и print не являются функциями[19] (хотя print имеет возвращаемое значение), а являются синтаксическими единицами. При их использовании можно опустить скобки.
Суперглобальными массивами (англ. Superglobal arrays) в PHP называются предопределённые массивы, имеющие глобальную область видимости без использования директивы global. Большая часть этих массивов содержит входные данные запроса пользователя (параметры GET-запроса, поля форм при посылке методом POST, куки и т. п.).
Все суперглобальные массивы, кроме $GLOBALS и $_REQUEST, имеют устаревшие аналоги с длинными именами, которые доступны вплоть до пятой версии PHP (в шестой версии планируется их исключение). Таким образом, обращения $_GET['year'] и $HTTP_GET_VARS['year'] идентичны (за исключением области видимости: массивы с «длинными» именами не являются суперглобальными).
PHP поддерживает широкие объектно-ориентированные возможности, полная поддержка которых была введена в пятой версии языка.
Класс в PHP объявляется с помощью ключевого слова class. Методы и поля класса могут быть общедоступными (public, по умолчанию), защищёнными (protected) и скрытыми (private). PHP поддерживает все три основных механизма ООП — инкапсуляцию, полиморфизм и наследование (родительский класс указывается с помощью ключевого слова extends после имени класса). Поддерживаются интерфейсы (ставятся в соответствие с помощью implements). Разрешается объявление финальных, абстрактных методов и классов. Множественное наследование классов не поддерживается, однако класс может реализовывать несколько интерфейсов. Для обращения к методам родительского класса используется ключевое слово parent.
Начиная с версии 5.4.0 множественное наследование может быть реализовано с помощью механизма особенностей (англ. trait). Особенности похожи на примеси (англ. mixins), за исключением того что для них нельзя напрямую создать экземпляр. Повторное использование кода заключено в использовании кода особенности в нескольких классах. Допускается использовать в одном классе несколько особенностей. Механизм особенностей имеет средства разрешения конфликтов имён. При запуске программы код особенности будет «вкомпилирован» в код содержащего его класса.
Классы в PHP имеют ряд специальных методов (англ. magic methods), начинающихся с двух символов подчёркивания. Особо стоит отметить конструктор (__construct(), в версиях до 5.0 конструктором служил метод, одноимённый с классом) и деструктор (__destruct()), а также методы чтения (__get()) и записи (__set()), свёртывания (__sleep()) и развёртывания (__wake()), клонирования (__clone()) и др. Эти методы являются достаточно гибким инструментом: переопределяя их, можно добиться существенного изменения поведения объекта.
Экземпляры класса создаются с помощью ключевого слова new, обращение к полям и методам объекта производится с использованием оператора ->. Для доступа к членам класса из его методов используется переменная $this.
class C1 extends C2 implements I1, I2 { private $a; protected $b; function __construct($a, $b) { parent::__construct($a, $b); $this->a = $a; $this->b = $b; } public function plus() { return $this->a + $this->b; } /* ............... */ } $d = new C1(1, 2); echo $d->plus(); // 3
Начиная с пятой версии PHP, объекты передаются по ссылке:
class a { public $color = 'red'; } $a = new a(); echo $a -> color; // red $b = $a; $b -> color = 'blue'; echo $a -> color; // blue
«Paamayim Nekudotayim» или просто «двойное двоеточие». Используя эту лексему, программист может обращаться к константам, статическим или перегруженным свойствам или методам класса. При обращении к этим элементам извне класса, программист должен использовать имя этого класса. «Paamayim Nekudotayim» на первый взгляд может показаться странным словосочетанием для обозначения двойного двоеточия. Однако, во время создания Zend Engine версии 0.5 (который входил в PHP3), Andi и Zeev выбрали[20] именно это обозначение. «Paamayim Nekudotayim» действительно значит «двойное двоеточие» на иврите. Это обозначение не менялось ни разу в течение всего времени разработки PHP.[21]
<?php class MyClass { const CONST_VALUE = 'Значение константы'; } // Использование :: вне объявления класса echo MyClass::CONST_VALUE; ?>
PHP-скрипты обычно обрабатываются интерпретатором в порядке[1], обеспечивающем кроссплатформенность разработанного приложения:
Для увеличения быстродействия приложений возможно использование специального программного обеспечения, так называемых акселераторов. Принцип их работы заключается в кэшировании однажды сгенерированного байт-кода в памяти и/или на диске, таким образом, из процесса работы приложения исключаются этапы 1—3, что в общем случае ведёт к значительному ускорению работы.
Важной особенностью является то, что разработчику нет необходимости заботиться о распределении и освобождении памяти. Ядро PHP реализует средства для автоматического управления памятью; вся выделенная память возвращается системе после завершения работы скрипта.[22]
Интерпретатор состоит из ядра и подключаемых модулей, «расширений», представляющих собой динамические библиотеки. Расширения позволяют дополнить базовые возможности языка, предоставляя возможности для работы с базами данных, сокетами, динамической графикой, криптографическими библиотеками, документами формата PDF и тому подобным. Любой желающий может разработать своё собственное расширение и подключить его. Существует огромное количество расширений, как стандартных, так и созданных сторонними компаниями и энтузиастами, однако в стандартную поставку входит лишь несколько десятков хорошо зарекомендовавших себя. Множество расширений доступно в репозитории PECL.
Интерпретатор PHP имеет специальный конфигурационный файл — php.ini, содержащий множество настроек, изменение которых влияет на поведение интерпретатора.[23] Имеется возможность отключить использование ряда функций, изменить ограничения на используемую скриптом оперативную память, время выполнения, объём загружаемых файлов, настроить журналирование ошибок, работу с сессиями и почтовыми сервисами, подключить дополнительные расширения, а также многое другое. Во время выполнения скрипта эти параметры могут быть изменены командой ini_set.[24]
Существует несколько способов использования интерпретатора PHP:
PHP имеет несколько пасхальных яиц (шуток). Передача специальных GET-параметров любому php-скрипту приводит к выводу различных изображений.
Например:
любой_сценарий.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
введя это значение в адресную строку браузера можно увидеть различные изображения, в зависимости от версии интерпретатора:
Следующие два значения позволят увидеть стандартный логотип PHP и ZEND, соответственно:[31]
любой_сценарий.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 любой_сценарий.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42
Эти значения можно получить и непосредственно в PHP-скрипте с помощью функций php_logo_guid и zend_logo_guid для логотипа Zend.
Также имеется специальное значение для отображения списка всех авторов PHP (4,5):[31]
любой_сценарий.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
В силу популярности языка PHP и желания увеличить быстродействие основанных на нём веб-приложений, создано несколько альтернативных компиляторов, близких к PHP языку. Так в феврале 2010 года компания Facebook открыла[32][33] свой компилятор PHP — HipHop (HPHP, Hyper-PHP) генерирующий код на C++, с последующей компиляцией в машинный код с помощью gcc.
В таблице представлен список существующих на сегодняшний момент альтернативных реализаций.
Название | Лицензия | Результат компиляции |
---|---|---|
HipHop | PHP License | C++, машинный код |
Roadsend PHP | GPL/LGPL | C, машинный код |
Phalanger | Ms SS-PL[34] (Shared source) | Microsoft IL |
Quercus (в составе веб-сервера Resin) | GPL или коммерческая | JVM |
PHC | BSDL | C, машинный код |
Pipp[35] | Artistic License и GNU GPL | Parrot |
На сайте PHP compiler performance.
С использованием PHP разработано множество приложений, которые широко используются на различных сайтах, форумах и блогах.
Для быстрой разработки приложений на PHP было создано множество фреймворков, наиболее популярными из которых являются Zend Framework, CakePHP, Symfony, CodeIgniter, Kohana и Yii[36].
Название | Лицензия | Сайт |
---|---|---|
Komodo | Mozilla tri-license (MPL/LGPL/GPL)[37] | http://www.activestate.com |
JetBrains PhpStorm | Trial | http://www.jetbrains.com/phpstorm/ |
PHP Development Tools | Eclipse Public License | http://www.eclipse.org/pdt/ |
Zend Studio | Shareware | http://www.zend.com/products/zend_studio/ |
Aptana Studio | GNU GPL | http://www.aptana.org |
phpDesigner | Shareware | http://www.mpsoftware.eu/ |
PHP Expert Editor | Shareware[38] | http://www.phpexperteditor.com/ |
NetBeans IDE | CDDL | http://www.netbeans.org/ |
RadPHP XE | Trial | http://www.embarcadero.com/products/radphp/ |
NuSphere | Trial | http://www.nusphere.com/ |
KDevelop[39] | GNU GPL | http://www.kdevelop.org/ |
Microsoft WebMatrix | Freeware | http://www.microsoft.com/web/webmatrix/ |
Notepad++ | GNU GPL | http://notepad-plus-plus.org/ |
Sublime Text 2 | Proprietary software | http://www.sublimetext.com/2/ |
PHP предоставляет разработчикам большое количество самых разнообразных функций, которые попали в язык из расширений, создаваемых разными группами программистов. В результате синтаксис языка не согласован, например, часть функций для работы с массивами начинается с префикса array_
, другая часть этим префиксом не обладает. Названия части строковых функций начинается с префикса str
, другие функции таким префиксом не обладают. В тех же строковых функциях обрабатываемая строка может передаваться как в качестве первого, так и в качестве последнего аргумента, что вызывает путаницу у программистов, и, следовательно, требует постоянного обращения к документации. Некоторые задачи, например, разбиение строки на массив или подстроки, решаются несколькими функциями.
Другая причина отсутствия ортогональности в PHP заключается в особенностях появления этого языка на свет. В отличие от подавляющего большинства остальных языков программирования, PHP не был изначально задуман как полноценный язык программирования, а постепенно вырос из шаблонизатора для Perl. Это привело как к появлению в первоначальном варианте языка некоторых спорных решений, так и к отсутствию контроля со стороны создателя языка, который бы следил за стройностью его архитектуры.
Нижесказанное относится в большей степени к php>=5.3.0. Версии PHP < 5.3.0 cохряняет весьма хорошую обратную совместимость.
Код, созданный для более ранних версий языка, зачастую не работает или работает некорректно с более поздними версиями языка[40]. В более поздних версиях исключаются конструкции, методики, функции, применявшиеся ранее. В результате, приложения, созданные несколько лет назад, практически теряют работоспособность для современных версий языка и требуют значительной модификации. Такие изменения обусловлены двумя факторами: устранением несогласованного синтаксиса и устранением конструкций, поощряющих создание небезопасного кода.
В новых версиях линейки 5.3.x большое количество функций было признано устаревшими, их поддержка не планируется в новых версиях языка[41], что вызывает несовместимость со скриптами, которые используют устаревшие функции. Также для версии 5.3 на данный момент отсутствует программное обеспечение Zend Optimizer. Однако разработчики планировали выпустить его в 2010 году[42]
Надо отметить, что противоречие между обратной совместимостью и процессом развития — одна из ключевых проблем в разработке программного и аппаратного обеспечения. При работе над скриптовыми языками время от времени происходит резкая смена его архитектуры (а порой и парадигмы), обычно сопровождающаяся сменой первой цифры в номере версии. Так, в настоящее время идёт постепенный переход на новую ветвь языка Python — 3.x, в стадии тестирования находится Perl 6, являющийся, по сути, новым perl-подобным языком. При этом принято выпускать переходные версии, в которых постепенно вводятся новые конструкции, а использование устаревших вызывает вывод предупреждений. К таким переходным версиям относится и PHP 5.3.
Поддержка строк с многобайтовыми кодировками, такими как UTF-8 реализуется через отдельные расширения mbstring
и iconv
, на уровне ядра поддержка отсутствует, однако с версии PHP 4.2.0 есть возможность переопределять стандартные функции работы со строками, подменяя их на аналоги из mbstring.
В языке не предусмотрена возможность создания многопоточных приложений и отсутствует поддержка синхронизированного доступа к ресурсам, однако реализуема при помощи расширения PCNTL[43].
Согласно исследованиям одного из крупных российских порталов трудоустройства[44]:
PHP | |
---|---|
Люди | Энди Гутманс • Расмус Лердорф • Зеев Сураски |
Ресурсы | Zend Engine • Библиотеки • PEAR • Редакторы • Акселератор |
Реализации | HipHop • Quercus • Project Zero • Phalanger • Parrot |
Фреймворки | AppFlower • CakePHP • CodeIgniter • Drupal • FuelPHP • Horde • Joomla! • Lithium • Midgard • MODx • Qcodo • Seagull • SilverStripe • Symfony • TYPO3 • Xaraya • Yii • Zend Framework • Zeta Components |
Тестирование | PHPUnit • PHP Unit Testing Framework • SimpleTest |
ORM | Propel • Doctrine |
IDE | AppFlower • Eclipse PDT • PhpStorm • NetBeans • RadPHP • PHPEdit • Zend Studio |
Компилятор | Phalanger |
Widget toolkit | wxPHP • PHP-GTK • PHP-Qt |
• Категория |
Основные языки программирования (сравнение • IDE • история • хронология) | |
---|---|
Используемые в разработке |
Ада • APL • Язык ассемблера • ActionScript • ABAP/4 • AutoIt • AWK • Бейсик • Си • Кобол • C++ • C# • Cω • Clarion • Clojure • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • Euphoria • F# • Форт • Фортран • Gambas • Go • Groovy • HAL/S • Haskell • Icon • Java • JavaScript • Limbo • Lua • Модула-3 • Object Pascal • Objective-C • OCaml • Oz • Parser • Паскаль • Компонентный Паскаль • Perl • PHP • PowerBASIC • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic (.NET) |
Академические | |
IEC 61131-3 |
Instruction List • ST • FBD • Ladder Diagram (LD) • SFC |
Прочие | |
Эзотерические | |
Визуальные |
Свободное и открытое программное обеспечение | |
---|---|
Главное | |
История |
GNU • Linux • Mozilla (Application Suite • Firefox • Thunderbird) |
Организации |
ASF • AOSP • Blender Foundation • Eclipse Foundation • FreeBSD Foundation • freedesktop.org • FSF • FSMI • GNOME Foundation • Проект GNU • Google Code • KDE e.V. • Linux Foundation • Mozilla Foundation • OSGF • OSI • ReactOS Foundation • Software Freedom Conservancy • SourceForge • Symbian Foundation • The Document Foundation • Xiph.Org • XMPP Standards Foundation • X.Org Foundation |
Лицензии |
Apache • Artistic • Beerware • BSD • GNU GPL • GNU LGPL • ISC • MIT • MPL • Ms-PL/RL • zlib • Public domain / CC0 • WTFPL • Лицензии, одобренные FSF • Пермиссивные лицензии • Разнообразие лицензий |
Проблемы | |
Прочее |
Php.