[00:21:40] <valexеy> vlad2: "Hello world" - это строковый литерал. А строк (как типа) в обероне нет вообще.
[00:29:38] <valexеy> Да, действительно либрусек не открывается из россии. А с моих сервером что в штатах и британиях - открывается.
[04:58:47] <vlad2> Ладно, еще проще вопрос (можно сразу в копилку пиьсма к Вирту):
[04:59:01] <vlad2> CONST s = "X";
[04:59:11] <vlad2> Какой тип имеет s?
[04:59:26] <vlad2> CHAR или ARRAY 1 OF CHAR
[08:56:03] <valexеy> vlad2: это строковый литерал :-) прям таки array of char это быть не может, ибо array of char можно модифицировать :-)
[08:57:16] <valexеy> vlad2: самое смешное, что в Обероне нет литерного (символьного) литерала вообще.
[08:58:09] <valexеy> то есть такое низя: VAR с : CHAR; BEGIN c:='a'; END;
[09:01:16] <valexеy> А, нет. Вру
[09:01:55] <valexеy> Символьных литералов нет, НО строковый литерал из единственной буквы может быть присвоен CHAR'у
[09:02:32] <valexеy> Таким образом строковый литерал уже окончательно и точно не является каким-либо "нормальным" оберонистым типом.
[09:03:11] <valexеy> но, в принципе, это не страшно.
[09:04:45] <valexеy> забавным также является то, что строковый литерал это value type в Обероне, то есть указатель на его начало получить никак нельзя
[09:04:52] <valexеy> Это принципиальное отличие от сей
[10:05:37] <valexеy> эхъ. в С++ нельзя делать шаблонные лямбды... пичаль..
[14:42:21] <valexey > С хабры про лурк:

Достаточно тонкий троллинг, скажу я вам.
Впрочем, у меня после практики в ОВД до сих пор перед глазами мелькают постановления суда, нарекающие экстремистским «файл book.docx, распространяется на дисках TDK синего цвета».
[15:46:09] <vlad2> Гхм. Интересная трактовка.
[15:47:47] <vlad2> У меня на самом деле была такая идея - отдельный тип завести и неявно "кастить" его "по месту" или в CHAR или в ARRAY OF CHAR. Но я потом отбросил эту идею как переусложнение.
[15:48:46] <vlad2> Да, и про константность я тоже думал, но потом упустил из виду. Константность ничего другого не оставляет.
[15:49:08] <vlad2> Хотя вот помню в старые добрые времена никто не запрещал писать в строковые константы ;)
[15:49:46] <vlad2> Это потому уже винда ругаться стала (да и то в случае M$ компилятора, которые начал пихать строки в read only сегмент).
[15:51:42] <vlad2> Че-то мне оберон кажется все менее и менее стройным :) Годы стараний оберонщиков в восхвалении сего детища Вирта идут коту под хвост :)
[16:08:56] <valexey > vlad2: ну в плане стройности все более-менее, но я вижу что он все менее кошерен для микроконтроллеров :-)
[16:09:42] <valexey > представь себе, что у нас есть обычный такой микроконтроллер. как обычно 256 байт ОЗУ и килобайт 48 флеша.
[16:10:16] <valexey > Нам нужно по ком-порту высылать тупо строки.
[16:10:48] <valexey > В сях у меня все строки будут лежать во флеше (ибо компилер их туда положил) и я из спокойно смогут отправлять по ком-порту не загружая в ОЗУ
[16:12:08] <valexey > А в Обероне - хрен.  Адреса у строкового литерала нет. А чтобы получить строку - мне придется создать в ОЗУ ARRAY OF CHAR нужного размера, СКОПИРОВАТЬ туда из флеша всю эту чертову строку, и только ПОТОМ я смогу это дело отправить на ком-порт
[16:12:09] <valexey > А у меня просто памяти столько нет...
[16:12:16] <vlad2> Ну а в случае оберона кто мешает? Ну будет у тебя UB при попытке модифицировать такой массив.
[16:12:37] <valexey > а как?
[16:12:57] <vlad2> А. Т.е. оно не кастнется автоматом при выхове функци с открытым ARRAY OF CHAR?
[16:13:11] <vlad2> Ну можно допилить, чтоб касталось ;
[16:13:12] <vlad2> ;)
[16:13:16] <valexey > по моему, нет. надо посмотреть.
[16:13:33] <valexey > То есть у меня ощущение, что в обероне есть только lvalue :-D
[16:13:49] <vlad2> по моему тоже. Это если брать за основу твой вариант, что строковый литерал это отдельная херня.
[16:14:10] <valexey > да, она отдельная и есть.
[16:14:14] <vlad2> А вот если взять мой вариан, что это ARRAY OF CHAR, то все хорошо :)
[16:14:23] <vlad2> Только с модификацие проблема.
[16:16:01] <vlad2> А если еще позволить неявный каст ARRAY 1 OF CHAR -> CHAR, то совсем все хорошо :)
[16:16:21] <valexey > брр
[16:17:02] <valexey > это же не явное приведение типов! не по обероновски!
[16:20:48] <vlad2> Угу.
[16:21:07] <vlad2> На самом деле все еще проще :)
[16:21:31] <vlad2> Не выпендриваться и сделать для чаров одинарные кавычки.
[16:21:44] <valexey > гм. возможно если передавать строковый литерал в функцию принимающую value - параметр - открытый чаровый массив, то конвертация валидна без копирования
[16:22:24] <valexey > потому как value-параметры то нельзя модифицировать как раз. никак вообще.
[16:23:16] <valexey > но все равно маразмы остаются
[16:23:29] <valexey > CONST s = "Hello World"
[16:24:51] <valexey > BEGIN (* тут я не могу ничего сделать с s, даже длину посчитать *) MyCoolLen(s); (* а вот в функции MyCoolLen уже могу все посчитать*) END
[16:25:05] <valexey > потому как функция MyCoolLen ничего не знает про то что работает с литералом на самом деле.
[16:36:24] <vlad2> Тем про ФВП доставляет... :)
[16:37:35] <valexey > ну, про ФВП там не долго было
[16:37:48] <vlad2> Не-не, точно говорю - выкинуть понятие типа "строковый литерал" и в CONST задавать нормальный ARRAY OF CHAR и CHAR :)
[16:38:16] <vlad2> Это херня из серии "использовать = и для сранения и для присваивания".
[16:38:42] <vlad2> Если очень хочется, то можно, но нах не нужно :)
[16:38:47] <valexey > дык у Вирта так и есть! для констант = - присваивание
[16:39:14] <vlad2> Да, я тоже эту тему не понял.
[16:39:23] <vlad2> Типа это "алиас", поэтому =
[16:39:31] <vlad2> А вот "переменная", поэтому :=
[16:39:35] <valexey > угу. типо торжественно равно
[16:39:38] <valexey > тождественно
[16:39:43] <vlad2> :)
[16:42:03] <vlad2> Но Вирт на такое не пойдет :)
[16:42:12] <vlad2> Значки - это святое :)
[16:42:38] <valexey > это точно
[16:42:45] <valexey > хотя, я бы конечно := заменил на <-
[16:42:48] <vlad2> В смысле если кавычки были сто лет для строк и чаров, то они так и останутся :)
[16:44:18] <valexey > хотя, вирт <- не добрит, ибо вылезет дополнительная сложность для лексера небось
[16:44:38] <valexey > a <- b; // это что? присваивают, или сравнивают а с минус б?
[16:48:30] <vlad2> Угу.
[16:52:18] <vlad2> Гы! Смотри, вот это компилируется в КП:
[16:52:25] <vlad2> MODULE test;

CONST s = "a";

PROCEDURE test_s(s: ARRAY OF CHAR);
END test_s;

PROCEDURE test_c(c: CHAR);
END test_c;

BEGIN
test_s(s);
test_c(s);
END test.
[16:52:51] <valexey > ну да. оно и должно компилироваться
[16:52:57] <vlad2> Т.е. в массив оно превращается неявно.
[16:53:06] <vlad2> (если это строковый литерал)
[16:53:14] <valexey > дык value же, не var
[16:53:29] <vlad2> А тебе зачем var?
[16:53:38] <vlad2> Xnj, копирования не было?
[16:53:59] <vlad2> Так Вирт вроде постулировал, что оно никогда не копируется в случае массивов, но менять нельзя.
[16:54:22] <valexey > гм. а где? разве нельзя массив как var передать?
[16:54:58] <vlad2> Вроде в самой посленей редакции это было (котору ты мне кидал). Там где еще BYTE есть.
[16:55:08] <valexey > ну, там то да.
[16:55:15] <valexey > и там что-то опять с CONST он сделал
[16:55:34] <vlad2> Он уже вроде убрал CONST :)
[16:55:46] <valexey > только я не понял как и откуда
[16:55:48] <vlad2> Блин, реально запутаться легко.
[16:57:04] <valexey > foo(s) - явно понятно еще на этапе компиляциии воткнет туда непосредственный вызов с нужным чаром если foo хочет чар
[16:57:20] <vlad2> Однако с точки зрения моей редакции O-7 компилироваться оно не должно, так как литерал может быть только присвоен массиву , а не неявно преобразован при вызове.
[16:57:34] <valexey > или воткнет туды указатель на дескриптор для массива если оно хочет array of char
[16:58:00] <valexey > эмм...
[16:58:16] <valexey > а там вообще где-нибудь есть про связь присваивания и вызовов?
[16:58:23] <valexey > и про соответствие актуальный и формальных параметров?
[16:58:52] <vlad2> Не видел.
[16:59:11] <vlad2> Там написано, что типы должны строго соответсвовать.
[16:59:42] <vlad2> Кстати, я тут вче развлекался с жесточайшими шаблонами. До головной боли :)
[17:00:22] <vlad2> Так и не понял, почему оно не хотело работать в том виде, в котором я его пытался сначала заставить.
[17:00:39] <vlad2> Теперь вот надо всю эту херню на ucc заставить компилиться (пока не компилится)
[17:00:51] <vlad2> gc
[17:00:52] <vlad2> gcc
[17:02:41] <valexey > гы
[17:02:47] <valexey > так, а я нашел. все там есть
[17:02:52] <valexey > и оно правильно компилится
[17:03:07] <valexey > If the parameter is a
value parameter, the corresponding actual parameter must be an expression. This expression is
evaluated prior to the procedure activation, and  the resulting value is assigned to the formal
parameter which now constitutes a local variable
[17:03:23] <valexey > ключевое слово, как понимаешь, "assigned"
[17:03:41] <valexey > причем это только для value-параметров, для var'ов - нихрена не выйдет.
[17:05:19] <vlad2> А. Ну ок. Хоть странно  конечно видеть assigment там, где на самом деле контруктор ;)
[17:05:35] <valexey > а нету в Обероне понятия конструкторов :-)
[17:06:44] <valexey > vlad2: а ты теперь прикинь сколько нужно курить стандарт С++ чтобы реализовать компилятор :-D
[17:07:14] <vlad2> Хе-хе :)
[17:08:23] <valexey > У меня ощущение, что С++ умрет тогда, когда умрут те, кто сейчас пишет его компиляторы - ибо только они достаточно вкурили стандарт чтобы писать компилер, ибо они выросли вместе с С++. А никто из новых специалистов не вкурит это дело сразу.
[17:15:51] <valexey > vlad2: кстати, а можешь написать на C++ который не C++11 аналог вот этого моего кода? http://oberspace.dyndns.org/index.php/topic,366.msg10093.html#msg10093
[17:16:01] <valexey > ибо я, похоже, ниасилю ;-)
[17:20:05] <vlad2> Че там писать-то? :)
[17:20:18] <vlad2> Просто в массив константы загнать.
[17:20:25] <vlad2> Или boost заюзать.
[17:20:59] <valexey > а свой компаратор как кошерней сделать?
[17:22:26] <vlad2> std::less<int>()
[17:23:18] <valexey > не-е. так не прокатит ;-)
[17:23:22] <vlad2> Хотя для твоего случая будет std::greater<int>
[17:23:30] <valexey > смысл именно в том, что у нас произвольная функция сравнения
[17:23:34] <vlad2> Еще как прокатит. Что не так? :)
[17:23:37] <valexey > например которая всегда возвращает true
[17:23:52] <vlad2> always(true)
[17:24:00] <vlad2> (у нас такая есть ;)
[17:24:11] <valexey > или еще как-то ;-) смысл был в этом. обычная < используется просто потому что так короче в примере писать
[17:24:26] <vlad2> boost::bind еще есть
[17:24:36] <vlad2> Для тривиальных.
[17:24:37] <valexey > во-от! бинды пошли!
[17:24:42] <valexey > они вроде и в стандарте есть какие-то...
[17:24:52] <vlad2> Для нетривиальных - отдельная фугкция всегда кошернее.
[17:24:58] <valexey > vlad2: вау! ilovb решил c++ покурить!
[17:25:18] <vlad2> Да, злобно ты его запарил :)
[17:25:18] <valexey > ну, а разве отдельную функцию туда можно подсунуть?  оно вроде хочет исключительно класс
[17:25:39] <valexey > гм. сменить профессию что-ли.. с программиста на впиарщика.
[17:25:48] <valexey > впиаривателя :-)
[17:29:15] <valexey > как это нонче модно называется? евангелист что-ли. у мелкософта есть такие, которые впиаривают технлогические решения их. буду евангелистом-сипипистом!
[17:30:26] <vlad2> оберонщиком лучше, им нехватает ;)
[17:32:43] <valexey > vlad2: ога-ога, запилить свой компилер для оберона, и пойти собеседоваться в jetbrains :-)
[17:33:16] <valexey > попутно агитируя их за Оберон и совращая с явы да котлина
[17:40:14] <valexey > вау! я кажется понял! народ любящий вычурные языки (типа с++, haskell) весьма часто любят и аниме смотреть!
[17:40:31] <valexey > то есть корреляция прослеживается!
[18:36:40] <valexey > "Помнится когда-то, шутки про то, что Firefox со своими дополнениями и скоростью запуска скоро вырастет в ОС, были всего лишь шутками."
[18:44:29] <valexey > vlad2: кстати, теперь не модно писать iterator = my_vector.begin(); теперь модно писать iterator = begin(my_vector); ;-)
[19:04:21] <vlad2> Всех японцев в программистов? :)
[19:04:32] <vlad2> Не, я уже перерос эту моду.
[19:04:46] <vlad2> То же амое с p.get() против get(p)
[19:04:52] <vlad2> Нах.
[19:04:59] <valexey > ну, эта мода понятна. во-первых экономится один символ :-)
[19:05:08] <vlad2> Скобочек больше и работы компилтяору тоже больше.
[19:05:16] <valexey > во-вторых благодаря этому теперь можно так: int foo[] = {1,2,3}; sort(begin(foo), end(foo));
и единообразие со всеми контейнерами достигается. няшно же!
[19:05:47] <vlad2> В шаблонном коде - да, куда деваться.
[19:05:53] <vlad2> В нешаблнном - нет.
[19:06:39] <vlad2> Т.е. одной из причин отказаться в моем случае - было как раз получить ошибки компиляции, если p поменялся с какого-нибудь смартпоинтера на просто указатель.
[19:09:12] <vlad2> По повду твоего примера - единообразие с контэйнерами достинается вот так: my::sort(container) и my::sort(array_seq(a))
[19:09:34] <vlad2> И нечего плодить сущности :)
[19:11:49] <valexey > не-е! единообразие на уровне итераторов нуно!
[19:12:33] <valexey > а разве тип нельзя проверить? есть же static assert для проверки типов всяких
[19:22:21] <valexey > "Клинический дибилизм. Питонофилы на "педсовете" рекомендуют превентивное употребление sort для демонстрации мощи ЯП. Не хотелось бы быть неправильно понятым, но, среди множества известных мне программистов на питоне, не могу назвать ни одного до конца вменяемого человека. Питон - это заразная болезнь, заболевают ей легко, а излечится очень трудно. Заразнее С++ - тем, чтоб заболеть, хотя бы постараться нужно.."
[19:22:26] <valexey > http://forum.oberoncore.ru/viewtopic.php?f=88&t=3087&p=75870&hilit=python#p75870
[19:35:22] <vlad2> Да-да, видел :)
[20:38:03] <valexey > vlad2: ну мы то постарались!
[20:38:10] <valexey > правда ты еще и питоном приболел вон ;-)
[20:53:38] <vlad2> Питон навсегда :)
[20:56:17] <valexey > ужас!
[20:56:59] <valexey > если плюсы вызывают привыкание после года-двух регулярного употребления, то питон уже через неделю!
[20:57:06] <valexey > жосткая физическая зависимость!