лекция 4 (Языки программирования (лекции) (2008))

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

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

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

Онлайн просмотр документа "лекция 4"

Текст из документа "лекция 4"

Языки программирования. Лекция 4.

Основные понятия ЯП. Виртуальная машина (ВМ) ЯП. Стандарты. Понятие атрибутов данных.

На прошлой лекции мы изучили исторический очерк о развитии ЯП. Были рассмотрены не все языки, т.к. мы изучили историю развития тех языков, которые будут рассматриваться в данном курсе.

Мы не будем останавливаться на языках типа Perl, Python и других языках типа PHP, JavaScript (языки управления процессами, скриптах, языки управления скриптами).

История развития Perl:

AWK - первый язык обработки строк под юникс. AWK перестал удовлетворять своими возможностями ( ??? ) и он придумал язык Perl(конец 80-х гг). Perl – это расширенный язык

для обработки текстов, имеет хорошую библиотеку для управления процессами. Perl стал достаточно популярным, т.к. с развитием этого языка был введен CGI.

CGI - Протокол взаимодействия веб-серверов с приложениями. По этому протоколу запускается процесс, который считывает текстовую информацию, обрабатывает её и выдает ответ (как правило, тоже в текстовой форме). Для этих целей очень хорошо подходил Perl.

PHP - некое развитие Perl'а.

JavaScript - язык, предназначенный для того, чтобы внести некоторый программизм в HTML.

Этот язык имеет дело в основном с обработкой текста и генерацией.

НО это языки частные(для веб-программирования). С концептуальной точки зрения они не представляют ничего интересного. И они не являются языками индустриального программирования. В них нет средств защиты (они предназначены для написания сценариев, которые очень редко бывают большими). Хотя это не означает, что эти языки не нужны.

Мы так же не рассматриваем языки функционального программирования (Lisp, Scheme, ML, Miranda, Harkell). В связи с нехваткой времени и тем, что вопрос функционального программирования сейчас отодвинут на второй план.

В настоящее время языками индустриального программирования являются языки, которые отвечают императивной парадигме и которые расширяют эту парадигму объектно-ориетированными свойствами.

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

1. Данные ( базис яп определяет какие данные встроены в язык и какие операции с ними разрешено производить);

2. Операции;

3. Связывание.

Что является объектом данных?

Менее очевидным является то, что данные и операции – это не две абсолютно разные сущности, а дуальные понятия. Т.е. имеет место дуализм операций и данных (то, что представляется данными, может представляться и операциями).

Пример :

В Turbo Pascal существовал тип данных string. Он представлял собой некоторую последовательность байт длины < 255, а в “1” байте хранилась длина строки. Таким образом операция “взять длину” заключалась в считывании 1-го байта (эта операция представляет собой просто считывание данных).

В С строка- это также некоторая последовательность байт, но операция getlength() представляет собой действительно операцию, где строка- операнд. Она заключается в сканировании строки, пока не будет найден ‘\0’.

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

Пример:

Введем некоторую структуру состоящую из:

  • поля ;

  • массива;

Что это такое? Множество значений описано полностью- это наборы целочисленных картежей. Можно рассматривать данную структуру как стек , описав соответствующие операции push, pop, peek и т.д. Но вообще говоря без введения операции данная структура может описывать много других понятий.

Таким образом, если в предыдущем примере считать все операцией, мы отвлекаемся от реализации. Работая со стеком в терминах операций со стеком, мы можем спокойно сменить реализацию стека с данной на линейную.

Плюс зависимости от реализации:

-эффективность;

Минусы зависимости от реализации:

-реализация в любой момент может измениться – программа становиться немобильной;

- не бывает универсальной реализации( каждая универсальная реализация плоха тем, что для каждой такой реализации существует область задач и другую реализацию, которая на данной конкретной области будет лучше);

Пример:

Быстрая сортировка(QuickSort)( самый лучший алгоритм сортировки). Для любой реализации быстрой сортировки можно написать такую последовательность, когда она будет работать хуже даже сортировки пузырька. Поэтому всегда в библиотеках встречается алгоритм HeapSort (пиромидальная сортировка), которая гарантирует более-менее стабильное время работы и не зависит от расположения ключей, но он хуже, чем QuickSort.

Современная формула типа данных(ТД):

ТД=МнОп+МнЗн

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

Множество значений (МнЗн) необходимо реализатору соответствующего типа данных , чтобы реализовать множество операций.

Внимание: Абстрактный тип данных не одно и то же с абстрактными классами!!!

Т.о. дуализм операций и данных нашел свое выражение в понятии абстрактного типа данных, “выпячивая” именно операции над данными.

Понятие "свойство" (property)

Оно появилось как языковое понятие в таких языках, как С#, Delphi, Visual Basic.

Что такое "свойство"?

С точки зрения программиста : понятие, которое принадлежит классу ,и у класса есть свойства.

С точки зрения программиста-пользователя: исключительно, как данные;

С точки зрения реализации: свойство определяется двумя наборами функций - get (возвращает соответствующее свойство) и set (устнавливает соответствующее свойство).

Пример:

Понятие свойства начало активно эксплуатироваться в визуальном программировании (какой-то элемент окна имеет атрибут - свойство, которое можно изменять; изменение этого свойства может автоматически вызвать дополнительные операции(т.е. последовательность действий, либо может ничего не случится, если данное действие запрещено), например, по перерисовке окна). Т.о. мы имеем набор операций , выглядящие как данные, т.е. в понятии свойства выражен обратного дуализма.

Понятие “связывание”.

Нас интересует:

  • что с чем связывается ;

  • -время связывания;

Пример:

Оператор присваивания i:=i+5; какие в нём сязывания?

В нем очень много связываний, возьмём знак плюс "+". Какие типы связывания связаны с ним:

1. Потенциальное множество смыслов "+". Оно формируется на этапе разработки языка.

2. Конкретный смысл "+". Формируется на этапе трансляции, в том числе и по объявлению int i; Изменив это на double i; смысл изменится.

3. Множество допустимых значений, которые вырабатывает знак "+" - для языка Си вырабатывается на этапе разработке компилятора. Для языка Java - на этапе разработке языка.

4. Конкретный результат - зависит от значения i - во время исполнения.

Различают два времени связывания:

1. Статическое связывание (связывание до момента выполнения);

2. Динамическое связывание (связывание в момент выполнения программы);

Пример:

1).На языке Си связывание вызова функции с ее телом происходит статически, на этапе компиляции или на этапе редактирования связей.

2).На языке Си++:

X {

int f(c);

}

X *px;

*px->f();

Какое связывание? Зависит от контекста. Например Х может быть унаследован от класса , где f()- виртуальная функция, которая отличается от не виртуальной тем, что время ее связывание- динамическое.

Связывание фундаментальное понятие.

Ещё одно понятие, связанное с ЯП - Виртуальная машина.

Виртуальная машина (ВМ) ЯП

Пусть у нас есть яп, который зафиксирован в виде какого-то нормативного документа.

В классическом варианте для яп исполнитель - вычислительная система(вс). Процесс перевода текста транслятором с яп на некоторый машинный язык данной вс - компиляция.

А если ВС умеет непосредственно выполнять команды нашего языка? То есть, машинным кодом этой вс являются операторы этого языка. (т.е. реализовано в “железе”)

Этого не достаточно для полноценной вычислительной системы. Необходима ещё окружающая среда (библиотека ввода-вывода, управления памятью и прочее, тюею библиотеку времени выполнения). Вот тогда и получится виртуальная машина яп(воображаемая машина). Т.е. когда мы исключительно все поведение вс характеризуем исключительно в терминах этого языка и в терминах его библиотеки.

ВМ- воображаемая машина:

  • машинный язык- данный яп;

  • реализует стандартную библиотеку языка;

ВМ предполагает, что часть библиотеки, которая отвечает за интерфейс с ОС , она понимает непосредственно.

ВМ ЯП абстрагируется от аппаратуры и от операционной системы, так как она напрямую работает со стандартной библиотекой.

Удобство ВМ:

Функционирование ВС описано только в терминах яп. ( например, не было бы проблем с системным вызовом fork() при переходе с ос unix на другие, если бы программирование было бы в терминах ВМ и т.д.)

Реализации ВМ:

Уже в начале 60х годов фирма Burroughs реализовала ВМ языка близкого к Алгол-60.

В СССР были разработаны машины Мир-1,2 и 3, в которых был машинный язык - язык аналитик (развитие языка Алгол-60).

70-е годы фирма LISP-Machines продавала машины со встроенным машинным языком-диалектом языка ЛИСП.

Жизнь показала, что подобного рода прямой подход, когда напрямую берется яп и строится на его базе ВМ, оказались не самым эффективным.

Способы реализации ВМ:

1. P-code – некоторый промежуточный язык, который ,с одной стороны, является машинным кодом, с другой стороны менее высокого уровня, чем Паскаль. Компилятор был написан на языке UCSD-Pascal, этот компилятор переводил программу на Р-код, включая системные вызовы. При переносе с одной системы на другую надо было переписать интерпретатор Р-кода. А сам компилятор , написан на UCSD-Pascal и оттранслирован в Р-код, выполнялся непосредственно.

2. Система Visual Basic транслировала программу на языке VB в программу exe-файл (очень маленького размера, состоящий из текст на внутреннем, промежуточном языке и небольшой вызов, запускающий его интерпретатор, который находился в вешней библиотеке VBRunХX.dell. Т.е. компилятор во внутренний код, а сам внутренний код является чисто интерпретируемым). Нужно было с собой переносить ехе-файл и соответствующую библиотеку.

3.Язык SmallTalk - переводил текст программы в байт-код(промежуточный язык), который потом интерпретировался.

4.Этот подход "Стандартизованный байт-код +интерпретатор +библиотека времени исполнения" был положен в основу Run-Time Environment (JRTE). JRTE- ВМ языка, для которого разработан Java байт-код. Стандартная реализация JRTE должна уметь выполнять байт-код и системные вызовы из стандартной библиотеки. Для переноса программы на языке Java достаточно всего лишь установить JVM (Java-машину).

3. .NET Framework - общая система типов (CTS) и общий набор библиотек времени исполнения (CLR). Предлагается общаться в терминах этих библиотек на разных яп. .NET объединяет несколько разых ЯП. Для совместимости с этими ЯП библиотеки .NET'а написаны на языке Microsoft Intermediate language (MIL). Программа на MIL транслируется в машинный код в момент загрузки программы в память (буквально, компилируется на лету). Т. е. в этих яп существует понятие ассемблер( сборка): оттранслированный текст + ресурсы + инф-ия о времени выполнения, которая доставляется посредством атрибутов= сборка. При загрузке сборки в память происходит компиляция соответствующего промежуточного кода.

Все последние разработки находятся в реинкарнации ВМ.

.NET - объединение нескольких языков. Все примеры в MSDN приводятся на трёх языках - VB, C# и C++. Таким образом, становится практически всё равно, на каком языке программировать. С этой точке зрения предпочтительней C#, т.к. он обладает более гибкими возможностями с точки зрения эффективности, чем VB, но в тоже время он более прост и надежен, чем C++.

Стандарты

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

Описание ведётся только на естественном языке - описание на формальном языке оказалось не совсем успешным.

Официальный документ - документ, принятый соответствующим органом.

Виды стандартов:

1.С точки зрения принимающего органа :

  • международные стандарты (ISO)(за каждый яп выбирается ответственная национальная группа);

  • национальные (Pascal - британский BSI, C - ANSI);

  • неправительственные (IEEE - профессиональное сообщество инженеров по электронике, IEEE-754 - стандарт на плавующую арифметику. ECMA - европейский союз производителей компьютеров, стандарт ECMA Script - ни что иное, как JavaScript).

Преимущество C#:

Фирма Sun категорически отказывается от стандартизации языка Java.

C# - стандарт ECMA.

2. Открытые и закрытые стандарты.

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