[09:19:36] <vlad3> /me сделал кодогенерацию для кастов
[09:20:40] <vlad3> пришлось смотреть собственное сообщение на форуме, чтобы понять как правильно это сделать. До сих пор не понимаю как то работает. Ужос какой-то.
[09:21:15] <vlad3> oberon:
[09:21:19] <vlad3> MODULE m;

TYPE
Base = RECORD END;
Derived1 = RECORD(Base) field1: INTEGER END;
Derived2 = RECORD(Derived1) field2: INTEGER END;
VAR
pb: POINTER TO Base;
pd1: POINTER TO Derived1;
pd2: POINTER TO Derived2;
BEGIN
NEW(pd2);
pb := pd2;
pd1 := pd2;
   pb(Derived1).field1 := 0;
   pb(Derived2).field2 := 1;
   pd1(Derived2).field2 := 2
END m.
[09:21:43] <vlad3> результат компиляции:
[09:22:05] <vlad3> var RTL$ = {
cast: function(from, to){
 if (!(from instanceof to))
  throw new Error("typeguard assertion failed");
 return from;
}
};
function m(){
function Base$Type(){}
function Base(){
}
Base.prototype = new Base$Type();
function Derived1$Type(){}
Derived1$Type.prototype = new Base$Type();
function Derived1(){
Base.bind(this)();
this.field1 = 0;
}
Derived1.prototype = new Derived1$Type();
function Derived2$Type(){}
Derived2$Type.prototype = new Derived1$Type();
function Derived2(){
Derived1.bind(this)();
this.field2 = 0;
}
Derived2.prototype = new Derived2$Type();
var pb = null;
var pd1 = null;
var pd2 = null;
pd2 = new Derived2();
pb = pd2;
pd1 = pd2;
RTL$.cast(pb, Derived1$Type).field1 = 0;
RTL$.cast(pb, Derived2$Type).field2 = 1;
RTL$.cast(pd1, Derived2$Type).field2 = 2;
}
[09:23:35] <vlad3> Кстати, почему надо было делать NEW стэйтментом, а не выражением я не понял.
[09:24:18] <vlad3> Чтобы создать объект нужного типа надо сначала завести поинтер именно такого типа. Нах???
[09:25:58] <vlad3> RETURN NEW(Type) уже не напишешь
[09:26:28] <vlad3> Опять какие-то сугубо личные тараканы Вирта.
[12:54:37] <valexey > vlad2: а как ты это себе представляешь?
[12:54:54] <valexey > a := NEW(MyRecord);
[12:54:55] <valexey > ?
[12:55:04] <valexey > Вместо того, чтобы просто NEW(a)
[19:22:12] <vlad2> Да.
[19:22:24] <vlad2> Ты забыл объявление для a
[19:22:46] <vlad2> Вместе с объявлением будет "не просто"
[19:26:24] <vlad2> Кстати да, не понимаю за что выпили статью про наркотики конкретно на лурке.
[19:26:52] <vlad2> Там очевидная пропаганда "против" была.
[19:27:07] <vlad2> Злобнее только какой-yb.elm "рэквием по мечте". Его тоже запретить?
[19:45:54] <valexey > Конечно же ДА! Запретить!
[19:46:01] <valexey > Это же фугадость!
[19:46:15] <valexey > Оно оскорбляет их взор! Это срамно.
[19:47:32] <valexey > если вместе с объявлением - то это нужно сломать VAR-секцию :-)
[19:47:47] <valexey > то есть чтобы избавиться от statement'a нужно перефигачить язык
[19:47:51] <valexey > чтобы было стройно
[19:48:00] <valexey > Поэтому Вирт и решил не выдергивать этот гвоздик
[20:00:55] <vlad2> Не, не понимаю - чего там перефигачивать?
[20:01:04] <vlad2> NEW - просто функция.
[20:01:13] <vlad2> Просто принимает тип в качестве аргумента.
[20:01:26] <vlad2> Не надо ничего перефигачивать.
[20:03:09] <vlad2> Хотя тут, возможно, играет роль отсутсвия конструкторов :)
[20:03:19] <vlad2> Никто не делает просто NEW в обероне.
[20:03:33] <vlad2> Редультат же надо ж проинитить.
[20:03:57] <vlad2> А чтоб проинитить нужен поинтер на полноценный тип, а не на абстракцию.
[20:04:07] <vlad2> Так что поинтер надо так и так заводить.
[20:04:10] <vlad2> Убогий язык :)
[20:04:46] <vlad2> Прямо сплошная дедукция с этими 16 страницами :)
[20:04:46] <valexey > Функция которая принимает тип - уже не просто функция :-) Она конкретно разрывает шаблон своей явной шаблонностью Ж-)
[20:05:09] <vlad2> Да конечно. Она и сейчас принимает поинтер на _люой_ тип ;)
[20:05:34] <valexey > Ну да. И чел мыслит что это просто такая мегаполиморфная функция. Типо в рантайме то все можно определить :-)
[20:05:56] <valexey > (и оно, примерно так в ББ и работает, прям в рантайме лазает за метаинфой по моему)
[20:06:17] <vlad2> А какая может быть инфа у нулевого поинтера?
[20:07:02] <valexey > В смысле? Кто мешает тэг о типе запихать в него же (точнее перед ним)
[20:07:13] <valexey > хотя, я гоню. там немного не так вроде бы
[20:07:14] <vlad2> Эффективность?
[20:07:24] <valexey > Да клали они на эффективность сто раз :-)
[20:07:39] <valexey > Один консервативный сборщик чего стоит
[20:07:47] <vlad2> Мне вот интересно будет потом погонять JS с JIT против ББ :)
[20:08:01] <valexey > Злой ты :-)
[20:08:06] <vlad2> Исходик один и тот же.
[20:08:57] <valexey > "А чтоб проинитить нужен поинтер на полноценный тип, а не на абстракцию." - вот этого не понял. ты про какую абстракцию говоришь?
[20:09:11] <vlad2> Про базовый тип.
[20:09:16] <valexey > Да, будет смешно если интерпретатор обгонит нативный ББшный кот.
[20:09:21] <vlad2> Например в моей практике обычно бывает что-то типа:
[20:09:41] <vlad2> Base* facrory(){return new Derived();}
[20:10:07] <vlad2> В таком случае обероновский NEW крайне неудобен - нужно завести отдельный понитер на Dervied
[20:10:24] <valexey > Ну, э… А тут будет RETURN Init(NEW(Derived));
[20:10:35] <vlad2> Но дпже если бы в обероне был правильный new - олку все равно 00, потому что нет контрукторов.
[20:10:36] <valexey > не нужно
[20:11:22] <vlad2> Не люблю функции возвращающие аргумент :)
[20:11:25] <vlad2> И this.
[20:11:43] <vlad2> Они не минималистичны :)
[20:11:44] <valexey > а он может вернуть не свой аргумент :-D
[20:12:02] <valexey > На этом основаны некоторые забавные техники в ObjC :-)
[20:12:22] <vlad2> Вот именно поэтому не люблю - подразумевается, но никто не запрещает сделать по-другому.
[20:12:37] <valexey > Ога
[20:12:41] <vlad2> Да, помню че-то такое. Как раз вокруг init там.
[20:13:05] <valexey > В общем, как ни крути, а NEW-функция Оберону как собака пятая нога. Сильно лучше не сделает, а злоупотребления могут начаццо
[20:13:20] <vlad2> Угу.
[20:13:29] <valexey > Говорю ж - чтобы стройно, нужно язык перефигачивать :-D
[20:15:49] <valexey > Ах, как меня вот этот топик радует: http://forum.oberoncore.ru/viewtopic.php?f=27&t=3703
[20:16:01] <valexey > И, интересно, как это собираются решать на православном Оберон-07? :-)
[20:16:42] <vlad2> Да, топик древний и дурной.
[20:17:03] <vlad2> Разговор слепого с глухим ^)
[20:18:52] <valexey > Ну как древний… 2011 год :-)
[20:18:55] <valexey > Хотя конечно сишные, и особенно плюсовые stl'ные хедеры/исходники весьма бесчеловечны
[20:18:58] <valexey > У Ады то же самое на порядок читабельней
[20:19:09] <valexey > Хотя-я.. Оно не совсем то же самое. Оно там таки уже.
[20:19:44] <vlad2> Ну да, подержка одновременно двух языков в одном исходнике...
[20:20:00] <valexey > И нескольких компиляторов :-)
[20:20:06] <vlad2> И кучи компиляторов, по-разному трактующих эти языки.
[20:20:09] <valexey > С разными опциями O_o
[20:20:35] <vlad2> Против единственной реализации единственнго языка. Сравнили, да.
[20:20:54] <valexey > Но оберон без условной компиляции подразумевает охрененную обвязку для этой самой условной компиляции. То есть чисто знанием языка не ограничиться
[20:23:33] <vlad2> Написать им что-ли туда? :)
[20:25:48] <valexey > полнолуние же. там же info21 сразу!
[20:26:41] <valexey > кстати, это же не только для разных комиляторов разных языков с разными опциями
[20:26:49] <valexey > это же используется и для разных OS
[20:26:56] <valexey > под РАЗНЫМИ платформами
[20:27:04] <valexey > причем совсем-совсем разными
[20:28:29] <valexey > впрочем, поскольку у народа на том форуме в голове только лозунги, без смысла за ними, ты получишь ответ: это все потому, что С/С++  не переносимый/не кроссплатформенный, в отличае от Оберона!
[20:28:34] <valexey > И тем более КП!
[20:28:52] <vlad2> Блин, нарисовать линию с квадратными концами на винде непросто...
[20:29:07] <valexey > что, уже везде вкорячили AA?
[20:29:12] <valexey > то есть сглаживание
[20:29:27] <vlad2> Да нет. Древнее GDI API./
[20:29:30] <vlad2> Тем не менее.
[20:29:36] <vlad2> По умолчанию оно круглое.
[20:29:41] <valexey > Э-э.. Ы-ы..
[20:29:45] <vlad2> А не по умолчанию - замахаться можно.
[20:29:58] <vlad2> Тина на однопиксельных линиях не видно.
[20:30:08] <vlad2> А вот на 5-пиксельных - концы груглые.
[20:30:30] <vlad2> Сейчас поду через прямоугольник дклать. Гы.
[20:32:09] <valexey > ужас
[20:32:23] <valexey > да, а в отсутствии условной компиляции ваяются забавные костыли: http://forum.oberoncore.ru/viewtopic.php?f=1&t=435
[20:33:03] <valexey > Причем, насколько я помню, до того они еще вообще фолдами пытались это сделать. То есть никак друг с другом не связанными.
[20:33:12] <valexey > Типо раскрыл - код есть, свернул - кода нет.
[20:33:47] <valexey > /me так и представил как зашел в исходник посмотреть чо там и как, пораскрывал разного (любопытно же увидеть что там написано), и после этого собрать не получается
[20:36:26] <vlad2> Угу.
[20:39:14] <vlad2> Гы. Надо было сразу через прямоугольник делать. А я вчера чевером долбался. Сразу заработало!
[20:39:29] <vlad2> Без лишних конвертаций координат.
[20:40:20] <valexey > Квадратно-гнездовым способом!
[20:51:08] <valexey > ыыы: http://habrahabr.ru/post/160631/
[20:51:10] <valexey > японцы таки реализуют похоже проект Евангелион или около того :-)
[20:54:10] <vlad2> Пипец :)
[20:57:06] <valexey > гы: http://habrahabr.ru/post/160615/
[20:57:09] <valexey > вот и выбирай - либо диктатура корпораций управляемыми маразматиками либо диктатура государства управляемого маразматиками.
[21:06:18] <vlad2> Тролли тролят троллей. (с)