Лекция 02 (1160803), страница 2
Текст из файла (страница 2)
К логической парадигме относится язык PROLOG (логический Ассемблер).
Модель аппликативного программирования – это алгоритм Маркова, тогда как модель императивного программирования – это машина Тьюринга. Наиболее ярким представителем аппликативного программирования является язык REFAL. С коммерческой точки зрения этот язык не имел никакого значения. Его а 60-е годы разрабатывали энтузиасты. С научной стороны REFAL свое слово еще не сказал. Общие принципы, заложенные в основу REFAL, настолько гибкие, что они обязательно еще где-нибудь проявятся.
Два наиболее громких проекта 90-х годов, связанные с ООП. Это JAVA, который был опубликован в 1995 году ( про Delphi и Турбо Паскаль уже говорилось) – это чистый язык ООП. По синтаксису он близок к Си++, но исключены все конструкции, которые тем или иным образом провоцируют ошибки (нет указателей). Язык JAVA не претендует на роль универсального ЯП, но определенную нишу он занял, и в ближайшие 10 лет этот язык не уйдет, хотя производительность на нем оставляет желать лучшего. Семейство языков JAVA прекрасно добавляется языком С#. С# и JAVA генетически связаны, но кроме этого С# интересен и по тому, хотя в нем и нет красивых языковых конструкций, что в период развития люди отказались от попытки создания универсального ЯП, в место этого сейчас много внимания уделяется системам, которые обеспечивают многоязыковое программирование. С# является частью общего интегрируемого подхода к новому программированию, так называемого .NET. Там интересны так называемые CLR (common language run-time), т.е. единая среда времени выполнения. Т.е. создана некоторая унифицированная система типов и единая стандартная библиотека, которая позволяет производить манипуляции над этими типами. И все языки, входящие в эту среду, а это C#, C++(контролируемое подмножество) , Visual Basic, имеют единый менеджер памяти, единую систему типов и единые стандартные библиотеки. Благодаря этому, объединение фрагментов программ, написанных на разных языках, становится все более и более легким. В 90-е годы на это было потрачено много усилий. Система CORBA, ее цель была наладить взаимодействие программ, находящихся на разных компьютерах. DCOM позволяет программам, написанным на разных ЯП, взаимодействовать в рамках одной операционной системы. В основе всех языков, которые входят в среду .NET лежит MIL – промежуточный язык. Сначала все эти языки компилируются в этот промежуточный код, а потом уже на Ассемблер. Этот подход очень похож на подход к созданию языка JAVA. JAVA – это, прежде всего JVM ( виртуальная машина языка JAVA. Эта машина уметет компилировать промежуточный JAVA байт-код. А сам компилятор языка JAVA делает программу на этом промежуточном представлении. JVM – это чистый интерпретатор байт-кода, из-за чего производительность немного страдает.
Надо отметить, что С# скорее всего, будет иметь коммерческий успех.
На сегодняшний день ЯП развиваются не в глубь (создание новых концепций), а в ширь.
Раньше была примерно следующая схема обучения:
-
Базисные алгоритмы (Машина Тьюринга, алгоритмы Маркова, и т.д.)
-
Алгол-60
-
Введение в структуру данных на Алгол-60
-
Язык FORTRAN (самостоятельное изучение)
-
Ассемблер
-
Численные методы
Этого было достаточно для того, чтобы стать программистом.
Сейчас, чтобы работать необходимо знание API( интерфейс прикладного программиста). Чтобы написать программу на Cи++ под Windows, надо знать парадигму программирования под Windows, библиотеку классов, которая инкапсулирована в соответствующий API или знать напрямую API. Система
POSIX-1152 – это UNIX вместе с API ( их число 1152). Сейчас очень важно разбираться в API и с этой точки зрения относительная важность изучения ЯП стала ниже. Поэтом ЯП, которые появились в 90-е годы ничего нового в себе не несут. В 90-е годы еще активно стали развиваться языки подготовки сценария (Script-языки ) Perl, Peton, Shell, Java-Script и т. д. В этих языках с концептуальной точки зрения ничего нового нет. Ани имеют коммерческое значение. Это удобная прикладная штука.
П.3 Концептуальная схема рассмотрения ЯП.
1.
Мы будем заниматься в основном интерактивными ЯП и производными от них. Это связанно прежде всего с направленностью курса. ЯП – это прежде всего инструмент программирования (планирование поведение исполнителя). Рассмотрим, какие виды программирования вообще есть.
-
Игровое или развлекательное. Человек программирует для себя, не планирует использовать эту программу в коммерческих целях и часто является единственным пользователем данной программы. Идеальным для игрового программирования был язык BASIC ( был вшит прямо в BIOS первых машин IBM). Рассматривать это программирование и языки для этого программирования мы не будем.
-
Научное программирование. Это то же программирование одиночки, специалиста в какой-то проблемной области, например, обработки изображений. Он изобретает свой методы, свои математические модели, чтобы их проверить он пишет программы. Если этой программой и пользуются люди отличные от разработчика, то это, как правило, ближайшие коллеги. В конечном итоге использовать эту программу можно только при участии автора, потому что она не планировалась быть используемой отдельно от автора. Таким программированием занимается достаточно узкий круг людей, которые никогда не называют себя профессиональными программистами.
-
Индустриальное. Создаются программы, которые планируются использоваться отдельно от автора, т.е. отчуждаются. Программа превращается в продукт ( это программа, которая используется без участия автора).
Метода и инструменты 3 (индустриальное программирование) значительно отличаются от методов и инструментов 2 и 1. Для 1 и 2 используются языки разных парадигм, тогда как для 3 в основном – интерактивные. Мы с инженерной точки зрения будем заниматься вопросами индустриального программирования, следовательно нас будут интересовать индустриальные ЯП.
2.
Точки зрения рассмотрения ЯП.
-
Технологическая. Есть какая-то осознанная технологическая потребность, например, в индустриальном программирование, как правило, программирует не один человек, а целая команда. Какими чертами должен обладать ЯП, чтобы поддерживать совместную работу над проектом? Это технологическая потребность. Нужны модульность и раздельная компиляция, чему мы будем уделять огромное внимание, когда будем рассматривать ЯП, потому что эта технологическая потребность является критичной, ели язык не поддерживает раздельную работу, значит он не может быть использован в индустриальном программирование.
-
Реализаторская.
-
Авторская.
-
Семиотическая. ЕЕ мы касаться практически не будем. Любой язык есть знаковая система, а семиотика – наука о знаках.
-
Социальная. С этой точки зрения можно объяснить, почему не получил широкого распространения язык Модула-2. С этой же точки зрения язык Visual BASIC стал более популярен нежели Delphi, хотя с первых 4-х точек зрения Delphi лучше.