1 <appendix id="unixdev">
11 <!-- ROLES_OF_TRANSLATORS -->
16 >Разработка ПО в &UNIX;</title>
18 <indexterm zone="unixdev"
22 <indexterm zone="unixdev">
26 >программирование</secondary
31 >Исторические замечания</title>
33 <indexterm zone="history"
37 <indexterm zone="history"
39 >языки сценариев</primary
41 <indexterm zone="history">
47 <indexterm zone="history">
53 <indexterm zone="history">
59 <indexterm zone="history">
67 >С самого начала, программы в &UNIX; разделились на два разных типа. Один тип — это мир <emphasis
68 >языков программирования системы и приложений</emphasis
69 >, где некоторый исходный код транслируется в машинный транслирующей программой, <emphasis
70 >компилятором</emphasis
72 >интерпретатором</emphasis
73 >. Примером является язык программирования C. &UNIX; была первой ОС, написанной на таком языке высокого уровня (относительно), вместо ассемблера, ориентированного на конкретную машину (на самом деле одним из изначальных назначений языка C было написание ядра &UNIX; и вспомогательных программ на машинах DEC PDP-11). </para>
75 >Второй тип — это мир <emphasis
77 > (скриптов). Он развился с приходом оболочки &UNIX; (shell), которая являлась интерфейсом пользователя к ОС — и в то же время языком программирования очень высокого уровня. Сценарии используют набор маленьких утилит, таких как <command
83 >, каждая из которых создана для конкретной задачи. Хитрость заключается в том, что любая такая программа может быть соединена с другой посредством простого транспортного механизма, который называется <emphasis
85 >, суть его заключается в том, что он перенаправляет вывод одной программы на ввод другой. Это есть основа многофункциональности и гибкости инструмента. </para>
87 >С течением времени, оба мира бурно развивались. Язык C до сих пор используется преимущественно в качестве системного язык программирования, тогда как C++ — дальнейшее развитие C, воплощающее объектно-ориентированную модель программирования, — с начала 90-ых используется при программировании сложных структурированных систем. Кроме того, осталась поддержка многих других языков программирования, даже таких, как FORTRAN77 и Ada, которые всё ещё используются в некоторых областях. </para>
91 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
93 <sect1 id="unixdev-scripting-languages">
95 >Современные языки сценариев</title>
97 >Ну, а в мире сценариев произошла перестановка, от оболочки, недостатком которой было отсутствие полной переносимости, до языков, которые унифицируют всю общую необходимую функциональность в своих стандартных библиотеках, оставляя возможность прибегать к конвейерному механизму. </para>
99 >Общее всех этих сценарных языков — их переносимость между клонами &UNIX;, Microsoft &Windows;, &MacOS;, или даже VMS. Также, для всех их доступны свободно распространяемые реализации. </para>
101 <sect2 id="unixdev-SL-Perl">
105 <indexterm zone="unixdev-SL-Perl"
109 <indexterm zone="unixdev-SL-Perl">
111 >языки сценариев</primary>
117 ><ulink url="http://www.perl.com"
119 > популярен как язык обработки текста и, следовательно, системного администрирования. На заре World Wide Web, CGI-скрипты на &perl; использовались для генерирования динамических web-страниц на основе базы данных. Сегодня такой метод реализован в виде модуля <command
121 > web-сервера &apache;. Среди сильных сторон &perl;'а — его встроенная поддержка расширенных регулярных выражений и богатый архив свободных модулей к нему, для подробностей см.: <ulink url="http://cpan.org"
122 >Comprehensive Perl Archive Network (CPAN)</ulink
126 > <!-- unixdev-SL-Perl -->
128 <sect2 id="unixdev-SL-Python">
132 <indexterm zone="unixdev-SL-Python"
136 <indexterm zone="unixdev-SL-Python">
138 >языки сценариев</primary>
144 ><ulink url="http://www.python.org"
146 > отличается элегантностью классовой системы, лёгкостью и гибкостью, с которой можно внешние библиотеки могут быть подключены — к ним можно обращаться как к стандартным классам и функциям &python;. В отличие от &perl;, &python; имеет прозрачный и сконцентрированный встроенный &API;, что делает его прекрасным средством поддержки сценариев для программ, написанных на C и C++, . </para>
148 > <!-- unixdev-SL-Python -->
150 <sect2 id="unixdev-SL-PHP">
154 <indexterm zone="unixdev-SL-PHP"
158 <indexterm zone="unixdev-SL-PHP">
160 >языки сценариев</primary>
166 ><ulink url="http://www.php.net"
168 > встраивается прямо в &HTML;-страницы, и, следовательно, применяется для генерирования динамических web-страниц. </para>
170 > <!-- unixdev-SL-PHP -->
172 > <!-- unixdev-scripting-languages -->
174 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
175 <sect1 id="unixdev-hl-script">
177 >Высокоуровневые сценарии</title>
180 >Высокоуровневые приложения обычно более медлительные и не так гибки в применении. Это проявляется в мире программ с графическим пользовательским интерфейсом (GUI), таких как &kde;. </para>
182 >Потребность в некоем подобии конвейеров низкоуровневых консольных программ для высокоуровневых приложений привела к появлению <link linkend="unixdev-corba"
184 > и, позже в среде &kde;, <link linkend="unixdev-dcop"
188 <sect2 id="unixdev-corba">
190 >Протокол CORBA</title>
192 <indexterm zone="unixdev-corba"
196 <indexterm zone="unixdev-corba">
198 >языки сценариев</primary>
202 <indexterm zone="unixdev-corba">
210 ><ulink url="http://www.omg.org/gettingstarted/corbafaq.htm"
213 >Common Object Request Broker Architecture</emphasis
214 >) - это механизм, позволяющий разным программам работать совместно через сеть. Он разработан комитетом стандартов <ulink url="http://www.omg.org"
216 > (Object Management Group). </para>
218 >Программы, поддерживающие CORBA, используют протокол IIOP для связи. Реализации, основанные на IIOP, есть для многих операционных систем, языков программирования, и сетей, что делает его хорошо переносимым. </para>
220 >Основной недостаток CORBA - это его очень низкая скорость. Возможно это не так существенно. в сетях с мощными серверами, но на обычных компьютерах, для которых предназначен &kde;, это является главным. </para>
223 > <!-- unixdev-corba -->
225 <sect2 id="unixdev-dcop">
227 >Интерфейс &DCOP;</title>
229 <indexterm zone="unixdev-dcop"
233 <indexterm zone="unixdev-dcop">
235 >языки сценариев</primary>
239 <indexterm zone="unixdev-dcop">
247 >Протокол <ulink url="http://developer.kde.org/documentation/library/kdeqt/dcop.html"
251 > разработан для связи и более тесной интеграции между приложениями &kde;, т.к. использование медленного CORBA, имеющего ряд ограничений, привело бы к всеобщей "неподъёмности" &kde; на обычных компьютерах. </para>
253 >&DCOP; расшифровывается как <emphasis
254 >Desktop COmmuniсation Protocol</emphasis
255 > (протокол связи рабочих станций). Он реализован как простой механизм IPC/RPC, построенный для оперирования сокетами. Словом, он обеспечивает удобства схожие с традиционным конвейерным механизмом &UNIX;. </para>
257 >Традиционные сценарии основываются на очень маленьких программах, которые были созданы для работы на строго текстовой основе. &DCOP; позволяет графическим программам связываться между собой схожим путём. Т.е. одна &kde;-программа может посылать сообщения другой (возможно своей копии), и сама получать и обрабатывать данные от неё. </para>
259 >Однако у такого метода всё же есть и недостатки — для использования &DCOP; в программу нужно встроить специальный код интерфейса &DCOP;. Кроме того, связь происходит несколько медленно (но значительно быстрее CORBA), хотя, в свою очередь, она даёт мощь и гибкость сценариев &UNIX; высокоуровневым программам с графическим пользовательским интерфейсом. </para>
261 >Для подробностей см. <ulink url="http://developer.kde.org/documentation/library/kdeqt/dcop.html"
262 >DCOP: Desktop COmmunications Protocol</ulink
263 > или <ulink url="developer.kde.org/documentation/library/cvs-api/dcop/html/index.html"
264 > &API;-справочник библиотеки &DCOP;</ulink
267 > <!-- unixdev-dcop -->
270 > <!-- unixdev-hl-script -->
272 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
274 <sect1 id="unixdev-buildsystems">
276 >Системы сборки</title>
279 >Кроме самых простых случаев, ваш проект будет состоять из множества блоков исходного кода, разделённых по нескольким файлам для удобства сопровождения. Для преобразования исходного кода в машинный, нужно транслировать всё это в несколько машинных модулей в удобном для чтения операционной системой формате. </para>
281 >Для этого как минимум требуется <itemizedlist>
285 >текстовый редактор</emphasis
286 > — для написания исходного кода, </para
290 >транслирующая программа, обычно это <emphasis
291 >компилятор</emphasis
292 >, — для преобразования исходного кода в объектные файлы, </para
297 >библиотекарь</emphasis
298 > — для сборки объектных файлов в библиотеки для последующего их использования без необходимости перекомпилирования, </para
303 >компоновщик</emphasis
304 > — связки нескольких объектных файлов и библиотек в один исполнимый файл, </para
309 >система сборки</emphasis
310 >, претендующая на управление всем этим "добром", и </para
316 > — чтобы найти (надеемся) все ошибки в исходных кодах, и, возможно, другие диагностические утилиты для последующей оптимизации кода. </para
322 >Когда у вас имеется большой проект, состоящий из возможно сотен исходных файлов, процесс компиляции может быть медлительным. Не нужно компилировать заново все файлы когда был изменён только один, вместо этого следует компилировать файлы, которые были затронуты изменениями. На самом деле это не так очевидно, как кажется на первый взгляд. </para>
324 >Например, если вы изменили прототип функции в заголовке, нужно перекомпилировать каждый файл, включающий этот заголовок. И если в проекте таких файлов много, легко пропустить один делая это вручную. Сборочная система обеспечивает автоматизацию такой работы. </para>
326 <sect2 id="unixdev-buildsystems-make">
328 >Процесс сборки</title>
330 <indexterm zone="unixdev-buildsystems-make">
334 <indexterm zone="unixdev-buildsystems-make">
338 <indexterm zone="unixdev-buildsystems-make">
342 <indexterm zone="unixdev-buildsystems-make">
344 >перекомпиляция</primary
346 <indexterm zone="unixdev-buildsystems-make">
348 >target (целевой)</primary
350 <indexterm zone="unixdev-buildsystems-make">
352 >зависимости</primary
354 <indexterm zone="unixdev-buildsystems-make">
360 >Инструмент, выполняющий перекомпиляцию называется <command
362 >. Его работа управляется специальными <emphasis
364 >, которые описывают необходимые действия в случае изменения определённой информации (обычно объектного файла или файла исходного кода). Все правила, принадлежащие определённому проекту записываются в т.н. <filename
366 >, который обрабатывается командой <command
368 > в любое время когда вы хотите обновить вашу работу. </para>
370 >Каждое правило состоит из нескольких сборочных блоков, а именно <itemizedlist>
377 >), т.е. файла, который нужно собрать </para
382 >зависимостей</emphasis
383 >, обычно это имена файлов, от которых зависит целевой (target), например это может быть имя исходного файла, где целевой будет упомянут как объектный, </para
389 >, которые выполняются для <quote
391 > целевого файла (например его компиляции или компоновки нескольких объектных файлов). </para
396 >Обычно команда <command
398 > читает правила, одно за другим, проверяет каждый файл из списка зависимостей конечного файла и собирает его заново если хотя бы один файл из списка зависимостей был изменён. </para>
400 >В больших проектах <filename
402 > может стать очень большим и сложным. Мы не можем здесь углубляться в подробности, однако рекомендуем вам изучить хотя бы основы синтаксиса <command
404 >. Даже если вы не используете его напрямую, понимание принципов системы сборки вам должно пригодиться. Для подробностей см. <ulink url="info://make/Top"
406 >GNU Make Manual</quote
410 >Для подробностей, касающихся &kdevelop;, см. главу <link linkend="project-management"
411 >Сборка и управление проектом</link
414 >Доступно несколько руководств, см. в главе <link linkend="automake-references"
415 >Сборка и управление проектом</link
418 > <!-- unixdev-buildsystems-make -->
421 > <!-- unixdev-buildsystems -->
423 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
425 <sect1 id="unixdev-guidevelopment">
427 >Объектно-ориентированное программирование</title>
429 <indexterm zone="unixdev-guidevelopment">
433 <indexterm zone="unixdev-guidevelopment">
435 >графический пользовательский интерфейс</primary
437 <indexterm zone="unixdev-guidevelopment">
439 >пользовательский интерфейс</primary>
445 >Разработчики программного обеспечения вынуждены создавать не только библиотеки и алгоритмы, но и удобный пользовательский интерфейс, гибкий и интуитивный. Однако большинство программистов не удаляют этому большого внимания, и, как результат, хорошие программы имеют <ulink url="http://www.rha.com/ui_hall_of_shame.htm"
446 >бедный дизайн</ulink
449 >На протяжении годов, были выработаны некоторые общие принципы реализации интерфейса. Настоятельно рекомендуется придерживаться их. Таким образом ваши пользовательские интерфейсы будут сохранять общий вид и интуитивность, что непременно будет оценено пользователями. </para>
451 >Визуальная разработка &kde; также имеет свои принципы. Их можно найти на <ulink url="http://developer.kde.org/documentation/standards/kde/style/basics/index.html"
452 >странице принципов дизайна пользовательского интерфейса</ulink
453 > в уголке разработчика &kde;. </para>
455 >Краткое введение в дизайн графического пользовательского интерфейса можно найти <ulink url="http://axp16.iie.org.mx/Monitor/v01n03/ar_ihc2.htm"
457 >, либо <ulink url="http://russian.joelonsoftware.com/"
459 > (больший уклон в сторону умирающей ОС). </para>
462 > <!-- unixdev-guidevelopment -->
464 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
466 <sect1 id="unixdev-ide">
468 >Концепции и средства интегрирования: IDE</title>
470 <indexterm zone="unixdev-ide">
474 <indexterm zone="unixdev-ide">
476 >интегрированная среда разработки</primary
478 <indexterm zone="unixdev-ide">
480 >разработка</primary>
484 <indexterm zone="unixdev-ide">
492 >Для каждого этапа процесса программирования существует множество отдельных инструментов — планирование, редактирование, управление файлами и компилирование (сборка), отладка, документирование и т.д. Однако по мере роста проекта, он (почти всегда) становится громоздким, и процесс его дальнейшего программирования становится затруднительным. </para>
494 >Наиболее повторяющаяся работа проделывается при проектировании, компилировании и отладке программы. Большую часть такой работы можно автоматизировать используя шаблоны и сценарии. Другую большую часть — наличием инструментов. способных связываться один с другим через общий визуальный интерфейс (GUI). </para>
496 >К примеру, действительно удобно, когда отладчик может открыть исходный код в редакторе и расположить курсор в месте, где произошла ошибка. </para>
498 >Такую схему совершенствуют <emphasis
499 >интегрированные среды разработки</emphasis
500 > (&IDE;). Они собирают воедино все шаблоны, инструменты и сценарии, необходимые для продуктивного процесса разработки. </para>
502 >Для всевозрастающей платформы &kde; таким &IDE; является &kdevelop;. Эта среда разработки содержит широкий набор инструментов, обеспечивая простое окружение разработки и сопровождения ПО, использующего разные языки программирования и платформы. </para>
504 <sect2 id="unixdev-ide-kdevelop">
506 >Основные возможности &kdevelop; &kdevrelease;</title>
508 <indexterm zone="unixdev-ide-kdevelop">
510 >&kdevelop;</primary>
512 >возможности</secondary
514 <indexterm zone="unixdev-ide-kdevelop">
516 >возможности</primary
519 <!-- ### copied from web page, needs to be updated -->
524 >Управление всеми <emphasis
525 >средствами разработки</emphasis
526 > на языке C++, такими как компилятор, компоновщик, отладчик и система сборки</para>
531 >Мастер приложений</emphasis
532 >, упрощающий создание новых программ</para>
537 >Интегрированный редактор</emphasis
538 >, основанный на редакторе &kwrite;, <application
539 >QEditor</application
540 > от Trolltec или другой.</para>
545 >Генератор классов</emphasis
546 >, для создания новых классов и интегрирования их в проект</para>
551 >Управление</emphasis
552 > исходными, заголовочными <emphasis
554 >, документацией и т.д.</para>
558 >Помощь при <emphasis
559 >написании руководства приложения</emphasis
560 > средствами &kde;</para>
564 >Автоматическое генерирование <emphasis
565 >&API;-документации</emphasis
566 > в формате &HTML;, включающей описания классов проекта и перечня используемых библиотек</para>
571 >Поддержка интернационализации</emphasis
576 >Поддержка управления проектом через <emphasis
577 >систему управления версиями</emphasis
578 > (например, &CVS;)</para>
582 >Встроенный интерфейс к <emphasis
588 >Встроенный эмулятор <emphasis
595 >Синтаксическая подсветка</emphasis
596 > в файлах исходного кода.</para>
601 >Автодополнение кода</emphasis
602 > для переменных класса, его методов, аргументов функций и т.п.</para>
607 >Шаблоны для конкретных задач</emphasis
608 > (написание модулей &kcontrol;, &konqueror;, апплетов &kicker;, KIO, а также стилей рабочего стола)</para>
613 >дерева информации</emphasis
614 >, для наглядного разделения исходных, заголовочных файлов, классов и документации, что позволяет отказаться от внешнего проводника</para>
619 >Кросс-компилирование</emphasis
620 >, с возможностью указания разных компиляторов, их ключей, архитектуры процессора и т.п.</para>
624 >Поддержка проектов <emphasis
625 >Qt/Embedded</emphasis
626 > (таких как Zaurus и iPAQ).</para>
630 >Простота использования <emphasis
631 >внешних программ</emphasis
632 >, в виде добавления их в меню <guimenuitem
639 > <!-- unixdev-ide-kdevelop -->
642 > <!-- unixdev-ide -->