OberonCore https://forum.oberoncore.ru/ |
|
почему Domain.GetSequencer() возвращает ANYPTR? https://forum.oberoncore.ru/viewtopic.php?f=23&t=6951 |
Страница 1 из 1 |
Автор: | arisu [ Вторник, 13 Июнь, 2023 22:20 ] |
Заголовок сообщения: | почему Domain.GetSequencer() возвращает ANYPTR? |
собственно, сабж. точнее, даже шире: почему `Domain.sequencer` имеет тип ANYPTR, а не `Sequencers.Sequencer`? ну да, я понимаю: Sequencers импортирует Stores, поэтому в Stores заимпортить правильный тип нельзя. окей. но я бы тут скорее в секвенсорах вместо типов из Stores принимал ANYPTR. потому что секвенсер, по сути, реализован один раз и в одном модуле, а результат `GetSequencer()` приходится кастовать в единственно возможный, тащемта, тип каждый раз. да ладно, в конце концов `Stores.Store` не наследуется ни от чего — так можно было уже абстрактное `Store* = POINTER TO ABSTRACT RECORD` положить в секвенсоры. ну да, некоторое нарушение логики — но минимальное, а удобства в итоге добавляет. понятно, что в mainline Store перемещать не будут (хотя почему бы и да), но в принципе: один же фиг у нас с ANYPTR получилось нарушение красивой типизации. по-моему, перемещение базового Store в секвенсоры всё-таки чуть лучше. как считаете, коллеги? p.s.: и почему секвенсоры омики решили не документировать? ну да, в Models есть обёртки. всё ещё не причина не рассказывать, что это: секвенсоры всё равно дёргают все кому не лень. p.p.s.: или вообще не выпендриваться, и затащить все секвенсоры в Stores. а в Sequencers сделать реэкспорт для совместимости, да директорию оставить. один фиг там десяток строчек абстрактных интерфейсов. некрасиво, но как по мне — приемлемо. всё равно Sequencers — модуль недокументированый, то бишь, его можно переделывать как захочется. |
Автор: | arisu [ Среда, 14 Июнь, 2023 14:05 ] |
Заголовок сообщения: | Re: почему Domain.GetSequencer() возвращает ANYPTR? |
в общем, в LC я переместил `Sequencer` в "Stores". а в "Sequencers" сделал реэкспорт, и оставил несколько второстепенных определений, которые не подвязаны на "Stores". и `Domain().GetSequencer()` теперь возвращает правильно типизированый объект, так что прошёлся по коду среды, и поубирал ненужные больше WITH-guard'ы. таким образом, весь старый код будет компилироваться как раньше (он получает ANYPTR, и потом кастует его в правильный тип), а новый код может обойтись без кастов. ну да, нарушение красивого разделения интерфейсов. но как по мне, то пусть: нормально типизированые секвенсеры для пользовательского кода лучше, чем красивое разделение по модулям, и постоянное жонглирование guard-ами. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |