Re[11]: Сложности выбора или часть не может быть лучше целого
От: rudzuk  
Дата: 20.09.23 16:19
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> И заодно, что такое шаблоны в Free Pascal.


Можешь посмотреть, как выглядит шаблонный код на Free Pascal
Автор: rudzuk
Дата: 14.03.23
.
avalon/3.0.2
Re[12]: Сложности выбора или часть не может быть лучше целого
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 20.09.23 16:23
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>Здравствуйте, Serginio1, Вы писали:


S>> И заодно, что такое шаблоны в Free Pascal.


R>Можешь посмотреть, как выглядит шаблонный код на Free Pascal
Автор: rudzuk
Дата: 14.03.23
.

Смотреть то я могу. Но сразу вопрос. .Net для чисел и тому подобное ввели Generic Math
Ту сразу вопрос. Работает интеллисенс если нет ограничений?
Есть синтаксическая проверка?
и солнце б утром не вставало, когда бы не было меня
Re[13]: Сложности выбора или часть не может быть лучше целого
От: rudzuk  
Дата: 20.09.23 18:08
Оценка: :))
Здравствуйте, Serginio1, Вы писали:

S> Смотреть то я могу. Но сразу вопрос. .Net для чисел и тому подобное ввели Generic Math


Угу. И это костыль

S> Ту сразу вопрос. Работает интеллисенс если нет ограничений?

S> Есть синтаксическая проверка?

Для всех известных типов используемых в дженерике доводчик кода работает и синтаксис проверяется. Для типа которым дженерик специализируется разумеется не работает т.к. конкретный тип известен только в момент специализации.
avalon/3.0.2
Re[14]: Сложности выбора или часть не может быть лучше целого
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.09.23 07:29
Оценка:
Здравствуйте, rudzuk, Вы писали:

S>> Ту сразу вопрос. Работает интеллисенс если нет ограничений?

S>> Есть синтаксическая проверка?

R>Для всех известных типов используемых в дженерике доводчик кода работает и синтаксис проверяется. Для типа которым дженерик специализируется разумеется не работает т.к. конкретный тип известен только в момент специализации.

Ну и чем этот некостыль отличается от C++ шаблона?
и солнце б утром не вставало, когда бы не было меня
Re[15]: Сложности выбора или часть не может быть лучше целого
От: rudzuk  
Дата: 21.09.23 08:05
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Ну и чем этот некостыль отличается от C++ шаблона?


Эм... А должен отличаться?
avalon/3.0.2
Re[16]: Сложности выбора или часть не может быть лучше целого
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.09.23 08:11
Оценка:
Здравствуйте, rudzuk, Вы писали:


S>> Ну и чем этот некостыль отличается от C++ шаблона?


R>Эм... А должен отличаться?

Ну ты же писал про отличие шаблонов от С++ шаблонов, отсутствии кодогенерации.
Вот дженерики компилируются в Il без специализации, а при джите для объектов используется один класс.
При этом есть и интеллисенс и проверка кода на этапе написания кода.
И для AOT они могут так же раскрываться как и обычные шаблоны.
А вот шаблоны то как раз и огромнейший костыль!
и солнце б утром не вставало, когда бы не было меня
Re[17]: Сложности выбора или часть не может быть лучше целого
От: rudzuk  
Дата: 21.09.23 08:42
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Ну ты же писал про отличие шаблонов от С++ шаблонов, отсутствии кодогенерации.


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

S> Вот дженерики компилируются в Il без специализации, а при джите для объектов используется один класс.


Угу. Потому-то дотнетовские дженерики тормозные. Даже тут были жалобы на этот момент.

S> А вот шаблоны то как раз и огромнейший костыль!


Шаблоны это мощь в чистом виде, без компромиссов.
avalon/3.0.2
Re[18]: Сложности выбора или часть не может быть лучше целого
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.09.23 08:49
Оценка:
Здравствуйте, rudzuk, Вы писали:

S>> Ну ты же писал про отличие шаблонов от С++ шаблонов, отсутствии кодогенерации.


R>А, ты об этом. Ну так ее и нет. Никакие исходники не создаются, дженерик предварительно компилируется и хранится в виде компиляторного макроса. В момент специлизации макрос разворачивается.


S>> Вот дженерики компилируются в Il без специализации, а при джите для объектов используется один класс.


R>Угу. Потому-то дотнетовские дженерики тормозные. Даже тут были жалобы на этот момент.

Зато очень быстро компилируются. Тормоза из-за отсутствия инлайнинга, но это только на ограниченном числе типов.
Так или иначе JIT все таки уступает прежде всего из-за необходимой скорости компиляции.
S>> А вот шаблоны то как раз и огромнейший костыль!

R>Шаблоны это мощь в чистом виде, без компромиссов.

Это анахронизм! Еще раз дженерики в AOT так же могут раскрываться. Нет проблем! Но есть интеллисенс и проверка типов.
То есть скорость компиляции и отладка идет на нормальных дженериках, а вот в релиз уже идет как ты говоришь дженерик разворачивается.
Это все та же кодогенерация, но на другом уровне.
и солнце б утром не вставало, когда бы не было меня
Re[19]: Сложности выбора или часть не может быть лучше целого
От: rudzuk  
Дата: 21.09.23 09:05
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> R>Угу. Потому-то дотнетовские дженерики тормозные. Даже тут были жалобы на этот момент.


S> Зато очень быстро компилируются. Тормоза из-за отсутствия инлайнинга, но это только на ограниченном числе типов.

S> Так или иначе JIT все таки уступает прежде всего из-за необходимой скорости компиляции.

Во-во, долгие годы пели джиту осанны, а он, оказалось, тормоз и приписываемым ему волшебством не обладает (а как сладки были речи, что умный джит, по ситуации, сможет использовать новейшие инструкции процессора и всех обгонит и победит. А потом дали возможность делать векторизацию... векторизацию... вручную )

S> R>Шаблоны это мощь в чистом виде, без компромиссов.


S> Это анахронизм! Еще раз дженерики в AOT так же могут раскрываться. Нет проблем! Но есть интеллисенс и проверка типов.


И есть необхождимость в костылях дженерикматх.

S> Это все та же кодогенерация, но на другом уровне.


Хрена ты... Термин выдумал и давай спорить... Это, оказывается, другой уровень ты еще инлайниг генерацией исходников назови, просто на другом, блин, уровне.
avalon/3.0.2
Re[20]: Сложности выбора или часть не может быть лучше целого
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.09.23 09:10
Оценка:
Здравствуйте, rudzuk, Вы писали:


S>> R>Угу. Потому-то дотнетовские дженерики тормозные. Даже тут были жалобы на этот момент.


S>> Зато очень быстро компилируются. Тормоза из-за отсутствия инлайнинга, но это только на ограниченном числе типов.

S>> Так или иначе JIT все таки уступает прежде всего из-за необходимой скорости компиляции.

R>Во-во, долгие годы пели джиту осанны, а он, оказалось, тормоз и приписываемым ему волшебством не обладает (а как сладки были речи, что умный джит, по ситуации, сможет использовать новейшие инструкции процессора и всех обгонит и победит. А потом дали возможность делать векторизацию... векторизацию... вручную )

Для большинства задач он мало уступает нативу. В большинстве задач не нужны числодробилки, а работа с потоками, асинхронность.

S>> R>Шаблоны это мощь в чистом виде, без компромиссов.


S>> Это анахронизм! Еще раз дженерики в AOT так же могут раскрываться. Нет проблем! Но есть интеллисенс и проверка типов.


R>И есть необхождимость в костылях дженерикматх.

Еще раз это шаблоны костыли без типизации и интеллисенса.

S>> Это все та же кодогенерация, но на другом уровне.


R>Хрена ты... Термин выдумал и давай спорить... Это, оказывается, другой уровень ты еще инлайниг генерацией исходников назови, просто на другом, блин, уровне.

Угу твой макрос как раскрывается? Его как раз проще перевести в код с нужным типом и скомпилировать. При этом еще и отладить в нужных местах.
А раскрывать отдельно шаблон в тот машинный код дороже и без особого выхлопа.
Кстати как там отладка ваших шаблонов?
и солнце б утром не вставало, когда бы не было меня
Re[21]: Сложности выбора или часть не может быть лучше целого
От: rudzuk  
Дата: 21.09.23 10:48
Оценка: :)
Здравствуйте, Serginio1, Вы писали:

S> В большинстве задач не нужны числодробилки, а работа с потоками, асинхронность.


Новая мантра, понимаю

S> R>И есть необхождимость в костылях дженерикматх.


S> Еще раз это шаблоны костыли без типизации и интеллисенса.


Да нет, именно дженерикматх и есть самый настоящий костыль. Прям эталон, из палаты мер и весов

S> S>> Это все та же кодогенерация, но на другом уровне.


S> R>Хрена ты... Термин выдумал и давай спорить... Это, оказывается, другой уровень ты еще инлайниг генерацией исходников назови, просто на другом, блин, уровне.


S> Угу твой макрос как раскрывается?


Не через генерацию исходников, уж точно.

S> Его как раз проще перевести в код с нужным типом и скомпилировать. При этом еще и отладить в нужных местах.

S> А раскрывать отдельно шаблон в тот машинный код дороже и без особого выхлопа.

Да ты упоротый! Исходник нужно парсить, валидировать и задействовать всю эту тяжелую машинерию. С прекомпилированным макросом ничего из этого делать не нужно.

S> Кстати как там отладка ваших шаблонов?


Отладка как отладка
avalon/3.0.2
Re[22]: Сложности выбора или часть не может быть лучше целог
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.09.23 11:02
Оценка:
Здравствуйте, rudzuk, Вы писали:

S>> Угу твой макрос как раскрывается?


R>Не через генерацию исходников, уж точно.

Ну то есть реально не знаешь? Как раз проблема шаблонов С++ это перегрузка операторов, что бы привести к единой кодогенерации.
В дженериках через ограничения. Интерфейсы, базовые классы.

S>> Его как раз проще перевести в код с нужным типом и скомпилировать. При этом еще и отладить в нужных местах.

S>> А раскрывать отдельно шаблон в тот машинный код дороже и без особого выхлопа.

R>Да ты упоротый! Исходник нужно парсить, валидировать и задействовать всю эту тяжелую машинерию. С прекомпилированным макросом ничего из этого делать не нужно.

Ну а как ты обойдешься без валидации, какой перегруженный метод вызывать итд?
Я знаю, что для шаблонов есть промежуточное хранение. Но там есть еще и макросы.
Особенно когда внутри шаблона еще шаблоны.

S>> Кстати как там отладка ваших шаблонов?


R>Отладка как отладка

Ну ну. Нахваливай свои костыли.
Еще раз в C# дженериках есть статическая типизация с со всеми плюшками. И так же быть твоим шаблоном при компиляции в AOT с инлайнингом.
И все это как ты говоришь скомпилировано в промежуточный Il
и солнце б утром не вставало, когда бы не было меня
Отредактировано 21.09.2023 11:03 Serginio1 . Предыдущая версия . Еще …
Отредактировано 21.09.2023 11:03 Serginio1 . Предыдущая версия .
Re[23]: Сложности выбора или часть не может быть лучше целог
От: rudzuk  
Дата: 21.09.23 12:56
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> R>Не через генерацию исходников, уж точно.


S> Ну то есть реально не знаешь?


Я тебе доку процитировал, чуть не дословно:

Creating and using generics is a 2-phase process.

The definition of the generic is defined as a new type: this is a code template, a macro which can be replayed by the compiler at a later stage.
A generic type is specialized: this defines a second type, which is a specific implementation of the generic type: the compiler replays the macro which was stored when the generic type was defined.


Видишь где нибудь слова о генерации исходника?

S> Как раз проблема шаблонов С++ это перегрузка операторов, что бы привести к единой кодогенерации.

S> В дженериках через ограничения. Интерфейсы, базовые классы.

Ты мне сейчас парсер сломал. Я нихуя не понял Дженерики во Free Pascal прекрасно работают с перегрузкой операторов

S> Ну а как ты обойдешься без валидации, какой перегруженный метод вызывать итд?

S> Я знаю, что для шаблонов есть промежуточное хранение. Но там есть еще и макросы.
S> Особенно когда внутри шаблона еще шаблоны.

Ой, млин... Дженерики валидируется в момент прекомпиляции. Когда дженерик специализируется компилятору нет необходимости проверять все тело дженерика, он работает с уже готовым макросом, в котором проверяется только корректность параметров. Нет нужны парсить исходник, проверять корректность синтаксиса и вот это вот все.

S> R>Отладка как отладка


S> Ну ну. Нахваливай свои костыли.


Завидуйте молча

S> Еще раз в C# дженериках есть статическая типизация с со всеми плюшками. И так же быть твоим шаблоном при компиляции в AOT с инлайнингом.

S> И все это как ты говоришь скомпилировано в промежуточный Il

Еще раз: шарповые дженерики это кастрированные шаблоны, которые без костылей генерикматх попросту не юзабельны. Не пойму только одного, ну чего спорить с очевидными вещами то? Могу подсластить пилюлю, сказав, что в Delphi дженерики тоже кастрированные, и там еще и генерикматха нет
avalon/3.0.2
Re[24]: Сложности выбора или часть не может быть лучше целог
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 22.09.23 07:12
Оценка: 3 (1)
Здравствуйте, rudzuk, Вы писали:



S>> Ну ну. Нахваливай свои костыли.


R>Завидуйте молча


S>> Еще раз в C# дженериках есть статическая типизация с со всеми плюшками. И так же быть твоим шаблоном при компиляции в AOT с инлайнингом.

S>> И все это как ты говоришь скомпилировано в промежуточный Il

R>Еще раз: шарповые дженерики это кастрированные шаблоны, которые без костылей генерикматх попросту не юзабельны. Не пойму только одного, ну чего спорить с очевидными вещами то? Могу подсластить пилюлю, сказав, что в Delphi дженерики тоже кастрированные, и там еще и генерикматха нет

Ага без типизации и интеллисенса это не кастрированные?
Дженерики как раз и есть следующий этап! Для примера тот же TS набирает популярность именно из-за аннотации типов!
При этом дженерики можно использовать как они задуманы, так и компилировать с инлайнингом.

Хотя и для джита повышают производительность. Все течет, все меняется https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/
и солнце б утром не вставало, когда бы не было меня
Отредактировано 22.09.2023 7:34 Serginio1 . Предыдущая версия .
Re[25]: Сложности выбора или часть не может быть лучше целог
От: rudzuk  
Дата: 22.09.23 17:26
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Ага без типизации и интеллисенса это не кастрированные?


Что значит без типизации, але? Типизация работает в момент специализации, это компайлтайм. Любое несоответствие будет выявлено в момент компиляции. Интеллисенс это вообще не характеристика языка. У паскалевских дженериков можно указать ограничения на специализацию (например TObj<T : IMyIntf1, IMyIntf2>) и т.о. у среды разработки появляется информация для доводчика кода. То, что доводчик не работает это просто недоделка среды разработки, это не проблема языка.

S> Дженерики как раз и есть следующий этап! Для примера тот же TS набирает популярность именно из-за аннотации типов!


Ты все смешал в кучу, как всегда.
avalon/3.0.2
Re[10]: Сложности выбора или часть не может быть лучше целого
От: SkyDance Земля  
Дата: 22.09.23 18:35
Оценка: +1
R> нам дженерики не нужны, это сложно и все такое, вот вам кодгены

Это особенный прибабах конкретных людей конкретно в Гугл. Из-за этих вот (censored) и получается, что gRPC/protobuf все такой же отсталый и убогий, как в 80-х были первые RPC (кажется, Mesa их звали). Переизобретено колесо MS COM (с их IDL, mIDL).

На деле же кодген куда более ушибленная штука, чем рантайм-реализация.
Re[26]: Сложности выбора или часть не может быть лучше целог
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 22.09.23 20:32
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>Здравствуйте, Serginio1, Вы писали:


S>> Ага без типизации и интеллисенса это не кастрированные?


R>Что значит без типизации, але? Типизация работает в момент специализации, это компайлтайм. Любое несоответствие будет выявлено в момент компиляции. Интеллисенс это вообще не характеристика языка. У паскалевских дженериков можно указать ограничения на специализацию (например TObj<T : IMyIntf1, IMyIntf2>) и т.о. у среды разработки появляется информация для доводчика кода. То, что доводчик не работает это просто недоделка среды разработки, это не проблема языка.

Это проблема языка, так как среда разработки не справляется. Среда разработки и язык это одно целое. Именно популярность Delphi и была в этом.
Ну и раз можно указать ограничения, то чем они отличаются от дженериков?
S>> Дженерики как раз и есть следующий этап! Для примера тот же TS набирает популярность именно из-за аннотации типов!

R>Ты все смешал в кучу, как всегда.

Это все про одно и тоже. Дженерики это прежде всего типизация и интеллисенс!
А разворачиваться они могут по разному при Jit и AOT
и солнце б утром не вставало, когда бы не было меня
Отредактировано 22.09.2023 20:36 Serginio1 . Предыдущая версия .
Re[27]: Сложности выбора или часть не может быть лучше целог
От: rudzuk  
Дата: 22.09.23 21:06
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Это проблема языка, так как среда разработки не справляется.


Чо, вечер пятницы в разгаре?

S> Ну и раз можно указать ограничения, то чем они отличаются от дженериков?


Укажешь ограничения, компилятор будет контролировать код дженерика в соответствии с ограничениями, еще до фазы специализации. Если ограничений нет, то контроль будет выполняться в момент специализации.

S> Дженерики это прежде всего типизация и интеллисенс!


Дженерики это прежде всего типобезопасность. А ителисенс, еще раз, не характеристика языка.
avalon/3.0.2
Re[28]: Сложности выбора или часть не может быть лучше целог
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 22.09.23 22:50
Оценка: +1
Здравствуйте, rudzuk, Вы писали:


S>> Это проблема языка, так как среда разработки не справляется.


R>Чо, вечер пятницы в разгаре?


S>> Ну и раз можно указать ограничения, то чем они отличаются от дженериков?


R>Укажешь ограничения, компилятор будет контролировать код дженерика в соответствии с ограничениями, еще до фазы специализации. Если ограничений нет, то контроль будет выполняться в момент специализации.


Ну в итоге то с ограничениями чем от дженериков отличается?
S>> Дженерики это прежде всего типизация и интеллисенс!

R>Дженерики это прежде всего типобезопасность. А ителисенс, еще раз, не характеристика языка.

Это характеристика языка! Так как можно выводить тип итд. С++ ники очень любили блокнот. Хотя он типизированный. Но макросы и шаблоны этому сильно препятствовали.
и солнце б утром не вставало, когда бы не было меня
Re[29]: Сложности выбора или часть не может быть лучше целог
От: rudzuk  
Дата: 23.09.23 07:36
Оценка: :)
Здравствуйте, Serginio1, Вы писали:

S> R>Укажешь ограничения, компилятор будет контролировать код дженерика в соответствии с ограничениями, еще до фазы специализации. Если ограничений нет, то контроль будет выполняться в момент специализации.


S> Ну в итоге то с ограничениями чем от дженериков отличается?


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

S> R>Дженерики это прежде всего типобезопасность. А ителисенс, еще раз, не характеристика языка.


S> Это характеристика языка! Так как можно выводить тип итд.


Нет. Это не харктеристика языка. Вывод типа — характеристика, интелисенс — нет.

S> С++ ники очень любили блокнот. Хотя он типизированный. Но макросы и шаблоны этому сильно препятствовали.


https://www.youtube.com/watch?v=d1vRLfuF-wM
avalon/3.0.2
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.