Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование под Linux #3 (16-02-2002)


Служба Рассылок Subscribe.Ru

Здравствуйте дорогие подписчики рассылки "Программирование под Linux" !!!
 ....----==== http://linux.firststeps.ru/ ====----....


Данный выпуск несколько задержался из-за работы над сайтом, но надо
оправдывать надежды некоторых и поэтому вы видите следующий выпуск.

После прошлого выпуска я был несколько "забомблен" отзывами, которые
у Вас вдруг появились. Теперь это хорошо :) Но не стоит расслабляться...

Из всех писем "пожеланий" самыми привлекательными оказались те, которые
несут в себе конкретные предложения, а таких оказалось не очень то и много.

От некого Doberman (doberman@xaker.com.ua) поступло предложение создать новую
операционную систему. Это несколько необычное предложение, в свете той стратегии,
которая намечается, однако не лишенное смысла. Смысл в том, что человек
предложивший эту затею учится на первом курсе института и как я понимаю
не знает пока чему посвятить все свое свободное "от работы" время.
Я отвечаю еще раз публично и выскажу свое мнение по поводу этого вопроса.

Создание новой системы подразумевает под собой основательное понимание
происходящих в компьютере процессов, начиная от работы процессора и БИОСа,
кончая сетевыми протоколами типа HTTP. Все это в куче дико сложно создать
одному, да и вдвоем этого не создать. Возьмем к примеру тот же Линукс,
сколько людей учавствовало в его создании ??? Я лично не знаю даже
приблизительного порядка числа, хотя всем совершенно ясно, что он велик.
Да и посмотрите сами, система Линукс развивается уже почти десяток лет
и только сейчас начала набирать рельные "обороты". Так что подобные
проекты всегда требуют огромное количество человеческих ресурсов, а
соответственно денег и всего остального. К тому же составить реальную
конкуренцию на рынке программных средств с каждым годом все сложнее
и сложнее. Посему надо придумывать менее дерзкие и более реальные проекты.

Я в свою очередь предложил Doberman'у рассмотреть вопрос создания
достаточно перспективной, с моей точки зрения, новой графической трехмерной
системы, на что товарищ правильно подметил "если этого нет, то это
либо сложно реализовать, либо об этом никто не подумал". Правильно и то и
это, с одной стороны еще не достаточно развиты графические железки для
возможности генерации сложных трехмерных миров "на лету" и сам процесс
создания графики тоже не прост, с другой стороны людей реально думающих
о создании подобной системы по пальцам посчитать. Все уперлись в плоскость
монитора и не хотят ее расширить вглубь. Только что мелькнула мысль про
KDE 3.0, ведь одно из нововведений в этой версии - это улучшенное переключение
зкранов рабочего стола при перетаскивании окна. А зачем ???
Не проще ли создать трехмерную систему ? (ответ тривиален "не проще" %))
Однако это повод задуматься. Все видели кучу фильмов типа "Джони Мнемоник",
"Пароль рыбамечь" и д.р. , в которых главные герои, будучи самыми
прогрессивными представителями человечества, используют супер навороченные
трехмерные системы. А почему в народе-то таких систем нет ??? Возможно
грамотно созданный трехмерный интерфейс будет в сотни раз круче интерфейса
в Windows XP, который выделяется явной попыткой создания округло-трехмерных
форм. Почему бы нам Россиянам :) не взяться за дело раньше дяди Билла и
не создать из Линукса систему "вне конкуренции". Ведь все для этого есть,
есть драйвера NVidia, есть библиотека OpenGL(http://www.opengl.org/) или
Mesa3D (http://www.mesa3d.org/) или GLX (http://www.sgi.com/software/opensource/glx/).
Все есть !!!

Вобщем сошлись на том, что это надо %) Теперь требуется Ваше согласие и
поддержка. Я, может быть, в силу нескольких причин не смогу сразу реально
взяться за дело, но среди подписчиков наверняка найдется десяток другой,
кто захочет создать что-то подобное, благо первое начинание было сделано
зарубежными коллегами (http://threedsia.sourceforge.net/), но почему-то
заглохло особо не разродившись...

Пишите по поводу этого мне или непосредственно Doberman'у.
Если соберется команда желаюших, то им найдется достойное место и
на сайте и в рассылке.

ОТОЙДУ ЧУТЬ ОТ ЛИРИКИ к реальным задачам. Всем нам требуется информация
для создания собственных программ и проектов, а поэтому надо знать что
и где можно достать в этом необъятном интернете. У меня огромнейшая
просьба ко всем подписчикам, если вы что-то скачаете или найдете хорошее
в интернете, то пишите мне. Если получится собрать в одном месте
большое количество ссылок и книг про Линукс, то всем это пойдет на пользу.
Со временем я создам скрипт на сайте для автоматического добавления
ссылок на сайты, поэтому не поленитесь воспользоваться этим, ну, а
пока прошу кидать бандеролями разумного веса и размера на ящик...

(кстати о бандеролях... Получаю по 5-10 штук в день бандероли весом в
100 и больше Кб с вложенным вирусом... Эпидемия однако... Вот бы
изловить того придурка, который этот вирус создал и заставить всю
свою злобную энергию пустить на воплощение наших положительных идей)


А ТЕПЕРЬ СОБСТВЕННО К СОДЕЖАТЕЛЬНОЙ ЧАСТИ РАССЫЛКИ
----------------------------------------------------
"Компиляция нескольких файлов"

Обычно простые программы состоят из одного исходного файла. Дело обстоит
несколько сложнее, если эта программа становится большой. При работе с
такой программой может возникнуть несколько достаточно серьезных проблем:

* Файл, становясь большим, увеличивает время компиляции, и малейшие
  изменения в исходном тексте автоматически вынуждают тратить время
  программиста на перекомпиляцию программы.
* Если над программой работает много человек, то практически невозможно
  отследить сделанные изменения.
* Процесс правки и само ориентирование при большом исходном тексте
  становится сложным и поиск небольшой ошибки может повлечь за собой
  вынужденное "изучение" кода заново.

Это далеко не все пробемы, которые могут возникнуть при наличии программы
"монстра". Поэтому при разработке программ рекомендуется их разбивать на
куски, которые функционально ограничены и закончены. В этом значительно
помогает сам язык C++, предоставляя свой богатый синтаксис.

Для того, чтобы вынести функцию или переменную в отдельный файл надо перед
ней поставить зарезервированное слово extern. Давайте для примера создадим
программу из нескольких файлов. Сначала создадим главную программу, в которой
будут две внешние процедуры. Назовем этот файл main.c:

#include 
// описываем функцию f1() как внешнюю
extern int f1();
// описываем функцию f2() как внешнюю
extern int f2();

int main()
{
 int n1, n2;

 n1 = f1();
 n2 = f2();

 printf("f1() = %d\n",n1);
 printf("f2() = %d\n",n2);

 return 0;
}

Теперь создаем два файла, каждый из которых будет содержать полное
определение внешней функции из главной программы.
Файлы назовем f1.c и f2.c:

// файл f1.c
int f1()
{
 return 2;
}

// файл f2.c
int f2()
{
 return 10;
}

После этого процесс компиляции программы с помощью gcc будет выглядеть несколько
иначе от описанного в предыдущем выпуске рассылки.

Компилировать можно все файлы одновременно одной командой, перечисляя составные
файлы через пробел после ключа -c:

gcc -c main.c f1.c f2.c

Или каждый файл в отдельности:

gcc -c f1.c
gcc -c f2.c
gcc -c main.c

В результате работы компилятора мы получим три отдельных объектных файла:

main.o
f1.o
f2.o

Чтобы их собрать в один файл с помощью gcc надо использовать ключ -o,
при этом линкер соберет все файлы в один:

gcc main.o f1.o f2.o -o rezult

В результате вызова полученной программы rezult командой:

 ./rezult

На экране появится результат работы:

dron:/# ./rezult
f1() = 2
f2() = 10
dron:/#

Теперь, если мы изменим какую-то из процедур, например f1():

int f1()
{
 return 25;
}

То компилировать заново все файлы не придется, а понадобится лишь скомпилировать
измененный файл и собрать результирующий файл из кусков:

dron:/# gcc -c f1.c
dron:/# gcc main.o f1.o f2.o -o rezult2
dron:/# ./rezult2
f1() = 25
f2() = 10
dron:/#

Таким образом можно создавать большие проекты, которые больше не будут
отнимать много времени на компиляцию и поиск ошибок. Однако помните, не
стоит также черезчур разбивать программу, иначе у Вас получится несколько
десятков файлов, в которых Вы сами рано или поздно запутаетесь. Найдите
"золотую середину", например в отдельные файлы помещайте те функции или
классы, с которыми Вам приходится больше всего работать при отладке. После
того, как функция будет окончательно отлажена, ее вполне можно перенести
в более крупный файл.


Количество подписчиков: 619

Выпуск подготовил: Кузин Андрей (dron@mjk.msk.ru)

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное