Аннотация |
Краткое сравнение основных языков программирования в Linux, а также библиотек для создания графических интерфейсов пользователя (GUIs) в Linux. |
Linux можно назвать интерактивнай операционной системой, потому что она позволяет пользователям учавствовать в ее разработке. Для большинства начинающих разработчиков многие существующие языки программирования могут показаться очень сложными. Этот документ поможет вам разобраться в их преимуществах и недостатках (которые я отметил).
Моей целью не является выявление оптимального языка. Каждый из них является инструментом для решения определенных задач. Вы можете о них узнать у своих знакомых, но такая информация будет довольно спорной. Воспользовавшись главой, содержащей ссылки, вы можете самостоятельно получить информацию об этих языках.
Существует целая плеяда языков и библиотек для Linux, этот документ затрагивает лишь некоторые из них. Я постарался быть беспристрастным, но не смог сделать обозрение всех языков. Так как мои рассуждения основываются на личном опыте, то я бы посоветовал серьезным разработчикам заглянуть и на официальные сайты.
Этот документ один из последних добавлений в LDP, поэтому я еще не получил отзывов о его содержании. Тем не менее, надеюсь, он будет полезен всем интересующимся программированием в Linux, в особенности, начинающим. Знак вопроса в таблицах означает недостаток сведений. Если вы ей владеете, то проинформируйте меня об этом.
Вы можете найти последние версии по адресу http://www.helsinki.fi/~rvaranka/Computer/Linux/HOWTO/
The following license terms apply to all LDP documents, unless otherwise stated in the document. The LDP documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, provided that this license notice is displayed in the reproduction. Commercial redistribution is permitted and encouraged. Thirty days advance notice via email to the author(s) of redistribution is appreciated, to give the authors time to provide updated documents.
All modified documents, including translations, anthologies, and partial documents, must meet the following requirements:
The modified version must be labeled as such.
The person making the modifications must be identified.
Acknowledgement of the original author must be retained.
The location of the original unmodified document be identified.
The original author's (or authors') name(s) may not be used to assert or imply endorsement of the resulting document without the original author's (or authors') permission.
In addition it is requested that:
The modifications (including deletions) be noted.
The author be notified by email of the modification in advance of redistribution, if an email address is provided in the document.
As a special exception, anthologies of LDP documents may include a single copy of these license terms in a conspicuous location within the anthology and replace other copies of this license with a reference to the single copy of the license without the document being considered ``modified'' for the purposes of this section.
Mere aggregation of LDP documents with other documents or programs on the same media shall not cause this license to apply to those other works.
All translations, derivative documents, or modified documents that incorporate any LDP document may not have more restrictive license terms than these, except that you may require distributors to make the resulting document available in source format.
Авторские права на русский перевод этого текста принадлежат ╘ 2000 ASPLinux Все права зарезервированы.
Этот документ является частью проекта Linux HOWTO.
Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но так или иначе автор текста и автор перевода желали бы знать о таких дистрибутивах.
Все переводы и производные работы, выполненные по документам Linux HOWTO должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO с которым можно связаться по адресу приведенному ниже.
Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: <linux-howto@metalab.unc.edu>, или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу <linux-howto@asplinux.ru>
ЭТОТ ДОКУМЕНТ ОХВАТЫВАЕТ ОЧЕНЬ БОЛЬШУЮ И ПОСТОЯННО МЕНЯЮЩУЮСЯ ОБЛАСТЬ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ. ПО ЭТОЙ ПРИЧИНЕ, ИНФОРМАЦИЯ В ЭТОМ ДОКУМЕНТЕ МОЖЕТ БЫТЬ НЕВЕРНОЙ ИЛИ УСТАРЕВШКЙ. ИСПОЛЬЗУЙТЕ ЭТОТ ДОКУМЕНТ И ИНФОРМАЦИЮ, В НЕМ СОДЕРЖАЩУЮСЯ, ИСКЛЮЧИТЕЛЬНО НА СВОЙ СТРАХ И РИСК. АВТОР НЕ ДАЕТ НИКАКИХ ГАРАНТИЙ, ПРЯМЫХ ИЛИ КОСВЕННЫХ.
Вы можете послать свои отзывы и предложения автору по адресу: risto.varanka@helsinki.fi.
Домашняя страничка автора находится по адресу http://www.helsinki.fi/~rvaranka/.
Я благодарен нескольким людям, которые консультировали меня по вопросам различных языков. Эти консультации дали мне возможность рассмотреть все языки с точки зрения различных сторон применения. В особенности, я бы хотел поблагодарить людей из чата RCNet #linux: Morphy, Bluesmurf, Vadim, Zonk^, Rikkus и других, чьи имена я, к сожалению, не помню. Большое спасибо Stig Erik Sandoe за полезные советы и комментарии.
Исчерпывающий список библиотек и инструментов разработчика обеспечения в Linux:
The Hacker FAQ Это еще один интересный текст написанный Eric S. Raymond. Он написан для новичков в разработке программного обеспечения в Linux. Там затронуты аспекты культурного и психологического плана, в связи с разработкой программного обеспечения с общедоступными исходными текстами.
LDP documents покрывают общие темы программирования, включая Reading List HOWTO и Руководство разработчика в Linux (Linux Programmer's Guide) - еще несколько написаны на более узкие темы.
C, Lisp и Perl являются традиционными языками программирования в системе GNU/Linux; Python, PHP, Java и C++ присоединились к их числу совсем недавно.
Название языка.
Указывает, насколько язык удовлетворяет потребности людей с небольшим опытом программирования. Язык, отмеченный ``да'', должен быть прост для изучения новичком.
Как быстро ваши приложения будут работать, когда вы выпустите их в виде готового продукта. Эффективность зависит более от личных навыков алгоритмического программирования, чем от фактического языка. Как правило, C, C++ и Fortran являются иногда необходимыми, потому что они могут решать больше задач, в отличии от других языков - с другой стороны они могут быть неприменимы для достижения желаемой цели. (Одна идея для тестирования языков состояла в том, чтобы осуществить простой алгоритм сортировки во всех из них, а затем сравнивать продолжительность выполнения задания. Кто-нибудь хочет помочь мне в этом?)
Объектно-ориентированное программирование - важная составляющая программирования, которая получает все большее распространение. В объектно-ориентированном программировании, структуры данных и алгоритмы интегрированы в модули, часто называемые классами. ООП часто контрастирует с процедурным программированием (которое использует разделение алгоритмов и структуры данных). Это строго не зависит от языка: вы можете осуществлять ООП на языках, не причисляемых к объектно-ориентированным (C например), и программирование в процедурном стиле на языках, причисляемых к ОО. Я причислил к объектно-ориентированным языки, которые имеют специальные особенности или расширения, чтобы облегчить ООП. Функциональные языки (Lisp например) являются иным - среди других, функциональное программирование - надмножество ООП. Логическое программирование (Prolog), также называемое декларативным программированием, с другой стороны, не связано с иными типами программирования, в подобном смысле.
Многое зависит от инструментальных средств, которые вы используете, а не от языка. Имеется HOWTO по инструментам разработки GUI для Linux, хотя уже устаревшее. С хорошим графическим инструментом вы можете быстро разрабатывать приложения. Иногда RAD основан на многократном использовании готового кода, тем более что свободно распространяемое ПО - хорошая основа для этого.
Области, в которых наиболее часто используется данный язык программирования. Другие области существуют, но в них применение данного языка не так ярко выражено.
Дополнительная информация относительно языка, "диалекты".
PERL Начинающий: Да - ООП: Да Примеры: Создание скриптов, системное администрирование, веб-программирование Комментарии: Мощный для обработки текста и строк, очень популярный Python Начинающий: Да - ООП: Да Примеры: Создание скриптов, системное администрирование, веб-программирование Комментарии: TCL Начинающий: Да - ООП: Нет Примеры: Создание скриптов, системное администрирование, создание приложений Комментарии: PHP Начинающий: Да - ООП: Да Примеры: веб-программирование Комментарии: Популярен для работы с базами данных в веб Java Начинающий: Да - ООП: Да Примеры: Кросс-платформенный приложения, веб-программирование Комментарии: Lisp Начинающий: Да - ООП: Функциональный Примеры: Режимы Emacs (для elisp) Комментарии: Варианты Elisp, Clisp и Scheme Fortran Начинающий: Нет - ООП: Нет Примеры: Математические приложения Комментарии: Варианты f77 и f90/95 C Начинающий: Нет - ООП: Нет Примеры: Системное программирование, создание приложений Комментарии: Очень популярный C++ Начинающий: Нет - ООП: Да Примеры: Создание приложений Комментарии: |
Оболочки - это также важная среда программирования. Я не охватил эту область, потому что не до конца понимаю ее. Знание shell важно для любого, кто регулярно работает на Linux, особенно для системных администраторов. Имеются подобия между shell программированием и созданием скриптов (сценариев) - часто они могут достигать тех же самых целей, и вы можете выбирать между родной оболочкой и скрипт-языком. Среди наиболее популярных оболочек можно отметить bash, tcsh, csh, ksh и zsh. Вы можете получить основную информацию по вашей оболочке с помощью команды man например, man bash.
Другие языки: AWK, SED, Smalltalk, Eiffel, ADA, Prolog, assembler, Objective C, Logo, Pascal (p2c конвертер)
Стандартные графические подсистемы для UNIX и Linux, называемые X(иксами), имеют свои собственные библиотеки для разработки GUI. Они обеспечивают программный интерфейс на низком уровне для X, но довольно сложны в использовании. Они, конечно, хороши для старых приложений, но в настоящее время используются GTK+ и Qt, так как их используют две популярные среды - GNOME и KDE.
Общее название или аббревиатура библиотеки.
Подходит ли библиотека для начинающего программиста.
Различные лицензии для различных средств (инструментов) разработки GUI имеют практическое значение. Лицензии GTK+ и TK позволят вам разрабатывать приложения с открытыми исходными текстами и без них, без оплаты за лицензию. Лицензия Motif требует оплаты, лицензия QT требует оплаты, если вы распространяете приложения без исходных текстов.
Язык, который наиболее часто используется со средствами разработки.
Другие языки, которые могут использовать комплект инструментов.
Приложения, использующие библиотеку.
Дополнительная информация по средствам разработки.
Библиотеки | Начинающий | Лицензия | Язык | Связанные | Примеры | Комментарии |
TK | Да | Бесплатная | TCL | Perl, Python, другие | make xconfig, TKDesk | |
GTK+ | Нет | Бесплатная (LGPL) | C | Perl, C++, Python, многие другие | GNOME, Gimp | Очень популярна |
QT | No | Бесплатные исходники | C++ | Python, Perl, C, другие? | KDE | Очень популярна |
Motif | Нет | Покупается | C/C++ | Python, другие? | Netscape, Wordperfect | Lesstif бесплатная версия (может заменить коммерческую) |
GNUstep | Нет | Бесплатная (LGPL) | Объектный C | Guile, Java? | не распространенная, но вы можете просмотреть область применения | GNUstep до сих пор находится в стадии разработки |