[00:02:13] <valexey> vlad2: тебя, как и меня, манит путь алгола68 :-)
[00:02:18] <valexey> как минимум
[00:02:25] <valexey> а в идеале хаскель конечно - все есть выражение!
[00:02:30] <valexey> и никаких statement'ов
[00:03:50] <valexey> А Вирт, судя по всему, expression'ы давил как мог в своем языке
[00:06:00] <jordan36957> Из истории алгола
[00:06:06] <jordan36957> Так, например, один из членов комитета вспоминал «десятичную бурю» — крайне резкую дискуссию между американскими и европейскими участниками по поводу того, какой именно символ использовать в качестве разделителя целой и дробной части числа. Американцы стояли за точку, европейцы требовали применять традиционную в Европе запятую, и из-за такой мелочи работа оказалась под реальной угрозой срыва.
[00:06:59] <valexey> в результате американцы победили везде :-)
[00:10:54] <jordan36957> Программы не только на с++ пишут.
[00:11:21] <jordan36957> Я статистики не знаю.
[00:12:53] <vlad2> Зато числа можно перечислять через запятую. Вобщем я за американцев :)
[00:12:56] <vаlexey> а при чем тут С++?
[00:13:03] <vаlexey> я тоже :-)
[00:13:12] <vаlexey> vlad2: мы с тобой рабы мейнстрима просто!
[00:13:23] <vаlexey> так бы оно перечислялось бы через ; скорее всего
[00:13:41] <vlad2> У нас есть индульгенция в виде все еще изотерического компилятора ;)
[00:13:44] <jordan36957> Я имел ввиду подход к языкам, а не только к разделителю.
[00:14:17] <vlad2> Ну так и чего - Вирт тоже жокапался до значка "=" в сях...
[00:14:37] <vаlexey> ога. нашли обо что копья ломать.
[00:15:38] <jordan36957> в си понятно для чего, но в паскале в if присвоить нельзя. Я тоже особо не понимаю, из за чего весь сыр бор.
[00:16:31] <vаlexey> расходится с общепринятой математической нотацией
[00:16:35] <vаlexey> всего лишь :-)
[00:16:54] <vаlexey> дань математическому мейнстриму :-)
[00:18:07] <vlad2> Хуже всего конечно в бэйсике :) Вот там моно было этот значек покритиковать.
[00:18:24] <jordan36957> чем?
[00:19:10] <jordan36957> Бэйсиков много, какой именно?
[00:20:18] <vаlexey> по моему, там он для ВСЕГО использовался.
[00:20:58] <jordan36957> я смотрел только free basic
[00:21:44] <vаlexey> фрибейсик больше на си похож, сколь я помню.
[00:23:29] <jordan36957> если только этим ->
[00:23:42] <jordan36957> Там ещё препроцессор есть
[00:23:55] <vаlexey> не, я там и принтфы видел и всякое разное. по моему там даже препроцессор есть
[00:24:08] <vаlexey> короче, это Си с бейсиковым синтаксисом :-)
[00:24:37] <jordan36957> Компилер может компилировать в си. Год назад баловался
[00:25:05] <jordan36957> На данный момент его довольно сильно нафичевали.
[00:25:05] <vlad2> тру бэйсик всегда был интерпретатором ;()
[00:27:21] <vаlexey> угу. это его первоначальная фича
[00:27:26] <vаlexey> преимущество перед фортраном было
[00:27:33] <vаlexey> и другими "настоящими" языками
[00:28:23] <jordan36957> Влад, настолько кульный язык?
[00:29:06] <vlad2> Кто? Бэйсик?
[00:29:19] <jordan36957> тру бэйсик
[00:29:35] <vlad2> Нет. Просто теплый ламповый :)
[00:29:51] <jordan36957> let a = 5
[00:29:54] <vаlexey> в плане синтаксиса на порядки проще оберона :-)
[00:30:16] <vаlexey> то есть в плане парсинга
[00:30:25] <vlad2> Я провда все никак не могу понять - как я там без структур мог обходиться...
[00:30:50] <vlad2> Все остальное (номерс строк и т.д.) уже не так вважно :)
[00:30:55] <vаlexey> а зачем они? если смысл массивов еще понятен, то структуры - это излишество нехорошее!
[00:31:16] <jordan36957> он динамический?
[00:31:21] <vlad2> Ну наверное.
[00:31:22] <jordan36957> http://physics.clarku.edu/sip/tutorials/True_BASIC.html
[00:31:23] <vаlexey> э?
[00:31:34] <vаlexey> что значит динамический язык? :-)
[00:31:39] <vlad2> Собственно в asm js так и есть - структур нет, а есть один большой массив :)
[00:32:26] <vаlexey> да, asm.js это будет отдельная тема. для компилятора :-)
[00:32:38] <vаlexey> но это позже. я очень надеюсь что мозилла прогнет гугл на эту тему
[00:32:44] <jordan36957> Если добавить, структуры, указатели будет тот же оберон
[00:32:49] <vаlexey> и хотя бы хром и фф это будут поддерживать
[00:32:58] <vlad2> Я там сегодня на обеде читал issue для хрома.
[00:33:00] <vаlexey> не будет :)
[00:33:10] <vlad2> Оно типа "major", но народ как-то не особо торопится.
[00:33:13] <jordan36957> почему?
[00:33:22] <vаlexey> потому что масса нюансов
[00:33:25] <vlad2> Типа "у начс и так все быстро" :)
[00:33:26] <vаlexey> начиная с типизации
[00:33:31] <vаlexey> vlad2: гы
[00:33:44] <vаlexey> щютники, однако!
[00:33:46] <jordan36957> получится оберон с синтаксисом basic?
[00:34:09] <vаlexey> нет. получится бейсик со структурами :-)
[00:34:16] <vlad2> https://code.google.com/p/v8/issues/detail?id=2599
[00:34:33] <vlad2> http://mrale.ph/blog/2013/03/28/why-asmjs-bothers-me.html
[00:35:56] <vlad2> "When I sit down and think about performance gains that asm.js-implementation OdinMonkey-style brings to the table I don’t see anything that would not be possible to achieve within a normal JIT compilation framework and thus simultaneously make human written and compiler generated output faster."
[00:36:24] <vаlexey> но иссуе они не закрыли
[00:36:26] <vаlexey> это радует
[00:36:26] <vlad2> Принципиальная ошибка чувака только в том, что хюманы не хотят писать на этом гавне безотносительно скорости :)
[00:37:09] <vаlexey> это ты про js или про asm.js? :-)
[00:38:48] <vlad2> про js
[00:39:11] <vlad2> Хотя я точно знаю, что найдутся чуваки, которые станут писать на asm js руками.
[00:39:13] <vаlexey> ну, это ты зря. народ добровольно и с песней пишет. есть много фанатов этой штуки.
[00:39:17] <vаlexey> мне аж страшно становится
[00:39:42] <vаlexey> ну, на asm.js да. народ будет писать руками. немного, но будет.
[00:39:57] <vаlexey> а вот на js МНОГО народу пишет. много фанатов.
[00:40:00] <vlad2> Ну хорошо "определенный прроцент хьюманов не хотят бороться с энтропией голыми руками".
[00:40:15] <vаlexey> в общем, js страшнее плюсов :-)
[00:40:22] <vlad2> Дык дв.
[00:40:26] <vlad2> Это ж очевидно.
[00:40:52] <vаlexey> зато там порчи памяти не бывает!
[00:40:53] <vаlexey> круто же!
[00:40:55] <vаlexey> :-D
[00:41:27] <vаlexey> только убегающие процедуры и глобальные объекты меняющие ориентацию прямо во время исполнения :-)
[00:42:09] <vlad2> Угу. Сплошной общественный туалет :)
[00:42:46] <vаlexey> без костюма химзащиты никак :-)
[00:44:20] <vаlexey> а на хабре... пол хабра любителей в это дело нырять :-)
[00:44:28] <TRUE> <vlad2> Мерещатся жуткие IF/ELSE и ненужные переменные.
[00:44:31] <TRUE> RETURN l1 = NIL & l2 = NIL & planB() OR l1 = NIL OR l2 = NIL OR P(l1, l2)
[00:47:04] <vlad2> Хм. Не знаю. Я так не понимаю :)
[00:47:53] <vlad2> Не, ошибка.
[00:48:35] <vlad2> если PlanB() вернул false, то выполнится P(l1, l2)
[00:49:01] <vlad2> И крэшнется, потому что разыменует нулевой указатель.
[00:52:18] <vlad2> Тут без ветвления никак.
[00:54:05] <TRUE> можно без ветвления. Просто я пытаюсь соптимизировать
[00:54:51] <vаlexey> ветвления при сокращенном порядке вычислений возможны без тернарного оператора
[00:56:23] <vаlexey> но это обычно не имеет смысла :-)
[00:56:40] <TRUE> конвейер процессора с тобой не согласен
[00:57:06] <vаlexey> а если у процессора нет конвейера? :-)
[00:58:11] <TRUE> тогда мы никогда не узнаем, потому что гид не позволит тебе его запустить
[00:58:33] <vаlexey> хто?
[00:58:42] <vаlexey> ну вот берем мегепроц msp430
[00:58:52] <vаlexey> я вот не уверен на счет конвеера в нем :-)
[00:59:44] <TRUE> гид
[00:59:45] <jordan36957> наследующим легендарную архитектуру процессора 70-х—80-х годов PDP-11
[00:59:47] <TRUE> который в музее
[01:00:14] <jordan36957> MSP430 — семейство 16-разрядных микроконтроллеров
[01:00:21] <vаlexey> а что музей? 430ка - это современный проц
[01:00:29] <vаlexey> вон у меня валяется рядом.
[01:00:38] <jordan36957> 16 бит.
[01:00:52] <vаlexey> и?
[01:00:55] <jordan36957> Память нормально не заюзать.
[01:01:03] <vаlexey> с чего бы?
[01:01:22] <TRUE> RETURN l1 = NIL & l2 = NIL & planB() OR l1 # NIL & l2 # NIL & P(l1, l2) OR TRUE
[01:01:34] <TRUE> для контроллера - нормально у него памяти
[01:01:49] <TRUE> ой, у меня рекурсия
[01:01:50] <vаlexey> ну да. до мегабайта :-)
[01:02:09] <TRUE> кого он там наследует?
[01:02:16] <TRUE> x86?
[01:02:19] <vаlexey> (там есть 20ти битный режим адресации. 20битные указатели, ога :-) )
[01:02:31] <vаlexey> не, к x86 он никакого отношения
[01:02:40] <vаlexey> говорят он чем-то на PDP-11 похож
[01:02:42] <vаlexey> но я хз
[01:02:48] <TRUE> в pdp тоже 20-битная шина?
[01:02:49] <vаlexey> я только msp430 знаю как он есть.
[01:03:23] <vаlexey> но вообще конечно подавляющее большенство процессоров сейчас все же 8ми битные.
[01:03:25] <TRUE> x86, говорят, тоже на pdp похож
[01:03:38] <TRUE> а конвейер есть
[01:03:51] <vаlexey> не, x86 это все же CISC, потому там и конвеер и прочие радсти
[01:03:59] <vаlexey> 430 - это RISC как он есть.
[01:04:03] <vаlexey> проще некуда :-)
[01:04:10] <TRUE> а конвейер разве не на рисках появился?
[01:04:28] <vаlexey> хез. но 430ый он совсем простой
[01:04:40] <TRUE> по-моему, он на рисках появился потому, что как раз-таки система команд простая
[01:04:42] <vаlexey> ну, то есть его фичи в другом - он например умеет себя по частям отключать :-)
[01:04:49] <vаlexey> чтобы энергию не тратить
[01:04:55] <TRUE> это да - круто
[01:05:37] <jordan36957> включение тоже требует времени? в x86 такая фича возможна?
[01:05:51] <vаlexey> то есть например на нем дивайсы делали, которые газовые скважины мониторили и раз в полчаса-час передавали данные по радио - текущие показатели
[01:06:25] <vаlexey> оно автономно от двух пальчиковых батареек (правда батарейки там специальные, обычные в сибири сдохнут нафиг) год-два работает.
[01:08:12] <TRUE> это из лаунчпада?
[01:08:15] <vаlexey> ну и когда мед. прибор разрабатывали, мы почти вышли на уровень потреблениа такой, что могли питаться от микрофонного входа iPhone :-)
[01:08:26] <vаlexey> да, в ланчпаде тоже msp430
[01:08:35] <vаlexey> там младшенький совсем - 512 памяти.
[01:08:49] <TRUE> оба msp?
[01:08:59] <TRUE> там же 2 контроллера, да?
[01:09:01] <vаlexey> угу
[01:09:19] <vаlexey> один покруче, другой послабее - 256 памяти
[01:19:55] <TRUE> нашлось им применение?
[01:20:20] <TRUE> Кстати, у кемета есть проекты на похожем? Он их на чём-то обероноподобном делает?
[01:22:01] <vаlexey> у него покрупнее зверюшки
[01:22:53] <vаlexey> да я так, играюсь с ними. будет врем - еще повожусь.
[01:23:09] <vаlexey> может во владов компайлер бэкенд для msp430 воткну :-D
[01:23:43] <TRUE> Но модуль JS при этом будет смотреться как-то странно : )
[01:24:02] <TRUE> и динамические массивы
[01:24:08] <TRUE> (если появятся)
[01:24:56] <vаlexey> динамические массивы в стиле С99, как в Астробе, там возможно и на месте были бы :-)
[01:25:04] <vаlexey> Но фиг вам а не расширизмы! :-)
[01:25:06] <TRUE> я гляжу на сайт TI, и вижу, что цена подросла до 10 баксов
[01:25:14] <vаlexey> Модуль JS только для js таргета
[01:25:35] <TRUE> а была 4 с чем-то, да?
[01:25:58] <vаlexey> 5 или 6 что-ли. не помню.
[01:28:17] <vаlexey> а еще мне должна виртурилка приехать :-)
[01:28:37] <vаlexey> можно будет над ней жестоко надругаться - поставить туда node.js :-)
[01:28:43] <TRUE> она дороже малины?
[01:29:01] <vаlexey> вроде бы да. но оно круче же :-)
[01:29:20] <vаlexey> оно умеет fullhd енкодить в реалтайме
[01:29:24] <vаlexey> h264
[01:29:35] <TRUE> малина тоже
[01:29:43] <TRUE> правда, ключик докупить надо
[01:30:00] <vаlexey> + все спеки открыты, ну и SDK от TI имеется
[01:30:16] <TRUE> на виртурилку?
[01:30:18] <vаlexey> угу
[01:30:25] <vаlexey> это ж TI'йный давинчи
[01:30:45] <TRUE> мне казалось, что это местная разработка
[01:30:55] <vаlexey> проц то не их. а от TI
[01:30:58] <TRUE> а
[01:31:04] <vаlexey> также как и у малинки не свой проц
[01:31:12] <vаlexey> точнее проц не проц, а целый SOC
[01:31:12] <TRUE> ну да, бродком всё что смог закрыть - закрыл
[01:31:36] <vаlexey> вот. а у TI достаточно открыто все.
[01:31:57] <vаlexey> из всех барыг мне, пожалуй, TI больше всех нравится
[01:32:29] <vаlexey> ну и там всякие SPI, I2C и проч имеется. композитный выход опять же. камера в комплекте и так далее.
[01:32:47] <vаlexey> надо будет только ЛСД купить к нему кошерный и подключить.
[01:32:54] <vаlexey> без ЛСД то никак :-D
[01:33:37] <TRUE> у малины такие кодеки есть
http://www.raspberrypi.com/mpeg-2-license-key/
http://www.raspberrypi.com/vc-1-license-key/
[01:34:14] <TRUE> но они лицензируемые, потому бродком их не может открыть даже если бы захотел
[01:34:21] <TRUE> я про mpeg2
[01:34:35] <vаlexey> фи
[01:34:38] <vаlexey> это ж тупо decode
[01:34:43] <vаlexey> а мне encode надо
[01:34:50] <vаlexey> это сильно круче :-)
[01:35:09] <TRUE> а
[01:35:24] <vаlexey> realtime h264 encoding&decoding
[01:35:31] <vаlexey> вот это виртурилка умеет
[01:35:46] <vаlexey> + еще всякое разное с изображением делать
[01:36:08] <vаlexey> масштабировать там, поверх текст накладывать полупрозрачный, компенсацию искажений от линз делать.
[01:42:48] <vаlexey> TRUE: а еще чуть более старшая модель SOCа этого умеет еще и морду распозновать
[01:42:52] <vаlexey> то есть хардверно
[01:44:45] <TRUE> то есть, там камера в плату впаяна?
[01:45:19] <vаlexey> нет. это сторонний модуль
[01:46:07] <vаlexey> http://www.mikrogonki.ru/content/osnovnoi-komplekt-plata-virt2real-wifi-kamera
[01:46:38] <vаlexey> http://virt2real.ru/content/kontroller-virt2real-virturilka
[01:47:11] <TRUE> оно работает по gpio?
[01:47:50] <vаlexey> не, там спец. интерфейс
[01:48:00] <vаlexey> по gpio ты загребешься такой поток данных выгребать
[01:48:05] <vаlexey> проца не хватит
[01:53:11] <TRUE> ОЗУ 32КБ...
[01:53:18] <TRUE> а что за ось там? Линукс
[01:53:40] <vаlexey> Линукс. Оперативки 256 Метров :-)
[01:54:20] <TRUE> а, ниже написано. Но в процессоре 32КБ каке-то валяются
[01:54:30] <vаlexey> Если что, то у Intel i7 той оперативки ровно 0 Кб :-)
[01:54:35] <vаlexey> Она у него ВСЯ внешняя
[01:54:50] <TRUE> ну да
[01:55:18] <TRUE> а её как-то различать можно? Внешнюю и внутреннюю?
[01:55:31] <TRUE> по производительности она различается7
[01:55:40] <vаlexey> по идее да. но для этого нужно думаю линукс выпилить :-)
[01:55:56] <vаlexey> фиг знает. пока не копал в ту сторону
[09:58:10] <Kemet> vlad2: vаlexey: Module.Proc это имя, и оно, естественно, неизменно, но мы то говорим о ЗНАЧЕНИИ
[09:59:31] <Kemet> и вот значение-то как раз неизвествно, а то, что подставится во время компиляции будет изменено во время загрузки и линковки, т.е. на константу никак не тянет
[16:02:11] <vаlexey> Kemet: с точки зрения компилятора - это константа. С точки зрения прикладного программиста - это тоже константа (логически, оно не меняется от запуска к запуску). С точки зрения линкера - это да, возможно не константа. Ну и что? Про компоновщик в репорте ничего нет :-)
[16:02:41] <vаlexey> Kemet: предложи эксперимент который может провести прикладной программист, чтобы выявить что это самое не является константой :-)
[16:12:09] <Kemet> vаlexey: addr := ADDRESS OF Module.Proc - при загрузке/выгрузке модуля выдает разные значения, и это понятно
[16:12:30] <vаlexey> в Обероне нет ADDRESS :-)
[16:12:38] <Kemet> это не важно
[16:12:55] <Kemet> важен сам факт
[16:13:08] <vаlexey> Это важно. С точки зрения прикладного программиста Оберона - это константа. С точки зрения компилятора - это тоже константа.
[16:13:56] <vаlexey> То есть репорту не противоречит.
[16:14:03] <Kemet> константа - это то, что известно на этапе компиляции - адрес процедуры не известен, ибо неизвестно кудо будет загружен модуль
[16:14:25] <Kemet> вообще, адреса переменных неизвестны
[16:15:12] <vаlexey> ну, адрес переменной узнать и куда-то присвоить, в Обероне как раз не возможно. Так что там все норм.
[16:15:29] <vаlexey> А понятия адреса процедуры там также нет :-)
[16:15:33] <vаlexey> см. репорт.
[16:16:02] <Kemet> да это неважно,Ю есть в репорте или нет, ибо есть здравый смысл
[16:16:47] <vаlexey> здравый смысл говорит что это 1) реализуемо везде. 2) это полезно прикладному программисту. 3) неприятных побочек нет.
[16:18:35] <vаlexey> да, и репорту это не противоречит.
[16:18:47] <Kemet> компилятор все-равно оперирует некими адресами(не важно, что это такое, рреальные адреса или индексы или еще чего),  независимо от того, есть это в репортеязыка или нет.

[16:19:20] <vаlexey> ну и ладно. это детали реализации.
[16:19:32] <Kemet> то, что это реализуемо, это понятно, но такая реализация нарушает само понятие константы
[16:19:53] <Kemet> потому чсто меняет ее значение
[16:20:00] <vаlexey> нет высшего понятия константы. понятие вводится в репорте. мы этому понятию не противоречим.
[16:21:31] <Kemet> полностью противоречишь, потому что реальный адрес процедуры не вычислим на этапе компиляции модуля, он известен только после загрузке/линковки модуля/
[16:22:23] <vаlexey> слушай. Оберон работать может не только на обычных процессорах, но и в других окружениях. в окружении того же js. И там то например ну ничего не меняется. И да, там нет адресов.
[16:23:50] <vаlexey> да и язык понятием "адрес" не оперирует.
[16:24:56] <vаlexey> С другой стороны, я в принципе придумал эксперимент когда может вылезти проблем при наивной реализации этих самых процедурных типов. Так что этот вопрос еще следует обмозговать.
[16:26:28] <Kemet> не важно, оно все равно где-то находится, не зависимо от того, в какой форме обратишься, и находится оно там потому, что модуль размеестили в памяти/пространстве ..., т.е. здесь в данном контретном случае компиляция совмещена с линковкой, но сама фаза линковки никуда не делась, просто размазана
[16:26:36] <vаlexey> Kemet: кстати, а что случается с процедурными переменными когда выгружается модуль содержащий эту процедуру?
[16:27:13] <vаlexey> Или там тоже некий сборщик мусора работает и не дает выгружать таковой модуль?
[16:27:28] <Kemet> от реализации зависит
[16:27:52] <vаlexey> Ну, а какие реализации ты видел?
[16:28:16] <Kemet> вообще, контекст модуля уничтожается, но в старом обероне/бб часть модуля, связанная с дескрипторами типов остается в памяти
[16:28:54] <vаlexey> ну, дескрипторы то да. но тушки процедур то и их адреса ведь протухают?
[16:29:02] <Kemet> память, выделенная под переменные модуля освобождается
[16:29:15] <vаlexey> То есть при попытке вызвать функцию через процедурную переменную приведет к АВОСТу?
[16:29:39] <Kemet> эээ, не, ты не выгрузишь модуль, если на него есть ссылки
[16:30:27] <vаlexey> Прям на него нет ссылок. Есть просто где-то VAR p : PROCEDURE; ... p:=MyModule.Proc;
[16:30:51] <vаlexey> это присваивание уже давно выполнилось, а значение p уехало в другую переменную в модуль который про MyModule ничего не знает.
[16:31:01] <vаlexey> а просто периодически подергивает за эту p1
[16:31:02] <Kemet> ну раз есть MyModule.Proc, значит он где-то импортирован
[16:34:25] <vаlexey> Kemet: https://gist.github.com/valexey/6475200
[16:34:26] <vаlexey> вот
[16:35:14] <vаlexey> можно даже иначе.
[16:40:32] <vаlexey> https://gist.github.com/valexey/6475242
[16:40:33] <vаlexey> вот так. два модуля
[16:40:50] <vаlexey> сразу после Start модуль B выгружается
[16:40:53] <vаlexey> что будет?
[16:41:02] <vаlexey> (предположим у нас там многопоточность
[16:41:04] <vаlexey> )
[16:41:09] <Kemet> ну если через третий модуль, и потом выгрузить, то да, будет трап
[16:41:18] <vаlexey> Да вот даже два модуля
[16:42:19] <vаlexey> эдакий вот inversion of control
[16:42:40] <Kemet> если модуля, на процедуру которого повешана процедурная переменная выгружен, то естественно будет трап, по крайней мере он должен быть в нормальной системе
[16:43:06] <vаlexey> либо модуль не должен при этом выгружаться
[16:43:14] <vаlexey> в нормальной системе :-)
[16:43:26] <Kemet> эт сложнее отследить,
[16:43:50] <vаlexey> всего лишь еще один тип сборщика мусора :-)
[16:56:36] <Kemet> именно в тком виде https://gist.github.com/valexey/6475200 проблемы нет, потому что ты не сможешь вышрузить А
[17:00:00] <vаlexey> поэтому я и переписал пример
[17:00:30] <TRUE> если есть название процедуры, то чем она не та самая константа, которую ты пытаешься тут изобрести?
[17:01:16] <vаlexey> переименовывание же
[17:01:25] <vаlexey> создание алиасов. это бывает очень удобно и даже необходимо в некоторых случаях
[17:02:12] <vаlexey> примерно для того же для чего псевдонимы для модулей
[17:05:49] <Kemet> вообще, правильнее всех расширить язык, ввсети либо наподобии М3 - FROM MyModule IMPORT Proc;
[17:06:08] <Kemet> или USE
[17:06:32] <vаlexey> чем это будет отличаться? (кроме невозможности сделать то же самое локально, на уровне процедуры)
[17:07:09] <Kemet> отличаться от чего
[17:07:33] <vаlexey> от предложенных выше процедурных констант
[17:10:18] <Kemet> FROM Module IMPORT Proc - импортирует в пространство текущего модуля имена и другого модуля, и всё. никаких констант - реально подставляются ссылки, которые потом фиксятся. это просто для того, для чего ты хочешь, для сокращения записи, не перегружая понятие константы
[17:10:32] <TRUE>
<vаlexey> нет высшего понятия константы.

Я для себя со временем вывел такое высшее понятие. Константа - это значение. "i = 3 + 5; b = i + 2;". 8 и 10 - это константы. i и b - это не константы, потому что они не являются значениями. Они на практике, встречаяь внутри программы, могут заменяться указателем на область, где хранится значение или подставлять его по месту.

Таким образом, процедурная константа должна выглядеть как-то так: "p = PROCEDURE(); VAR i : INTEGER; ... BEGIN ... END;", а при появлении в программе должна будет ссылаться на область, где её сохранил компилятор.
[17:12:09] <Kemet> отошел
[17:12:42] <vаlexey> Эмм... Народ, понятие константы вводится в репорте. Соответственно константа в Обероне это одно, а в С++ это уже совсем другое. А в хаскелле будет что-то и вовсе третье. Поэтому говорить о некой общечеловеческой константе смысла нет. Важен контекст.
[17:13:21] <vаlexey> В случае компиляторов Оберона мы должны оперировать понятием константы что в репорте. Вот и все.
[19:31:09] <vаlexey> "Знакомый работал наблидателем на изберательном участке. Когда вскрыли урну, там оказалась пачка бюллетеней, перевязанная резенкой. В официальный протокол записали, что какой-то студент-хулиган бросил в урну резинку, и та опутала несколько бюллетеней."
[20:44:57] <vаlexey> так. надо где-то вики-страничку завести и туда складывать все наши договоренности о трактовке репорта. а то запутаемся нафиг.