Редактирование: Языки программирования, 03 лекция (от 12 сентября)
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 7: | Строка 7: | ||
===Второй этап развития языков программирования=== | ===Второй этап развития языков программирования=== | ||
- | Второй этап развития языков программирования (20–25) лет. Знаменовался экспоненциальным ростом ЯП и тремя попытками создания универсальных языков программирования: [ | + | Второй этап развития языков программирования (20–25) лет. Знаменовался экспоненциальным ростом ЯП и тремя попытками создания универсальных языков программирования: [[PL/1]], [[Algol|Algol-68]], [[Ada]]. Все три проекта были обречены на неудачу. Все три языка провалились из-за повышенной сложности. [[Pascal]] и [[С]] отличает предельная простота. |
===Два основных принципа дизайна ЯП=== | ===Два основных принципа дизайна ЯП=== | ||
Строка 23: | Строка 23: | ||
* Производительность кода | * Производительность кода | ||
- | Недостаток Ada и [ | + | Недостаток Ada и [[Modula|Modula-2]] — они не являются объектно-ориентированными языками. Но Modula-2 все равно лучше, так как проще. |
===1967 — Simula-2=== | ===1967 — Simula-2=== | ||
- | В [ | + | В [[Simula|Simula-2]] появлилась концепция класса, новые объекты создаются в динамической памяти оператором new. Но производительнось генерируемого кода была слишком низкая. |
===1980 — Smalltalk V=== | ===1980 — Smalltalk V=== | ||
- | Apple писала на Pascal, фактически это было основой систем LISA. Первая версия Windows также поддерживала вызов процедур как на Pascal, так и на C (отличаются передачей параметров). | + | Apple писала на [[Pascal]], фактически это было основой систем LISA. Первая версия Windows также поддерживала вызов процедур как на Pascal, так и на [[C]] (отличаются передачей параметров). |
- | ООП языки должны поддерживать все эти вещи ([ | + | ООП языки должны поддерживать все эти вещи ([[SmallTalk]] поддерживал): |
* Наличие понятие объекта, типа данных, инкапсуляции | * Наличие понятие объекта, типа данных, инкапсуляции | ||
* Наследование | * Наследование | ||
* Полиморфизм | * Полиморфизм | ||
- | ** Переопределение стандартных операций, например, операции «+» (в [ | + | ** Переопределение стандартных операций, например, операции «+» (в [[Java]] такого нет) |
** Переопределение методов. По-разному для разных объектов | ** Переопределение методов. По-разному для разных объектов | ||
Строка 44: | Строка 44: | ||
===1979–… — C++=== | ===1979–… — C++=== | ||
- | Simula [ | + | [[Simula]] [[Бьерн Страуструп|Страуструпу]] нравилась всем, кроме эффективности. |
Страуструп хотел разработать язык, который был бы так же строен и красив, как Simula, и эффективен, как ассемблер. А так как он работал в Bell Labs для '''AT&T''', то в качестве основы был выбран С, в результате язык получил название «С с классами» ("C with classes"). Основным критерием при создании С с классами была совместимость, в частности, с UNIX и её системными библиотеками. | Страуструп хотел разработать язык, который был бы так же строен и красив, как Simula, и эффективен, как ассемблер. А так как он работал в Bell Labs для '''AT&T''', то в качестве основы был выбран С, в результате язык получил название «С с классами» ("C with classes"). Основным критерием при создании С с классами была совместимость, в частности, с UNIX и её системными библиотеками. | ||
- | 1983 — язык получил имя [ | + | [[1983]] — язык получил имя [[C++]]. Этот язык не имел никаких квазистатических проверок, что существенно ускоряло работу. |
В Kernigan&Ritchie C при отсутствии поля выдавалось только предупреждение, а не ошибка. P->fld при отсутствии поля fld заменялся просто на P | В Kernigan&Ritchie C при отсутствии поля выдавалось только предупреждение, а не ошибка. P->fld при отсутствии поля fld заменялся просто на P | ||
Строка 60: | Строка 60: | ||
===1988 — Oberon и Eiffel=== | ===1988 — Oberon и Eiffel=== | ||
- | Вирт получил премию Тьюринга за изобретение совокупности языков программирования (Algol W, Euclide, PL/360, Pascal, Modula, Modula-2, Oberon, Oberon-2). | + | [[Никлаус Вирт|Вирт]] получил премию Тьюринга за изобретение совокупности языков программирования ([[Algol|Algol W]], [[Euclide]], [[PL/360]], [[Pascal]], [[Modula]], [[Modula|Modula-2]], [[Oberon]], [[Oberon|Oberon-2]]). |
Из Modula было выкинуто определённое количество конструкций и добавлено наследование. Сообщение об Обероне занимало 10 страниц. Компилятор составлял 4000 строк. | Из Modula было выкинуто определённое количество конструкций и добавлено наследование. Сообщение об Обероне занимало 10 страниц. Компилятор составлял 4000 строк. | ||
Строка 68: | Строка 68: | ||
===Современные объектно-ориентированные языки программирования=== | ===Современные объектно-ориентированные языки программирования=== | ||
- | Delphi — наследник языка Turbo Pascal. В Turbo Pascal 6 можно вызывать функцию как процедуру. | + | [[Delphi]] — наследник языка [[Turbo Pascal]]. В Turbo Pascal 6 можно вызывать функцию как процедуру. |
В этих языках объекты заводятся только в динамической памяти. | В этих языках объекты заводятся только в динамической памяти. | ||
- | * 1990-е — Delphi (Borland) | + | * [[1990-е]] — [[Delphi]] (Borland) |
- | * 1995 — Java (Sun) | + | * [[1995]] — [[Java]] (Sun) |
- | * 1999 — [ | + | * [[1999]] — [[C#]] (Microsoft) |
- | В этих языках реализованы схожие идеи и модные нынче | + | В этих языках реализованы схожие идеи и модные нынче тенднции. |
Java — основной язык для создания программ в гетерогенной среде (Сети). | Java — основной язык для создания программ в гетерогенной среде (Сети). |