История развития и анализ возможностей различных языков программирования

ПРИКЛАДНЫЕ ПРОГРАММЫ В СТРОИТЕЛЬНОМ ПРОЕКТИРОВАНИИ

Даты (Исторические события):

1804 г. -Французский изобретатель Жозеф Мари Жаккар создал ткацкий станок с программным управлением. Для управления станком использовались перфокарты, соединенные друг с другом в виде ленты.

1834 г. –Английский ученый Чарльз Бэббидж разработал проект вычислительной машины (аналитическая машина) с программным управлением.

1889 г. - Американский изобретатель Герман Голлерит изобрел электромеханическую машину - табулятор. Голлерит считается основоположником счетно-перфорационной техники. Разработанная им 80-колонная перфокарта не претерпела существенных изменений и в качестве носителя информации использовалась в первых трех поколениях компьютеров.

1918 г . -Русский ученый М. А. Бонч-Бруевич и английские ученые В. Икклз и Ф. Джордан (1919) независимо друг от друга создали электронное реле, названное англичанами триггером.

1941 г. - Немецкий инженер Конрад Цузе построил первый в мире действующий релейный компьютер Z3 с программным управлением. Для программирования Z3 Конрад придумал некий алгоритмический язык.

1944 г. - Американский инженер Джон Преспер Эккерт впервые выдвинул концепцию хранимой в памяти компьютера программы. Говард Айкен из Гарвардского университета создал релейный компьютер "Марк-1".

1945 г – Создание Assembler’a

1945 г. - Джон Маучли и Джон Преспер Эккерт построили в Пенсильванском университете электронный компьютер ENIAC и разработали проект первого компьютера EDVAC с хранимой программой. Американский математик Джон фон Нейман опубликовал предварительный доклад о машине EDVAC, в котором описал основные компоненты машины и логику ее работы.

1948 г. - Английскими учеными Т. Килбурном и Ф. Вильямсом из Манчестерского университета, введен в действие первый в мире компьютер с хранимой программой "Манчестерский Марк-1",

1948 г. Язык ЛИСП разработан Дж. Маккарти в США.

1949 г. -Введена в эксплуатацию другая английская машина с хранимой программой- EDSAC, разработанная Морисом Уилксом из Кембриджского университета. Морис Уилкс ввел систему мнемонических обозначений для машинных команд, названную языком ассемблера. Джон Маучли создал первый интерпретатор языка программирования под названием "Short Code".

1956 г. - Группа инженеров всем известной (теперь) компании IBM под руководством Джона Бекуса создала компилятор для Fortran.

1958 г. - 27 мая - В Федеральном техническом университете г. Цюрих состоялась конференция по созданию нового языка программирования.

Причиной созыва конференции послужило отсутствие единого языка научного программирования. Через неделю после заседания возник язык , названный Алгол-58.

1959 г. - Состоялась конференция по языкам программирования.

Ее возглавил Чарлз Филлипс, директор Института исследований систем обработки данных министерства обороны США. Эта конференция получила название CODASYL (Conference on Data System Languages - конференция по языкам систем обработки данных). Причиной созыва конференции послужило создание единого языка для деловых приложений, был создан COBOL.

1962 г. - Создан компилятор Фортран V, который умел работать с комплексными числами.

1963 г. - Кемени и Курц (США) начали разрабатывать первую версию компилятора для языка Бейсик.

1964 г. - Был создан язык PL/1 (от programming language one) работа над компилятором проводилась в лаборатории фирмы IBM в Англии. Многие черты Фортрана, Кобола и Алгола нашли отражение в PL/1.

1965 г.- К.А.Р. Хоар и швейцарский ученый Никлаус Вирт, преподававший в Станфордском университете США, предложили модифицированную версию, которая получила название Алгол-W в честь Вирта, была опубликована и приобрела большую популярность в университетских городках. Но комитет ее отверг.

1968 г.- Появился язык программирования Алгол - 68. Вирт и другие известные ученые выступили против нового языка.

1970 г.- Создания Языка Паскаль Виртом (Швейцария), очень быстро начал повсеместно распространяться.

1972 г.- Паскаль объявлен официальным языком программирования для учащихся средних школ, которые намерены специализироваться в области вычислительной техники и программирования в американских университетах.

1972 г. - Появился Пролог.

1972г - Язык Си был разработан и реализован Д. Ритчи в фирме Bell Labs,

1973 г. - Первые версии языка программирования Си++ (тогда он назывался "Си с классами".

1975 г. - Был создан первый интерпретатор Small- Бейсика, состоящий примерно из 20 страниц восьмеричного кода. Его создали два программиста-любителя Дик Уиппл и Джон Арнольд.

1977 г. - Создан компилятор Fortran 77, стандартизированный.

1977 г. - Начата работа по созданию машинно-независимой версии транслятора с языка Си.

1979 г. - Появилась Модула-2, прежде всего от Паскаля она отличалась тем, что давала возможность использовать модульное программирование.

1982 г. - Появился стандарт ИСО 7185.

1983 г. - Язык Ада создан по заказу Министерства обороны США и, соответственно, при его активной поддержке. Был проведен конкурс среди разработчиков, и его выиграла некая фирма Honeywell в лице ее подразделения Cii-Bull с руководителем Ж. Ишбиа.

1985 г. - Появлением версии Turbo Pascal 3.0.

1987 г. - Язык Оберон был создан Никлаусом Виртом.

1988 г. - Появлением версии Turbo Pascal 4.0.

1988 г. - Появлением версии Turbo Pascal 5.0.

1991 г. - Создан Delphi - компилятор языка Object Pascal.

1993 г. - Впервые был реализован коммерческий транслятор, и сам язык был назван "С++".

1996 г. - Ознаменовано появлением нового языка программирования Java.

 

Система программирования — это система для разработки новых программ на конкретном языке программирования. Современные системы программирования обычно предоставляют пользователям мощные и удобные средства разработки программ. В них входят:

- компилятор или интерпретатор; интегрированная среда разработки;

- средства создания и редактирования текстов программ;

-обширные библиотеки стандартных программ и функций;

- отладочные программы, т.е. программы, помогающие находить и устранять ошибки в программе;

- "дружественная" к пользователю диалоговая среда;

- многооконный режим работы;

- мощные графические библиотеки; утилиты для работы с библиотеками

- встроенный ассемблер;

- встроенная справочная служба;

- другие специфические особенности.

Популярные системы программирования — Turbo Basic, Quick Basic, Turbo Pascal, Turbo C.

В последнее время получили распространение системы программирования, ориентированные на создание Windows-приложений:

- пакет Borland Delphi (Дельфи) — блестящий наследник семейства компиляторов Borland Pascal, предоставляющий качественные и очень удобные средства визуальной разработки. Его исключительно быстрый компилятор позволяет эффективно и быстро решать практически любые задачи прикладного программирования.

- пакет Microsoft Visual Basic — удобный и популярный инструмент для создания Windows-программ с использованием визуальных средств. Содержит инструментарий для создания диаграмм и презентаций.

- пакет Borland C++ — одно из самых распространённых средств для разработки DOS и Windows приложений.

Язык Бейсик (BASIC — Beginners All-purpose Symbolic Instruction Code — универсальный символьный код для начинающих) был создан в 1965 г. Дж. Кемени и Т.Курцем как язык, облегчающий написание простых программ. Cейчас все чаще пишут Basic вместо BASIC, придавая другую трактовку названию: Basic — основной, базовый. Существует много различных версий Бейсика — от очень простых до усовершенствованных, содержащих множество дополнительных языковых конструкций. Наибольшее распространение имеют следующие версии: QuickBasic (QBasic) 4.5 для DOS и Visual Basic 3.0-6.0 для Windows. QuickBasic 4.5 фирмы Microsoft — это очень простой, но в то же время эффективный язык, унаследовавший от раннего Бейсика все его достоинства, но избавившийся от всех его недостатков и впитавший целый ряд передовых идей начала 90-х годов. Еще QuickBasic очень привлекателен своей средой программирования. Одна из удач — это использование своеобразного режима работы. Для быстрой работы в среде используется режим интерпретатора, а для окончательного перевода отлаженных программ на машинный язык используется компилятор. Из QBasic компилятор исключен. QBasic входит в минимальный комплект поставки программного обеспечения компьютера. Бейсик очень популярный язык программирования
Язык Паскаль был разработан в 1970 г. Никласом Виртом как язык обучения студентов программированию. Паскаль вырабатывает навыки соблюдения хорошего строгого стиля программирования, упрощающего разработку сложных программ. Основные привлекательные черты Паскаля — логичность, поддержка концепций структурного и процедурного программирования, работа с динамической памятью, возможность создания своих типов данных. В Паскале программист должен всегда явно указывать, с какими конкретными переменными он желает работать и каковы типы этих переменных. Строгая типизация данных позволяет резко снизить количество ошибок, появляющихся в программе вследствие невнимательности или опечаток. В своем первоначальном виде Паскаль имел довольно ограниченные возможности, но расширенный вариант этого языка — Turbo Pascal, является очень мощным языком программирования. Интегрированная оболочка Turbo Pascal, разработанная фирмой Borland (ныне Inprise), включающая в себя редактор, компилятор, компоновщик и отладчик, вместе с интерактивной справочной системой сделали разработку программ на Паскале делом простым и приятным.

Язык Си разработан Деннисом Ритчи в 1972 г. как язык, пригодный для программирования новой операционной системы UNIX.

Операционные системы ради повышения скорости работы традиционно писались на языке низкого уровня — ассемблере, но язык Си настолько хорошо зарекомендовал себя, что на нем было написано более 90% всего кода ОС UNIX. Язык СИ обрел популярность как так называемый язык среднего уровня, в котором удобство, краткость и мобильность языков высокого уровня сочетаются с возможностью непосредственного доступа к аппаратуре компьютера, что обычно достигаются только при программировании на языке Ассемблера.

Си не очень прост в изучении и требует тщательности в программировании, но позволяет создавать сложные и весьма эффективные программы

 

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

Для того, чтобы облегчить общение человека с ЭВМ были созданы языки программирования типа Ассемблер. Переменные величины стали изображаться символическими именами. Числовые коды операций заменились на мнемонические обозначения, которые легче запомнить. Язык программирования приблизился к человеческому языку, и отдалился от языка машинных команд.

Один из первых языков программирования – Фортран (Formula Translation) был создан в середине 50-х годов. Благодаря своей простоте и тому, что на этом языке накоплены большие библиотеки программ Фортран и в наши дни остается одним из самых распространенных. Он используется для инженерных и научных расчетов, для решения задач физики и других наук с развитым математическим аппаратом.

Для решения экономических задач был создан язык программирования - Кобол.

Расширение областей применения ЭВМ влечет за собой создание языков, ориентированных на новые сферы применения: Снобол – алгоритмический язык для обработки текстовой информации, Лисп - алгоритмический язык для обработки символов. Лисп находит широкое применение в исследованиях по созданию искусственного интеллекта.

В 1968 г. был объявлен конкурс на лучший язык программирования для обучения студентов. Победителем стал язык Алгол-68, но широкого распространения не получил. Для этого конкурса Никлаус Вирт создал язык Паскаль, достаточно простой, удобный, с наличием мощных средств структурирования данных. Хотя Паскаль был разработан как язык для обучения программированию, он впоследствии получил широкое развитие и в настоящее время считается одним из самых используемых языков. Для обучения младших школьников Самуэлем Пайпертом был разработан язык Лого. Он отличается простотой и богатыми возможностями.

Широкое распространение в школах в качестве обучающего языка получил язык Бейсик, позволяющий взаимодействовать с ЭВМ в режиме непосредственного диалога. Спустя много лет после изобретения Бейсика, он и сегодня самый простой для освоения из десятков языков общецелевого программирования.

Необходимость разработки больших программ, управляющих работой ЭВМ, потребовала создания специального языка программирования СИ в начале 70-х г. Он является одним из универсальных языков программирования. В отличии от Паскаля, в нем заложены возможности непосредственного обращения к некоторым машинным командам и к определенным участкам памяти компьютера. Си широко используется как инструментальный язык для разработки операционных систем, трансляторов, баз данных и других системных и прикладных программ. Си – это язык программирования общего назначения, хорошо известный своей эффективностью, экономичностью, и переносимостью. Во многих случаях программы, написанные на Си, сравнимы по скорости с программами, написанными на языке Ассемблера. При этом они имеют лучшую наглядность и их более просто сопровождать. Си сочетает эффективность и мощность в относительно малом по размеру языке.

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

В 80-х г. 20 века был создан язык Ада. Этот язык в дополнение к классическим свойствам, обеспечивает программирование задач реального времени и моделирования параллельного решения задач.

Существуют различные классификации языков программирования.

По наиболее распространенной классификации все языки программирования делят на языки низкого, высокого и сверхвысокого уровня.

В группу языков низкого уровня входят машинные языки и языки символического кодирования: (Автокод, Ассемблер). Операторы этого языка – это те же машинные команды, но записанные мнемоническими кодами, а в качестве операндов используются не конкретные адреса, а символические имена. Все языки низкого уровня ориентированы на определенный тип компьютера, т. е. являются машинно-зависимыми. Машинно-ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.).

Следующую, существенно более многочисленную группу составляют языки программирования высокого уровня. Это Фортран, Алгол, Кобол, Паскаль, Бейсик, Си, Пролог и т.д. Эти языки машинно-независимы, т.к. они ориентированы не на систему команд той или иной ЭВМ, а на систему операндов, характерных для записи определенного класса алгоритмов. Однако программы, написанные на языках высокого уровня, занимают больше памяти и медленнее выполняются, чем программы на машинных языках.

К языкам сверхвысокого уровня можно отнести лишь Алгол-68 и APL. Повышение уровня этих языков произошло за счет введения сверхмощных операций и операторов.

Другая классификация делит языки на вычислительные и языки символьной обработки. К первому типу относят Фортран, Паскаль, Алгол, Бейсик, Си, ко второму типу - Лисп, Пролог, Снобол и др.

1. В современной информатике существуют два основных направления развития языков программирования: процедурное и непроцедурное.

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

Среди процедурных языков выделяют в свою очередь структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада, ПЛ/1. Среди операционных известны Фортран, Бейсик, Фокал.

2. Непроцедурное (декларативное) программирование появилось в начале 70-х годов 20 века, но стремительное его развитие началось в 80-е годы, когда был разработан японский проект создания ЭВМ пятого поколения, целью которого явилась подготовка почвы для создания интеллектуальных машин. К непроцедурному программированию относятся функциональные и логические языки.

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

В логических языках программа вообще не описывает действий. Она задает данные и соотношения между ними. После этого системе можно задавать вопросы. Машина перебирает известные и заданные в программе данные и находит ответ на вопрос. Порядок перебора не описывается в программе, а неявно задается самим языком. Классическим языком логического программирования считается Пролог. Построение логической программы вообще не требует алгоритмического мышления, программа описывает статические отношения объектов, а динамика находится в механизме перебора и скрыта от программиста.

Можно выделить еще один класс языков программирования - объектно-ориентированные языки высокого уровня. На таких языках не описывают подробной последовательности действий для решения задачи, хотя они содержат элементы процедурного программирования. Объектно-ориентированные языки, благодаря богатому пользовательскому интерфейсу, предлагают человеку решить задачу в удобной для него форме. Примером такого языка может служить язык программирования визуального общения Object Pascal.

Языки описания сценариев, такие как Perl, Python, Rexx, Tcl и языки оболочек UNIX, предполагают стиль программирования, весьма отличный от характерного для языков системного уровня. Они предназначаются не для написания приложения с нуля, а для комбинирования компонентов, набор которых создается заранее при помощи других языков. Развитие и рост популярности Internet также способствовали распространению языков описания сценариев. Так, для написания сценариев широко употребляется язык Perl, а среди разработчиков Web-страниц популярен JavaScript.

Языки программирования - это формальные языки специально созданные для общения человека с вычислительной машиной. Каждый язык программирования, равно как и "естественный язык" (русский, английский и т.д.) имеет алфавит, словарный запас, свои грамматику и синтаксис, а также семантику.

1. Алфавит - фиксированный для данного языка набор основных символов, допускаемых для составления текста программы на этом языке.

2. Синтаксис - система правил, определяющих допустимые конструкции языка программирования.

3. Семантика - система правил однозначного толкования отдельных языковых конструкций, позволяющих воспроизвести процесс обработки данных.
При описании языка и его применении используют понятия языка. Понятие подразумевает некоторую синтаксическую конструкцию и определяемые этой конструкцией свойства программных объектов или процесса обработки данных.

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

Интерпретация конструкций языка программирования должна быть однозначной, так как фраза на языке программирования превращается в машинный код автоматически, с помощью программы-транслятора, и любой намек на неоднозначность либо делает эту фразу непереводимой, либо приводит к ошибке. В этом отношении языки программирования значительно отличаются от естественных языков, допускающих неоднозначно интерпретируемые фразы, рассчитанные на здравый смысл и жизненный опыт человека - слушателя и исполнителя, способного додумать содержание фразы. "Додумывание" не входит в способности компьютеров, поэтому необходимы приемы описания конструкций языков программирования типа: "Оператором присваивания называется …", причем продолжение подобной фразы на естественном языке чаще всего оказывается либо слишком громоздким, либо недостаточным, либо и тем, и другим одновременно.

Для строгого и точного описания синтаксиса языка программирования, как правило, используют специальные метаязыки (языки для описания других языков). Наиболее распространенными метаязыками являются металингвистические формулы Бэкуса-Наура (язык БНФ) и синтаксические диаграммы Вирта.

Язык БНФ (называемый также языком нормальных форм) представляет компактную форму в виде некоторых формул, похожих на математические. Для каждого понятия языка существует единственная метаформула (нормальная формула). Она состоит из левой и правой частей. В левой части указывается определяемое понятие, а в правой - задается множество допустимых конструкций языка, которые объединяются в это понятие. В формуле используют специальные метасимволы в виде угловых скобок, в которых заключено определяемое понятие (в левой части формулы) или ранее определенное понятие (в ее правой части), а разделение левой и правой частей указывается метасимволом "::=", смысл которого эквивалентен словам "по определению есть".

Рассмотрим метаформулы:

<переменная>::=A|B

<выражение>::=<переменная>+<переменная>|<переменная>-<переменная>

Эти метаформулы означают, что в том (сугубо модельном) языке, на который они распространяются, под термином <переменная> понимается любая из букв А или В, а под термином <выражение> - любая из следующих 10 записей: A; B; A+A; A+B; B+A; B+B; A-A; A-B; B-A; B-B; знак | следует читать "или".

Правая часть метаформулы может содержать правило построения допустимых последовательностей. Допускаются рекурсивные определения терминов и понятий, т.е. когда в правой части формулы участвует понятие, определяемое левой частью. Например, пусть необходимо ввести понятие <двоичный код>, под которым понимается любая непустая последовательность цифр 0 и 1.

В последнем случае рекурсивное определение с помощью метаформулы выглядит так:

<двоичная цифра>::=0|1

<двоичный код>::=<двоичная цифра>|<двоичный код><двоичная цифра>

В приведенном примере рекурсия не мешает конструктивному построению понятия <двоичный код>, так как по принятым правилам при первом обращении к рекурсивно определяемому понятию следует ограничиться нерекурсивной частью формулы, т.е. под двоичным кодом понимать двоичную цифру - 0 или 1. Но при втором обращении к метаформуле, определяющей двоичный код, мы имеем варианты понятия <двоичный код>, и можем применить рекурсию, которая даст нам следующие варианты этого понятия : 0 1 00 01 10 11, т.е. все возможные одно- и двухцифровые двоичные коды. Очевидно, что при следующих применениях рекурсии мы получим любой возможный двоичный код.

Синтаксическая диаграмма является графическим представлением значения метапеременной метаязыка. Диаграмма состоит из основных символов или понятий языка.

Каждая диаграмма имеет входящую и выходящую стрелки, означающие начало и конец синтаксической конструкции и отражающие процесс ее чтения и анализа. Из каждого элемента выходит одна или несколько стрелок, указывающих на те элементы, которые могут следовать непосредственно за данным элементом.

Для сравнения с метаформулами приведем несколько примеров:

Синтаксическая диаграмма

<переменная>::=

эквивалентна метаформуле <переменная>::=A|B

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