лекции (2004) (1160823), страница 2

Файл №1160823 лекции (2004) (лекции (2004)) 2 страницалекции (2004) (1160823) страница 22019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

1. Словесные описания лексики

2.Формальное описание синтаксиса с помощью конструкций типа БНФ

3.Словесное описание семантики введенных понятий

Была достигнута унификация в описаниях ЯП. Хотя Алгол и был языком номер два в своей нише, но он получил достаточно большое распространение в Западной Европе, странах Советского блока именно как первый ЯП.

В Алголе присутствовали некоторые языковые конструкции, которых нельзя эффективно скомпилировать. Существует следующий неформальный показатель эффективности языка L: путь есть некоторый машинный язык М, и если взять некоторую задачу и запрограммировать ее на языке L (оттранслировать в объектный код) и на языке ассемблера, то показатель времени выполнения программы скомпилированной к программе на ассемблере все-таки должен быть больше единицы (для современных машинных языков это уже не совсем так). Так если для оптимизирующего компилятора Фортрана 4 Fortran-H компании IBM для ОС 360 этот показатель достигал 1,04, то для Алгол этот показатель 7-10. Алгол - язык не модульный, с точки зрения индустриального программирования он распространения не получил.

2. У IBM было два семейства компьютеров 709Х – для НТР, и 14ХХ – использовались для ввода вывода, либо для коммерческих расчетов (большой объем данных и тривиальные операции). Так по инициативе министерства обороны США в 1960 году появился COBOL - Common Business-Oriented Language для бизнес-ориентированных приложений. Язык был не самый удачный, но из-за ранней стандартизации получил широкое распространение. Проблема «2000-ого года» появилась из-за того, что в КОБОЛе был специальный тип данных – «дата», который занимал две десятичные цифры. Кобол до 90-ых годов занимал господствующее положение в нише таких программ как:

1. программы для работы с большими БД

2. программ для автоматизации финансовых расчетов

и.т.д.

Если бы не проблема 2000-ого года, возможно, многие программы на Коболе до сих пор бы использовались. Теперь в основном производиться реинжениринг (переписывание программ на другой язык). Сейчас используются – Visual Basic, Java и web-языки.

3. Языки программирования для искусственного интеллекта (задача близкая к проблеме машинного перевода, задачи символьной обработки). Появился в 1961 году LISP, который существует до сих пор и является языком функционального программирования, основная и единственная структура данных – список, который может содержать либо атомы (символы или числа), либо другие списки. Основные операции – применение функций. Cons – из 2-х списков делает один, cat и cdr берут соответственно начало и хвост некоторого списка, defun – позволяет определять свою собственную функцию, eval – своего рода интерпретатор языка LISP (можем формировать программу и немедленно ее выполнять). ЛИСП активно развивался, появились диалекты (Common LISP), есть объектно-ориентированное приложение CLOS. Были даже компьютеры, чьим внутренним языком программирования был ЛИСП – ЛИСП-машины.

Позже был придуман Schema – тоже язык функционального программирования, но не диалект ЛИСПа, гораздо проще.

К индустриальному программированию такие языки пока не относятся в силу своей неэффективности. Хотя за эффективность, платим сложностью соответствующих программных систем. В 1978 году Джон Бекус был удостоен премии Тьюринга (за свои заслуга в изобретении Фортрана, за развитие Алгола), на своей лекции он предложил отказаться от парадигмы Неймана и использовать FP - функциональное программирование, которое рассматривается как альтернатива императивного программирования.

4. Обработка текстов – SNOBOL, Icon (1960). И так далее для каждой языковой нише свой язык. Так в США использовалось огромное количество языков. Возникала проблема переписывания программ под новую периферию. Для каждого проекта писали свой язык – такая была концепция. Таким образом, данный этап развития ЯП завершился попыткой создания универсального ЯП – в смысле применимого для НТР и БОП. Так в фирме IBM для машины IBM360 пытались создать новый язык на базе Кобола, Алгола и Фортрана – NPL (new programming language). В 1964 году - язык PL/I, который получился очень громоздким, но не совсем универсальным. Множество атрибутов и не совсем ясные правила умолчания. Существовало даже два компилятора – отладочный и оптимизирующий. Сейчас язык вымер из-за слишком большой сложности.

Другой попыткой создания универсального ЯП был Алгол 68. Коллектив разработчиков отличался от того, который разрабатывал Алгол 60. Алгол 60 –первая попытка формального описания синтаксиса языка, то для Алгола 68 была введена специальная W – грамматика, которые позволяли описывать не только синтаксис, но и семантику (Ван Вейнгаарен). Присутствует принцип ортогональности языковых конструкций – независимость друг от друга языковых конструкций. Любые две конструкции можно употреблять в любых контекстах.

Пример из Паскаля:

For V=e1 to e2 do S это неортогональная конструкция, так как

  1. V – только простая переменная, а есть переменные с индексами

  2. типы е1 и е2 – непроизвольные

  3. оператор и выражение – две совершенно разные конструкции в Паскале

В Алголе 68 никакой разницы между оператором и выражение не было E – выражение, а Е; - оператор. Любой оператор – выражение, т.к. у любого оператора есть значение. Алгол 68 погиб как от сложности описания, так и от своей внутренней сложности. И вторая попытка создания универсального языка успехом не увенчалась.

Языки программирования. Лекция 3.

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

Условно можно выделить три периода развития ЯП:

1. Эмбриональный период (50-60-е годы) - появляются первые ЯП, соответствующие различным языковым нишам (рассмотрено на прошлой лекции); стихийный поиск и занятие языковых ниш; часто для нового проекта разрабатывался новый язык программирования (пример: HAL – для космической станции, JOVIAL- для военных применений). Некоторый языки того периода послужили «питательной средой» для последующих ЯП – Алгол 60, Симула 67 (разработан для имитационного моделирования на базе Алгола, в нем появилось понятие класса, появилось ключевое слово new для создания объектов класса, понятие наследования, идея о том, что объекты класса должны существовать в динамической памяти – ими занимается динамически сборщик мусора). Бьерн Страуструп разрабатывал Си++ , используя концепции Симулы. Период закончился попыткой создания универсального ЯП – PL/I и Алгол 68, оба языка не пошли в первую очередь из-за своей сложности. Так на сложном языке не получиться писать простые и понятные программы.

2. Устойчивый рост (60-80-е годы).

  • Дейкстра, Вирт и Хор участвовали в разработке Алгола, но не участвовали в разработке Алгола 68. Они высказали ряд идей повлиявших на дальнейшие ЯП и легли в основу нового ЯП, который придумал Вирт и назвал Паскалем. Паскаль был весьма продуманным ЯП и с успехом занял учебную нишу, а позже послужил основой для некоторых других ЯП.

  • Примерно в это же время появился Си, который занял нишу системного программирования – программирование ОС, драйверов. Ранее эту нишу занимали только машинные языки. Во избежание проблемы 2000, многие программы реинженировались с ассемблера и Кобола на Си. Эта ниша для языка, который можно описать как ассемблер, не зависящий от конкретной архитектуры. Первые попытки создания высокоуровневого ассемблера вылились в создание языков: CPL (Cambridge Programming Laboratory)-> BCPL (расширение CPL)-> B -> Cи. В Си появилось понятие типа для эффективного открепления памяти, а как следствие появилась адресная арифметика. На языке Си была создана более или менее переносимая ОС Unix. Большинство системного программного обеспечение сейчас разрабатывается на Си. Сейчас нет ни одного процессора, который появился бы без Си.

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

Так с начала 70-ых годов появление ЯП, стало не стихийным, а достаточно осмысленным. Появились языки модульного программирования, основанные на понятие абстрактного типа данных – CLU, Модула. Появилось направление доказательного программирования. Количество новых языков стало меньше, но общий объем был очень велик.

Исследование направленное на выяснение затрат при разработке программного продукта показало следующее:

Сопровождение (maintenance) – это процесс модификации программного продукта, вследствие изменений требований пользователя, изменений спецификаций внешней среды (смена оборудований) и выявления ошибок. Следовательно, если надо сэкономить, то это надо делать на сопровождении и отладке, т.е. надо иметь такие средства и технологии программирования, которые бы сразу позволяли писать программы с минимум ошибок в процессе проектирования. Так же необходимо, иметь такие инструменты, которые бы облегчили процесс изменения программ.

Было проведено другое исследование по поиску средств к снижению расходов. Выяснилось, что активно используется очень много ЯП (в одном Пентагоне около 350), что затрудняет сопровождение программ, при смене сотрудников, аппаратуры и прочего. Было принято решение о создании нескольких (а позже одного) основных ЯП, так кА лидеров среди используемых языков или универсального языка не было. Паскаль не годился на роль базового индустриального языка, Си был не распространен.

  • Было выработано несколько требований (порядка 6 итераций). Было выяснено, что все эти требования можно выполнить одним ЯП (всё это уточнялось в 1975-1978 года). В 1979 году был проведен тендер по созданию этого языка. Было выбрано 3 языка - прародителя - ПЛ/1, Алгол 68 и... Паскаль. Из 12 языков во второй тур вышли 4 языка. И все 4 языка были основаны на языке Паскаль. Языки Красный и Зелёный вышли в финал. Красный язык подошёл, так как его посчитали нестабильным из-за частых смен спецификаций, и был выбран Зелёный – позже Ада (его разрабатывали французы, Жан Ишбиа). Проигравшая фирма стала разрабатывать соответствующую систему валидации. Была разработана специальная система – Ada Compiler Validation System, для сертификации компиляторов. В 1980 году был принят стандарт Ада, а окончательный стандарт и первые сертифицированные компиляторы появились в 1983 году. Язык получился не простой, но традицией стало создание не только Language Reference Manual (LRM), но и обоснование – Rationale. Создание Ады – это третья попытка создания универсального ЯП. Создатели языка писали, что при дизайне языка работали 3 вещи:

1. надежность (язык создавался для встроенных систем реального времени – системы с гарантированным временем отклика)

2. эффективность (так как такие системы обладают минимумом ресурсов)

3. читабельность (так программы на Аде легко читать, но тяжело писать, с этой точки зрения самый краткий язык – Си. Текст программы должен сам себя документировать – так как его часто изучают и пересматривают)

Ада до сих пор живой, сейчас есть Ада 95. Правильно говорить только о языке Ада, так как новый стандарт полностью превзошел и отменил старый – то есть получилось два языка, хотя программы на Аде 83 в основном совместимы с компиляторами Ада 95. Ада 95 – это полностью объектно-ориентированный язык.

Ада 83 должна была стать единственным языком для разработки встроенных систем реального времени, эта цель не была достигнута, и можно сказать что проект потерпел неудачу. По Аде можно было изучать технологию программирования в том виде, в котором она сложилась к началу 80-ых годов. Безусловно, Ада неплохой язык, который умно спроектирован, затрачены огромные средства, вызвал интерес по всему миру. Однако сложность языка, как следствие сложный компилятор, как следствие очень сложные программные системы. Кроме того, какую нишу занимала Ада? Какая ниша может быть у универсального языка? Так нишу системного программирования занимал Си, другие ниши так же заняты. Открылась ниша объектно-ориентированного программирования, но ее занял в 1983 году Си++. Таким образом Ада как единый язык программирования провалился.

  • В 1980 году появился язык Модула-2 (автор - Вирт) – очень интересный язык. В 1988 году появился Оберон. В 1992 году появился Оберон-2. Модула-2 и язык Ада были в какой-то степени антиподами. Они появились примерно в одно и тоже время. Описание Модулы-2 - 40 страниц, языка Ада - несколько сот страниц. Проблемные области, для которых создавались языки примерно одинаковые. Модула 2 создавался как язык системного программирования – в основе концепции надежности и эффективности, этим же Модула отличается от Си, так как надежность не была целью разработчиков Си. В Модуле были средства организации параллельного и квазипараллельного программирования – так Модула вполне могла использоваться для систем реального времени. Тут присутствуют два принципа языкового дизайна.

  1. Принцип обоснованности языковых конструкций (принцип сундучка) – для каждой осмысленной технологической потребности в ЯП должна быть конструкция, отвечающей этой потребности (Так индустриальное программирование не возможно без раздельной трансляции). По этому принципу был создан язык Ада, его аппарат раздельной трансляции наиболее мощный.

  2. Принцип минимальности языковых конструкций (принцип чемоданчика) – в язык должны включаться те, и только те языковые конструкции, без которых функционирование языка в данной проблемной области невозможно. Так для Модулы 2 эта область системное программирование, и обеспечивается надежное и эффективное системное программирование.

Таким образом собираясь в дорогу можно взять все то, что может понадобиться (первый принцип), или только то, без чего нельзя обойтись (второй принцип). С точки зрения языкового дизайна второй принцип работает лучше (точка зрения лектора). Опыт показывает, что даже если программисты работают с языками, основанными на первом принципе, они используют очень небольшое количество языковых конструкций (так, например библиотека STL далеко не всегда используется при применении шаблонов). Кроме того, языки второй группы получили более широкое распространение.

Появлением Ады 85 и Модулы два ознаменовался некий рубеж.

3.Консолидация (90-е и т.д.)

Небольшое число языков используется, небольшое число добавляется каждый год, еще меньше языков получают широкое распространение, при этом довольно много старых языков. То же самое происходило в архитектуре машин, и на рынке ОС. С появлением 32-битной архитектуры она была реализована в микропроцессорах архитектур SPARK, IA-32, ARM, NS-32, Z-8000,... А выжили всего первые три... Да и то SPARC потихонечку выходит из употребления. Из новых - в основном, IA-64 (Intel) и 32/64 (AMD). Из ОС остается Linux, Windows, некоторые версии Unix, многие ОС выходят из употребления, однако появляются новые – хотя и в небольшом количестве, новые вытесняют старые.

  • Практически все языки, которые появились в 80-ые – 90-ые годы так или иначе связаны с концепцией объектно-ориентированного программирования. Первый язык ООП - 1972 год, SmallTalk (окончательная его версия - 1980 год). 1983 год - язык Си++, в 1985 его объявление было широко опубликовано. Си++ - объектное расширение языка Си. Си++ относится к объектно-императивной парадигме, до этого все языки относились исключительно к императивной парадигме (за исключением PROLOG логическое программирование, и LISP – функциональная парадигма).

  • Си++ был не первой попыткой объектного расширения языка. В 80-ые годы более известным был Object Pascal (не путать с Delphi). Это было объектное расширение классического Паскаля, появившееся в 70-ые годы. На Object Pascal были написаны первые версии ОС для компьютеров Макинтош. В Windows 3.0 в header-файлах фирмы Microsoft встречался способ вызова Паскаль. Он характеризуется тем, что параметры передаются через стек, параметры в стек кладет вызывающая программа, а из стека их выбрасывает сама процедура или функция. В стандартном вызове Си – вызывающая программа и кладет и выбрасывает параметры из стека, так как список параметров может быть переменной длины. В архитектурах есть два варианта команды – ret n (вариант Паскаль) и ret (вариант Си). Так фирма Microsoft использовала такой, же графический интерфейс как Макинтош, изначально этот интерфейс был написан на Паскале, потом переписали на Си, на ключевое слово Pascal осталось.

  • Первым объектным расширением Си был Object C, еще до Си++. Система программирования Delphi опирается на систему программирования Turbo Pascal. Turbo Pascal с некоторой стороны расширяет Паскаль, и похож не только на Object Pascal но и на Модула 2. В настоящее время ЯП системы Delphi тоже называется Object Pascal. Однако Си++ стал самым популярным расширением по двум причинам:

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

  2. полностью расширил этот язык, старые программы полностью совместимы с Си++ (это не было обеспечено ни Object Pascal, ни в языке системы Delphi)

Многие языки, которые развивались и появлялись в 80-ые годы были основаны на императивной парадигме (тот же самый оператор присваивания), только добавляли концепцию наследования и концепцию полиморфизма. 1988 год - язык Eiffel. 1988 год - язык Оберон. Введено понятие "расширение типа", "наследование"; всё остальное - сужение конструкций Модулы-2; абсолют принципа минимальности, однако не хватало динамического связывания, компилятор с языка Оберон – 4000 строк. Была идея вместо виртуальных функций сделать указатели на функции. В расширении компилятора Оберон-2 было реализовано динамическое связывание методов, и Оберон-2 стал похож на полный объектно-ориентированный язык. Оберон-2 - минимальный, но полностью функциональный объектно-ориентированный язык.

    • В 1995 году появился язык Java. Была развернута беспрецедентная маркетинговая кампания. Java четвертая попытка внедрения единого языка программирования. Говорилось, что если есть проект, который включает в себя сеть на основе транспортного протокола TCP/IP, то Java как раз тот язык, который нужен. Java позиционировался с одной стороны как ООЯ, в котором большое внимание уделено надежности, с другой стороны как не особенно сложный язык (проще чем Си). Java основан на понятии байт-кода и связанной с ним Java Virtual Machine (интерпретатор байт-кода) – идея обеспечения единой реализации языка. Семантика байт-кода должна быть строго и формально описана. Была полностью специфицирована специальная виртуальная машина Java (интерпретатор байт-кода, стандартные библиотеки). Java-компилятор переводит код программы в байт-код, который затем интерпретируется при помощи JVM, в байт-коде есть вызов библиотек. Надо только перевести JVM и соответствующие библиотеки на новую платформу, чтобы на ней можно было выполнять все программы на языке Java. Современная версия Java 2. Технология Java – это набор библиотек и инструментов. Основной упор делается не на язык, а на совокупность технологий. Несмотря на все это – Java не стал единым языком программирования.

    • В споре какой язык считать лучшим, речь уже идет не о самом языке, а о технологии программирования. Один их современных подходов, предложенных технологией .NET - другая альтернатива единого языка программирования. Пусть будет то язык, который нравится, а общим сделаем набор библиотек. Были созданы технологии CTS (унифицированная система типов), CLS (единая библиотека времени исполнения), ADO_NET. И все языки, включённые в эту систему, обладают одним набором коллекций/классов, одним "сборщиком мусора". В эту систему вошли языки VBasic («сильно подкрученный» под требования .NET), Visual Fox Pro, JScript, ASP, C++. Необходим был язык, который заполнял бы брешь между VBasic'ом и С++. На это место хорошо подходил был Delphi. Но этим языком стал C# (который стал "родным" для .NET'а). Си# похож на Java и на Delhi. Тут все равно какой язык, главное единая технология программирования.

Итак, говоря о ООП, будем упоминать, что есть Ада 95, Си++, Оберон 2 и есть семейство Си# -Java –Delhi, которые семантически очень сильно похожи друг ан друга.

Характеристики

Тип файла
Документ
Размер
2,66 Mb
Материал
Тип материала
Высшее учебное заведение

Список файлов лекций

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6314
Авторов
на СтудИзбе
312
Средний доход
с одного платного файла
Обучение Подробнее