Языки программирования, 03 лекция (от 12 сентября)
Материал из ESyr's Wiki pages.
Предыдущая лекция | Следующая лекция
Содержание |
Этапы развития ЯП
Все основные идеи появились в первые 15–20 лет, всё новое — хорошо забытое старое.
Второй этап развития языков программирования
Второй этап развития языков программирования (20–25) лет. Знаменовался экспоненциальным ростом ЯП и тремя попытками создания универсальных языков программирования: PL/1, Algol-68, Ada. Все три проекта были обречены на неудачу. Все три языка провалились из-за повышенной сложности. Pascal и С отличает предельная простота.
Два основных принципа дизайна ЯП
Создание ЯП аналогично собиранию вещей в путь.
- принцип сундучка — брать все то, что в принципе может понадобиться
- принцип чемоданчика — брать только то, без чего совсем нельзя обойтись (он же прнцип минимальности языковых конструкций)
Ключевое понятие — технологическая потребность.
Какие свойства критичны с точки зрения индустриального программирования:
- Технологические потребности
- Особенно — раздельная компиляция
- Объектная ориентация
- Производительность кода
Недостаток Ada и Modula-2 — они не являются объектно-ориентированными языками. Но Modula-2 все равно лучше, так как проще.
1967 — Simula-2
В Simula-2 появлилась концепция класса, новые объекты создаются в динамической памяти оператором new. Но производительнось генерируемого кода была слишком низкая.
1980 — Smalltalk V
Apple писала на Pascal, фактически это было основой систем LISA. Первая версия Windows также поддерживала вызов процедур как на Pascal, так и на C (отличаются передачей параметров).
ООП языки должны поддерживать все эти вещи (SmallTalk поддерживал):
- Наличие понятие объекта, типа данных, инкапсуляции
- Наследование
- Полиморфизм
- Переопределение стандартных операций, например, операции «+» (в Java такого нет)
- Переопределение методов. По-разному для разных объектов
Smalltalk погубила его неэффективность.
1979–… — C++
Simula Страуструпу нравилась всем, кроме эффективности.
Страуструп хотел разработать язык, который был бы так же строен и красив, как Simula, и эффективен, как ассемблер. А так как он работал в Bell Labs для AT&T, то в качестве основы был выбран С, в результате язык получил название «С с классами» ("C with classes"). Основным критерием при создании С с классами была совместимость, в частности, с UNIX и её системными библиотеками.
1983 — язык получил имя C++. Этот язык не имел никаких квазистатических проверок, что существенно ускоряло работу.
В Kernigan&Ritchie C при отсутствии поля выдавалось только предупреждение, а не ошибка. P->fld при отсутствии поля fld заменялся просто на P
В последних версиях появился квазистатический контроль — dynamic_cast.
С++ добавил к С две мощные концепции:
- Концепция класса
- Аппарат наследования (в т. ч. множественного) и полиморфизма
Все перечисленные преимущества позволили языку получить статус профессионального.
1988 — Oberon и Eiffel
Вирт получил премию Тьюринга за изобретение совокупности языков программирования (Algol W, Euclide, PL/360, Pascal, Modula, Modula-2, Oberon, Oberon-2).
Из Modula было выкинуто определённое количество конструкций и добавлено наследование. Сообщение об Обероне занимало 10 страниц. Компилятор составлял 4000 строк.
Eiffel — широко известен в узких кругах.
Современные объектно-ориентированные языки программирования
Delphi — наследник языка Turbo Pascal. В Turbo Pascal 6 можно вызывать функцию как процедуру.
В этих языках объекты заводятся только в динамической памяти.
В этих языках реализованы схожие идеи и модные нынче тенднции.
Java — основной язык для создания программ в гетерогенной среде (Сети).
Одним из принципов Java является принцип WORA — Write Once, Run Anywhere. Это достигнуто с помощью Java Virtual Machine (JVM). Был разработан байт-код, который эта машина интерпретирует уже на конкретной архитектуре. Корни: UCSD Pascal. Для разных версий Pascal писался интерпретатор P-кода, который получался при компиляции в него.
В Microsoft решили, что определяющим является не язык, а библиотека, и сделали .NET и CLR (Common Language Runtime). Был создан MIL — Microsoft Intermediate Language, в который транслируется код на разных языках.
С#, VC++.NET, JS.NET, WB.NET => MIL (байт-код)
Различия между JVM и MIL: JVM интерпретируется, MIL компилируется JIT-компилятором (Just In Time).
MS JVM была быстрее Sun JVM из-за того, что у MS опыта больше в создании JIT-компиляторов (полученного ещё во времена разработки Visual Basic).
Delphi — компромисс между VB и С++.
C# — замена от MS, вытеснившая Delphi из своей ниши.
Языки Программирования
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Календарь
чт | вт | чт | вт | чт | вт | чт | вт | чт | вт | |
Сентябрь
| 05 | 07 | 12 | 14 | 19 | 21 | 26 | 28 | ||
Октябрь
| 03 | 05 | 10 | 12 | 17 | 19 | 24 | 26 | 31 | |
Ноябрь
| 02 | 14 | 16 | 21 | 23 | 28 | 30 | |||
Декабрь
| 05 | 07 | 12 | 14 | 19 |