OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 18 Апрель, 2024 18:19

Часовой пояс: UTC + 3 часа


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему  [ Сообщений: 649 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12, 13 ... 33  След.
Автор Сообщение
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Понедельник, 10 Апрель, 2023 15:53 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
добавил реимпорт констант (в следующем коммите немного украсивки кода). тот же компилятор таскает за собой простыни констант, и очень легко ошибиться, поправив их не везде. ошибка, кстати, там уже была: `guarded` кое-где определено как 10, а кое-где как 8. потому сделал такое:
Код:
CONST IMPORT FROM ModName (name, name, newname := name, …);

нувыпонели. и почистил немного код компилятора, сделав почти везде реимпорты. сложил все константы в DevCPT: не самое лучшее место, зато его импортируют все подряд. пусть лежит там. естественно, снежинка после имени поддерживается, так что реимпорт можно опять экспортировать. ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Понедельник, 10 Апрель, 2023 16:08 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1449
Откуда: Киев
arisu писал(а):
тот же компилятор таскает за собой простыни констант, и очень легко ошибиться, поправив их не везде

Не думаю, что это произошло потому что в языке не было переимпорта. Ведь
Код:
CONST Name = Module.Name;
Это не что-то выходящее за рамки в языке, совсем не пытающемся сэкономить на каждом символе. Просто наговнокодили.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Понедельник, 10 Апрель, 2023 16:45 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
Comdiv писал(а):
Не думаю, что это произошло потому что в языке не было переимпорта. … Просто наговнокодили.
я сильно подозреваю, что во-первых, копипаста срезала немного времени компиляции (таки оно около полуминуты собиралось, дешёвый метод срезать пол-секунды, например,— не так уж и бесполезно). и во-вторых (что, мне кажется, главнее) — в редакторе оберона не было поддержки регулярок. поэтому средствами редактора такую трансляцию не сделать, а писать транслятор им стало лень.

но в целом вы правы, скорее всего: OP2 вообще местами написан довольно неряшливо. не так чтобы совсем уж плохо-плохо, но. омики тоже его чистить не стали, потому что особого смысла нет: он отлажен, он работает. я вот по той же причине ничего глобально там не рефакторю: оно работает же.

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Понедельник, 10 Апрель, 2023 19:00 
Аватара пользователя

Зарегистрирован: Воскресенье, 09 Декабрь, 2018 15:14
Сообщения: 113
Откуда: Equestria
arisu писал(а):
нежно украл из Active BlackBox weak pointers
омики вроде специально не делали. вместо них завезли редукторы, которые даже лучше т.к. ресурсы освобождаются явно и совсем даже не обязательно которые контроллируются gc.
arisu писал(а):
вообще, забавно, что модули импорта из dll/so на самом деле нечто типа макросов: компилятор вставляет нужные импорты в конкретный модуль, который их использует. но делать импорты сразу по месту почему-то нельзя. в смысле — просто оформить секцию импорта полутора внешних функций в обычном модуле.
бесит на самом деле. иногда в биндах надо делать простенькие обёртки или портировать сишные макросы. приходится размазывать по нескольким модулям, вместо того что бы всё держать в одном.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Понедельник, 10 Апрель, 2023 20:41 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
добавил в StdInterpreter простенькую конверсию типов. REAL я ещё до этого добавил, а теперь сделал конверсию интов в более узкие или широкие инты, или в реалы. так что теперь можно из коммандера позвать, например, `StdLog.Int(666)` или `StdLog.Real(666)`. и даже `StdLog.Real("666");`, а почему нет? интерпретатор, всё-таки, можно немного и ослабить правила. числа в строки, впрочем, не преобразуются, потому что к этому моменту оригинальная запись уже утеряна.

в интерпретаторе, кстати, можно в качестве внешних кавычек использовать бэктики (`), а для строк подходят и одинарные, и двойные.


Последний раз редактировалось arisu Понедельник, 10 Апрель, 2023 20:50, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Понедельник, 10 Апрель, 2023 20:48 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
SovietPony писал(а):
вместо них завезли редукторы, которые даже лучше т.к. ресурсы освобождаются явно и совсем даже не обязательно которые контроллируются gc.
а мне не надо явно, мне надо, чтобы указатель на View этот самый View не якорил, и превращался в тыкву, если View помер. ;-)

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Вторник, 11 Апрель, 2023 00:25 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
а почему бы, собственно, и да?
Код:
^Q LamentdevLog.Int(660 + 6 * 2 DIV 2); -- 666
^Q LamentdevLog.Int(660 + 12 - 6 * 4 DIV 2 DIV 2); -- 666
^Q LamentdevLog.Int(660 * (3 - 2) + 6); -- 666

в смысле, StdInterpreter теперь умеет считать простенькую математику. нет, работу с переменными делать не буду. наверное… ;-)

само собой, это автоматически означает, что `Dialog.Call()` тоже умеет, потому что он использует StdInterpreter как раз.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Вторник, 11 Апрель, 2023 03:12 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
не, ну гулять — так гулять! `ABS(COS(PI)) + PI` — а почему бы и да. в конце концов, я же хотел калькулятор — так вот он.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Вторник, 11 Апрель, 2023 08:04 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
больше нельзя переопределять глобальные константы и типы. во-первых, это защищает от переопределения стандартных типов и констант. (`CONST TRUE = FALSE;`, `TYPE INTEGER = BYTE;` — ни-ни!) а во-вторых, запрещает перекрытие глобалов в процедурах.

второе получилось нечаянно, но мне нравится. помимо большей строгости это решает проблему со штуками типа:
Код:
TYPE
  APtr = POINTER TO B;
  B = RECORD END;

PROCEDURE Boo;
TYPE
  APtr = POINTER TO B;
  B = RECORD END;
END Boo;

вот тут второе `APtr` — оно чем должно быть? а фиг его знает, репорт не говорит. вместо чтобы выдумывать сложные правила — проще запретить нафиг. вообще, перекрытие глобальных имён — это плохо, 'пнятненько?

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

для переменных такая проверка не проводится: мне кажется, такие перекрытия всё же стоит оставить.


p.s.: собственно, запретил перекрытия отцовских т. и к. во вложеных процедурах. так хорошо, так правильно.

это одна из фич, которая НЕ отключается модификатором `IN ComponentPascal`. простите, но я считаю подобный код очень грязным в любом случае. во фрэймворке такая ерундень встречается только в StdCoder. а, и ещё Host/Win очень грязный был.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Среда, 12 Апрель, 2023 12:30 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
добавил опциональные `END IF` и подобные. чота сначала не сообразил, и сделал кучу новых кейвордов (`ENDIF`, etc.). а потом как сообразил! если за `END` следует другой оператор, то там должна быть точка с запятой, так что `END IF` парзится вполне однозначно.

конечно, в большинстве случаев это лишнее: не надо писать такие лесенки-простыни, чтобы приходилось усердно размышлять, от кого там `END`; но на практике такое иногда получается, и тогда явное указание лучше комментария. поэтому штука опциональная.

коммиты вышли грязные, поэтому ссылку не даю. но изменения в DevCPP минимальные: просто вместо `CheckSym(end)` везде вызывать `CheckSym2(end, if)`, например, и в `CheckSym2()` проверять и съедать дополнительный токен, если надо.

p.s.: или сделать `CheckSymEnd()`, и там добавить ещё более лучшие овощи^w сообщения об ошибках.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Среда, 12 Апрель, 2023 16:31 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
запретил присваивание WITH-переменной, если она указатель. разрешено только присвоить ей NIL, а больше ничего. изменять поля по-прежнему можно, если переменная изначально не r/o.

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

NIL разрешён ровно потому, что это используется в одном месте среды — в DevDebug. когда-нибудь кто-нибудь обязательно удивится, зачем было сделано такое исключение, и построит интересную гипотезу — не зная, что это просто хак для удобства.

кстати, пригодилось новое поле readonly в `CPT.Object`: теперь оно INTEGER, и там три состояния: `rw`, `ro`, и `roShallow`. третье состояние нетранзитивное. вообще, надо бы пройтись по компилятору и поубирать проверки на externalR, заменив установкой нового поля при создании импорта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Среда, 12 Апрель, 2023 17:59 
Аватара пользователя

Зарегистрирован: Воскресенье, 09 Декабрь, 2018 15:14
Сообщения: 113
Откуда: Equestria
arisu писал(а):
добавил опциональные `END IF` и подобные.
ыы. кп превращается в ada.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Среда, 12 Апрель, 2023 20:38 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
SovietPony писал(а):
ыы. кп превращается в ada.
hellraiser, язык Ада, всё как полагается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Суббота, 15 Апрель, 2023 21:21 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
перевёл линуксовый registry-бэкэнд на SQLite. опционально: если модуль с поддержкой SQLite не загрузится (не установлена, например) — то откатится назад к обычным файлам. хотя я считаю, что SQLite должна стоять везде, а у кого её нет — тот дурак^w страуструп.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Воскресенье, 16 Апрель, 2023 12:10 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
собственно, rationale для прошлого камента: запущеных процессов ящика бывает больше одного. и они все лезут в базу реестра, в том числе и на запись. ну да, финальное приложение можно кастомизировать, но рабочие ящики-то все в одну. SQLite эту проблему решает сам, без моего вмешательства: запись всегда консистентна, прочитаные значения всегда актуальны. именно по этой причине я SQLite и впилил (а не потому что Там Обязательно Нужна БД).

конечно, тот же механизм синхронизации можно и на BBCB написать, но… вот тут тот случай, когда: «а зачем?» SQLite — удобный и надёжный инструмент. нет смысла переизобретать с нуля абсолютно всё ваще.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Воскресенье, 16 Апрель, 2023 20:32 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
type guards теперь надо писать так: `var(AS Type)`. о форме `var(:Type)` я думал, но отказался: во-первых, и так закорючек много, сишечкой воняет; а во-вторых, двоеточие плохо считывается, слишком маленькое и незаметное. пришлось добавить ещё одно ключевое слово, увы. думал ещё и над формой `var(TYPE Type)`, чтобы ключевых слов не добавлять, но громоздко как-то, и лошад сказал, что на объявление типа похоже.

про `var AS Type` тоже были размышления, но отказался из-за того, что это всё равно придётся в скобочки брать постоянно, и вхачивать проверки, чтобы запретить `var AS Mod.Type.field` — которую парзер разрешит, но выглядит это ужасно и читается никак.

не то чтобы я был от `AS` в восторге, но это лучше, чем ничего.

заодно портанул в лин rtf-конвертер из вин, через iconv. там, кстати, мелкобаг (в конвертере): после `\u` не скипается `\'`.

p.s.: в принципе, `var(AS Type)` даже более-менее читается: «переменная (как тип)» — уточнение, то есть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Понедельник, 17 Апрель, 2023 23:59 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1449
Откуда: Киев
arisu писал(а):
двоеточие плохо считывается, слишком маленькое и незаметное
А ему и не обязательно бросаться в глаза, в конце-концов это всего лишь подсказка. Не припомню, чтобы и оригинальная-то форма записи создавала проблему. Это происходит потому, что для понимания кода недостаточно знать только тип операции, нужно также знать и смысл элементов. А зная их не составляет сложности и распознавание выражения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Вторник, 18 Апрель, 2023 00:56 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
оригинальная таки неоднозначна. помимо прочего — её нельзя однозначно распарзить в AST если не строить сразу по пути таблицу символов. не то чтобы большое препятствие, но. в целом, я пытаюсь идти в направлении «операции с разным смыслом не должны выглядеть одинаково», и при этом стараюсь не очень перегрузить язык подробностями и длиннотами. мне кажется, что пока получается — хотя это, конечно, субъективно.

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

оригинальный компонентный паскаль на всякий случай всё ещё поддерживается в полном объёме через `MODULE xxx IN ComponentPascal`. в конце концов, если я не внедрю и не попробую на практике — то я и не пойму, сильно оно мешает, или нормально смотрится. пока что мне нравится: читать стало легче, и код писать не мешает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Среда, 19 Апрель, 2023 03:19 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
однако, сделал генератор OpenGL-биндов на основе xml от хроняк. однако, мегабайт (почти) гуано получился. однако, однако.

к сожалению, OpenGL — очень уж хитрый предмет. кроме базового GL1 (которое по нынешним временам бесполезно чуть менее, чем полностью) всё остальное по правилам следует получать динамикой, через `glXGetProcAddress()` и аналоги. причём делать это надо уже после того, как создан GL-контекст с нужными параметрами, иначе драйвер вправе вернуть NIL (и на винде, например, некоторые драйвера точно так и делают; на линуксах, впрочем, тоже).

соответственно, модуль выглядит так: ему надо поставить колбэк `GetProcAddr()`, а все gl-процедуры описаны как обычные глобальные переменные разных процедурных типов. изначально каждой из них присваивается скрытая процедура-загрузчик, которая вызывает `GetProcAddr()`, и присваивает результат глобалу. такой вот динамический импорт.

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

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

если кто хочет генератор (или его выхлоп; но я в выхлопе пока не очень уверен) — пишите в ЛС, поделюсь. а выкладывать не буду, стыдно очень.

p.s.: надо бы потом сделать View для gl-рисования. по типу как Controls сделаны, с нативным окном.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Четверг, 20 Апрель, 2023 03:18 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1164
алсо, дошли лапы посмотреть, как CP2 компилирует `Proc(str + "abc")`. хм. омики как обычно не стали умничать, пытаться что-то на стеке вычислить…
Код:
VAR @ptr: POINTER TO ARRAY OF CHAR;

NEW(@ptr, LEN(str) + 3); @ptr := str$ + "abc"; Proc(@ptr^);

соответственно, к сведению: переполнения стека при таком коде можно не бояться. но лучше так не делать вообще, чтобы не гадить в динамическую память.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 649 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12, 13 ... 33  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB