[21:19:10] <valexey_> то есть вера хороший способ противостоять выученной беспомощности из за неконтроллируемости среды.
[21:19:59] <valexey_> впрочем и побочки имеются :-)
[21:20:56] <valexey_> Так вот, о типах в Аде: там можно просто написать:
[21:20:58] <valexey_> type Account_No  is new Integer range 0..999_999;
[21:21:03] <valexey_> и всё
[21:21:25] <valexey_> ну или там:
[21:21:27] <valexey_> type Data is range 0..2_000_000;
[21:22:03] <valexey_> или: type Temperatures is Float range -50.0..200.0;
[21:22:52] <jordan36957> Это я знаю, подтипы.
[21:23:01] <valexey_> это и тому кто будет читать твою прогу сделает код понятней, и компилятор сможет оптимальней все это разместить. И с переносимостью все будет ОК.
[21:24:34] <jordan36957> Соломоново решение. :-)
[21:25:25] <valexey_> Да ваще крутое решение!
[21:25:39] <valexey_> Ну, то есть ни разу не соломоново :-)
[21:26:05] <valexey_> Соломоново оно у Вирта в обероне - типо а вот хрен вам а не возможность указать, или хотя бы узнать диапазон значений!
[21:26:25] <jordan36957> Думаю, да.
[21:26:29] <valexey_> Блин, в Обероне даже SIZE (позволяет узнать скоко байтов в данном типе) засунут в SYSTEM, которого может и не быть.
[21:28:17] <jordan36957> Можно сделать как в си
[21:29:33] <jordan36957> INTN_MIN
INTN_MAX
[21:29:44] <jordan36957> stdint.h
[21:29:48] <jordan36957> как в stdint.h
[21:30:15] <valexey_> нельзя
[21:30:31] <jordan36957> Но универсальнее всё же функция или псевдо функция типа, sizeof(a)
[21:30:35] <valexey_> в Оберон-07 нельзя создавать алиасы для базовых типов (то есть для не структурных)
[21:30:50] <jordan36957> Смысл, такого запрета?
[21:30:52] <valexey_> то есть если в Обероне и Обероне-02 и в КП возможно TYPE Color = INTEGER; то в Обероне-07 уже нет
[21:31:14] <jordan36957> Накой?
[21:31:26] <valexey_> Упрощение языка :-) Ну и тот факт что TYPE Color = INTEGER новый тип один фиг не создавал.
[21:31:41] <valexey_> Ну, то есть смысл тот же почему в Обероне нет перечислений (enum)
[21:31:53] <jordan36957> Зато, читабельность и переносимость, теже gl типы.
[21:32:21] <valexey_> угу. stdint.h уже не сделать. ну, то есть что бы его сделать, нужно корячить компилятор.
[21:34:25] <jordan36957> Можно приделать, препроцессор си, но смысл так заморачиваться, если можно взять язык, который поддерживает данную возможность.
[21:34:28] <valexey_> Ну, это из той же оперы почему Вирт из Оберона-07 выпилил массивы неизвестной на момент компиляции длины
[21:34:44] <valexey_> То есть там нет аналого char* foo = new char[100500];
[21:36:12] <jordan36957> Я сейчас.
[21:36:27] <valexey_> ну или Обероновскому NEW(pointer, arrayLen);
[21:47:31] <jordan36957> А как тогда? char := alloc(100500) и приводить тип?
[21:48:23] <jordan36957> Что то типа си, но более неудобный?
[21:51:24] <jordan36957> TypeDeclaration = identdef "=" StrucType.
[21:51:40] <jordan36957> Из стандарта О7.
[21:51:50] <jordan36957> Есть в нём алиасы.
[21:52:34] <jordan36957> А понял, только на структурные типы.
[21:53:29] <jordan36957> Алексей как статья? Вдохновение не пропало, ещё пишешь?
[21:58:32] <valexey_> Я все еще набираю материал :-)
[21:58:44] <valexey_> Ну и жду пока пофиксят в GPCP баг :-)
[21:59:26] <valexey_> ну, alloc в Обероне нет. Более того, в Обероне-07 даже через SYSTEM нельзя убедить компилятор что вот этот кусок памяти имеет вот такой тип.
[21:59:35] <valexey_> То есть приведение типов не работает даже через SYSTEM
[22:00:33] <valexey_> Ну, разве что.. Через SYSTEM.PUT в указатель нужного типа записать адрес начала шматка памяти. Ну и каким-то магическим методом эту память выделить.
[22:01:21] <jordan36957> Так как на нём выделить память? Это возможно? Или как в старом фортране, полностью статика?
[22:02:09] <valexey_> Ну, на куче можно выделять память. Но только известными на этапе компиляции кусками.
[22:02:50] <valexey_> Типо  TYPE Array = ARRAY 100 OF INTEGER; ... p : POINTER TO Array; ... NEW(p);
[22:06:08] <jordan36957> В чём преимущества, такого подхода? Вирт, разрабатывает языки универсальные.
[22:07:48] <valexey_> Эмм.. А вот фиг знает. Быть может это упрощает менеджер памяти.
[22:09:54] <valexey_> Ну, то есть теоретически, при полнотекстовой компиляции (то есть всех модулей одновременно, без динамической загрузки/выгрузки и так далее, компилируем в один монолитный бинарь) еще на этапе компиляции можно проанализировать как будет выделяться память, и создать множество пулов оптимизированных именно под данные размеры выделяемых кусков памяти. Это может повысить скорость работы менеджера памяти и уменьшить фрагментацию.
[22:10:51] <jordan36957> А практически? Этим в 99% программ заморачиваются?
[22:11:19] <valexey_> Нет, не заморачиваются :-)
[22:11:58] <valexey_> Ну, то есть заморачиваются например в играх, и во всяких высокопроизводительных системах. Но там обычно пулы делают ручками и это будет тоже эффективней чем эта автоматика обероновская.
[22:12:09] <valexey_> (и да, в Аде поддержка пулов есть прямо в языке)
[22:12:49] <jordan36957> Ада могёт. :-) (Y)
[22:13:02] <valexey_> Ну и опять же, в таких приложениях (тех же играх) сборщик мусора противопоказан категорически. Ибо реалтайм.
[22:13:16] <jordan36957> В пошаговых?
[22:13:32] <jordan36957> Disciples или герои и т.д
[22:13:42] <valexey_> А пофигу :-) В смысле пусть у тебя игра и пошаговая, но анимация то один фиг реалтайм.
[22:14:29] <valexey_> Хотя конечно пошаговая игрушка может позволить себе подергиваться и тормозить без значительного снижения качества геймплея. (но один фиг раздражать будет)
[22:16:48] <jordan36957> Есть же стратегии оптимизации, вроде собирать память, после N гигов и т..д
[22:17:35] <valexey_> Угу. Но этот момент все равно настанет. И чем больше ты этот момент откладываешь, тем сильнее приложение станет колом в момент сборки.
[22:17:54] <valexey_> Нет, есть конечно параллельные сборщики мусора, которые позволяют что-то вроде мягкого реалтайма изобразить.
[22:18:08] <valexey_> Но они дают повышенную нагрузку на проц.
[22:18:30] <valexey_> Ну и они сами по себе сложнее чем весь BlackBox вместе взятый (вместо с компилятором, описанием языка и всем фреймворком) :-)
[22:25:11] <jordan36957> Ох чувствую твоя статья, оберкоровцам не понравится.
[22:26:20] <valexey_> ну, мне даже ilovb давеча сказал, что я слишком ненавижу Оберон чтобы понять его :-)
[22:26:56] <valexey_> хотя как можно ненавидеть ЯП я не слишком понимаю :-) Оберон - мой объект изучения. Я от него не фанатею и не ненавижу.
[22:28:19] <jordan36957> А, что там понимать. С помощью языка решают задачи, если язык ставит палки на ровном месте, представляю, что будет когда тронешся, а когда разгонишься....
[22:29:22] <jordan36957> В общем я в программировании нуб, поэтому мои слова, не нужно близко принимать к сердцу.
[22:29:25] <jordan36957> :-)
[22:29:37] <valexey_> угу. Оберон в том виде в котором он описан в Oberon report'e в качестве инструмента прикладного программиста, мягко говоря, не очень
[22:30:45] <jordan36957> Чем то схож с линуксом, вроде на скриншотах хорош, а как начнёшь работать, начинаются проблемы.
[22:31:39] <valexey_> скриншоты вообще крайне лживая штука - по ним юзабилити интерфейса определить в принципе не возможно.
[22:32:13] <jordan36957> Вроде драйвер поставил из репозитария, а ещё требуется поправить конфиг ручками и понеслась.
[22:33:08] <valexey_> угу. но это все же проблема не Оберон-рода. Оберон-рода проблема это когда ты берешь какую-нибудь новую операционку которая проста, вроде бы, и на скриншотах ничего так себе.
[22:33:21] <valexey_> запускаешь... эээ... а там ничего сделать полезного нельзя!
[22:33:36] <valexey_> ну, то есть драйверов нет, софта нет. ну и однозадачная к тому же например.
[22:33:53] <jordan36957> Хех, называется напиши сам. :-)
[22:35:21] <valexey_> обычно такие оси как раз кичатся своей простотой и отсутствием легаси-барахла.
[22:35:33] <jordan36957> Борис научи любить и понимать оберон. :-)
[22:35:39] <ilov_boris> секунду
[22:35:44] <ilov_boris> http://www.ethoberon.ethz.ch/SYSTEM.html
[22:35:47] <valexey_> они красивы и стройны. одна проблема - в них нельзя что-либо делать из того что нужно :-)
[22:35:49] <ilov_boris> Вот
[22:35:58] <ilov_boris> читайте товарищи
[22:36:05] <ilov_boris> и херней не занимайтесь
[22:36:21] <ilov_boris> Первоисточник так сказать
[22:36:34] <ilov_boris> каким должен быть систем на конкретной платформе
[22:36:36] <valexey_> "The module SYSTEM contains definitions that are necessary to program low-level operations"
[22:36:47] <valexey_> пардон, но мне как раз нужны hi-level абстракции
[22:36:59] <ilov_boris> байт - это low
[22:37:09] <valexey_> а тип с диапазоном 0...255 ? :-)
[22:37:14] <ilov_boris> да
[22:37:25] <valexey_> а тип с диапазоном -50.0 .. 200.0 ?
[22:37:36] <ilov_boris> да
[22:37:46] <ilov_boris> с любым диапазоном
[22:37:50] <valexey_> это hi level. это от задачи. это диапазон температур.
[22:38:00] <valexey_> и мне глубого плевать как оно там внизу будет устроено.
[22:38:06] <ilov_boris> т.к. на конкретной платформе такого диапазона может не оказаться
[22:38:07] <valexey_> на платформу - плевать
[22:38:17] <valexey_> ну и отлично. значит алгоритм там не реализуем
[22:38:28] <valexey_> и я должен получить ошибку времени компиляции а не исполнения
[22:38:41] <ilov_boris> вот и получишь ее с систем
[22:38:47] <valexey_> в Обероне для такого диапазона будет использован скорее всего тупо REAL и всё. Привет. Приплыли.
[22:39:06] <valexey_> В этом случае ЛЮБОЙ модуль будет импортировать SYSTEM
[22:39:10] <valexey_> А это не здорово.
[22:39:21] <valexey_> потому что у меня везде задаче-ориентированные типы
[22:39:24] <valexey_> hi level
[22:39:49] <ilov_boris> у с++ сильно искажено преставление о hi и low
[22:39:52] <ilov_boris> :)
[22:40:00] <ilov_boris> у с++'ников
[22:40:05] <valexey_> скорее а Адовцев.
[22:40:10] <ilov_boris> ну может
[22:40:19] <valexey_> hi level - это то, что рядом с задачей
[22:40:25] <ilov_boris> Аду вообще имхо некорректно с обероном сравнивать
[22:40:27] <valexey_> low level - это то, что далеко от задачи
[22:40:38] <ilov_boris> а байт рядом с задачей? O_o
[22:40:40] <valexey_> тогда и С++ не корректно с Обероном сравнивать :-)
[22:40:45] <valexey_> С данной задачей - да.
[22:40:54] <ilov_boris> в каком месте?
[22:41:19] <ilov_boris> Подозреваю что гаусс не знал о существовании байта ;)
[22:41:21] <valexey_> в форматах кодирования изображения.
[22:41:35] <valexey_> iso вроде бы
[22:41:47] <ilov_boris> valexey - это системная низкоуровневая задача
[22:41:56] <valexey_> нет
[22:42:05] <ilov_boris> ок
[22:42:16] <ilov_boris> что такое низкоуровневое в твоем понимании?
[22:42:18] <valexey_> не путай то что рядом с железом с тем что низкоуровневое :-)
[22:42:45] <valexey_> низкоуровневое - это когда ты решаешь задачу не в терминах задачи, а опосредовано.
[22:43:48] <ilov_boris> НУ ТЫК!!!
[22:43:53] <ilov_boris> продолжи мысль
[22:44:11] <ilov_boris> ты решаешь задачу в числах?
[22:44:17] <ilov_boris> нет
[22:44:29] <ilov_boris> так с какого хрена она высокоуровневая?
[22:44:51] <valexey_> задача - дан формат изображения, и само оное изображение. требуется его преобразовать определенным образом.
[22:45:20] <valexey_> Без SYSTEM.BYTE  на обероне данная задача решается низкоуровнево.
[22:45:31] <ilov_boris> таааак
[22:45:33] <valexey_> На всех остальных языках (особенно Аде) - высокоуровнево
[22:45:41] <ilov_boris> а на Си значит не низкоуровнево?
[22:46:23] <ilov_boris> Как ты не понимаешь что на платформе тебе гарантировано только слово
[22:46:29] <ilov_boris> байта может не быть
[22:46:40] <valexey_> На Си мне гарантирован uint8_t
[22:46:52] <valexey_> см. stdint.h
[22:46:56] <ilov_boris> и че?
[22:47:03] <valexey_> и ничо. это не байт? :-)
[22:47:06] <ilov_boris> а если на моей железке нет такого типа?
[22:47:48] <ilov_boris> приплыли?
[22:47:56] <ilov_boris> нихера тебе Си не гарантирует
[22:47:57] <valexey_> то эта задача не реализуема на твоей железяке. будет ошибка компиляции. и это хорошо.
[22:48:05] <ilov_boris> блин
[22:48:12] <ilov_boris> тык и в Обероне ровно то же
[22:48:15] <ilov_boris> только явно
[22:48:53] <ilov_boris> У тебя в программе все модули должны быть поделены на те
[22:49:03] <ilov_boris> которые никак не зависят от платформы
[22:49:10] <valexey_> в смысле? в обероне по факту нет соглашения какие типы должны быть в SYSTEM, более того, SYSTEM не обязателен вообще
[22:49:10] <ilov_boris> и те которые зависят
[22:49:17] <ilov_boris> т.е. импортируют систем
[22:49:17] <valexey_> а в стандарте Си stdint.h обязателен
[22:49:31] <ilov_boris> уфффф
[22:49:45] <ilov_boris> что тебе дает этот стандарт?
[22:49:49] <valexey_> Как мне написать переносимую (с компилятора на компилятор) оберон-приложение?
[22:50:05] <valexey_> Оно мне дает не только переносимость с платформы на платформу, но и с компилятора на компилятор.
[22:50:15] <valexey_> Оно как бэ формирует язык :-)
[22:50:38] <valexey_> ладно, я 8ую серию игры престолов смотреть :-)
[22:50:40] <ilov_boris> valexey: Во первых не забывай
[22:50:52] <ilov_boris> что ты сравниваешь спеку на язык
[22:51:01] <ilov_boris> и стандарт промышленного языка
[22:51:15] <ilov_boris> никто не мешает сделать стандарт для оберона
[22:51:32] <ilov_boris> и определить что должен содержать систем на каждой платформе
[22:51:36] <valexey_> и его НАДО сделать. и он будет пухлее 16ти страниц.
[22:51:43] <ilov_boris> ну тык да
[22:51:50] <valexey_> по сути это будет другой язык. и стандартную либу надо туда же.
[22:52:04] <ilov_boris> С чего он будет другим?
[22:52:13] <ilov_boris> стандарт будет на систем
[22:52:18] <ilov_boris> т.е. на либу
[22:52:28] <valexey_> Ну, там много чего доопределить надо и уточнить :-)
[22:52:34] <ilov_boris> где?
[22:52:44] <ilov_boris> в репорте
[22:52:45] <valexey_> в Oberon-07/11 report
[22:52:46] <ilov_boris> ?
[22:52:57] <ilov_boris> ну это уже отдельный разговор
[22:53:11] <valexey_> ну, то есть если уж делать стандарт на язык, то нормальный.
[22:53:42] <valexey_> ffi не забыть :-)
[22:55:22] <ilov_boris> кстати объясни что такое ffi
[22:55:37] <ilov_boris> я после луа совсем не вкуриваю
[22:55:40] <valexey_> возможность интерфейситься с другими языками.
[22:55:45] <ilov_boris> а
[22:55:52] <ilov_boris> тык значит в луа оно и есть?
[22:56:09] <valexey_> наверное. я не ковырял что там в луа c ffi
[22:56:23] <ilov_boris> для оберона самое главное интерфейситься с Си :D
[22:56:23] <valexey_> Ну, то есть когда ты вот пишешь биндинг в ББ к IUP ты как раз ffi используешь
[22:56:34] <valexey_> Да, всем важно с ним интерфейситься :-)
[22:56:51] <valexey_> Впрочем, зависит от. Например в случае владового поделия важно интерфейситься с js :-)
[22:57:00] <valexey_> В случае gpcp - с .net и java
[22:57:44] <valexey_> Вот ffi - это вот реально сильно платформоспецифично. Намного более специфично чем какой-то там байт.