Разработка свободного ПО. 1-я лекция.

Спецсеминар "Разработка свободного ПО": http://uucode.com/oss2004/.

Формальности

Чем разработка свободного ПО отличается от разработки обычного ПО. (ограничения для творчества vs ограничения для леммингов.)

Объяснение терминов "open source" и "free". Free -- не значит бесплатно.

Зачёт -- всем. Но надо либо сделать доклад, либо показать знания на практике. За литературный конспект -- зачёт однозначно.

Будем говорить обо всём понемногу. Пожелания принимаются.

На следующем же занятии хочу доклад.

Параллельно идёт John Lynn.

Языки программирования

Самые главные: русский и английский. Вначале надо научиться им.

Graham. The Hundred-Year Language, http://www.paulgraham.com/hundred.html Есть русский перевод на сайте Компьютеры: "Языки программирования через сто лет", http://www.computerra.ru/print/hitech/35042/, "Язык программирования будущего - сегодня", http://www.computerra.ru/hitech/35107/.

Graham. What Languages Fix, http://www.paulgraham.com/fix.html

Данные SourceForge:

Основа всего

Программирование в кодах ("срыв стека").

Ассемблер -- то же самое, но попроще. Создание "лекарств".

C -- переносимый ассемблер.

С++ -- не для студентов и "индусов". Изучать -- только практически. Понимать по книге Страуструпа "Дизайн и эволюция языка C++". Автор STL -- Степанов. Generics. Primzahlen von Erwin Unruh.

Скриптование

shell, sed, bash, awk и прочие.

Из них получился Perl. Basic for unix. Переход на utf8. Дальнейшее развитие: parrot VM. VM -- это плохо, см. про Java.

Python. Идеальная замена Паскалю. Есть ООП, есть исключения. C bindings часто делаются для вначале для Python, и только потом для всего остального. Python под Parrot. Dan Sugalski получил-таки тортом в фейс от Guido. http://prefnews.ru/?page=one_news&news_id=255

Отвлечение: bindings. SWIG.

Как бы компилируемые

Их куча. В частности: java, C# и прочее из .dot

Виртуальные машины -- опасность для open source, т.к. не нужны исходники.

Код под VM может работать быстрее. (JIT и прочие анализы.) См. LLVM.

java: jvm, gcj.

Разное

PHP, Delphi/Kylix, Visual Basic, JavaScript, ... Есть, работают.

Особые языки

lisp, scheme. Сложны в изучении. Основная сила -- в DSL (domain-specific languages). По ним можно и нужно вести много семинаров. Краткого обзора не получится. Graham: Beating the Averages. http://www.paulgraham.com/avg.html "Lisp is a programmable programming language." "Greenspun's Tenth Rule of Programming: any sufficiently complicated C or Fortran program contains an ad hoc informally-specified bug-ridden slow implementation of half of Common Lisp."

Ruby. Становится популярным.

XSLT. Преобразование XML.

ocaml. Вся Франция пишет на нём, а также многие из computer science. Институт inria. У нас семинар по ocaml читает Д.Ломов, использует в курсах (компиляторы) Д.Булычев.

forth. Ассемблер плюс язык высокого уровня в одном флаконе. Эесперт у нас -- М.Гасаненко. Если есть только машинные коды, то ядро пишется за неделю. А дальше всё просто.

Эпилог

Eric Raymond о том, что изучать: "How To Become A Hacker", http://www.catb.org/~esr/faqs/hacker-howto.html. Python->Java->C/C++->Perl->LISP

Домашние упражнения

Написать решето Эратосфена на каком-нибудь языке, который вы не знаете. Полезная ссылка: примеры кода на разных языках: http://www.ntecs.de/old-hp/uu9r/lang/html/lang.en.html

Создать модуль расширения для Perl/Python/etc.