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/ |