[18:16:11] <Kemet> ping
[18:16:14] <Жаба> Kemet, Pong from you:  1.453661 s
[18:17:32] <Kemet> Всё ж связанных с типом процедур для любых именованных типов в АО не хватает. Сделали же операторы для базовых типов, а псевдометодов нету(((
[18:18:04] <valexey> нужны шаблоны!
[18:18:24] <Kemet> можно так сейчас
[18:18:25] <Kemet> TYPE
T = LONGINT;

OPERATOR "LEN"( t: T ): SIZE;
BEGIN
RETURN SIZEOF( T );
END "LEN";
[18:22:41] <Kemet>
» [22:12:39] <valexey> нужны шаблоны!
yt? nfrjuj yt yflj
[18:22:50] <Kemet> не, такого не надо
[18:25:25] <valexey> надо!
[18:25:33] <valexey> ты просто еще не проникся
[18:25:50] <Kemet> как раз раз за разом окунаюсь
[18:25:59] <Kemet> нинужны
[18:26:04] <valexey> и? чем плохо? удобно же!
[18:26:07] <Kemet> лучше уж дженерики
[18:26:11] <valexey> код быстрый получается. типизация строгая. отлично же!
[18:26:29] <Kemet> откуда в шаблонах типизация
[18:26:51] <valexey> в концептах и в static_assert'ах
[18:26:54] <valexey> и много где еще
[18:27:23] <Kemet> не, остановимся на дженериках)
[18:29:38] <Kemet> всё ж лучше бы Феликс синтаксис О2 для связанных с типом процедур использовал на псевдометоды, которые, как и операторы, не хранятся в VMT
[18:30:47] <Kemet> Понятно, что оно им нужно для того, чтобы можно было передавать и по значению и по ссылке и константно
[18:31:20] <Kemet> в обычном метьоде нужно что-то городить для этого, чтобы SELF подвязать на тип передачи
[18:32:53] <valexey> это типа static функций-членов в плюсцах?
[18:36:06] <Kemet> ты о чем
[18:38:04] <valexey> class Foo { static int bar(){}};
[18:40:35] <Kemet> а если у типа есть наследник?
[18:42:58] <Kemet> хочешь сказать, помечать методы как { STATIC } и будут как псевдометоды иои ператоры?
[18:43:07] <valexey> я не знаю что такое псевдометоды
[18:43:39] <valexey> если тебе нужны "методы" которые не принимают this, то это оно.
[18:44:22] <valexey> если нужны с this но без записи в vtable, то это просто функция-член без virtual (у этого класса и у его предков)
[18:44:32] <Kemet> это синтаксический сахар - их можно использовать как обычные методы но в таблицах их нет
[18:45:51] <Kemet> ну оо ест мне нужны не методы типа, а псевдометоды экземпляра
[18:49:18] <Kemet> TYPE
T = SIZE;

PROCEDURE { STATIC } ( t: T ) Print( );
BEGIN
TRACE( t );
END;


VAR t.T;

...
t.Print(); // Транслируется в вызов статический процедуры, информация о методе не помещается в таблицу виртуальных методов
[18:50:27] <valexey> https://godbolt.org/z/Kh7d1o
[18:50:28] <valexey> оно?
[18:51:18] <valexey> this не передается
[18:52:12] <valexey> https://godbolt.org/z/emaCuy
[18:52:17] <valexey> а вот в boo - передается
[18:52:35] <valexey> а в zoo и this передается и в таблице виртуальных функций zoo присутствует
[18:52:42] <valexey> выбирай что по нраву :-)
[18:52:57] <TRUE> то есть, t.Print() компилятором преобразуется в Print(t) ?
[18:53:51] <TRUE> * преобразуется в Print( t )
[18:55:54] <valexey> этот вариант - это boo в моем коде. то есть с передачей this
[18:56:00] <valexey> но без втабле
[19:02:41] <Kemet> Да, this передается
[19:02:51] <valexey> boo
[19:03:11] <Kemet> Но в таблице нет
[19:04:50] <Kemet> Тогда подо просто делать ститические методы, и будет понятно, раз р статический, тотесть без таблицы, а значит дескрип ор не нужен, то можно его для базовых типов использовать, ну как вариант норм
[19:06:48] <valexey> Kemet: boo -- this есть, а в таблице нет.
[19:08:24] <Kemet> А он там по ссылке?
[19:09:08] <Kemet> [TRUE 22:47]
» то есть, t.Print() компилятором преобразуется в Print(t) ?
---
Да
[19:11:56] <valexey> Kemet: this -- это указатель.
[19:13:29] <Kemet> Воот поэтому они и сделали связанные с типом процедуры, где self можно по разному передавать
[19:14:24] <valexey> хто?
[19:25:24] <geniepro> Kemet> Всё ж связанных с типом процедур для любых именованных типов в АО не хватает. Сделали же операторы для базовых типов, а псевдометодов нету(((
это что ли ты трейты/классы_типов хочешь? ишь, раскатал губу! оберонщикам по статусу не положены вкусняшки )))
[19:28:53] <Kemet> valexey, Феликсы
[19:29:22] <Kemet> geniepro, зачем мне трейты
[19:29:35] <valexey> Kemet: такие феликсы? http://mirvremeni.ru/assets/images/historyphoto/felix0.jpg
[19:29:43] <geniepro> ну для того что бы любому типу именованному методы дать
[19:31:29] <geniepro> Kemet: кстати, а что такое неименованный тип?
[19:31:34] <TRUE> ему не нужны методы
[19:31:47] <TRUE> в рантайме
[19:33:10] <Kemet> geniepro, для этого классы типов не нужны))) нужным просто псевдометоды, кск я выше операторы приводил для именованных базовых типов. Операторы есть, а методов нет. И это методы не для всех типов, а для кокретных)
[19:33:27] <TRUE> valexey: вот Феликс https://krapiva.su/z-felix.html
[19:34:15] <geniepro> Слушайте, Мойша, это две большие разницы... или четыре маленьких...
[19:34:15] <Kemet> geniepro, неименованный тип в данном контексте - это предопределенный тип навроде INTEGER, SET..
[19:35:44] <geniepro> Kemet: о_О но ведь у этих типов тоже есть имена, так почему же они неименованные? обпять оберонщики вводят народ в заблуждение выдуманной искажённой терминологией???
[19:36:21] <geniepro> так вот, потому и классы типов, что даже таким предопределённым типам могут методы приделать
[19:37:49] <Kemet> geniepro, потому что именованный это тот, которо у ты дал имя. А перегружать операции для встроенных типов низя, иначе заблудишься. Я видимо не совсем корректно выразился
[19:38:15] <TRUE> geniepro: а эти методы будут видеть скрытые поля?
[19:38:47] <geniepro> TRUE: нет конечно, зачем им это?
[19:39:11] <TRUE> ну и нафиг такие методы нужны, если и без них всё работает?
[19:39:25] <geniepro> TRUE: без них плохо работает
[19:40:05] <TRUE> без функциональности этой плохо работает, а без методов - лучше. Они порождают гемор
[19:40:23] <Kemet> Трейты нинужны, они предназначены для подхода херак и в продакшен, а дальше хоть атомная война
[19:40:51] <geniepro> вот например арифметика укладывается в несколько сгруппированных классов типов для чисел
и можно эти классы типов проинстанцировать для своих типов, реализующих какие-то суперчисла
и будет стандартная арифметика для этих новых типов
[19:40:53] <TRUE> раз метод не влияет на состояние объекта, то этот метод объекту не нужен.
[19:41:07] <TRUE> точнее, это метод другого объекта
[19:41:59] <geniepro> TRUE: состояния -- зло, от них все ваши ашыпки в программах
ну ещё и от цыклофф...
[19:42:49] <geniepro> трейты/классы типов -- это упорядоченный, логичный способ организовать перегрузочный полиморфизм
[19:44:08] <TRUE> логичный способ проблеваться?
[19:44:43] <TRUE> В любой программе есть состояние. Иначе, программу нет смысла использовать
[19:46:35] <TRUE> Вопрос в том, как это состояние организовано. Где-то оно не меняется явно средствами языка, но тогда обязанность следить за состоянием берёт на себя язык и рантайм.
[19:49:39] <geniepro> TRUE: ну если ты в своих программах постоянно нарушаешь инкапсуляцию, как призываешь это делать тут сейчас, то от твоих программ только блевать и остаётся
[19:50:27] <TRUE> я не призываю нарушать инкапсуляцию
[19:52:01] <geniepro> TRUE> geniepro: а эти методы будут видеть скрытые поля?
это и есть призыв нарушать инкапсуляцию
[19:53:59] <Kemet> Как собственный метод может нарушить икапсуляцию'
[19:54:37] <TRUE> это не призыв нарушать инкапсуляцию. Просто существование этих методов можно былобы хотя бы этой сомнительной пользой оправдать. Или скажу по-другому: нарушение инкапсуляции - меньшее зло, чем "приделанный метод".
[19:55:03] <TRUE> Kemet: не собственный, а приделанный к готовому классу.
[19:56:33] <Kemet> Трайты зло
[19:58:35] <Kemet> Нужна ортогональная предопределенна система переопределяемых  операций и интерфейсы. Трейты и классы типов однозначоее зло
[20:05:42] <TRUE> нет, трейты - это не метод, который добавляют к классу. Это своего рода "толстый интерфейс". Какая от этой штуки польза - ясно. Но просто добавлять какие-то там методы классам - это гемор, с которым мне приходится иметь дело время от времени. Кто-то сэкономил день-два времени, а остальным потом долго (месяцами, годами, десятилетиями) сталкиваться с сюрпризами, о которых этот уникум почему-то не подумал.
[20:16:18] <Kemet> TRUE, про трейты я знаю, здесь уже обсуждалось, пожэтому я и говорю, что лучше операции и интерфейсы
[20:21:17] <geniepro> Kemet> Как собственный метод может нарушить икапсуляцию'
о каком собственном методе ты говоришь? мы вапще-то трейты/классы типов обсуждали
[20:21:58] <geniepro> Kemet> Нужна ортогональная предопределенна система переопределяемых  операций и интерфейсы.
это называется класс типов в хаскелле или трейт в расте
[20:22:31] <geniepro> ну хотя я не совсем хорошо знаю, какие там стандартные трейты в расте, так что насчёт трейтов не уверен
[20:22:33] <Kemet> geniepro, ну вот в обероне они не работатют и не нужны
[20:22:54] <geniepro> Kemet: ну да, всем известно, что обероны нинужны, поэтому там ничего нинужно
[20:23:49] <geniepro> TRUE> Но просто добавлять какие-то там методы классам
а это называется extension method из С#

[20:24:29] <geniepro> выгляните наконец за пределы своего оберон-мирка, узнаете хотя бы что и как называется в большом мире...
[20:24:53] <Kemet> В Оберонах инкапсуляция основана на модулях, за пределами модуля неэк,портированные судности не доступны.  Смысла в внешних методах нет ни каких
[20:30:07] <valexey> Kemet: дык это почти в любом языке так. точнее -- это не что-то уникальное для оберонов.
[20:30:18] <valexey> в том же хаскиле инкапсуляция на базе модулей
[20:32:46] <valexey> в гоу тоже (на базе пакетов только)
[20:32:51] <valexey> в аде тоже
[20:33:25] <Kemet> Это не важно, важно что все эти расширения за пределами модуля не имеюют доступ к приватным членам класса. Точно такие же хелперы как в шарпе есть и дельфи, да и в обероне сделать с помощью связанных с типом процедур совсем не сложно
[20:33:52] <Kemet> Но в дельфи есть хак
[20:34:23] <Kemet> Который рушит инкапсуляцию
[20:35:40] <geniepro> ну короче это типичный пример блаба
[20:39:14] <Kemet> valexey, пакеты илнеймспайсы можно расширить, включить в них файл, молли в э ом смысле статичны
[20:39:56] <Kemet> Модули в этом плане статичны
[20:40:04] <valexey> не, плюсатые например неймспейсы это вообще другое. на пакеты го не похожи ни разу
[20:41:39] <Kemet> Ладно, всем бай, уезжаю в Китай
[20:42:06] <valexey> o_O
[20:42:08] <valexey> удачи
[20:42:11] <valexey> возвращайся!
[20:42:14] <Kemet> Ага