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

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

Версия от 15:35, 13 января 2013; 79.165.47.85 (Обсуждение)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

ЯП 19.10.06


Выделили три семантики, пять способов передачи параметров (по значению, по рез-ту, , ссылке, по имени). По имени похоже на макроподстановку. Где увозникает при передаче по имени: пусть i – глобальная переменная. Представим, что i меняется во времени выполненния программы.


Procedure Swap(i, a[i]) – меняется i, и работает не так.


Самый больщой недостаток: как это реализовано.


Thunk – небольшие вспомогательные программы. При передаче параметров она считала фактический параметров. И свой набор thunkов генерируется для каждого отдельного вызова, при каждому обращении к формальному параметру, который передаётся. Это неэффективно и по памяти, и по времени.


7-10 раз медленнее Алгол был потому, что там была передача по имени.


//Виртоидные языки программирования.


В виртоидных языках были зафикс способы передачи параметров, и была потеряна семантика. В Си++ семантика потеряна не была. Там есть передача по ссылке и по константной ссылке. Константные объекты можно передавать по кностантной ссылке.


В Аде 83 была принята попытка разобраться семантика. Решать эффективно-неэффективно доложен решать компилятор, а не программист, ибо он лучше знает. Была фиксирована семантика, а компилятор выбирает тип передачи сам. Это не прошло. В Аде 95 семантика оставлена, но были зафикс способы передачи параметрами. Так как проблема с in-out параметрами.


Procedure PP(X, Y : in out T) is


X:=e; return Err;

y:=e1;



На одном компиляторе может работать нормально, на другом – ошибка. Нельзя говорить о переносимости.


In-out параметры – параметры, изменение которых влечёт за сосбой побочный эффект.


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


Побочный эффект в функциям может приводить к трудно


В 60х годах, когда зверствовал радикализм, то гото нельзя использовать, то стричься нельзя.


В 1972 году была статья, почему плохи глобальные переменные.


В совр языках типа си шарп и джавыы глобальных переменных вообще нет.


При необъектном стиле программирования без глобальных переменных не обойтись.Тогда возникает вопрос, допускать или не допускать побочный элемент у функции. В итоге в Аде сначала была введена такая классификация:


  1. Функции

  2. Процедуры\

  3. Процедуры, возвращ значение


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


В Джава, Си шарп семантика inout забыта. Объекты протых типов передаются по значению, оюъекты классов по ссылке. Проблема в том, что если мы хотим менять значения параметров простых типов. Решением является паковка-рааспаковка.

В Си шарп есть ключевые слова ref и out


void P(out T x) { x = 0;}

P(out a);


В си шарп семантика сохранилась.


П3. Переменный список аргументов.


Хочется, чотбы можно было писать

write(x);

write(x, y);

Связанный с этим вопрос – параметры по умолчанию. P(,,x,y), пропушенные параметры получают значения по умолчанию. Подобные вещи мало кому нужны и специфичны, и от них лучше отказываться. Во всех виртовских яп поодбного нет.ю В джаве нет. В некоторых случаях хочется иметь по крайней мере возможнотсь переменный список параметров. Это полезно при консольном вводе-выводе.


При отказе упрощается контроль параметров, но уменьшается гибкость.


В Аде переменный список запрещён, но есть клбючевые параметры и параметры по умолчанию.


Три языка, в которых они разрешены: Си, Си плюс плюс, Си шарп


В первом варианте Си (КР Си) не было переменных списков параметров.


В первых вариантах си тип по умолчанию – инт.


В какой-то старой программе была отладочная печать реализована в виде void printf(int a, b, c, d, e, f, g, h).


В файле stdargs.h определены макросы va_list, va_start, va_next, va_end. Это очень ненадёжный способ.


В плюсах появились cin cout.


В Си шарп если перед параметром стои params, он является массивом, и указывается последним в спписке параметров.


В Си шарп есть динамическая идентиф типа. Это позволяет окончательно решить


Функции первого порядка(из Википедии): язык их поддерживает, если их можно формировать, их можно загружаьт как часть структуры, можно присваивать и можно вызывать.


Функциоальные функции имеют функции первого порядка


Микрософт умеет держать хвост по ветру.


Глава 5. Определние новых типов.


Именно этим и отличаются ЯП друг от друга.

Почти все позволяют определять, вопрос в мощности и защищённости.




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


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

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


Эта статья является конспектом лекции.
Личные инструменты
Разделы