OberonCore
https://forum.oberoncore.ru/

BlackBox: Lament Configuration
https://forum.oberoncore.ru/viewtopic.php?f=114&t=6896
Страница 5 из 33

Автор:  arisu [ Среда, 08 Март, 2023 13:28 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

сделал идею из этой темы. надо бы в language report ещё вбить, когда обкатаю.

Автор:  arisu [ Среда, 08 Март, 2023 18:49 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

из той же темы сделал обязательный UPSCOPE. конечно, поправил весь код среды. флаг совместимости с CP не делал специально, ибо нефиг: когда такой флаг есть — всегда хочется его включить и поправить всё «когда-нибудь потом». как известно из опыта, это самое «потом» наступает примерно никогда.

Автор:  arisu [ Четверг, 09 Март, 2023 02:16 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

сделал `UP` ключевым словом (`UPSCOPE` слишком длинное), и заодно количество `UP.` теперь реально контролирует, из какого скопа брать переменную. с одной стороны это удобно: можно получить доступ к локалам любого родителя, и делать штуки типа `i := UP.i`. а с другой — меня не покидает ощущение, что я, воля моя, что-то нескладное придумал.

по чистой логике `UP` должен работать именно так, всё логично. но гложет, гложет червячок сомнения.

Автор:  arisu [ Четверг, 09 Март, 2023 14:50 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

расширил StdInterpreter и DevCommanders. в интерпретаторе разрешил использовать одинарные и обратные кавычки для закавычивания команд; также добавил в коммандеры интерфейс команд (гыг), чтобы использовать из меню. потому что — а почему я не могу исполнить коммандер по хоткею, почему мне надо к мыши каждый раз тянуться?! ужасно неудобно.

я уже не раз говорил, что оберон-среды почему-то ненавидят людей, которые ненавидят мышь (и BBCB тоже): даже простейшие действия типа «исполнить коммандер» или «свернуть/развернуть фолд» с клавиатуры сделать нельзя. ужасно неудобно: с одной стороны у нас «текст как интерфейс», а с другой надо постоянно бросать устройство ввода текста и тянуться к мыши. у Plan 9 та же фигня, кстати.

Автор:  arisu [ Четверг, 09 Март, 2023 22:30 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

ну и раз уж я так топлю за AAtree, то заменил в компиляторе деревья символов с просто двоичных на balanced. выигрыш — примерно пол-секунды на полной пересборке вин-версии: я полагаю, это из-за дурного размера винапи-импорта.

к сожалению, список полей записей трогать нельзя: там адово абузится поле `.link`. то есть, парзер предполагает, что оно не меняется при добавлении полей, и линкует оные поля сам, руками. а нам так нельзя, нам надо это поле менять, потому что дерево балансированое же, и корень постоянно ездит.

в принципе, особого значения это не имеет, потому что записи с огромным количеством полей — редкость. но хочется везде кросивое. надо, видимо, добавить поле `.root`, где и хранить корень дерева. а с `.link` пусть компилятор и дальше играется, не жалко. но тут надо аккуратно проверить, чтобы нигде больше кривых игр не было, а то случится бадабум.

p.s.: отвязал, привинтил. ссылок на коммиты не даю, потому что там дофига переколбашено, особо смысла смотреть нет. основной затык был в том, что bounded procs везде выводятся как раз в алфавитном порядке, а я запилил отдельное поле для корня дерева, и link больше не указывает на корень. после починки этого в нескольких местах всё вроде как заработало. кажется.

Автор:  arisu [ Пятница, 10 Март, 2023 11:30 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

кстати, забавная мысль пришла. сборка с нуля версии под лин более чем в два раза быстрее сборки версии под вин (понятно, одним и тем же dev-компилятором). а виноват во всём, похоже, модуль с винапи, который так или иначе, через host или ещё как-нибудь — но подтягивается чуть ли не в каждый модуль среды, и имеет совершенно неприличные размеры. и это с учётом того, что подтягивается через sym-файл, а не парзингом с нуля каждый раз, и этот sym, по сути, читается из кэша в RAM.

огромные модули в базовых подсистемах — это плохо, п'нятненько?

вообще, забавно, что модули импорта из dll/so на самом деле нечто типа макросов: компилятор вставляет нужные импорты в конкретный модуль, который их использует. но делать импорты сразу по месту почему-то нельзя. в смысле — просто оформить секцию импорта полутора внешних функций в обычном модуле. интересно, почему так? технически для этого никаких препятствий нет. видимо, омики хотели, чтобы код на CP и интерфейс с внешним миром были чётко разделены.

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

Автор:  Борис Рюмшин [ Пятница, 10 Март, 2023 12:38 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

У меня весь ББ вместе с Ctl (среди которых особо крупный модуль есть) собирается за 10,5 с. Win, Win MDI и Lin сразу. С линковкой. Имеет ли смысл ускорять компиляцию?

Автор:  arisu [ Пятница, 10 Март, 2023 19:08 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

Борис Рюмшин писал(а):
Имеет ли смысл ускорять компиляцию?
совершенно не имеет. у меня лин+вин, но без Ctl — семь-восемь секунд, с Ctl, думаю, как раз до десяти натянет. это так, была просто мысль вслух.

но с другой стороны: невозможность включать в модули-импорты код иногда неудобна: приходится уносить всякие утилиты в отдельный модуль. те же `FD_ZERO()` и компания для лин-сокетов, например. в общем-то не большая проблема, и я не уверен, что ради неё стоит всё ломать, но всё-таки немножко неудобно.

p.s.: а если вы про использование balanced trees — то это я сделал чисто чтобы мои слова в ветке про AAtree не расходились с делом: раз я там утверждаю, что нет больше никакого повода НЕ делать двоичные деревья балансироваными — то и сделал в компиляторе. заодно отвязал от поля `.link` в `Struct` двойное назначение: голова сортированых полей (и методов) теперь хранится в другом поле. так более понятно, мне кажется.

Автор:  arisu [ Пятница, 10 Март, 2023 19:17 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

починил non-blocking sockets для Lin.

заодно закинул в репу O3, адаптированый под GNU/Linux. виндоверсия тоже собирается, но там (как минимум под вайном) баг с блокированием не починен. ещё она гадит логами в консоль через LamentdevLog, потому что я забыл это убрать перед коммитом, гыг.

Автор:  Борис Рюмшин [ Пятница, 10 Март, 2023 19:31 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

Было какое-то уточнение или исправление на эту тему: http://zinnamturm.eu/downloadsAC.htm#CommTCPAsync

Автор:  arisu [ Пятница, 10 Март, 2023 19:40 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

там они — судя по описанию — `connect()` правили. а как минимум в лин-версии ошибка в том, что HostTCP вообще не переводит сокет в неблокирующий режим никогда, потому что написана неправильно.

ну и да: connect там тоже реализован неверно: при нон-блоке и EINPROGRESS его надо проверять отдельным кодом, а не так, как в `IsConnected()` сделано.

а про винду я не очень в курсе, потому что… не очень в курсе. это пусть кто-нибудь другой в маинлайне починит, а я украду.

надо, кстати, `connect()` в линусах дочинить, да, спасибо за напоминание.

p.s.: тащемта, там вообще довольно странная логика работы с сокетами. не то чтобы неправильная, но… странная.

Автор:  arisu [ Суббота, 11 Март, 2023 04:50 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

вместо чтобы спать — занимался бесполезным: экспериментами с `getaddrinfo_a()`. потому что DNS resolving должен быть асинхронным! добился того, что оно работает, утром буду впиливать в HostTCP/Lin. ну да, жестокая привязка к glibc, муслевцы — я полагаю — дружным строем идут сосать леденец. не мои проблемы.

Автор:  arisu [ Суббота, 11 Март, 2023 14:23 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

ввинтил асинк-днс для линтцп. но не закоммитил ещё: надо теперь тестировать, а ужасно лень. ;-) для страдальцев с мюслями и прочим — сделал флажок условной компиляции, который эту фичу отключает. ну, константу, в смысле: хорошо, что CP2 при `IF FALSE` ненужный код просто выкидывает, как раз условная компиляция и получается.

надо будет потом портировать это же в O3. блин, ну зачем они в O3 чуть ли не половину ящика продублировали, включая сетевые потоки?!

p.s.: какого чёрта в CommStreams нет `IsOpen()`? если асинк-днс или асинк-коннект сломались, то… то как мне это выяснить? технически поток ещё не коннектед. но надо возвращать, что коннектед, потому что логика такая. и пинать `ReadBytes()`/`WriteBytes()` пока не надоест. странная логика, странная. и `IsConnected()` тогда должен называться `IsActive()`. воля ваша, что-то омики в этих потоках не очень продумали.

p.p.s.: ладно, я, кажется, понял логику за этим. `IsConnected()` обозначает, что поток присоединён к какому-то каналу передачи, а не то, что канал полностью готов к работе. это и есть `IsOpen()`, по сути. а непосредственно проверка того, можно ли передать или принять данные делается через `WriteBytes()` и `ReadBytes()`, которые возвращают нули, если поток пока не готов. довольно неожиданный минимализм, но… окей, это вполне работоспособно. похоже, что я неправ, и омики как раз продумали в традиционном обероновском стиле: «обходимся минимальным достаточным интерфейсом».

Автор:  arisu [ Суббота, 11 Март, 2023 18:20 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

зопелил. потестировал. асинхронный резолвинг работает, асинхронный коннект — вроде бы — тоже. минималистичная логика оказалась на удивление удобной, снимаю свои претензии к непродуманности: это я не подумал, а не омики.

Автор:  arisu [ Суббота, 11 Март, 2023 19:17 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

заодно добавил в CommStreams методы `WriteSChars()` и `ReadSChars()`. их реализовывать не надо, они просто вызывают соответствующие байтовые, делая магический каст. потому что иногда удобней работать с массивом SHORTCHAR, а таскать за собой везде SYSTEM и магически кастовать в высокоуровневом коде — моветон. конечно, всегда можно сделать обёртку над стандартным потоком, но мне откровенно лень каждый раз оборачивать. не вижу, почему бы не добавить эти методы прямо в Comm: они ничего не ломают, и не заставляют менять уже существующие реализации.

то же самое, кстати, надо бы добавить в Files.Reader и Files.Writer, наверное; по тем же самым причинам. ну да, в Stores есть более продвинутые читалки и писалки, но пусть будут, почему нет. чистые утилиты-касты, есть не просят, в дальнейшем сопровождении не нуждаются.

p.s.: нет, `SYSTEM.THISARRAY` нигде не описано: это Тайное Знание Секты Компиляторщиков. есть ещё `SYSTEM.CC`, например, но вот это вам точно совсем не надо. ;-)

Автор:  arisu [ Воскресенье, 12 Март, 2023 01:39 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

быстровпилил клиентскую поддержку SSL/TLS через GnuTLS. поскольку я об этой технологии мнения очень невысокого, то в режиме «я труба шатал ваши сертификаты и режимы, мне любое подходит!» это, если что, то, как я всегда запиливаю «поддержку TLS».

надо ещё серверную часть сделать, и поддержку отправки сертификата клиентом для авторизации. к сожалению, это потребует изменения API. я так думаю, его можно всунуть прямо в CommStreams. поскольку у нас система однопоточная (ура!), то просто устанавливать сертификаты глобально. да, своё мнение о TLS я уже говорил, поэтому меня вполне устраивает, что они будут лежать в памяти процесса открытым текстом.

пока что ещё не закоммитил, если чо.

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

запиливание заняло десять минут — без учёта трансляции заголовков. потому что GnuTLS API реально очень простой. на винду мне традиционно плевать, но если туда собрать как-то GnuTLS с cdecl-вызовами, то можно и там запилить, добавив после успешного коннекта хэндшейк, и заменив читалку/писалку на вызовы аналогичных функций из GnuTLS. но мне лень, я не буду.

Автор:  arisu [ Воскресенье, 12 Март, 2023 04:02 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

сделал драйвер CommTLS. поскольку я ленивый афедрон, то сертификаты тупо суются в глобалы. естественно, никаких проверок на «валидные сертификаты» никто не делает, потому что нафиг надо. боевая задача — ходить на идиотские серверы, где нет нормального HTTP, и делать наипримитивнейшие TLS-серваки. задача в этом объёме решена.

Автор:  arisu [ Воскресенье, 12 Март, 2023 12:50 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

вообще, поняш мне тут напомнил, что я собирался сделать обязательные `VAR` и `OUT` в вызове процедур. то есть — `CallIt(VAR a, OUT b)`, если там соответствующие параметры. с одной стороны — это правильно, потому что сразу видно, что может измениться при вызове. а сдругой — дофига кода править, и не очень удобно.

обычно я во все свои язычки, где есть механизм передачи по ссылке, такое добавляю — но опционально. но есть нюанс: «опциональная фича повышения читаемости кода» — это полный эквивавалент фичи, которую никто никогда не будет использовать добровольно. хумансы, хумансы никогда не меняются: если компилятор насильно не заставит — то не будут.

конечно, можно просто собачку впилить, типа `(@a, @b)` — но тогда теряется важный кусок информации, и всё равно надо смотреть определение процедуры, чтобы понять, что `VAR`, а что `OUT`. в принципе, унарная префиксная крышка тоже свободна, можно `(@a, ^b)` (по логике, OUT — это для возврата значений, крышка на это намекает). но немного пугает перспектива превратиться в си какой-нибудь, где вместо читаемого текста line noise.

вы всё равно тут читаете: скажите, сильно line noise с собаками и крышками? мне такой короткий вариант нравится больше ключевых слов всё-таки, потому что ключевые слова, мне кажется, больше визуального мусора добавляют: сразу мнится, что там какой-то оператор или что-то такое. а закорюки похожи на закорюки экспорта.

Автор:  arisu [ Понедельник, 13 Март, 2023 10:47 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

эх. не хотите меня отговаривать — и не надо. значит, будут стрёмные значки: да здравствует line noise!

Автор:  Иван Денисов [ Понедельник, 13 Март, 2023 15:55 ]
Заголовок сообщения:  Re: BlackBox: Lament Configuration

arisu писал(а):
эх. не хотите меня отговаривать — и не надо. значит, будут стрёмные значки: да здравствует line noise!

я видел, что в коде люди ставят комменты (* OUT *) и всё
это ведь скорее для оформления кода, а создавать препоны во время программирования - так себя идея

Страница 5 из 33 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/