[12:20:40] <Kemet> чем c++ templates лучше Java genelics?
[15:52:01] <_valexey_> Тем что они реальны, а дженерики это фикция времени компиляции, никак на кодогенерацию не влияющая.
[16:20:16] <Kemet> _valexey_: э?
[16:20:42] <Kemet> в чем проявляется их реальность?
[16:21:15] <_valexey_> в том, что генерится новый код. vector<foo_t> -- это новый тип, новый класс с новыми функциями
[16:21:20] <_valexey_> и оно будет отдельно скодогенерировано
[16:21:56] <_valexey_> при вызове функции из класса vector<foo_t> процессор пойдет совсем по другим адресам нежели при вызове той же функции для vector<int>
[16:22:06] <_valexey_> или vector<bar_t>
[16:22:23] <_valexey_> А вот в жабе - во всех трех случаях будет вызвана ровно одна и та же функция
[16:22:46] <_valexey_> компилятор просто за тебя проставит приведения типов, он на этапе компиляции проверит все типы и так далее
[16:22:59] <_valexey_> в Жабе оно работает так или иначе через ООП и базовый класс Object
[16:23:15] <_valexey_> при этом нового кода не будет создано
[16:24:35] <_valexey_> то что в плюсах, оно ближе к дженерикам Ады и к макросам Лиспа
[16:25:36] <Kemet> а в цпп специализация не требуется? ибо я посмотрел примерфы в трех местах  и там нету
[16:28:00] <Kemet> ну вот я определил шаблонную функцию, принимающую int32, и вызвал функцию с таким именем и передал ей, скажем, Int8, double и что произойдет?
[16:36:53] <Kemet> _valexey_: я тут таки решил заняться летом дженериками для Оберона, ибо та внешняя тулзовина, которуя я делал в стиле м3, явно неудачный подход, так как требует обязательной фазы препроцессора(ВНЕШНЕГО!), в результате генерится куча мелких модулей, содержимое которых компилятор никак не может проконтролировать на соотвествие самому шаблону, онт вообще ничего об этом не знает, в результате, кто-то забыл перегенерить файлы в проекте, после изменения шаблона, и пришлось две недели искать в чем проблема, и таких событий море, нужно писать спец скрипт для сборки, в общем гемора прибавилось. и теперь я думаю, сделать это частью компилятора, и использовать не модули, а типы и процедуры. Феликс, в общем не против, но понятно, нужно прийти к консенсусу. Пока я шибко исследовать тему не буду, ибо до лета есть чем заняться, но в дисскуссии можно поучаствовать
[16:38:07] <Kemet> I prefer (C++-like) Templates over (Java-like) Generics but have tried
and failed implementing lightweight templates in the Oberon language.
How would you provide support for value types (like fundamental types
char, integer, longint but also records and arrays) with Generics?

[16:39:07] <Kemet> We can discuss all that in more length iteratively if you like. In
general I am very much interested.
[16:39:16] <Kemet> это от Феликса
[16:40:49] <Kemet> однако, понятие generic, не упирается в яву, в том же фрипаскале, тоже generic
[16:41:12] <Kemet> но оно генерит новый код
[16:41:30] <Kemet> это не джава-вэй
[16:41:42] <Kemet> и в дельфе
[16:46:01] <Kemet> и в модуле-3, да
[16:57:30] <_valexey_> угу
[16:57:35] <_valexey_> одни и те же термины - разные сущности
[16:58:06] <_valexey_> проблема с шаблонами да и дженериками такая, что чтобы их сделать действительно удобными хотя бы на уровне плюсов, нужно довольно развесистую спеку написать ю
[16:58:20] <_valexey_> в случае оберона таковая спека может превысить размеры спеки языка
[16:58:31] <_valexey_> хотя.. наверно можно сделать
[16:59:06] <_valexey_> * достаточно удобная - это значит, чтобы либа уровня stl там не превратилась в монстра как это случилось в Аде (в результате чего Степанов таки сделал stl для плюсов а не Ады)
[16:59:58] <_valexey_> ваще, в какой-то книжке Степанова вроде описывается нужное ему подмножество плюсов в виде маленького компактного языка
[17:00:33] <_valexey_> алсо нужно смотреть не на плюсы, а на D, Rust, Swift - там думаю все правильней сделали сейчас ю
[17:07:13] <Kemet> _valexey_: ну речь идет о поддержке дженериков, а не о реализпции либы, не думаю, что типы-дженерики это войдут в спеку АО, они-то на сам язык никак не разродятся
[17:07:39] <_valexey_> Дженерики и шаблоны нужны прежде всего для клепания либ.
[17:07:59] <_valexey_> Чтобы делать либу без ковыряния компилятора :-)
[17:11:56] <_valexey_> в Go пошли по тупому пути - просто встроили в комментарии директивы для вызова внешних котогенераторов
[17:12:02] <_valexey_> А котогенератор нужно руками писать
[17:12:24] <_valexey_> А чтобы руками писать было веселее, в Го в стандартной либе есть все средства для синтаксического и семантического анализа
[17:12:27] <_valexey_> AST там и проч
[17:12:39] <_valexey_> но это все конечно тяжелая артиллерия
[17:12:47] <_valexey_> стандартный котогенераторов там нет
[17:14:55] <_valexey_> this is a C way
[17:15:30] <_valexey_> in C worls external generators are widely used. Sometime this generators are written in Perl.
[17:20:58] <_valexey_> Oberon in biology: http://science.sciencemag.org/content/sci/351/6280/aad6253.full.pdf
[17:32:02] <vlad2> Живет только в лабе? :)
[17:33:56] <vlad2> IRL упорно преврашается в переусложненного хомо сапиенса.
[17:35:32] <_valexey_> :-D