[17:45:25] <alexey.veselovsky> Кстати, оберонОС действительно на юникс похожа тем, что там реально цельная концепция всего.
[17:45:35] <alexey.veselovsky> В отличае от того же ББ или там венды.
[18:31:34] <vlad3> valexey: компилятор теперь понимает присваивание строк массивам
[18:31:48] <alexey.veselovsky> о!
[18:31:51] <vlad3> Но со строками там все равно...
[18:32:10] <alexey.veselovsky> а что там?
[18:36:34] <alexey.veselovsky> пропосолы для С++14 видал? http://isocpp.org/blog/2013/03/a-look-at-c14-papers-par-i-meeting-c
[18:36:57] <alexey.veselovsky> ну и кратко и не профессионально: http://www.opennet.ru/opennews/art.shtml?num=36534
[18:37:01] <alexey.veselovsky> :-)
[20:00:13] <vlad2> Про строки на форум кинул.
[20:00:57] <vlad2> Какой C++14? Я вот тут дропнул powerPC и со страхом жду возмущенных кастомеров :)
[20:01:20] <alexey.veselovsky> o_O
[20:01:48] <alexey.veselovsky> как какой? самый настоящий! встречаем через год-два!
[20:01:57] <alexey.veselovsky> там будет boost::optional из коропки!
[20:02:43] <Kemet> test
[20:02:44] <Жаба> Kemet, passed
[20:02:58] <alexey.veselovsky> кстати, бусту не хватает одной категории либ - системно-прикладных. ну там http, png, html чтобы собирать/разбирать.
[20:03:44] <alexey.veselovsky> ну, то есть чтобы сел, и поехал сразу писать свою узкую задачу без сочинения на базе примитивов буста своего мегавелосипеда для http
[20:04:15] <alexey.veselovsky> прям хоть бери, да портируй пакеты из стандартной Go'шной либы.
[20:04:19] <Kemet> alexey.veselovsky: не знакшь что за хрень этот египт кернел архитекруре http://sourceforge.net/projects/sphinux/?source=frontpage&position=7
[20:05:46] <vlad2> С таким подходом можно превратить буст в очередной .NET Framework. Ну или там Java EE'
[20:06:28] <alexey.veselovsky> http://sphinuxsys.blogspot.ru/
[20:06:29] <vlad2> Я бы таки предпочел сознательных разработчиков этих системно-прикладных либ, юзающих буст, а не свои строки.
[20:07:45] <alexey.veselovsky> свои строки в топку - есть std::string :-)
[20:08:08] <vlad2> Дык, я про это и говорю - сознательные разработчики без велосипедного комплекса.
[20:08:28] <vlad2> Да, а еще надо систему сборки застандартизировать.
[20:08:30] <alexey.veselovsky> просто сейчас как раз проблема в том, что есть конечно буст, и есть куча говнолиб для http, png, html и так далее. в каждой свои строки, вектора, и вообще прогрессирующий ООП головного моска
[20:08:49] <vlad2> Я только что два дня потратил именно на то, чтобы собрать гребанную мозиллу на маке.
[20:08:57] <alexey.veselovsky> гы-ы
[20:09:23] <alexey.veselovsky> это фигня. помню народ подвиг совершал лет 8 назад когда тогда еще феникс этот собирал под BeOS :-)
[20:09:28] <alexey.veselovsky> ну и портировал его заодно
[20:09:54] <alexey.veselovsky> как понимаешь, там иксов нет. там вообще все свое, в BeOS то
[20:10:02] <alexey.veselovsky> так что порт во все щели
[20:10:17] <alexey.veselovsky> + система сборки, да-а... Ну и gcc там был 2.95
[20:11:19] <Kemet> мазохисты, да
[20:11:54] <alexey.veselovsky> дык, без браузера то жить хреново тогда было. точнее - без браузера умеющего html 4.0
[20:19:00] <vlad2> boost::optional, кстати, неплохо бы в компилятор вшить - там есть простор для низкоуровневых оптмизаций, если компилятор будет в курсе, что от него хотят.
[20:19:52] <vlad2> Особенно если представить архитектуру с каким-нибудь лишним битиком и т.п.
[20:20:44] <alexey.veselovsky> Эльбрус, да? Тэгированная память, все дела... Ж-В
[20:20:53] <vlad2> (про синтаксически вшить в язык можно только мечтать)
[20:21:00] <vlad2> Типа того.
[20:45:29] <alexey.veselovsky> vlad2: я там набретил пачкой сообщений :-)
[20:45:34] <alexey.veselovsky> про строки и типы и параметры
[20:52:34] <alexey.veselovsky> чорт, большенство аргументов функций в Обероне работают только потому, что они являются выражением с единственным операндом!
[20:52:46] <alexey.veselovsky> если запретить выражения с единственным операндом, то будет большой облом
[20:52:57] <alexey.veselovsky> (такое ощущение, что это какая-то багофича языка)
[20:55:18] <Kemet> в чем проблема
[20:56:14] <alexey.veselovsky> В общем оущении дисгармонии :-)
[20:57:17] <Kemet> ну не знаю, вот в таком яву я чувчтвую себя неуверенно )
set window auto show off
I want window and the window title is "checkbox"
The window back color is {100,40,200}.
The window width is 260.
The window height is 200.
[20:58:04] <alexey.veselovsky> брр. кобол-стайл!
[20:59:30] <Kemet> супернова!
[21:05:49] <alexey.veselovsky> vlad2: я там коварный примерчег подогнал. в теме
[21:06:14] <alexey.veselovsky> kemet: что-то в рассылке M3 обострилась дискуссия про llvm :-)
[21:07:21] <alexey.veselovsky> боюсь этот пример прокатит для третьего пункта :-)
[21:17:04] <Kemet> пока реальных телодвижений по ллвм нема, но желание понятно
[21:35:43] <alexey.veselovsky> vlad2: так что думаешь там про мой примерчег?
[21:36:06] <Kemet> я?
\
[21:36:17] <Kemet> аа
[21:36:43] <alexey.veselovsky> kemet: ну, ты тоже, фигли :-)
[21:36:58] <Kemet> вообще там скопируется 7 символов + завершающий 0, без всяких сообщений
[21:37:20] <alexey.veselovsky> согласно каким пунктам сообщения о языке?
[21:37:37] <Kemet> эээ, ну гдето там про массивы
[21:37:49] <vlad2> Мне казалось я там видел про длину.
[21:37:51] <vlad2> Гхм.
[21:37:56] <alexey.veselovsky> в обероне null terminated ПРОИЗВОЛЬНЫЕ МАССИВЫ?!
[21:38:05] <alexey.veselovsky> ну, там массив record'ов например :-D
[21:38:19] <vlad2> про обязательный завершааяющий ноль там нет ничего
[21:38:21] <Kemet> массив симвролов
[21:38:28] <vlad2> Только про то, что лишние элементы нулями забиваются
[21:38:33] <alexey.veselovsky> там нет ничего про обязательный завершающий нуль
[21:38:38] <alexey.veselovsky> угу
[21:38:59] <alexey.veselovsky> то есть длина строки - это или длина до первого нуля, или длина самого массива. в зависимости от того, что меньше
[21:39:33] <Kemet> где-то читал про это, про массивы символов- это ж особый массив так сказать
[21:39:45] <alexey.veselovsky> "Strings can be assigned to any array of characters, provided the number of characters in the
string is not greater than that of the array. If it is less, a null character (0X) is appended."
[21:39:49] <alexey.veselovsky> все. больше ничего нет
[21:40:08] <alexey.veselovsky> более того - там не рассмотрен случай когда массив МЕНЬШЕ длины строкового литерала
[21:40:15] <alexey.veselovsky> то есть видимо там должна быть ошибка компиляции
[21:40:31] <alexey.veselovsky> но это можно обойти, и я показал на форуме как. то есть компилятор это отловить не сможет
[21:41:51] <alexey.veselovsky> следовательно нужно запретить присваивать открытым массивам символов? но в репорте ничего про это не сказано же. то есть появляется в нашем списке впросов третий пункт :-)
[21:42:31] <Kemet> в рантайме известна длина массива
[21:43:01] <alexey.veselovsky> Известна. И что? Поведение то в репорте не прописано в случае если длина не достаточна
[21:43:06] <alexey.veselovsky> HALT будет?
[21:43:55] <Kemet> будет о, что я написал
[21:44:06] <alexey.veselovsky> почему именно то?
[21:44:19] <alexey.veselovsky> почему не halt? зачем там завершающий нуль?
[21:44:19] <Kemet> а COPY там есть?
[21:44:30] <alexey.veselovsky> а что такое COPY?
[21:44:55] <Kemet> копирование строк
[21:45:00] <alexey.veselovsky> да, есть
[21:45:18] <Kemet> кажется присватвание строк на нем основано
[21:45:32] <alexey.veselovsky> COPY(x, v) x: character array, string v := x
v: character array
[21:46:26] <alexey.veselovsky> я, кстати, не шибко понимаю зачем там COPY, ведь присваивание вроде как делает то же самое
[21:48:06] <Kemet> ну оно и делает через копи, а у копи вроде как семантика такая, дописывать ноль и обрезать лишнее
[21:48:34] <alexey.veselovsky> там про семантику COPY не сказано вообще ничего, кроме того, что оно v:=x
[22:04:49] <Kemet> эээ, ну оно вроде для указателей на символ копирует не указатели, а содержимое
[22:05:28] <alexey.veselovsky> а присваивание массивов что делает ? ну, скажем массивов integer'ов
[22:06:36] <alexey.veselovsky> а, все, понял. с массивами все печально - там вообще нет присваиваний!
[22:06:40] <Kemet> оно только для символов
[22:06:42] <alexey.veselovsky> "If a value parameter is structured (of array or record type), no assignment to it or to its elements are
permitted."
[22:06:59] <alexey.veselovsky> хотя нет, это только для параметров
[22:07:46] <alexey.veselovsky> так что, видимо, в случае рекордов и массивов := делает также тупо memcpy
[22:08:23] <alexey.veselovsky> соответственно я опять не вижу смысла в COPY :-) Ну, разве что это оптимизированная версия присваивания для строк - если встретит нуль, то дальше копировать не будет.
[22:08:33] <Kemet> ну наверное тоже обрезается лишнее
[22:08:52] <alexey.veselovsky> точнее так - копировать не будет, а просто забьет нулями хвост
[22:09:14] <alexey.veselovsky> НО БЛИН, ПОЧЕМУ ОБ ЭТОМ ПРИХОДИТСЯ ДОГАДЫВАТЬСЯ?!
[22:09:20] <alexey.veselovsky> почему в спеке это не прописать?!
[22:09:24] <Kemet> хвост не забивается, только один ноль
[22:09:39] <alexey.veselovsky> c чего бы?
[22:10:05] <alexey.veselovsky> мы ведь не про конкретную реализацию говорим и не про Active Oberon, мы говорим про Oberon-07/11, то, как он описан в репорте.
[22:10:28] <Kemet> а зачем лишние телодвижения для строк - они заканчиваются нулем(для копи)
[22:11:28] <alexey.veselovsky> потому, что иначе получается чушь - в случае присваивании arr := "hello" хвост массива arr ПОЛНОСТЬЮ забивается нулями (согласно спеки), а в случае boo := arr, в хвосте boo будет уже мусор а не нули
[22:11:29] <Kemet> copy оперирует строками, заканчивающимися нулем
[22:12:25] <alexey.veselovsky> неа, согласно спеки, оно оперирует любыми строками, а также строковыми литералами. в том числе теми, которые нулем не заканчиваются. ну например таким: foo : ARRAY 2 OF CHAR; foo := "ab";
[22:12:44] <alexey.veselovsky> в foo не будет ни единого нуля (согласно репорту - это железно)
[22:12:59] <Kemet> а строковые литералы физически эквиывалентны строкам с еулем
[22:13:35] <alexey.veselovsky> это пофик чему они эквивалентны, важно что вот в этом примере в foo будет ровно два элемента, и оба не ноль
[22:13:46] <alexey.veselovsky> и этот foo согласно репорту же, можно скормить COPY
[22:19:37] <Kemet> ты уверен, что оно присвоится?
[22:19:48] <alexey.veselovsky> да
[22:19:52] <alexey.veselovsky> абсолютно
[22:20:08] <Kemet> а в бб
[22:20:21] <Kemet> в ао точно нет
[22:20:29] <alexey.veselovsky> а в ББ нет реализации Оберона-07/11
[22:20:36] <alexey.veselovsky> "Strings can be assigned to any array of characters, provided the number of characters in the
string is not greater than that of the array. If it is less, a null character (0X) is appended."
[22:21:08] <alexey.veselovsky> Более того, если даже в какой-то реализации оберона 07/11 это не присвоится, то это будет багом этой конкретной реализации
[22:21:17] <alexey.veselovsky> Изучать язык по его реализациям - не правильно :-)
[22:21:33] <Kemet> ну а про строки там что сказано
[22:21:56] <alexey.veselovsky> дык ровно это и сказано :-)
[22:22:09] <Kemet> они заканчиваются нулем или нет
[22:22:24] <alexey.veselovsky> Strings are sequences of characters enclosed in quote marks ("). A string cannot contain the
delimiting quote mark. Alternatively, a single-character string may be specified by the ordinal
number of the character in hexadecimal notation followed by an "X". The number of characters in a
string is called the length of the string.
[22:22:58] <alexey.veselovsky> Конкретно - они литералы, сущность компиляции. Как оно потом хранится - никого не волнует :-)
[22:23:16] <alexey.veselovsky> также как никого не волнует в каком формате потом хранится скажем число 42
[22:24:47] <Kemet> эм, а, это не строки вообще, а литералы
[22:25:18] <alexey.veselovsky> дык, "aa" - это оно и есть. это то, что в репорте строками называют
[22:25:24] <alexey.veselovsky> а еще есть массивы чаров
[22:25:28] <alexey.veselovsky> и все
[22:25:40] <alexey.veselovsky> foo : ARRAY 2 OF CHAR; foo := "ab";
[22:25:48] <alexey.veselovsky> в foo два элемента и оба не ноль
[22:26:17] <Kemet> в ао пройдет только foo := "a"
[22:26:36] <alexey.veselovsky> ну, это ж другой язык, не оберон :-)
[22:27:04] <Kemet> ну оно из оберона выросло, со сторками там с в4 так
[22:27:06] <alexey.veselovsky> побочное ответвление от оберона этот самый АО
[22:28:50] <alexey.veselovsky> в изначальном обероне было так:
[22:28:57] <alexey.veselovsky> Strings can be assigned to any variable whose type is an array of characters, provided
the length of the string is less than that of the array. If a string s of length n is assigned
to an array a, the result is a[i] = si for i = 0 ... n-1, and a[n] = 0X.
[22:29:59] <alexey.veselovsky> так что да, Вирт проапгрейдил семантику присваивания строк :-)
[22:41:35] <Kemet> вообще с понятием строка в оберонах путаница - по сути их там нет, есть трлько литералы
[22:46:40] <Kemet> погодь, но ведь все равно если строка короче массива, конец массива забивается нулями
[22:47:21] <alexey.veselovsky> НУЛЯМИ, а не НУЛЕМ
[22:47:35] <alexey.veselovsky> соответственно COPY также должен забивать НУЛЯМИ хвост если хвост остался
[22:48:16] <alexey.veselovsky> впрочем, также как и операция присваивания
[22:48:58] <alexey.veselovsky> (мне представляется, что со строками даже в С++ лучше чем в Обероне)
[22:50:52] <Kemet> а system.byte там остался?
[22:52:13] <alexey.veselovsky> ну, во-первых SYSTEM там опционален (в отличае от первоначального оберона)
[22:52:21] <alexey.veselovsky> во-вторых SYSTEM там не вносит новых типов
[22:53:54] <alexey.veselovsky> По драфтам - в следующей ревизии Оберона BYTE появится снова, но уже не в SYSTEM'е а вообще
[22:54:49] <Kemet> а выкрутасы с array of byte также введут - когда можно передать парамеир любого типа
[22:55:21] <alexey.veselovsky> хез. не помню. если только в SYSTEM
[22:55:45] <alexey.veselovsky> но SYSTEM опционален и рассчитывать что он будет в какой-либо реализации не стоит
[22:57:57] <Kemet> в принципе, проапгрейженный вариант строки в мк более правильный
[22:58:14] <alexey.veselovsky> мк - это хто?
[22:58:24] <Kemet> микроконтроллер
[22:58:38] <alexey.veselovsky> а, ну наверно да. байтики экономим :-)
[22:58:48] <Kemet> угу
[22:59:25] <alexey.veselovsky> проблема только в том, что пока не понятно как это все будет работать :-) см. тему тащемто
[22:59:46] <alexey.veselovsky> со строками в Обероне-07 (не знаю как в остальных) просто уйма проблем и неоднозначностей
[22:59:51] <alexey.veselovsky> начиная с кодировки :-)
[23:01:30] <alexey.veselovsky> vlad2: давай попробуем хотя бы за неделю дописать списочек вопросов Вирту и отправить.
[23:01:46] <alexey.veselovsky> список вопросов и замечаний
[23:05:16] <alexey.veselovsky> Да, а С++ все больше напоминает Алгол 68 :-)
[23:05:23] <alexey.veselovsky> по духу
[23:35:59] <Kemet> кстати, исходя из синтаксиса COPY можно предположить что строки(литераты) могут быть параметрами. по крайней мере для копи )
[23:37:12] <alexey.veselovsky> могут быть, но встроенным процедурам веры нет - см. например процедуру NEW, подобное пользователь написать при всем желании не сможет в рамках языка
[23:44:24] <Kemet> вообще получается что у меня неверная реализация о7
[23:45:12] <alexey.veselovsky> :-)
[23:45:32] <alexey.veselovsky> я сомневаюсь что сообщение о языке оберон-07 можно трактовать однозначно
[23:45:58] <alexey.veselovsky> не семантика языка и компилятора, а один сплошной UB
[23:46:17] <vlad2> в моем компиляторе - ошибка компиляции, если строка не влезает
[23:47:24] <alexey.veselovsky> это при условии что на этапе компиляции ты все знаешь
[23:48:09] <alexey.veselovsky> а как вот с таким быть? http://oberspace.dyndns.org/index.php/topic,473.msg15440.html#msg15440
[23:52:44] <vlad2> Да, твой пример имеет семантику "index out of bounds". Т.е. UB :)
[23:53:38] <vlad2> Либо запрещать присвоение открытому массиву (и тогда никаких строк-параметров)
[23:55:38] <alexey.veselovsky> vlad2: еще смешнее: http://oberspace.dyndns.org/index.php/topic,473.msg15454.html#msg15454
[23:59:35] <vlad2> Так нельзя же массивы присываивать?
[23:59:52] <alexey.veselovsky> где сказано что нельзя?