[00:00:43] <valexey> О! Назревает холивор виндовс vs линух!
[00:00:45] <valexey> !!11
[00:00:47] <valexey> ;-D
[12:47:09] <valexey> ололо! http://forum.oberoncore.ru/viewtopic.php?p=71548#p71548
[12:47:20] <valexey> vlad2: эти пассажи мне нравятся все больше :-)
[12:47:25] <valexey> просто таки бальзам на душу!
[13:21:12] <bems> а почему в этих ваших оберонах нет константных массивов?
[13:21:38] <bems> единственное что нашел соеди горы эмоций: это усложнит компилятор
как будто это что-то плохое
[13:22:40] <valexey> наврятли это сильно усложнит компилятор
[13:23:04] <valexey> я хз почему нет. видимо Вирт решил что для его задач оно не нужно.
[13:23:22] <bems> http://forum.oberoncore.ru/viewtopic.php?f=6&t=2900
[13:23:42] <valexey> то есть он лучше пару раз руками вобьет массив чем будет усложнять компилятор (у него времени то на все про все было два года. то есть на написание оси. компилятор там побочное явление)
[13:24:45] <valexey> алсо в системе Оберон проблемы с этими массивами решаются просто - просто после кода модуля пишется содержимое этих самых массивов и при загрузке модуля оно оттуда их считывает и заполняет.
[13:25:18] <valexey> отсюда меньше перекомпиляций
[13:25:43] <valexey> естественно в отрыве от ОС Оберон (как среды разработки и исполнения) отсутствие этих константных массивов смотрится дико
[13:26:56] <bems> а как оно туда загружается?
[13:27:19] <valexey> bems: через составной документ.
[13:27:35] <valexey> сам подумай, какой основной профит от константных массивов в ЯП
[13:29:44] <bems> каким образом "оно оттуда их считывает"?
[13:30:26] <valexey> Foo := Read("Foo"); (* как-то так*)
[13:30:39] <valexey> понятно что под Read сидит более общая и более сложная конструкция
[13:31:30] <bems> так с отдельными телодвижениями это везде можно сделать
[13:31:41] <bems> я думал что-то автоматическое
[13:31:52] <valexey> ну да. только это в секции инициализации модуля же.
[13:32:12] <valexey> ну и ты учти, что вне системы аля ОС Оберон это все будет не удобно
[13:32:13] <bems> все равно что в делфях из ресурсов грузить
низачот
[13:32:20] <valexey> А тут текст программы и все константы в одном документе
[13:32:30] <valexey> Нет. В делфе это СИЛЬНО неудобней
[13:32:55] <bems> чем?
[13:33:10] <valexey> В ОС Оберон это все в одном файле. И текст программы и все константы. А в делфе ресурсы не локальны, они глобальны для приложения.
[13:33:59] <bems> аа
[13:34:51] <bems> ну все равно "не то"
[13:35:07] <valexey> Но как только Оберон выдергивают из родной среды и  используют какой-нибудь компилятор отдельный консольный скажем в линуксе, то он сразу скатывается в говнецо
[13:35:16] <valexey> Ибо там уже и констант не хватает и много чего еще
[13:35:46] <bems> как и говорилось, в реалных системах оберон не нужен
[13:35:49] <valexey> То есть язык Оберон вне контекста особой ценности не имеет
[13:36:21] <valexey> Ну, разве что в качестве подопытной крыски для начинающих компиляторщиков и школьников для отработки алгоритмики :-)
[13:37:44] <valexey> ну и полезен он некоторым параноикам которые не хотят пользоваться инструментом который в случае чего не смогут воссоздать и развить своими силами
[13:41:14] <valexey> Дмитрий85: хай! как там твой компилятор?
[13:42:20] <Дмитрий85> valexey: привет, я над ним работаю когда вдохновение приходит :) вчера делал присваивание массиву строки из констатнты...
[13:42:36] <valexey> из строгового литерала?
[13:42:39] <valexey> *строкового
[13:44:29] <bems> а компилятор чего?
[13:44:41] <valexey> абирона :-)
[13:44:53] <bems> а зачем? :)
[13:45:46] <valexey> для фана
[13:45:50] <valexey> и опыта
[13:45:53] <valexey> why not?
[13:46:08] <Дмитрий85>
CONST
str1 = "test_string";
VAR
tt : ARRAY 10 OF CHAR;
...
tt := str1;

i1 := 0;
WHILE i1 < 10 DO
WriteCh(tt[i1]);
i1 := i1 + 1;
END;
WriteLn;
---
D:\pow\ml2>test23.exe
test_string
[13:46:11] <Дмитрий85> так на ассемблере выглядет
lea eax, [tt]
push eax

lea eax, [str1]
push eax

mov eax, 10
push eax
call StrCopy
...
[section .data use32]
str1:
db 'test_string', 0

[section .bss use32]
i1:
resb 4
tt:
resb 10
[13:46:42] <Дмитрий85> так вобщем это выглядит
[13:48:03] <valexey> эмм. а в Обероне таки именно копирование массива происходит, а не просто копирование указателя?
[13:48:24] <valexey> а если строковый литерал (или константа) длиннее чем tt?
[13:49:53] <Дмитрий85> ограничивается до размера тт
[13:50:08] <valexey> а если наоборот?
[13:50:44] <Дмитрий85> тогда полностью копирует
[13:51:53] <valexey> а чем хвост заполняется?
[13:52:00] <Дмитрий85> ничем
[13:53:47] <valexey> то есть остается мусор?
[13:54:57] <Дмитрий85> да, строки ведь нулем кончаются
[13:55:12] <Дмитрий85> то что после нуля нас не интересует...
[13:55:15] <valexey> ага. то есть терминировать не забываешь? ;-)
[13:56:06] <Дмитрий85> нет :)
[13:56:29] <valexey> Strings can be assigned to any array of characters, provided the number of characters in the string is not greater than that of the array.
[13:56:54] <valexey> так что там должна быть ошибка при компиляции если константа (строковый литерал) длиннее чем размер массива чаров куда кладется
[13:58:37] <Дмитрий85> у меня если длинне то все 10 символов копируются, ноль не копируется, можно конечно ограничить, но вообще в оберон программах всегда еще LEN проверяют
[13:59:33] <Дмитрий85> к примеру функция возврата длинны строки
PROCEDURE Length* (VAR str-: ARRAY OF CHAR) : LONGINT;
VAR
i, maxlen : LONGINT;
BEGIN
maxlen := LEN(str);

i :=0;
WHILE (i<maxlen) & (str[i]#0X) DO INC(i) END;

RETURN i;
END Length;
[14:00:04] <valexey> ненене. нельзя допускать чтобы в строке не было нуля в конце
[14:00:05] <valexey> ты что?
[14:00:34] <valexey> эдак и в память нагадить не долго
[14:01:06] <valexey> вообще, такая ситуация же по репорту языка, ошибочная. то есть оно просто не должно компилироваться
[14:01:38] <valexey> когда  tt : ARRAY 3 OF CHAR; it:="hello world"; (* ошибка времени компиляции *)
[14:01:53] <valexey> *tt := "hello world";
[14:02:29] <valexey> или времени исполнения если размер tt вдруг не известен на этапе компиляции
[14:04:12] <Дмитрий85> вобщем да, если мы отдадим указатель на строку какой нибуть программе внешней, она только по нулю может узнать где конец строки
[14:05:22] <valexey> да и не внешней тоже.
[14:05:50] <valexey> то есть нет никакой гарантии что программист пишущий на обероне будет проверять на длину массива. вместо того чтобы просто нуль искать
[14:07:02] <Дмитрий85> исправим
[14:09:08] <valexey> Дмитрий85: а ты какую версию языка ваяешь?
[14:14:01] <Дмитрий85> valexey: что нибуть типа оберон-1/-2/-07, сейчас пока изучаю исходники из Project Oberon (они просто самые простые и примитивные), посматриваю еще исходники оберон для AVR/Net, вобщем эклектично работаю...
[14:14:31] <valexey> Я в основном Оберон-07 смотрю
[14:15:43] <Дмитрий85> может будет время посмотрю EBNFы от оберон-1/-2/-07, сделаю свою и буду её реализовывать..
[14:19:39] <valexey> хочешь микс сделать?
[14:19:46] <valexey> гибрид
[14:19:47] <Дмитрий85> у Pow есть Definition module, такую штуку тоже себе хочу сделаю, что бы можно было ассемблерные подпрограммы через них вызывать. Runtime library именно так будет сделан...
[14:19:49] <Дмитрий85> да
[14:20:43] <Дмитрий85> понадобится конечно еще внешний ассемблер и линкер, зато компилятор будет простым и лучше портироваться
[14:22:17] <Дмитрий85> привязанность к определенной среде недостаток оберонов, я вот хочу сделать его независимым
[14:22:24] <valexey> угу.
[14:22:37] <valexey> хотя… где вот у xds привязка к среде?
[14:24:26] <Дмитрий85> у xds и pow её нету, но первый комерческий, второй много весит почти мегабайт исходников, я пробовал, но там трудно разобраться что к чему...
[14:24:54] <valexey> я тоже пытался вкурить pow помнится. ниасилил (исходники)
[18:04:48] <valexey> о! romiras! как живой!
[18:06:20] <romiras> он самый
[18:07:27] <romiras> вот, ковыряюсь в ББ для линукса
[18:07:47] <valexey> и как оно?
[18:09:31] <romiras> Есть одна заморочка с GC. Из-за особенностей инициализации библиотеки в Линуксе требуется установить Kernel.baseStack в "правильное" значение.
[18:10:20] <valexey> а может туда прикрутить богемный GC и не париться?
[18:10:51] <valexey> http://en.wikipedia.org/wiki/Boehm_garbage_collector
[18:11:08] <romiras> Как посоветовали коровцы установить baseStack, я так и сделал, только не в Си а в Объектном Паскале (у меня пускач на нём написан)
[18:11:34] <romiras> Насчёт Boehm GC я уже давненько подумывал, но пока не решался
[18:13:00] <romiras> С установкой вершины стека в значение, взятое из головной программы, ББ-шный сборщик мусора заработал. НО..
[18:13:27] <valexey> криво?
[18:13:59] <romiras> Так вот, интересная фишка: он падает не сразу, а на выходе головной программы (когда нужно всё освободить)
[18:14:07] <valexey> кстати, богемный сборщик умеет для каждого потока отдельную кучу выделять. таким образом решается проблема с многопоточностью в принципе
[18:14:39] <valexey> гм. странно
[18:14:47] <valexey> видимо лезет не в ту память что-ли…
[18:15:00] <romiras> И если в некотором месте добавить строчку WriteLN, то баг ИСЧЕЗАЕТ!!
[18:15:15] <romiras> ВОТ ТАКИЕ ПИРОГИ
[18:16:28] <romiras> короче, теперь мой консольный вариант умеет себя компилировать. Но вот эта особенность не даёт мне покоя
[18:17:30] <romiras> Да, но почему лезет не туда? Ведь уже установлена вершина стека как полагается. Или не совсем? :)
[18:19:29] <romiras> И ещё. Если брать Boehm, то нужно вырезать весь ББ-шный сборщик мусора накорню. Они ведь оба будут конфликтовать.
[18:20:20] <valexey> естественно надо вырезать
[18:20:38] <valexey> оставить только API который будет дергать богемного за нужные тентакли
[18:21:03] <valexey> WriteLN - это где?  в объектном паскале или к КП?
[18:21:13] <romiras> Я с этим багом уже год вожусь. То времени не нахожу, то не знаю за что хвататься.
[18:21:42] <valexey> если в объектном, то видимо таки не точно стек установил.
[18:21:47] <romiras> WriteLn на Паскале, конечно. У меня пускач вызывает КП-шную libcpdev.so
[18:22:14] <valexey> вообще, я бы посмотрел в асм сгенереный и в чем отличие
[18:22:23] <valexey> фигли гадать, когда можно глазами посмотреть?
[18:23:25] <romiras> отличие от чего?
[18:23:40] <valexey> от варианта без WriteLN
[18:23:54] <valexey> ладно, я домой побег пока солнце не село :-) надо будет сегодня SDL 2.0 поковырять попробовать. Вчера оно у меня успешно собралось.
[18:23:54] <romiras> делаю вот так:
       // Set-up of SetKernelBaseStack
   baseStack := 0;
       asm
    mov baseStack, esp
       end;
       if baseStack <> 0 then begin
         writeln('ESP=', IntToHex(baseStack, 1));
         SetKernelBaseStack(baseStack - 8)
       end;

[18:24:15] <romiras> успехов :)
[18:24:25] <valexey> угу. бай
[21:16:25] <valexey> по моему, у info21 коллапс :-) http://forum.oberoncore.ru/viewtopic.php?p=71561#p71561
[21:16:32] <valexey> ФГМ в терминальной стадии
[21:18:48] <valexey> "Также в симптомокомплекс входит: полное неприятие критики своей деятельности, эрудиция по любому вопросу, игнорирование фактов, не укладывающихся в собственную картину мира, навешивание ярлыков, часто не соответствующих действительности. Прогноз для жизни благоприятен, для выздоровления — сомнителен."
[21:18:54] <valexey> http://lurkmore.to/%D0%A4%D0%B8%D0%BC%D0%BE%D0%B7_%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BC%D0%BE%D0%B7%D0%B3%D0%B0