Языки программирования, 04 лекция (от 14 сентября)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Предыдущая лекция | Следующая лекция

Содержание

Концептуальная схема построения языка программирования

5 позиций, с точки зрения которых рассматривается ЯП

  1. Технологическая позиция
    • Мы занимаемся рассмотрениям языков индустриального программирования. В индустрии существует свои технологические потребности. Например, есть технологическая потребность — раздельная трансляция, возможность создания библиотек. И технологическая позиция — рассмотрение с точки зрения удовлетворения технологическим потребностям. Одна из основных позиций при рассмотрении языков программирования
  2. Реализация
    • Позиция человека, который реализует те или иные конструкции языка. Есть мнение, что ЯП можно и нужно рассказывать без учёта реализации. Ряд авторов придерживаются этой позиции, но лектору эта точка зрения не совсем нравится, так как некоторые конструкции языка удобнее рассказывать с точки зрения реализации, например, механизм позднего связывания в С++. Множественное наследование в полной мере реализовано только в С++. И при обсуждении необходимости его всё скатывается к труднообъяснимым аргументам. В то же время, если рассматривать таблицу виртуальных методов, то есть реализацию, то многие вещи становятся понятными. Эта позиция будет присутствовать как добавочная
  3. Авторская позиция
    • Так как язык выглядит с точки зрения автора. ЯП — система компромиссов. PL/1 — бескомпромиссный язык, поэтому и провалился. Часто компромиссное решение хуже, чем любое из предложенных, поэтому компромиссы не должны составлять весь язык. Авторская позиция рассматривает различные за и против включения тех или иных сущностей в язык. Примером является книга Страуструпа, Дизайн С++. Вопрос «почему» — один из главных в курсе
  4. Семиотическая позиция
    • Семиотика — наука о символах. Рассмотрим язык как знаковую систему. Тогда семиотика рассматривает прагматику дизайна языка, т.е. «зачем».
  5. Социальная позиция
    • Иногда нельзя не учитывать те или иные аспекты развития языка программирования в отрыве от общества. Например, Delphi лучше VB по всем четырём предыдущим позициям, но в результате популярнее стал VB. Так что важно учесть кем, в каком контексте и для кого разрабатывался язык.
Понятно, какая за VB стоит мощная волосатая рука

Закон экологических ниш — экологическую нишу занимает, как правило, один вид.

Основные позиции, рассматриваемые в курсе — технологическая и авторская.

Структура ЯП

  1. Базисные средства
    • Cкалярные (простые типы, операции)
    • Cтруктурные (структуры и конструкции)
  2. Средства развития (поддержка библиотек, типы данных, АТД, модули, классы)
  3. Средства защиты (абстрактные типы данных, инкапсуляция)

Первая привязка X клиентов к протоколу была на LISP. Вторая на С. /* MIT */ То же касается первых реализаций Xt, Athena, Motif (тоже сначала на С). Все было хорошо, ООП смоделированно, библиотека работает, но не защищена.

Основные понятия: данные, операции, связывание

Нас интересуют те исполнители, которые обрабатывают некоторые данные

Данные / операции

Есть тип строка. И сравним его в С и Pascal. В С строка — последовательность байтов, заканчиваемая нулём (ASCIIZ-строка), в Pascal — строки со счётчиком длины. И для узнавания длины строки в С нужно делать операцию расчёта длины, в Pascal это данные — 0й байт. То есть, то, что в Pascal является данными, в С является операцией.

В Pascal шиковали, давая имя нулевому байту строки

(Pascal)
var S: string absolute len:byte;


Объект

  • состояние — моделируется членами класса
  • поведение — моделируется сообщениями и их посылкой

В С++ возникают getters/setters, что проявляет дуализм. В С#, Delphi имеется механизм get/set для полей класса, называемых property (свойство).

(C#)
class C
{
    public T X
    {
        get() { ... }
        set() { ... }
    }
}

Пользователю удобно рассматривать это как состояние, реализовано же это как операция.

Тип данных характеризуется множеством значений — представление начала 60х годов. Современная точка зрения: тип данных — множество значений (состояние) и множество операций (поведение). Например, стек характеризуют именно операции push и pop, а не тип элементов стека.

Абстрактный тип данных — множество операций, без состояния.

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

Основные характеристики данных

  1. Имя (но бывают и безымянные объекты)
  2. Значение
  3. Область видимости
  4. Время жизни

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

Виды объектов

  • статические — существуют всё время работы программы
  • квазистатические — существуют только во время работы некоторой синтаксически выделенной конструкции (блока)
  • динамические — существуют до тех пор, пока нужны: до сборки мусора, удаления
  • хранимые (persistent)

В C# есть Image есть метод LoadFromFile, который загружает графический файл. И закрывается этот файл тогда, когда исчезает объект Image. Соответственно, его нельзя открыть повторно — недостаток C#.

В следующий раз будет адская семантика.


Языки Программирования


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


Календарь

чт вт чт вт чт вт чт вт чт вт
Сентябрь
  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

Материалы к экзамену
Сравнение языков программирования


Эта статья является конспектом лекции.

Эта статья ещё не вычитана. Пожалуйста, вычитайте её и исправьте ошибки, если они есть.
Личные инструменты
Разделы