Вводная лекция на тему
Открытые программные средства
OpenSource
- разработка программного
обеспечения с открытым исходным кодом; если при обычной разработке программного
обеспечения пользователю предоставляются лишь бинарные файлы, да ещё и с запретом
декомпиляции, то при данном подходе любой желающий может получить исходный код,
не связанный ограничениями на дальнейшую модификацию и распространение с
сохранением информации о первичном авторстве и внесенных изменениях.
Free Software – свободно
(но не обязательно бесплатно) распространяемое программное обеспечение, что
означает, что пользователь может сделать копии продукта для себя и своих
друзей.
http://sourceforge.net
- один из серверов, на котором можно найти информацию о
"free" software разрабатываемых проектах. Вот статистика наиболее распространённых языков
программирования, на которых ведутся эти проекты (доля
проектов на Java, C, C++ примерно одинакова):
Язык программирования | Кол-во проектов |
Kylix | 1538 |
Python | 3360 |
Perl |   |
PHP |   |
Java |   |
C |   |
C++ | 13588 |
Машинный код – наиболее близкий к аппаратной части, но на нём по понятным причинам не создают программы; применение возможно для взлома программ, для встроенных систем.
Ассемблер – его применение также ограниченно из-за проблем переносимости и сложности написания больших программ. На нём можно кодировать критические участки программ, написанных на других языках.
C – благодаря эффективности его можно назвать переносимым ассемблером, на нём написана Linux, с ним приходится сталкиваться и при программировании для Windows.
С++ - также очень эффективный, универсальный, объектно-ориентированный язык, называют С с классами, т.к. совместим с C (и по этой причине чистота ООП в нём выдержана не вполне). При всех своих плюсах он весьма сложен и овладение всей его мощью приходит с годами программирования на нём сложных и крупных задач.
По причине сложности универсальных языков, существуют языки более простые и особенно удобные в некоторых задачах (например, при интенсивной работе с текстом). К ним относятся скриптовые языки (или сценарии) – bash, sed, awk, Python, Perl– для Linux, JavaScript - для Windows. Про язык Perl можно отметить, что он внешне очень необычен и то, что для Unix он почти то же самое, что и Basic для Windows, который был с Microsoft продуктами ещё до рождения Win3.11 и прошёл путь от QBASIC до VB.Net. Однако за удобство приходится платить скоростью работы, поэтому для важных участков пишутся модули на языках типа C/C>++ и затем подключаются как вспомогательные расширения.
Следующая группа языков – «почти компилируемые» языки,
языки для виртуальных машин VM – после компиляции
создаётся некий промежуточный код, который затем будет интерпретироваться Virtual Machine. К таким языкам относится Java - машинонезависимый объектно-ориентированный язык, разработанный фирмой Sun Microsystems, по синтаксису произошедший от C++, но при этом значительно проще его. Для таких языков верен принцип «один раз откомпилировал – работает везде», хотя на практике нередко случается «один раз откомпилировал –
отлаживаем везде» - например, из-за того, что VM может иногда не поддерживать
некоторые возможности языка или по иным причинам. В некотором смысле VM вредны для Open Source, т.к. одним из привлекательных аспектов открытого кода является возможность откомпилировать
исходники на любой платформе, а благодаря переносимости неявно поощряется
закрытый код. Ещё один негативный аспект – невысокая скорость работы, однако VM может быть эффективной, т.к. в *.class файле остаётся дополнительная информация, и
VM может оптимизировать наиболее часто используемый код, используя
JIT (just-in-time) компиляцию. Ещё из способов повысить производительность (правда, с потерей переносимости) можно указать JNI(Java Native Interface) и gcj из комплекта gcc, который переводит
*.class в двоичный код.
К этой группе языков можно также отнести языки для платформы .Net -
C#, VB.Net.
«Экзотические языки»: семейство Lisp языков, Scheme, ocaml, Ruby, Haskel, XSLT, .FORTH (компактный ассемблер высокого уровня).