| Не секрет что языки программирования обязаны своим появлением необходимостью заставить ЭВМ эффективно работать, поэтому вполне логично начать наш разговор с краткого экскурса в историю развития высокоуровневых языков программирования. При классификации языков выделяют следующие типы языков: Ассемблерные языки — являются символьным представлением машинных языков конкретного компьютера. Метаязыки — языки, используемые для формального описания других языков. Императивные языки — это языки, оперирующие командами, изменяющими значение элементов данных, располагают операциями присваивания и циклами. К ним относятся все современные языки программирования. Декларативные языки — языки, оперирующие инструкциями данным и отношениями между ними. Алгоритм скрывается семантикой языка. Это аппликативные языки, языки логики и объектно-ориентированные языки. Примеры декларативных свойств - сложные множества и инструкции поиска по шаблону. Процедурные языки — позволяют определять отдельные методы вычисления какой-нибудь проблемы. Включают в себя императивные и функциональные языки. Аппликативные языки — функции применяются к значениям без побочного эффекта. Это Функциональные языки во всем своем многообразии. Функциональные языки — оперируют функциями высокого порядка. В них манипуляции совершаются напрямую функциями, а не данными. К категории функциональных языков относятся Lisp, FP, APL, Nial, Krc. Объектно-ориентированные языки — языки, в которых данные и функции, имеющие доступ к ним рассматриваютс как один модуль. Пример: Object Pascal, С++, Java, Objective Caml. Языки запросов — обеспечивают интерфейс к базам данных. Языки четвертого поколения (4GL) — высокоуровневые языки, могут использовать естественный английский язык или визуальные конструкции. Алгоритмы или структуры данных обычно выбираются компилятором. Языки логики — языки, оперирующие предикатами и их отношениями p(x, Y). Программы состоят из набора заключений Хорна, которые могут быть: фактами - p(X,Y) есть истина; правилами - p истинно, если q1, q2 и qn истинны; запросами - верны ли q1, g2 и gn? Где gi - цель. Известные языки логического программирования: Prolog, KLO, Mandala и Mercury. Параллельные языки могут быть многопрограммными (разделяющими один процессор) или мультипроцессорными(отдельные процессоры разделяют одну распределенную память). Параллельные языки различаются различными способами организации процессов и управления программами. Примеры: Modula, Ada, Concurrent Pascal. На практике языки программирования не являются чисто процедурными, функциональными, логическими, или объектно-ориентированными. Они содержат в себе черты различных языков. Поэтому зачастую на процедурном языке можно написать функциональную или объектно-ориентированную программу. Из-за этого вместо типа языка точнее говорить о стиле (или методе) программирования. Конечно не все языки поддерживают вышеперечисленные стили в равной степени. Miranda и Haskell, например, созданные в 1985-87 гг., определяются именно как чисто функциональные (purely functional). Первым общепризнанным языком высокого уровня можно по праву назвать Fortran, версия которого появилась в ноябре 1954 года. Позднее в октябре 1956 года появилась версия Fortran I, а через год Fortran II, еще через год вышел Fortran III, но казавшийся монополизм этого языка был нарушен с появлением более продуманных языков, таких как Cobol (1957), Lisp (1958), Algol'58 (1958), APL (1960).На этапе развития языков возникла необходимость внедрения в современные языки новых идей. Результатом такого поиска стала нарастающая волна появления языков, приобретающих лучшие качества других языков. В 1964-ом году появился PL/I("скрещенная" версия Cobol, Fortran IV и Algol'60), Basic, Simula I (на основе того-же Algol'60). При разработке операционной системы UNIX использовался язык BCPL (1967), и языки которые были созданы на его основе: B (1968) и его переработанная версия - C (1971). Если говорить о других языках повлиявших на историю развития программирования, то в 1969-ом появился язык Forth и SmallTalk (в последнем заметно влиянием Lisp). Затем, уже в через год, разработан язык логики Prolog и процедурный язык Pascal. С момента когда появился первый язык программирования высокого уровня программисты могли создавать программы длиной до нескольких тысяч строк. Однако когда дело доходило до больших программ, код становился совершенно нечитаемым и трудно управляемым. Избавление от таких неструктурированных программ пришло с появлением языков структурного программирования. И на сегодня это привело к тому,что все современные языки являются структурными. Структурное программирование подразумевает точно обозначенные управляющие структуры, программные блоки, отсутствие операторов GOTO, автономные подпрограммы, в которых поддерживается рекурсия и локальные переменные. В структурном программировании появилась возможность разбиения программы на составляющие элементы. У программистов стояли каждый раз новые задачи, и для решения каждой задачи изучать новый язык программирования было просто неразумно. Большее предпочтение отдавалось универсальным языкам программирования, способным предоставлять эффективный инструментарий для решения разнообразных задач. Не удивительно что все современные реализации широко распространенных языков обладают сходными характеристиками: начиная от скорости написания программ и кончая производительностью полученного кода. В написании эффективных многоцелевых языков пробуют использовать различные техологии программирования. С ростом производительности ЭВМ от платформно-ориентированных последовательных процедурных языков с одним входом и одним выходом в 1975-ом пришли к созданию Modula(развитие Pascal) и Scheme(малый собрат языка Lisp). В 1978-ом появился стандарт C от Кернигана и Ритчи, появляется и AWK, унаследовавший кое-что от С. Под влиянием популярности Pascal в 1979-ом появились языки Modula 2 и ADA. В 1983-ем появляется ML -прародитель таких языков как O'Caml и Standard ML, небезызвестный С++ задумывается именно в этом году, совершенствуются другие языки (ADA'83, Prolog II). В 1987-ом принят в качестве стандарта ADA ISO, создатель языка Pascal со своим коллегой недовольны малым вниманием к европейским языкам программирования и выпускают на рынок Oberon - операционную систему нового поколения (здесь язык является частью компонентной ОС). В том-же году появляются объектно-ориентированный язык OO Forth, стабильная версия Perl 1.0(гибрид sh и awk), появился Caml. В 1988-ом уже существовал Modula 3 и Perl 2.0. В 1989-ом: Tcl , ANSI C (C89), Perl 3.0, bash. В 1990-м: Scheme IEEE, ISO C (C90), SML'90. В 1991-ом: Fortran'90 ISO, Python , Java, Perl 4.0, NetRexx, Tcl/Tk. В 1992-ом разработан язык принтеров - PostScript level 2, появился фактический стандарт языка Oberon-2. В 1994-ом: Perl 5.0, Common Lisp ANSI. В 1995-ом: ADA'95, Delphi, Java 1. В 1996-ом: PostScript level 3, APL'96, ISO C (C95), Objective Caml. 1997-ой - довольно богатый на языки год: Object Rexx, Prolog IV, OO Cobol, Modula 2 ISO, SML'97. Также компания Oberon Мicrosystems внесла в Oberon-2 небольшие дополнения и разработав коммерческий компилятор промышленного уровня выпустила его в свет под названием Component Pascal. Уже заметно что с усложнением структуры программ, популярностью пользуется иной нежели в структурных языках подход к программированию. Основная часть программистов предпочитает объектно-ориентированное программирование, поскольку оно сочетает в себе лучшие идеи воплощенные в структурном программировании и новые концепции, позволивщие оптимально организовать программу. ООП позволяет разложить проблему на связанные между собой задачи. Каждое событие таким образом становится самостоятельным объектом, содержащим свои собственные коды и данные, которые относятся к этому объекту. Исходный код объектно-ориентированной программы, из-за упрощения структуры становится более понятен и существенно короче, а программист получает возможность оперировать сложнейшими структурами данных. В 1998-ом году утвержден стандарт на C++ ANSI/ISO, Java 2 (v1.2), O'Caml 2. Впрочем круглая дата и у функционального языка Haskell'98 . В 1999-ом ничего существенного не появилось. Как обычно затачивались такие языки как TCL/TK 8.1, Python 1.5.2, Delphi 5, ISO C (C99), NetRexx 1.150. А вот в 2000-ом году у появившегося к тому моменту Java 2(v1.3) появился конкурент - C#. Появилась по-моему самая стабильная из существовавших версия Perl 5.6. Затачивается получивший широкое распространение в Европе функциональный, объектно-ориентированный язык O'Caml 3. В 1990-х годах модно везде где это возможно добавлять визуальные средства разработки. К таким системам можно отнести такие системы проектирования как AutoCAD, системы лабораторных изследований LabView, MATLAB, математический пакет Maple. Все они являются лидерами в своей области (хотя и не монополии; ;-) ). В среде системных программистов визуальный интерфейс получил свой современный вид в основном благодаря противостоянию в 1990-ых с Microsoft фирм Borland и Watcom, которое как вылилось в появление семейств языков Microsoft Visual Studio, ставшего мощнейшим инструментом в руках Microsoft для пропаганды миграции на платформу Windows, и разрозненного множества систем от Borland(что лишь усиливало бражение в умах пользователей), - таких сред как Delphi, Kylix, СBuilder и JBuilder. Кроме того флагманским продуктом Borland провозглашается все-таки система, основанная на довольно старом языке Object Pascal - Delphi(кроме Borland, Object Pascal никто так широко не использует). Короче Microsoft добилась своего. Осталась помеха в виде Java 2, против которого начинает "крестовый поход" язык нового поколения - C#. Хотя среди всевозможных мыльных пузырей затерялся весьма достойная объектная модель пакета IBM VisualAge. Будущее пренадлежит кроссплатформенным инструментам разработки, и к ним можно отнести wxWindows, Qt и несколько других пакетов. Основы причины их популярности следующие: 1)низкая цена; 2)доступность исходных кодов; 3)простота программирования; 4)поддержка большинства современных компиляторов. По сравнению с библиотеками тех же Borland, Microsoft или Sun у wxWindows история побогаче будет(первая версия появилась еще в 1993-ем). В отличии от других библиотек подобного типа в поставку wxWindows входят не бесполезные примеры одноразового применения, а довольно редкие(на мой взгляд) программы. Например есть конвертер документов из формата TeX в RTF. Разумеется совершенствование систем программирования сегодня и в России не останавливается. Мое внимание привлекли материалы конференции "Индустрия программирования'96". В одном из докладов этой конференции говорилось о реализованной при разработке МКС "Буран" системе программирования СИПРОЛ, позволявщей получать исполнимый код в форме С-программ, что в свою очередь позволяло переносить разработанные системы управления практически на все современные ЭВМ. Отличительная особенность системы - графический редактор и отладчик, которые были интегрированы в единую "турбо-систему". Разработку систем управления можно вести как средствами графического, так и обычного (текстового) программирования. Серьезное внимание уделено "уровню зрелости" (maturity level) процесса разработки, т.е. вопросам повышения качества создаваемого ПО и процесса его разработки. Главным фактором качества, определяющим уверенность пользователя программного обеспечения, не может являться какая-либо однократная проверка (тестирование, инспекция кода или нечто подобное). Гарантию качества дает совокупность мер по организации взаимодействия разработчиков, совместного использования и разработки программ, документов и др. что в целом и определяет уровень зрелости организации- и группы-производителя ПО. Внедрении в процесс разработки организационных процедур и средств управления конфигурациями ПО (проблем структуризации и хранения программных материалов). В Институте прикладной математики им. М.В.Келдыша РАН в ходе исследований и разработки средств поддержки разработчикам ПО для крупных управляющих систем реального времени разработан подход иерархического конфигурационного управления(ИКУ), который позволил решить следующие задачи: разработать независимое от языка программирования иерархическое представление структуры программного материала, позволяющее явно описывать связи и зависимости между отдельными компонентами ПО, их вариантами, отличающимися функционально, и поколениями, которые отражают эволюцию компонента, вызванную коррекцией ошибок, модернизацией и т.п.; обеспечить поддержку откатов и ретроспективного анализа процесса разработки, за счет интегрирования системы хранения поколений и описаний изменений; автоматизировать поддержку сборки согласованных версий(конфигураций); обеспечить целостность контролируемых версий. Последнее время высока популярность WWW-программирования. Языки WWW-программирования обладают рядом свойств, которые позволяют использовать их на платформе, специализированной для работы в качестве сервера. Чаще всего это интерпретаторы (такие как Perl, PHP) позволяющие использовать их на стороне сервера, или языки поддерживаемые клиентом(браузеры) - HTML, XML, Java, JavaScript, или специальные модули(plug-in), расширяющие клиента - Flash.
|