[00:20:09] <vlad2> касты в обероне тоже очень странно сделаны
[00:20:20] <vlad2> применительно к поинтереам и ссылкам
[01:57:28] <vlad2> (ну и со ссылками это все равно не работает)
[01:57:51] <valexеy> a IS Type
[01:57:57] <valexеy> вот это тестирует
[01:58:07] <vlad2> Значит не дочитал :)
[01:58:13] <valexеy> Assuming, for instance, that T is an extension of T0 and that v is a designator declared of type T0,
then the test v IS T determines whether the actually designated variable is (not only a T0, but also)
a T. The value of NIL IS T is undefined.
[01:58:57] <valexеy> undefined behaviour явно декларируемое Виртом!
[01:59:04] <vlad2> Гы! :)
[01:59:51] <valexеy> ну, это конечно лучше чем ub неявно подразумеваемое. но тем не менее :-)
[01:59:54] <vlad2> Только вот тут про поинтеры ничего нет.
[02:00:07] <vlad2> При том что в примере как раз NIL
[02:00:21] <vlad2> И в моем понимании такой пример не должен компилироваться вообще.
[02:00:33] <valexеy> в каком именно примере?
[02:00:34] <vlad2> Вобщем Вирт жжет, да.
[02:00:40] <vlad2> The value of NIL IS T is undefined.
[02:01:12] <valexеy> дык это не пример. :-) это часть доки
[02:01:16] <valexеy> пример ниже
[02:01:24] <valexеy> t IS CenterNode (BOOLEAN)
[02:02:24] <valexеy> v IS T stands for "v is of type T" and is called a type test. It is applicable, if
1. T is an extension of the declared type T0 of v, and if
2. v is a variable parameter of record type or v is a pointer.
[02:02:25] <vlad2> Кроме того, такой подход заведомо не эффективен (я про это писал на форуме). Он заставляет сначала проверить (IS) потом кастнуть. Будет сделано две одинаковых проверки.
[02:02:39] <vlad2> А. Ну ладно.
[02:02:49] <valexеy> ну, придется компиляторостроителю поднапрячься и впердолить оптимизацию :-)
[02:02:59] <vlad2> Хотя мне вот такая уравниловка для поинтеров и ссылок не нравится.
[02:03:20] <valexеy> мне тоже. но это сишное прошлое сказывается (и настоящее).
[02:03:29] <valexеy> я да, люблю все явно.
[02:04:18] <valexеy> А еще я хочу чтобы обращение к полю структуры и обращение к одной из сущностей импортируемого модуля выглядело по разному.
[02:04:41] <vlad2> Да, и еще ничего не сказано про аннонимные рекорды
[02:05:10] <vlad2> TYPE T1 = POINTER TO RECORD END; T2 = POINTER TO RECORD ENDl
[02:05:25] <vlad2> Как связаны T1 и T2?
[02:05:35] <valexеy> Про это уже говорили.
[02:05:58] <valexеy> Не знаю тут пофиксил Вирт или нет.. Но раньше у него было наследование какое хочешь :-) Хоть по имени, хоть структурное.
[02:06:00] <vlad2> Я помню были какие-то наезды на самый первый пасказль.
[02:06:00] <valexеy> Щща
[02:06:29] <vlad2> Типа анонимные типы уникальны.
[02:07:04] <valexеy> http://forum.oberoncore.ru/viewtopic.php?f=115&t=3045
[02:07:16] <valexеy> то что ты привел - это НЕ анонимные типы :-)
[02:07:17] <vlad2> Соответственно можно объявить процедуру с параметром, с который никогда нельзя вызвать :)
[02:07:46] <valexеy> ну, надо вообще вчитаться в современный репорт
[02:09:31] <vlad2> Не, с простыми INTEGER как раз все понятно - это типа typedef
[02:09:52] <vlad2> А вот с RECORD - нихрена непонятно
[02:10:21] <valexеy> нет там typedef'a этого
[02:10:24] <valexеy> StrucType  =  ArrayType | RecordType | PointerType | ProcedureType.
[02:10:26] <vlad2> (в случае с INTEGER ты вообще ничго не можешь сделать с таким типом, если это не typedef)
[02:10:31] <valexеy> где ты его тут видишь?
[02:10:51] <valexеy> TypeDeclaration  =  identdef "=" StrucType.
StrucType  =  ArrayType | RecordType | PointerType | ProcedureType.
[02:10:53] <valexеy> вот
[02:11:01] <valexеy> http://forum.oberoncore.ru/viewtopic.php?f=115&t=3045#p55068
[02:11:24] <vlad2> А. Т.е. в обероне7 вообще нельзя TYPE A = INTEGER?
[02:11:27] <valexеy> так что не будет вам алиасов для базовых типов.
[02:11:31] <valexеy> ДА!
[02:11:51] <valexеy> говорю же - отринь опыт с сями и другими языками, читай только спеку :-)
[02:11:55] <vlad2> А. Ну все. Значит не typedef, а анонимные уникальные типы.
[02:11:57] <valexеy> интуиция и опыт только мешает.
[02:12:22] <vlad2> Иначе не было бы смысла запрещать простые типы.
[02:13:21] <valexеy> или НЕ уникальные :-)
[02:13:23] <vlad2> А в КП что?
[02:13:27] <valexеy> если типизация структурная
[02:13:29] <vlad2> Тоже уникальные?
[02:13:45] <vlad2> Или структурная типизация?
[02:14:05] <valexеy> http://forum.oberoncore.ru/viewtopic.php?f=115&t=3045#p55273
[02:14:24] <valexеy> там типизация по имени :-)
[02:14:26] <valexеy> вроде как
[02:14:52] <valexеy> структурная - это типа утиная. если два типа ничем не отличаются (имеют одинаковую внутреннюю структуру) то они равны
[02:15:08] <vlad2> И какое имя у POINTER TO RECORD END?
[02:15:26] <valexеy> Но поскольку Вирт тут вообще не определяет операцию сравнения типов, то можно придумать ЛЮБУЮ не противоречивую операцию сравнения
[02:15:28] <valexеy> и радоваться
[02:16:24] <valexеy> щща
[02:16:40] <vlad2> На самом деле я на это наткнулся, когда делал сообщение об ошибке.
[02:17:11] <vlad2> Т.е. как в сообщение описать что "оно" не может быть кастнуто, если "оно" не имеет имени.
[02:17:52] <valexеy> Same types
Two variables a and b with types Ta and Tb are of the same type if
Ta and Tb are both denoted by the same type identifier, or
Ta is declared to equal Tb in a type declaration of the form Ta = Tb, or
a and b appear in the same identifier list in a variable, record field, or formal parameter declaration and are not open arrays.
Equal types
Two types Ta and Tb are equal if
Ta and Tb are the same type, or
Ta and Tb are open array types with equal element types, or
Ta and Tb are procedure types whose formal parameter lists match.
[02:18:01] <valexеy> http://www-vs.informatik.uni-ulm.de:81/projekte/Oberon-2.Report/AppendixA.html
[02:18:38] <valexеy> В КП то же самое. (поскольку это форк Оберона-2)
[02:18:47] <valexеy> Оберон-2 как бэ в основном не виртом пилился.
[02:19:40] <vlad2> Ну понятно. Собственно у меня сейчас так же. VAR p1, p2: POINTER TO RECORD END; p3: POINTER TO RECORD END;
[02:19:53] <vlad2> p1 := p2; // OK
[02:20:03] <vlad2> p1 := p3; // ошибка компиляции
[02:20:28] <vlad2> Хотя сделать структурное сравнение ничего не стоит
[02:20:34] <valexеy> :-)
[02:20:46] <vlad2> Ладно, чуть-чуть стоит, да.
[02:22:35] <vlad2> Хотя легко можно представить ситуации, где ты хочешь иметь именно уникальный тип.
[02:23:07] <vlad2> Хотя в этом случае ты его как раз обзавешь как-нибудь.
[02:23:47] <vlad2> Т.е., имеет смысл структурно сравнивать именно безымянные типы. Именные - нет.
[02:24:59] <vlad2> (т.к. в моей предыдущем примере p1 := p3 должно рабоать)
[02:25:38] <vlad2> TYPE T = POINTER TO RECORD END; p4: T;
[02:25:48] <vlad2> p1 := p4; // а вот это не должно рабоать
[02:26:50] <valexеy> да! дайошь несколько разных реализаций одного и того же оберона, и чтобы каждая equals для типов понимала по своему!
[02:26:56] <valexеy> Причем для разных типов - по разному!
[02:27:07] <vlad2> Или еще интереснее: разрешать кастать от именного к безымянному, но не наоборот.
[02:27:11] <valexеy> И пусть dll hell народу будет казаться раем :-)
[02:27:33] <vlad2> Да-да. 16 страниц, !@#$
[02:29:57] <valexеy> 16 страниц репорта, и 500 страниц уточнений к нему :-)
[02:30:09] <valexеy> со всеми возможными вариантами реализации
[03:23:55] <vlad2> Не, понятно что непопулярность оберонов не из-за хреновой спеки. Парит просто, что с этой спекой осятся как с каким-то достижением инженерной мысли. Хреновая спека на самом деле.
[03:24:11] <vlad2> Да, бывает хуже.
[03:24:22] <vlad2> Но и лучше тоже бывает.
[14:06:01] <valexey > ilov_boris: я смотрю ты православным Psi пользуешься :-)
[14:14:18] <ilov_boris> ога :)
[19:28:42] <vlad2> http://blogs.msdn.com/b/vcblog/archive/2012/11/02/visual-c-c-11-and-the-future-of-c.aspx
[19:29:28] <valexey > ой, у них тоже кнопки квадратными стали..
[19:29:36] <valexey > и вообще ВСЕ КВАДРАТНОЕ!
[19:30:52] <valexey > один фиг они отстают от свободных решений :-)
[19:30:58] <valexey > студия нинужна :-)
[19:35:33] <vlad2> они никогда не отставали :)
[19:35:46] <vlad2> Количество фич - не главное, как говорит Info21 :)
[19:41:08] <valexey > всегда отставали :-) по поддрежке c++11.
[19:41:11] <valexey > да и вообще стандарта
[19:41:27] <valexey > мелкомягкий компилер в плане понимания языка всегда был с закидонами
[19:56:48] <vlad2> /me устанавливает обсуждаемый апдейт :)
[19:59:11] <valexey > :-)
[19:59:19] <valexey > А что у тебя там с компилеростроением?
[20:02:41] <valexey > гы. жесть. напоролся на неопределенность 0/0. прямо в проге
[20:17:26] <vlad2> Сделал касты. Пока без кодогенерации. Серьезно встал вопрос о таскании с собой некой RTL (реализующей касты, копирование массивов/рекордов и т.п. функциональность).
[20:17:50] <vlad2> http://hitech.vesti.ru/news/view/id/767
[20:18:51] <vlad2> Это все фигня. Реально страховки подешевеют, когда авто будет ездить само.
[20:19:16] <valexey > и при этом будет биццо меньше чем с куском мяса в качестве водителя
[20:19:17] <vlad2> 0/0 - это не искобчение?
[20:19:25] <vlad2> Дык!
[20:19:40] <valexey > нуль на нуль - нет. оно в даблах у мну
[20:19:51] <vlad2> А.
[20:20:17] <vlad2> Я бы за 30% скидку какую-то херь в авто не поставил :)
[20:20:44] <valexey > ну, у вас большой брат хоть приплачивает за банальный зонд
[20:20:49] <valexey > а у нас тут как бэ наоборот :-)
[20:21:26] <vlad2> При том, что на самом деле эта херь толком ничего не меряет. Время и динамика торможения - это типа погоды на марсе.
[20:22:08] <vlad2> Работает это только психологически/статистически - ставящие такую херь скорее всего аккуратные водители.
[20:23:32] <valexey > угу
[20:23:41] <valexey > ну и до кучи начинают более аккуратно водить
[20:23:53] <valexey > но, вообще говоря, это ж тоже метод
[20:24:32] <valexey > уау! линейный коэффициент корреляции порядка −0,97%!
[20:24:37] <valexey > тьху, без процентов
[20:24:42] <valexey > -0.97
[20:24:56] <vlad2> корелляции чего к чему?
[20:27:06] <valexey > да это всякие мои измерения/эксперименты. в плане пульса на бегу