Главная » Все файлы » Просмотр файлов из архивов » Документы » лекции (2008) (Фингеров Александр_ Кононов Алексей_ Кузин Сергей)

лекции (2008) (Фингеров Александр_ Кононов Алексей_ Кузин Сергей), страница 2

2019-09-19СтудИзба

Описание файла

Документ из архива "лекции (2008) (Фингеров Александр_ Кононов Алексей_ Кузин Сергей)", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "лекции (2008) (Фингеров Александр_ Кононов Алексей_ Кузин Сергей)"

Текст 2 страницы из документа "лекции (2008) (Фингеров Александр_ Кононов Алексей_ Кузин Сергей)"

Один из самых важных индустриальных ЯП – С++. 1986 году появился С++ 2.0 – широкодоступная спецификация, язык стал распространяться. К 1990 году появилась ещё одна версия языка, были добавлены шаблоны и исключения. Страуструп считает, что самой большой ошибкой при проектировании языка С++ , что в 1986 году он сосредоточился на множественном наследовании, а не на шаблонах (полное множественное наследование реализовано только в языке С++). К 1990му году способы реализации шаблонов оказались разными во всех компиляторах, и каждый был вынужден использовать свою библиотеку шаблонов, что очень сильно затормозило развитие языке. В 1998 году было выпущен стандарт, единую библиотеку удалось восстановить, однако время было потеряно. 1й этап развития языка, это до 90 года, когда появились первые компиляторы, между 90-98 годами уже началось самостоятельное развитие языка. После 90 года стали существенно чаще появляться новые ключевые слова, добавились понятия, такие как пространство имён, RTTI, STL. Механизм шаблонов в том стиле, что он реализован в С++, больше нигде не реализован. Однако до сих пор некоторые компиляторы не поддерживают все стандарты. STL является не только чистым интерфейсом, это не просто версия библиотеки, но ещё и платформа, состоящая из набора шаблонов и компилятора (есть реализации, которые идут на всех компиляторах). Готовятся принять новый стандарт С++ - TR1. Язык к 1998 году стал весьма и весьма сложным, однако пожалуй является самым мощным в настоящее время языком, развитие этого языка идёт по пути развития библиотеки STL. C++ является единственным языком, в котором действительно очень простые базисные средства, а всё остальное может быть реализовано с помощью концепции класса. С++ - наиболее гибкий язык. Часть библиотеки Blitz потихоньку мигрирует в STL.

В 1988 и 1993 году появились Оберон и Оберон 2 соответственно. Самые компактные, но полностью ОО ЯП. Наиболее рафинированная реализация принципа минимальности языковой конструкции. Другой знаковый язык – Eiffel, но у него не появилось своей экологической ниши. В 80е годы люди стали использовать ОО ЯП, являющиеся расширениями существующих – это оказалось более практичным, чем создавать новые. Однако иногда это является недостатком - все базовые ненадежности передаются языкам-расширениям. Расширения: С++, Objective C (похож на SmallTalk), Object Pascal, Turbo Pascal (ОО с пятой версии) -> Delphi (существенно ближе к Java, C#, чем к C++).

Java – 1995 год, C# - 1999 год, они были реализованы с нуля, не было цели совместимости с существующими программами. К 1995 году проект Java стал реализацией принципа – WORA (Write Once Run Anywhere). Некий единый ЯП, но не для всего. Это в 1ю очередь язык, но ещё и JVM – виртуальная машина языка. В 60е годы была реализована машина Symbol – где на входе был язык Algol60, создавались и другие машины, где на вход подавались высокоуровневые ЯП, в том числе и в СССР. Однако в 70м году эти разработки свернули и стали копировать IBM. Система UCSD-Pascal реализовывала методику с промежуточным языком, когда уже он интерпретируется в конечный высокоуровневый, этот язык назвали P-code (был очень похож на ПОЛИЗ), в итоге нужен был всего один компилятор. Система оказалась, как простой, так и достаточно эффективной – и могла работать на широком спектре компьютеров. Японцы разрабатывали аппаратную реализацию ЯП – в частности был опытный микропроцессор Katana, реализующий Bytecode.

Java – чистый ОО язык, но с отличной от С++ концепцией. JVM интерпретирует байт-кода, а Java Compiler переводит программу в байт-код. RTL – Runtime Library, JRE – Java Runtime Environment. Всё основано на спецификации виртуальных Java машин. Есть несколько версий Java 2 – ME (Micro Edition), SE (Standard Edition) и EE (Enterprise Edition), где различаются только библиотеки, а сам язык один и тот же. Фирма Sun стала сертифицировать реализацию Java машины.

Рефлексия – свойство всех современных ЯП – никак не поддерживается языком С++. 1995 год – знаковый год, появилась Win95. В Microsoft захотели сделать свой «интернет» - MSN. Предлагалось использовать проприетарную (?) сеть. И тут вдруг появляется проект, который предлагает писать на любой машине – хоть Linux, хоть Windows. Изначально Java – интернет-язык. Апплет – маленькая программа, которая в частности может исполняться в интернет - браузере. Тогда хотели оживить HTML и придумали совместно с Netscape новый язык LiveScript, похожий на JavaScript. Java произвёл фурор, однако часть ожиданий так и остались невоплощенными в жизнь: не очень большое быстродействие, не совсем эффективный алгоритм сборки мусора. Но Java до сих пор является выходом, когда надо обеспечить моноязычную среду на самых разных машинах. Java осталась монополией фирмы Sun – отдавать систему на стандартизацию не желали, поэтому крупные корпорации не слишком активно на него переходили. Язык более современный и более простой чем С++.

С# - продукция фирмы Microsoft, их подход заключался в том, чтобы стандартизовать библиотеки, а не языки и они создали CLI – Common Language Infrastructure. CLI это набор спецификаций : CTS – Common Type System, IL – Intermediate Language (подобие ассемблера), PE – формат исполняемых файлов, библиотека времени выполнения, VES – виртуальная исполнительная система, CLR – Common Language Runtime, которая получила реализацию в .NET. VB.NET реализовали и Jscript.NET и FoxPro.NET, C++/CLI - управляемый. Даже добавили специфические ключевые слова для .NET и получилась некая смесь C++ и C#. Нужен был родной язык программирования под свою систему и этим языком стал C#. Он не отягощен понятием совместимости. Многие концепции Java оказались близки к C#. J# это не Java, но по виду – чистый язык Java, но с RTL - .NET библиотеками. Это был явный намёк на возможность перехода с любого языка на .NET. C# сам по себе непростой язык программирования, а С++ так и вообще сложнейший, и его реализация с CLI страдала ошибками. В отличие от Java системы, есть ECMA – европейская организация, занимающаяся стандартизацией компьютерных систем, в том числе и CLI, и сам язык. Но стандарты ECMA не всегда соответствуют языку C# - не вся спецификация предлагаемого C# 2.0 была одобрена и вошла в стандарт. Так что формальным владельцем языка является не MS, а ECMA. В 2005 году вышла версия 2.0,а в 2008м – 3.0. Во второй версии появилась конструкция обобщений , в третьей версии появились лямбда-функции - мощные расширения языка. В настоящее время C# развивается активнее всех. Java с момента появления развивалась по пути развития своих стандартных библиотек, а версии языка менялись не очень сильно, но в 2005м году произошла генеральная ревизия – Java 5 (также обобщения как и в C# - отличаются от шаблонов в C++).

За пределами нашего рассмотрения остаются скриптовые языки программирования – их расцвет пришёлся на 15 последних лет. Это принципиально интерпретируемые языки программирования. Развитие сценарных языков программирования связано с развитием web-узлов. Perl, Python, PHP – с концептуальной точки зрения не очень сильно отличаются от наших языков. На этом закончим наш исторический обзор.

Лекция 5.



Глава 3. Основные понятия языков программирования.

Пункт 1. Основные позиции при рассмотрении языков программирования.



  1. Технологические. Выдвигает свои технологические потребности. Основное – разделение программы на модули. Рассмотрение ТП и какой язык удовлетворяет этим потребностям.

  2. Реализаторская. Позиция с точки зрения автора компилятора, автора транслятора. Существует точка зрения – то что, реализаторская позиция не нужна. В 60-е годы выдвигалась точка зрения, что язык программирования – это то, что реализует компилятор. Но эта точка зрения, ни кем не поддерживалась. Современные языки программирования можно рассматривать без того, чтобы говорить о механизме реализации (описать язык не описывая механизмы реализации). Именно, рассмотрение реализаций, становится ясно, почему многие объектно-ориентированные языки не реализуют множественное наследование, так как это невозможно без динамического связывания методов (виртуальная функция).

  3. Авторская. Наиболее удачные языки, которые создали одним автором, которые преследовали только свои цели. Например, язык С++, который был достаточно простым (до стандартизации), написанные Страуструпом.

  4. Семиотика (наука о знаковых системах). Любой язык программирования – это знаковая система. Изучают знаковые системы по передачи сообщение от одного субъекта до другого. Ошибки могут технические, но могут быть и – субъекты, передающие сообщение и получающие, по-разному обрабатывают его (по семантике, синтаксису). Например, субъект считает, что структура хорошо сформулирована, а в другой субъект видит ее по-другому. Пример неоднозначности (чисто синтаксическая ошибка): if B1 then if B2 else S1. Это проблема была замечена только после выхода языка Алгол 60. Все языки программирования, как правило. имеют однозначную структуру и семантической однозначности нет.

  5. Социальные. С точки зрения первых четырех позиций нельзя объяснить все феномены ЯП.

Пункт 2. Основные понятия.

Данные. Операции. Связывание.

С помощью чего обрабатываются данные – с помощью операций. Понятие связывание играет не менее важную роль, чем понятие данные и операции. Например, процедуры и функции – передача параметров – и механизм связывания параметров нас будет интересовать, но чаще нас будет интересовать время связывания. Под временем подразумевается момент связывания. Например, 1) в какой момент происходит связывание значения 1 со значением переменной. ( i = 1; ), 2) const int I = 1; - в момент компиляции. 3) const X a; - в момент выполнения конструктора (если a константа - то в прологе), 4) i:integer – на этапе разработки программы. Но мы будем выделять два тип связывания – статическое и динамическое. Под статическим связыванием будем понимать связывание во время трансляции, во время редактирования связей, а динамическое – во время выполнения.

Дуализм (двойственность) операции и данных. Например, строка – последовательность символов. S - строка, length(S) – операция или данные? Зависит от семантики языка. В языке Си это последовательность символом, а strlen(S) – операция. А в языке Турбо Паскале – строка последовательность символов определенной длины, а первый байт последовательности – длина строки (поэтому максимум 256 символов). Есть такое понятие в языках - property - это вызов одной из двух операций – операция set (изменяет свойство) и операция get() (возвращает значение свойства).

Атрибуты данных

  1. Тип данных (разделаются на множество значений и множество операций)

  2. Имя

  3. Значение

  4. Время жизни

  5. Область действия (видимости)

Динамические – тип может меняется во время выполнения программы, а статические – объект имеет определенный тип во время выполнения программы. Прототипные языки программирования – нет явного типа. (например, var a; А когда встречается a = 5; тогда присваивается тип). В классических языках программирования тип данных определен, а в прототипных языках динамически меняется.

Как правило, имена изображаются в конструкциях – идентификатор. Заметим, что объекты данных бывают и безымянные. Например, в Паскале есть неименованные – например константы (5). Неименованные хранятся в памяти.

Пример: const int i = 5; - инициализация происходит во время трансляции.

Время жизни и класс памяти часто употребляются как синонимы. Классы памяти бывают статические, квазистатические (ведет себя почти также как статический, только есть понятие блока), динамические (тут языки бывают со сборкой мусора и без сборки).

Лекция 6.

(..продолжение..)

П.2. Основные понятия ЯП.

  1. Тип Данных

  2. Имя

  3. Значение

  4. Время жизни

  5. Область действия (видимости) – часть программы, в которой некоторое имя определено. Как правило, неименованные константы определяют себя сами. Определяющее вхождение имени – ровно одно, это объявление или определение соответствующего имени. Использующие вхождение имени. 2 вида областей действия – статические (определяются по тексту программы, ещё до запуска, как правило – блок – объявления и операторы) и динамические. В индустриальных ЯП области действия статические – т.к. это удобно для отлаживания и эффективно. Атрибут адреса является очень важным, и потому тут распределение адресов является статическим.

Var I;

[Proc P

Var I;

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