LINUX.ORG.RU

как называются неявные действия, создаваемые при присваивании строк в языках высокого уровня?

 перегрузка операций, ,


0

1

В С++ можно определять оператор = для своих типов.

В Паскале его определить нельзя, но компилятор для некоторых типов сам вставляет в каждое присваивание какой-то дополнительный ad hoc кусок кода.

Например, в Delphi при присваивании интерфейсов вставляется код увеличения счётчика ссылок.

Как правильно и обобщённо назвать этот код, независимо от конкретного типа? У меня только маршалинг всплывает в памяти, но это явно не оно.

Ещё варианты - «обработка присваивания», «особая обработка присваивания», но всё это как-то недостаточно выразительно. Ваши варианты.

★★★★★

Последнее исправление: den73 (всего исправлений: 2)

как называются неявные действия, создаваемые при присваивании строк в языках высокого уровня?

Оверхед )))

Да просто работа рантайма языка и всё, ещё операции внутренней реализации отдельными словами называть. Надеюсь я прав.

Deleted
()
Ответ на: комментарий от Deleted

Да просто работа рантайма языка и всё

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

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Специфичное для типа присваивание/специфичная для типа операция присваивания.

tailgunner ★★★★★
()

У меня только маршалинг всплывает в памяти

Мушроминг, тобишь — грибонация.

deep-purple ★★★★★
()

ИМХО подход в Pascal (отдельная обработка компилятором всяких writeln, для которых фактически реализована перегрузка и переменное число аргументов, невозможное для своих функций) называется костылем.

KivApple ★★★★★
()

Я к тому, что ты в одиночку пытаешься объять необъятное. Вроде и стремление к идеалу прослеживается, но ты одИн. Сделал бы обычный метод да и всё, ну или только задатки на возможности. А потом уже реализация сама подтянется.

deep-purple ★★★★★
()
Ответ на: комментарий от Deleted

По идее, любое говно, которое можно сделать бОльшим кол-вом символов/строк = синтаксический сахар. Даже если реализация займет 10к строк. Ну, читый си с «классами» же существует.

(в исправлении добавил только кавычки к слову «классами»)

deep-purple ★★★★★
()
Последнее исправление: deep-purple (всего исправлений: 1)

Эх вы. В паскале это называется «магия компилятора».

В Паскале его определить нельзя

Плохо знаешь паскаль. В delphi и fpc mode delphi этот оператор называется Implicit.

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Operator_Overloading_(Delphi), http://docwiki.embarcadero.com/CodeExamples/Tokyo/en/OpOverloads_(Delphi)

В fpc mode objfpc - operator :=

https://www.freepascal.org/docs-html/ref/refse101.html

anonymous
()

как называются неявные действия, создаваемые при присваивании строк в языках высокого уровня?

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

Deleted
()

Поясняю: я перевожу исходники blackboxcomponentbuilder на русский язык. Исходники там адские, хотя я не так много видел исходников компиляторов. Но SBCL лучше намного :) Так вот там это называется CheckBuffering, и это вообще непонятно о чём (мне). А я это пока переименовал в

СоздайASTНеявныхДействийПриПередачеСтрокиИлиИнтерфейса
Но мне это название не нравится. Если это назвать магией компилятора, то там весь исходник будет из слова «магия» составлен.

Нет, это не интринсики. Это то, что происходит внутри оператора присваивания

a := b;
Здесь никакой функции нет. Причём для некоторых типов (строки и COM-интерфейсы) происходит что-то особенное.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от xaizek

Семантика присвоения - это может быть вариант. Только особая семантика присвоения.

СоздайтАСДДляОбработкиОсобойСемантикиПрисвоенияИнтерфейсовИлиСтрок

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

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

СоздайтАСДДляОбработкиОсобойСемантикиПрисвоенияИнтерфейсовИлиСтрок

Я бы убрал «ИнтерфейсовИлиСтрок» (я бы и на русском не писал правда...), так как типы обрабатываемых сущностей в имя помещать как-то слишком.

Является ли передача параметра частным случаем присваивания?

Если передача по значению, то да.

Как называется вместе передача параметра и присваивание одним термином, на ангилйском или на русском?

Не уверен, что и такое название есть. Может какой-нибудь «value binding», который имеет частные случаи: «assignment» и «passing».

xaizek ★★★★★
()
Ответ на: комментарий от tailgunner

Может какой-нибудь «value binding»

Точно нет.

Если что, это я предлагал как это можно назвать, а не говорил, как оно называется. Просто общая часть в том, что выражение является источником для переменной/параметра. Ещё можно что-то со словом «initializer» придумать.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Если что, это я предлагал как это можно назвать, а не говорил, как оно называется.

Его нельзя так называть, потому что термин уже занят. А ТС хочет передачу по значению, но по кое-каким психологическим причинам не может это понять.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Я бы советовал в психологию не углубляться. Если ты такой умный, то как называется передача VAR параметров? Вот цитата из определения языка. Я думаю, что это передача по ссылке, но 100% уверенности нет.

Формальные параметры суть идентификаторы, объявленные в списке формальных параметров процедуры. Они соответствуют фактическим параметрам, указанным в вызове процедуры. Соответствие между формальными и фактическими параметрами устанавливается при вызове процедуры. Есть два вида параметров: параметры-значения и параметры-переменные, последние отмечены в списке формальных параметров одним из описателей VAR, IN или OUT. Параметры-значения представляют собой локальные переменные, которым в качестве начального значения присваивается значение соответствующего фактического параметра. Параметры-переменные соответствуют факти­ческим параметрам, являющимся переменным, и они представляют эти пере­менные. Параметры-переменные могут использоваться только для ввода данных (IN), только для вывода данных (OUT) или для ввода и вывода (VAR). Описатель IN можно использовать только для параметров, являющихся массивами или записями. Внутри процедуры IN-параметры доступны только для чтения. Как и локальные переменные, OUT-параметры указательных или процедурных типов инициализируются в NIL.

Но из этого видно, что сама по себе функция может обрабатывать и VAR параметры, и не VAR. Кроме того, в присваивании a и b могут быть указателями на совместимые строковые типы и я пока не знаю, трогает ли функция CheckBuffering только параметры строки (на самом деле строка - это array of char) или указатели на них тоже. Кроме того, в отличие от Си, если формальный параметр - указатель, то при каждом использовании его не нужно разыменовывать, и это ещё одна «магия компилятора». Ты всё ещё уверен, что это всё равно назвается «передача по значению»?

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

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 3)
Ответ на: комментарий от den73

Если ты такой умный, то как называется передача VAR параметров?

Передача по ссылке.

из этого видно, что сама по себе функция может обрабатывать и VAR параметры, и не VAR.

Из процитированного тобой фрагмента я бы сказал, что VAR, IN и OUT передаются по ссылке.

Ты всё ещё уверен, что это всё равно назвается «передача по значению»?

Я всё еще уверен, что «передача параметра и присваивание одним термином» называются «передача по значению».

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

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

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Ну так а если передача параметра по ссылке, то как же её можно назвать передачей по значению?

Не понял, о чем ты. Ясно же написано - «есть два вида параметров: параметры-значения и параметры-переменные, последние отмечены в списке формальных параметров одним из описателей VAR, IN или OUT». VAR, IN и OUT - параметры переменные, передаются по ссылке. А параметры-значения передаются, внезапно, по значению.

tailgunner ★★★★★
()
Ответ на: комментарий от den73

Поясняю: я перевожу исходники blackboxcomponentbuilder на русский язык.

Традиционно пожелаю тебе заняться делом!

t184256 ★★★★★
()
Ответ на: комментарий от tailgunner

Я о том, что при передаче по ссылке эта ф-я тоже вызывается. И будет не совсем корректно называть это передачей по значению. Впрочем, забей. Я думаю, что все близкие по смыслу варианты уже названы, всем спасибо!

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)

маршалинг

могу ошибаться, но это разновидность сериализации

anonymous
()

(internals) quirks shims (design of) assignment implementation

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.