Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
- | <P STYLE="margin-bottom: 0cm">ЯП 19.10.06</P>
| + | == From Ebaums Inc to MurkLoar. == |
- | <P STYLE="margin-bottom: 0cm"><BR>
| + | We at EbaumsWorld consider you as disgrace of human race. |
- | </P>
| + | Your faggotry level exceeded any imaginable levels, and therefore we have to inform you that your pitiful resourse should be annihilated. |
- | <P STYLE="margin-bottom: 0cm">Выделили три семантики, пять способов
| + | Dig yourself a grave - you will need it. |
- | передачи параметров (по значению, по рез-ту, , ссылке, по имени). По
| + | |
- | имени похоже на макроподстановку. Где увозникает при передаче по
| + | |
- | имени: пусть i – глобальная переменная. Представим, что i
| + | |
- | меняется во времени выполненния программы.</P>
| + | |
- | <P STYLE="margin-bottom: 0cm"><BR>
| + | |
- | </P>
| + | |
- | <P STYLE="margin-bottom: 0cm">Procedure Swap(i, a[i]) –
| + | |
- | меняется 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 – небольшие вспомогательные
| + | |
- | программы. При передаче параметров она считала фактический
| + | |
- | параметров. И свой набор 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">На одном компиляторе может работать
| + | |
- | нормально, на другом – ошибка. Нельзя говорить о переносимости.</P>
| + | |
- | <P STYLE="margin-bottom: 0cm"><BR>
| + | |
- | </P>
| + | |
- | <P STYLE="margin-bottom: 0cm">In-out параметры – параметры,
| + | |
- | изменение которых влечёт за сосбой побочный эффект.</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">Связанный с этим вопрос –
| + | |
- | параметры по умолчанию. 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">В первых вариантах си тип по умолчанию
| + | |
- | – инт.</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>
| + | |
- | | + | |
- | {{Языки Программирования}}
| + | |