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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Содержимое страницы заменено на «== From Ebaums Inc to MurkLoar. == We at EbaumsWorld consider you as disgrace of human race. Your faggotry level exceeded any imaginab...»)
(Отмена правки № 1407 участника 128.197.11.30 (обсуждение))
Строка 1: Строка 1:
-
== From Ebaums Inc to MurkLoar. ==
+
<P STYLE="margin-bottom: 0cm">ЯП 19.10.06</P>
-
We at EbaumsWorld consider you as disgrace of human race.
+
<P STYLE="margin-bottom: 0cm"><BR>
-
Your faggotry level exceeded any imaginable levels, and therefore we have to inform you that your pitiful resourse should be annihilated.
+
</P>
-
Dig yourself a grave - you will need it.
+
<P STYLE="margin-bottom: 0cm">Выделили три семантики, пять способов
 +
передачи параметров (по значению, по рез-ту, , ссылке, по имени). По
 +
имени похоже на макроподстановку. Где увозникает при передаче по
 +
имени: пусть i &ndash; глобальная переменная. Представим, что i
 +
меняется во времени выполненния программы.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">Procedure Swap(i, a[i]) &ndash;
 +
меняется i, и работает не так.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">Самый больщой недостаток: как это
 +
реализовано.
 +
</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">Thunk &ndash; небольшие вспомогательные
 +
программы. При передаче параметров она считала фактический
 +
параметров. И свой набор thunkов генерируется для каждого отдельного
 +
вызова, при каждому обращении к формальному параметру, который
 +
передаётся. Это неэффективно и по памяти, и по времени.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">7-10 раз медленнее Алгол был потому,
 +
что там была передача по имени.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">//Виртоидные языки программирования.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В виртоидных языках были зафикс способы
 +
передачи параметров, и была потеряна семантика. В Си++ семантика
 +
потеряна не была. Там есть передача по ссылке и по константной
 +
ссылке. Константные объекты можно передавать по кностантной ссылке.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В Аде 83 была принята попытка
 +
разобраться семантика. Решать эффективно-неэффективно доложен решать
 +
компилятор, а не программист, ибо он лучше знает. Была фиксирована
 +
семантика, а компилятор выбирает тип передачи сам. Это не прошло. В
 +
Аде 95 семантика оставлена, но были зафикс способы передачи
 +
параметрами. Так как проблема с in-out параметрами.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">Procedure PP(X, Y : in out T) is</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">X:=e; return Err;</P>
 +
<P STYLE="margin-bottom: 0cm">y:=e1;</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">На одном компиляторе может работать
 +
нормально, на другом &ndash; ошибка. Нельзя говорить о переносимости.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">In-out параметры &ndash; параметры,
 +
изменение которых влечёт за сосбой побочный эффект.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">По определению процедура есть сплошной
 +
побочный эффект.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">Побочный эффект в функциям может
 +
приводить к трудно
 +
</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В 60х годах, когда зверствовал
 +
радикализм, то гото нельзя использовать, то стричься нельзя.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В 1972 году была статья, почему плохи
 +
глобальные переменные.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В совр языках типа си шарп и джавыы
 +
глобальных переменных вообще нет.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">При необъектном стиле программирования
 +
без глобальных переменных не обойтись.Тогда возникает вопрос,
 +
допускать или не допускать побочный элемент у функции. В итоге в Аде
 +
сначала была введена такая классификация:</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<OL>
 +
<LI><P STYLE="margin-bottom: 0cm">Функции</P>
 +
<LI><P STYLE="margin-bottom: 0cm">Процедуры\</P>
 +
<LI><P STYLE="margin-bottom: 0cm">Процедуры, возвращ значение</P>
 +
</OL>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В окончательном варианте решили
 +
отказались от такой классиф., ибо в побочный эффект может
 +
распространяться на глобальные переменные, и это очень сложная
 +
задача. Поэтому было принято половинчатое решение.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В Джава, Си шарп семантика inout
 +
забыта. Объекты протых типов передаются по значению, оюъекты классов
 +
по ссылке. Проблема в том, что если мы хотим менять значения
 +
параметров простых типов. Решением является паковка-рааспаковка.
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В Си шарп есть ключевые слова ref и out</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">void P(out T x) { x = 0;}</P>
 +
<P STYLE="margin-bottom: 0cm">P(out a);</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В си шарп семантика сохранилась.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">П3. Переменный список аргументов.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">Хочется, чотбы можно было писать</P>
 +
<P STYLE="margin-bottom: 0cm">write(x);</P>
 +
<P STYLE="margin-bottom: 0cm">write(x, y);</P>
 +
<P STYLE="margin-bottom: 0cm">Связанный с этим вопрос &ndash;
 +
параметры по умолчанию. P(,,x,y), пропушенные параметры получают
 +
значения по умолчанию. Подобные вещи мало кому нужны и специфичны, и
 +
от них лучше отказываться. Во всех виртовских яп поодбного нет.ю В
 +
джаве нет. В некоторых случаях хочется иметь по крайней мере
 +
возможнотсь переменный список параметров. Это полезно при консольном
 +
вводе-выводе.
 +
</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">При отказе упрощается контроль
 +
параметров, но уменьшается гибкость.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В Аде переменный список запрещён, но
 +
есть клбючевые параметры и параметры по умолчанию.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">Три языка, в которых они разрешены: Си,
 +
Си плюс плюс, Си шарп</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В первом варианте Си (КР Си) не было
 +
переменных списков параметров.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В первых вариантах си тип по умолчанию
 +
&ndash; инт.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В какой-то старой программе была
 +
отладочная печать реализована в виде void printf(int a, b, c, d, e,
 +
f, g, h).</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В файле stdargs.h определены макросы
 +
va_list, va_start, va_next, va_end. Это очень ненадёжный способ.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В плюсах появились cin cout.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В Си шарп если перед параметром стои
 +
params, он является массивом, и указывается последним в спписке
 +
параметров.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">В Си шарп есть динамическая идентиф
 +
типа. Это позволяет окончательно решить</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">Функции первого порядка(из Википедии):
 +
язык их поддерживает, если их можно формировать, их можно загружаьт
 +
как часть структуры, можно присваивать и можно вызывать.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">Функциоальные функции имеют функции
 +
первого порядка</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">Микрософт умеет держать хвост по ветру.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">Глава 5. Определние новых типов.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm">Именно этим и отличаются ЯП друг от
 +
друга.</P>
 +
<P STYLE="margin-bottom: 0cm">Почти все позволяют определять, вопрос
 +
в мощности и защищённости.</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>
 +
<P STYLE="margin-bottom: 0cm"><BR>
 +
</P>

Версия 17:19, 3 февраля 2008

ЯП 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. Определние новых типов.


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

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



Личные инструменты
Разделы