Происхождение термина «ссылка», как в «передача по ссылке»

Вы можете использовать буквенное цитирование:

stmt := q'[insert into MY_TBL (Col) values('ER0002')]';

Документацию для литералов можно найти здесь .

В качестве альтернативы вы можете использовать две кавычки для обозначения одной цитаты:

stmt := 'insert into MY_TBL (Col) values(''ER0002'')';

Механизм цитирования букв с синтаксисом Q более гибкий и читаемый, IMO.

13
задан Paul Biggar 6 December 2009 в 21:30
поделиться

9 ответов

Термин «вызов по ссылке» был впервые использован в статье «Семантические модели передачи параметров» Ричарда Э. Фэрли, март 1973 г.

Сначала терминология была непоследовательной. Например, в спецификации Fortran 66 используются фразы «ассоциация по имени» и «ассоциация по значению». Теперь мы бы назвали их «вызов по ссылке» и «вызов по значению». Напротив, в спецификации Algol 60 (1962) использовались термины «вызов по имени» и «вызов по значению» ... и ни один из них не является тем, что мы в настоящее время называем вызовом по ссылке.

РЕДАКТИРОВАТЬ : для тех, кто хочет пометить пионеров, которые указали Фортран 66 как запутавшиеся из-за использования фразы «ассоциация по имени» учтите это:

  1. Fortran 66 был первой попыткой указать язык с (тем, что мы сейчас называем) вызовом по ссылке.

  2. Это была только вторая попытка указать язык с подпрограммами, поддерживающими передачу параметров.

  3. ] «Связь по имени» в Fortran 66 можно рассматривать как ограниченную (вырожденную) форму «вызова по имени» в языке Algol 60. Ограничением было то, что в Фортране имя должно было быть простым именем переменной или массива, тогда как в Algol 60 это могло быть любое выражение.

  4. В то время (1966) не было ясно, что в Algol 60 «вызывается по имени» было суждено быть отвергнутым как плохая идея. В самом деле, когда я изучал Алгол 60 в качестве студента в 1977 году, я не припомню, чтобы лектор представлял «вызов по имени» как плохую идею. (Это было представлено как трудное для понимания ... но это ' это другое дело.)

15
ответ дан 1 December 2019 в 19:31
поделиться

(этот ответ относится только к C #, AFAIK)

Не говорите Эрику Липперту, что ссылки являются указателями ;-p Они случаются , чтобы быть тем же самым в MS C # / .NET, но это деталь реализации. Ссылка - это непрозрачная безопасная «вещь», которая позволяет вам определять местонахождение объекта. Указатель - это адрес памяти. Они упорно трудились, чтобы убедиться, что вы всегда знаете, какие вы имеете в виду ...

Было бы вполне возможно реализовать CLI и компилятор, не лечить два, как то же самое; вы все равно будете передавать ссылку на значение.

Ссылки не являются адресами

11
ответ дан 1 December 2019 в 19:31
поделиться

Я ДУМАЮ , что это восходит к PASCAL, возможно, дальше.

Исходный FORTRAN передавал аргументы по ссылке: передавая адрес переменной, массива или матрицы.

АЛГОЛ-60 передается по имени или по значению. Вызов по имени оказался огромной ошибкой, которая многому научила разработчиков языков программирования тому, что НЕ делать. PASCAL передавал параметры по значению или по ссылке, в зависимости от того, был ли параметр помечен как VAR (передача по ссылке) или нет (передача по значению).

2
ответ дан 1 December 2019 в 19:31
поделиться

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

1
ответ дан 1 December 2019 в 19:31
поделиться

Самые ранние употребления термина «ссылка» как «передать по ссылке», вероятно, утеряны в смутной древности. Конечно, FORTRAN передает свои параметры по ссылке и всегда это делал.

Упоминание «позови по имени» напоминает мне анекдот Николаса Вирта (изобретателя Паскаля) (вероятно, единственный):

«Профессор, как вы произносите свою фамилию?»

«Если вы звоните по имени, это ВИРТ, но если вы называете по значению, это СТОИТ »

И люди говорят, что у программистов нет чувства юмора!

1
ответ дан 1 December 2019 в 19:31
поделиться

Я всегда думал, что идея заключалась в том, чтобы различать указатель и ссылку. Ссылки будут указывать на объект, где бы он ни находился.

Указатель указывает на адрес в памяти, однако в управляемых языках это может измениться. Итак, у вас должна быть абстракция через ссылку, чтобы ваш код всегда работал. например. вы не можете просто написать ссылку ++ при использовании массивов на управляемом языке, поскольку сборщик мусора может перемещать ваш массив. Обратите внимание: я хорошо осведомлен о закреплении и небезопасном коде в C # :).

Как мне объяснил мой наставник по java, другой ключевой «концепцией» со ссылкой является то, что вы не можете манипулировать им. Указатели предназначены для управления программистом, ссылки предназначены для управления компилятором / средой выполнения.

d всегда думал, что идея состоит в том, чтобы различать указатель и ссылку. Ссылки будут указывать на объект, где бы он ни находился.

Указатель указывает на адрес в памяти, однако в управляемых языках это может измениться. Таким образом, у вас должна быть абстракция через ссылку, чтобы ваш код всегда работал. например. вы не можете просто написать ссылку ++ при использовании массивов на управляемом языке, поскольку сборщик мусора может перемещать ваш массив. Обратите внимание: я хорошо осведомлен о закреплении и небезопасном коде в C # :).

Как мне объяснил мой наставник по java, другой ключевой «концепцией» со ссылкой является то, что вы не можете манипулировать им. Указатели предназначены для управления программистом, ссылки - для управления компилятором / средой выполнения.

d всегда думал, что идея состоит в том, чтобы различать указатель и ссылку. Ссылки будут указывать на объект, где бы он ни находился.

Указатель указывает на адрес в памяти, однако в управляемых языках это может измениться. Таким образом, у вас должна быть абстракция через ссылку, чтобы ваш код всегда работал. например. вы не можете просто написать ссылку ++ при использовании массивов на управляемом языке, поскольку сборщик мусора может перемещать ваш массив. Обратите внимание: я хорошо осведомлен о закреплении и небезопасном коде в C # :).

Как мне объяснил мой наставник по java, другой ключевой «концепцией» со ссылкой является то, что вы не можете манипулировать им. Указатели предназначены для управления программистом, ссылки - для управления компилятором / средой выполнения.

Ссылки будут указывать на объект, где бы он ни находился.

Указатель указывает на адрес в памяти, однако в управляемых языках это может измениться. Итак, у вас должна быть абстракция через ссылку, чтобы ваш код всегда работал. например. вы не можете просто написать ссылку ++ при использовании массивов на управляемом языке, поскольку сборщик мусора может перемещать ваш массив. Обратите внимание: я хорошо осведомлен о закреплении и небезопасном коде в C # :).

Как мне объяснил мой наставник по java, другой ключевой «концепцией» со ссылкой является то, что вы не можете манипулировать им. Указатели предназначены для управления программистом, ссылки предназначены для управления компилятором / средой выполнения.

Ссылки будут указывать на объект, где бы он ни находился.

Указатель указывает на адрес в памяти, однако в управляемых языках это может измениться. Итак, у вас должна быть абстракция через ссылку, чтобы ваш код всегда работал. например. вы не можете просто написать ссылку ++ при использовании массивов на управляемом языке, поскольку сборщик мусора может перемещать ваш массив. Обратите внимание: я хорошо осведомлен о закреплении и небезопасном коде в C # :).

Как мне объяснил мой наставник по java, другой ключевой «концепцией» со ссылкой является то, что вы не можете манипулировать им. Указатели предназначены для управления программистом, ссылки предназначены для управления компилятором / средой выполнения.

вы не можете просто написать ссылку ++ при использовании массивов на управляемом языке, поскольку сборщик мусора может перемещать ваш массив. Обратите внимание: я хорошо осведомлен о закреплении и небезопасном коде в C # :).

Как мне объяснил мой наставник по java, другой ключевой «концепцией» со ссылкой является то, что вы не можете манипулировать им. Указатели предназначены для управления программистом, ссылки предназначены для управления компилятором / средой выполнения.

вы не можете просто написать ссылку ++ при использовании массивов на управляемом языке, поскольку сборщик мусора может перемещать ваш массив. Обратите внимание: я хорошо осведомлен о закреплении и небезопасном коде в C # :).

Как мне объяснил мой наставник по java, другой ключевой «концепцией» со ссылкой является то, что вы не можете манипулировать им. Указатели предназначены для управления программистом, ссылки предназначены для управления компилятором / средой выполнения.

1
ответ дан 1 December 2019 в 19:31
поделиться

Использование термина «ссылка» было и остается непоследовательным.

  • В некоторых случаях это материальная сущность, например ссылки на объекты Simula / Delphi / Java / C #. Вы можете сравнить их (с нулевым значением и друг с другом) и передать их в качестве параметров (по значению или по ссылке).
  • Большинство языков поддерживают ссылку как режим передачи параметров совершенно непрозрачным образом.
  • C ++ - единственный язык (который мне неизвестен), расширяющий эту непрозрачную модель и позволяющий иметь справочные поля и переменные ( int & r = i; ).

Во-первых, это означает, что ссылки C ++ сильно отличаются от ссылок C #.

Я думаю, что нам здесь не хватает некоторого жаргона, чтобы различать эти две разные формы «ссылки».

См. Также SO: История общедоступных / частных / защищенных .

1
ответ дан 1 December 2019 в 19:31
поделиться

Обратите внимание, что в 60-х (да, в 70-х) «ссылка» означала использование имени чего-либо. Это согласуется с использованием старых философских и лингвистических терминов «референт» и «ссылка». Из Fortran 77 :

2.12 Ссылка

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

Ссылка на процедуру - это появление имени процедуры в инструкции в контексте. который требует, чтобы действия, указанные в процедуре, выполнялись во время выполнения исполняемая программа. Когда выполняется ссылка на процедуру, процедура должна быть доступно.

0
ответ дан 1 December 2019 в 19:31
поделиться

Я думаю, что для исторического поиска следует использовать термин «вызов по ссылке», а не «передача по ссылке». Например, Википедия перенаправляет « Передача по ссылке » на « Evaluation Strategy », в котором перечислены вызов по ссылке .

Использование « по ссылке "в качестве поискового запроса в Google Книгах находит фрагмент из « Основные характеристики CPL » из компьютерного журнала, август 1963 года; 6: 134 - 143 (Британское компьютерное общество)

Возможны три режима вызова параметров; вызов по значению (что эквивалентно вызову ALGOL по значению), вызов по подстановке (эквивалентно вызову ALGOL по имени) и вызов по ссылке . В последнем случае передается значение LH фактического параметра; это соответствует «призыву простым именем», предложенному Стрейчи и Уилкс (1961). Обратите внимание на соответствие трем видам инициализации ...

Последний «вызов по имени», вероятно, является той же терминологией, которая использовалась в спецификации Algol 60, на которую ранее указывал Стивен С.

( Я думаю « Стрейчи и Уилкс »

3
ответ дан 1 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: