[18:32:08] <Okasu> зачем кому то может понадобиться использовать использовать режим передачи параметров out?
[18:32:34] <Okasu> если формальный оператор не инициализируется, то зачем он нужен?
[18:32:51] <Okasu> странные эти режимы вообще
[18:32:57] <Okasu> /me только начал изучать аду
[18:33:23] <subjrs> артефакт 83-го стандарта
[18:35:11] <Okasu> но их же активно используют
[18:35:24] <Okasu> значит для чего то они нужны, а не просто рудимент
[18:35:38] <subjrs> в 95-м вроде он все равно доступен для чтения
[18:36:01] <Okasu> http://shootout.alioth.debian.org/u64q/program.php?test=mandelbrot&lang=gnat&id=3 например
[18:36:18] <landgraf> я, кажется, юзал для чего-то
[18:36:26] <landgraf> или только in юзал, не помню уже
[18:36:33] <Okasu> in дефолт
[18:36:41] <landgraf> значит out юзал
[18:37:12] <landgraf> grep out -R * | grep -v in
src/DD/avirtda_dd_messages-xml.adb:            Status : out Boolean) is  
src/DD/avirtda_dd_disks.adb:        This : out Avirtda_DD_Disk_Access;
src/DD/avirtda_dd_disks.ads:        This        : out Avirtda_DD_Disk_Access;
src/DD/avirtda_dd_executors.ads:        entry Get_Task(T : out Any_Avirtda_DD_Task);
src/DD/avirtda_dd_executors.adb:        entry Get_Task(T : out Any_Avirtda_DD_Task) when not queue.Is_Empty is
xml/XMLSchema.xsd:        subset will know about the various IDs we declare
xml/XMLSchema.xsd:       that's ruled out because it would allow users to
[18:37:26] <landgraf> оно?
[18:37:45] <Okasu> да
[18:37:59] <landgraf> ну значит нужно было )))
[18:38:09] <subjrs> типо для наглядности
[18:38:19] <landgraf> типо да
[18:38:42] <Okasu> даже в том примере что я привел?
[18:38:53] <Okasu> если убрать то ничего не изменится?
[18:38:56] <subjrs>
6.2.3 Режим "out"

В этом режиме, при входе в подпрограмму, формальный параметр не инициализируется (!!!) значением фактического параметра. Согласно стандарта Ada95, внутри подпрограммы, формальный параметр, использующий этот режим, может быть использован как в левой, так и в правой части инструкций присваивания (другими словами: формальный параметр доступен как для чтения, так и для записи). Согласно стандарта Ada83, внутри подпрограммы, такой формальный параметр может быть использован только в левой части инструкций присваивания (другими словами: доступен только для записи).
[18:39:19] <Okasu> да я уже прочитал это :)
[18:39:31] <subjrs> грю ж артефакт )
[18:39:53] <molostoff.vasq> я извиняюсь, но вообще то про операторы формальные вопрос
[18:40:46] <landgraf> molostoff.vasq, ну это не сабж или я нужен, а кто поумнее )
[18:41:16] <subjrs> вопрос был про режим передачи параметров
[18:41:18] <molostoff.vasq> generic
 type Element_T is private;
 with function "*" (X, Y: Element_T) return Element_T; -- formal operator
function Square (X : Element_T) return Element_T;
[18:42:40] <landgraf> molostoff.vasq, жди vgodunko :0
[18:42:50] <landgraf> s/0/\)/
[18:43:06] <molostoff.vasq> не инициализируется out, потому что он на запись и только. нечем его инициализировать.
[18:43:19] <subjrs> molostoff.vasq: вопрос был зачем нужен out режим вообще )
[18:43:38] <subjrs> кроме эстетической чистоты
[18:44:07] <molostoff.vasq> а как интерфейсить другие языки если в них pass_by_ref, pass_by_val подход реализован,
[18:44:09] <molostoff.vasq> ?
[18:44:37] <subjrs> в других языках вроде нет чистого режима out
[18:44:49] <molostoff.vasq> не силен.
[18:44:57] <molostoff.vasq> в русском есть.
[18:45:23] <landgraf> in - by_val, access - by_ref? нет?
[18:45:48] <molostoff.vasq> это иными словами - режимы работы стека и того как передаются параметры подпрограмме.
[18:46:12] <subjrs> по умолчанию это компилятор решает )
[18:46:15] <molostoff.vasq> access - by_ref
[18:46:40] <molostoff.vasq> по умолчанию это решает процессор на котором компилятор работает
[18:46:54] <subjrs> разве процессору не пох?
[18:47:25] <landgraf> subjrs, вчера пивка местного отпробовал
[18:47:29] <subjrs> и как?
[18:47:34] <molostoff.vasq> непох. он сволочь по разному делать может. можно alloca посмотреть как сделано в солярке и как в gcc
[18:47:43] <landgraf> отлично! в рашке крушовице не та
[18:47:51] <subjrs> ясен пень )
[18:48:10] <landgraf> сегодня еще литрушечку залью )
[18:48:19] <subjrs> бгг )
[18:48:27] <subjrs> пойду прожектор смотреть
[18:50:08] <landgraf> делов лучше займись
[18:51:29] <subjrs> выходной
[18:52:37] <molostoff.vasq> а что vgodunko, с ним неинтересно, он лицо аффилированное
[18:53:00] <landgraf> ну тогда в рассылку
[18:54:07] <molostoff.vasq> нее, там кодировки страшные, а я только англ могу читать. а сюда чой-то заглянулось само. щас откл
[19:02:09] <nordwind> Неплохо так поехать в прагу на выходные попить крушовицы
[19:03:20] <landgraf> если бы
[19:03:27] <landgraf> сижу слушаю тренинги
[19:03:35] <landgraf> с 9 утра до 6 вечера
[19:03:43] <landgraf> пиво только вечерами
[19:04:01] <landgraf> еще час сидеть
[19:04:22] <nordwind> Тем более отлично
[19:04:39] <nordwind> Интересно?
[19:04:46] <landgraf> so-so
[19:08:32] <Okasu> так какая разница то, если я определю формальный оператор с out или просто объявлю переменную внутри процедуры?
[19:09:04] <molostoff.vasq> это зависит от того как это будет употреблено снаружи.
[19:09:10] <landgraf> +
[19:09:24] <molostoff.vasq> предполагается, что там уже что-то есть.
[19:09:27] <landgraf> molostoff.vasq, опять само?
[19:09:36] <molostoff.vasq> ну. тестирую жабер
[19:10:01] <Okasu> так если формальный оператор с out ничем не инциализиурется, то что есть он что нет - без разницы?
[19:10:13] <molostoff.vasq> в качестве оут можно использовать только объект в памяти
[19:10:21] <molostoff.vasq> снаружи
[19:10:28] <landgraf> Okasu, если его внутри обьявить - снаружи уже не используешь
[19:10:42] <molostoff.vasq> а аксесс придумали как раз для того что в С есть *
[19:11:29] <molostoff.vasq> не инициализируется = нет значения по умолчанию, это у вас перевод такой.
[19:11:55] <molostoff.vasq> не может иметь значение по умолчанию.
[19:12:25] <molostoff.vasq> аксесс можно делать только на специальные объекты aliased
[19:12:36] <molostoff.vasq> адрессуемые
[19:13:37] <molostoff.vasq> например на символ в строке сделать ссылку. это в С можно запросто, а в аде - только с разрешения девелопера.
[19:14:38] <molostoff.vasq> формальный параметр объявить - не значить создать объект
[19:15:08] <molostoff.vasq> а значить - описать что там, снаружи.
[19:16:47] <molostoff.vasq> строки в аде могут быть упакованы так, что на отдельный символ сослаться невозможно в другой программе, например на С - там только побайтная адресация. а в аде она может быть 3 битная, или 9 битная.
[19:17:01] <Okasu> но он же доступен только для записи, как прочитать что описано?
[19:17:22] <molostoff.vasq> записал туда и всё. и забыл.
[19:18:00] <Okasu> и нафига записывать то что не порчитать и забывать? :)
[19:18:21] <Okasu> очень какой то странный костыль
[19:18:29] <molostoff.vasq> это как дырка в стене, за которой - темнота. тебе надо туда картошку кинуть - вот кинь. зачем стоять рядом и спрашивать - попал или нет.
[19:18:30] <subjrs> фича
[19:19:04] <Okasu> я не могу кинуть картошку ретурном?
[19:19:19] <molostoff.vasq> а если пару бросить надо?
[19:19:33] <molostoff.vasq> дуптетом
[19:19:59] <Okasu> а как ловить её будут?
[19:20:01] <subjrs> карочи так лучше потом спецификация пакета читаетца - сразу видно где входные параметры у процедуры а где выходные
[19:20:12] <molostoff.vasq> о! точно
[19:20:31] <molostoff.vasq> и ловить также. то есть аналогично
[19:21:00] <molostoff.vasq> у когото такая же оут в его процедуре и он твою будет вызывать тоже с оутом
[19:21:11] <molostoff.vasq> а иначе не получится
[19:22:56] <molostoff.vasq> вобщем как вилки с розетками.
[19:23:33] <Okasu> интересно :)
[19:28:13] <Okasu> т.е аут оператор то то что вернёт функция после выполнения?
[19:28:32] <subjrs> дыа
[19:28:45] <Okasu> а без аута она ничего не вернёт?
[19:28:52] <subjrs> хспда
[19:29:06] <subjrs> процедура не функция
[19:29:15] <subjrs> точнее void функция )
[19:29:41] <Okasu> почти всё стало ясно
[19:29:59] <Okasu> но что значит вернуть "пару"?
[19:30:17] <Okasu> что я могу вернуть аутом, но не могу вернуть ретурном?
[19:30:22] <subjrs> procedure smth (a: out integer; b: out boolean);
[19:30:36] <subjrs> сразу несколько значений
[19:31:27] <subjrs> например пару: строка и ее длина
[19:31:31] <Okasu> а в каком это видe вернётся?
[19:32:01] <Okasu> это же надо как то куда присвоить
[19:33:45] <Okasu> ох, пойду спать уже совсем ничего не соображаю
[19:33:49] <subjrs>
procedure math (a, b : integer; sum, mult : out integer) is
begin
  sum := a + b;
  mult := a * b;
end math;
[19:34:30] <subjrs>
x := 5;
y := 10;
math (x, y, rsum, rmult);
[19:34:55] <subjrs> put_line (rsum'img & rmult'img);
[19:35:21] <Okasu> оу
[19:35:25] <subjrs> правда обычно удобней просто две функции сделать )э
[19:35:46] <Okasu> эти аут переменные видны за пределами процедууры где они определены
[19:35:52] <subjrs> нет кнешн
[19:36:12] <Okasu> а как тогда ты смог к ним обратится вне math? 0_0
[19:36:22] <subjrs> я к ним и не обращался вне
[19:36:36] <Okasu> аа
[19:36:52] <subjrs> карочи чота тя заклинило на этом out
[19:37:01] <Okasu> те фактические операторы приняли вернувшиеся значения
[19:37:09] <subjrs> ну да
[19:37:14] <Okasu> всё понял
[19:37:17] <Okasu> спасибо :)
[19:37:48] <subjrs> не операторы, а переменные
[19:37:52] <Okasu> да
[19:38:05] <Okasu> параметры фактические
[19:38:32] <subjrs> называй их просто параметрами
[19:38:37] <Okasu> ок