[02:10:20] <valexey> vlad2: смотри какие баги в Astrobe до сих пор встречаются (а они уже давно в релизе - версия 4.4 уже, и оно за деньгу продается. продакшн!). Это Oberon-07/11 естественно. http://www.astrobe.com/forum/viewtopic.php?f=5&t=304&sid=59ad173172d316829e9b24f2a1d97890#p652
[02:11:36] <vlad2> Ну недопустимые конструкции ловятся дольше :)
[02:13:48] <valexey> блин. какие жоские там у них расширения языка.
[02:13:51] <valexey> "Arbitrary data types (INTEGERs, arrays, records, etc.) can be passed as parameters that are declared as open byte arrays i.e. ARRAY OF BYTE. They cannnot be passed to parameters that are declared as fixed-length byte arrays (e.g. ARRAY 10 OF BYTE). This now results in the compile-time error: incompatible types."
[02:14:07] <valexey> Привет Си!
[02:15:58] <valexey> DISPOSE is a built-in function which deallocates memory which has previously been allocated to a pointer record / array with NEW. The default behaviour of DISPOSE can be changed by substituting a user-defined function for the default library function Storage.Deallocate.
[02:16:07] <valexey> Привет malloc/free!
[06:22:32] <Kemet> valexey: фишка с ARRAY OF BYTE(SYSTEM.BYTE) в оберонах давно присутствует, в ББ тоже есть
[08:33:57] <vlad3> все таки чем больше я думаю о возможных причинах выпила динамических массивов - тем больше убеждаюсь, что никакого профита такое упрощение оно не дает. Вообще.
[08:35:15] <vlad3> Даже упрощения RTL не будет - под рекорды все равно надо уметь выделять память (любого размера).
[08:36:16] <vlad3> так что динамические массивы - первый кандидат в расширение оригинала.
[08:37:03] <vlad3> Без них даже смотреть на язык за пределами эзоторики не будут.
[09:06:32] <Kemet> test
[09:06:33] <Жаба> Kemet, passed
[14:01:21] <valexey> vlad3: предлагаю вначале воткнуться на какой-то практической задаче в необходимость таковых массивов
[14:01:38] <valexey> а потом сразу думать про контейнеры вообще, ибо массивов не достаточно
[14:02:12] <valexey> Я ж говорю - у меня есть опыт работы с языком где очень няшные встроенные массивы (Go), но где проблемы с библиотечными контейнерами
[14:02:36] <valexey> Массивы спасают только если пишешь hello world
[17:05:35] <vlad2> Дык, я там предлагал задачку на циклы - куда писать аутпут?
[17:05:46] <vlad2> Кстати, я глянул астробе - там они есть.
[17:06:08] <vlad2> Но не в виде указателей, а в виде переменных.
[17:07:08] <vlad2> Библиотека контйнеров - это конечно круто, но там сразу дженериуи и т.д.
[17:18:52] <valexey> А от нее никуда все равно не деться. Массивы эти в виде расширизмов - они таки не решают всей проблемы
[17:19:17] <valexey> vlad2: и да, заметь, в Astrobe сделали то же что в С99 - там эти массивы на стеке.  Массивы неизвестной во время компиляции длины на стеке
[17:19:23] <valexey> В С++ такого например нет :-)
[17:19:31] <valexey> Нечто вроде  alloca
[17:21:46] <vlad2> Даже для библиотеки дженерик контйнеров ты захочешь иметь динамические массивы - что в JS не лазить.
[17:22:11] <valexey> не факт :-)
[17:23:14] <valexey> ArrayList указателей на чанки никто не отменял в общем то. Сложность random access выходит та же самая - O(1)
[17:23:16] <vlad2> Как будешь vector делать? На деревьях?
[17:23:31] <valexey> не, дерево не нужно
[17:23:33] <vlad2> Константа будет не та ;)
[17:24:00] <valexey> с учетом js-реалий, о константах лучше умолчим :-)
[17:24:25] <vlad2> Дык, тем более js предоставляет тебе массивы.
[17:24:26] <valexey> но на самом деле оверхед минимален. то есть его довольно сложно будет даже в синтетических тестах поймать
[17:25:12] <valexey> Короче, то чего нет в языке я бы предпочел реализовать в стандатной либе. Благо это возможно. Это будет и мощнее и гибче. И расширябельней.
[17:25:24] <valexey> И совместимей с другими реализациями.
[17:33:04] <Kemet> эмуляция динамических массивов через список чанков (не ArrayList, а именно LinkedList) посадит производительность
[17:39:59] <vlad2> Посади-посадит.
[17:40:08] <vlad2> Может будет померять.
[18:20:49] <valexey> Kemet: сильно ли?
[18:20:54] <valexey> И за счет чего?
[18:22:31] <valexey> вообще, нюансы реализации такого динамического массива не важны. хоть на машкодах реализуй. ибо это часть стандартной либы, а стандартная либа пишется поставщиком компилятора
[18:26:28] <vlad2> Кстати, как ты себе вообще представляешь тиакой библиотечный массив. Даже с учетом дженериков?
[18:26:54] <vlad2> Array.get(a, 10); Array.set(a, 10, 333);
[18:26:56] <vlad2> ?
[18:30:13] <valexey> типа того, да.
[18:32:37] <valexey> Хотя, по идее, у индексов должен быть свой тип
[18:32:53] <valexey> то есть привет итераторы или какой-нибудь range
[18:33:25] <vlad2> Громоздко слишком.
[18:34:02] <vlad2> Чтоб заставить так писать - действительно, лучше динамические массивы не вводить ;)
[18:34:12] <valexey> ну, смотря для чего. если ты set'ами будешь пытаться инициализировать 10 элементов массива - то да, легче умереть :-)
[18:35:42] <valexey> так. лучше напишу ка я решение твоей задачки с учетом "стандартной либы" :-)
[18:35:43] <vlad2> Вообще "Array." при люом раскладе смотрится как ненужный мусор.
[18:36:31] <vlad2> Надо с этим чего-то делать.
[18:37:10] <valexey> не, ну можно конечно a.set(a,10,100500);
[18:37:29] <vlad2> "Связанные" процедуры не дань моде, а вполне проверенный механизм.
[18:37:58] <vlad2> Угу. Только set должен быть не процедурным полем, а нормальным методом.
[18:41:30] <valexey> на самом деле тут несколько путей решения. метод не обязателен. вопрос лишь в том, как обойтись без расширения языка :-)
[18:50:04] <vlad2> Ну синтаксис можно не менять ;)
[18:50:37] <vlad2> Типа процедура f() может быть вызвана как a.f() если a - ее первый аргумент :)
[18:51:11] <vlad2> И тип a объявлен в том же модуле.
[18:51:12] <valexey> но это ж один фиг язык меняет
[18:51:16] <valexey> не грамматику а язык
[18:51:21] <vlad2> Язык - да.
[18:52:49] <vlad2> Хотя лучше сразу делать нормально - с синтаксисом.
[18:53:15] <vlad2> (потом захочется вирткальных методов)
[18:53:24] <valexey> ну, set(a,10,100500) ничем не хуже чем a.set(10,100500);
[18:53:30] <valexey> одинаково убого в общем то :-)
[18:54:02] <vlad2> Не, так хреновее, чем через точку. Мне кажется.
[18:54:19] <valexey> ну в плюсах от точки отазались же :-)
[18:54:26] <valexey> для стандартной либы
[18:54:36] <valexey> никаких a.begin() теперь begin(a)
[18:54:43] <vlad2> Ага. Совсем недавно имел гемор с этим ADL.
[18:55:42] <vlad2> В конце концов ревертнул все нах.
[18:55:56] <valexey> ну, на САМОМ деле если программер хочет, если его задолбало писать постоянно Array.Set(arr, 10,42), и хочет он писать Set(arr,10,42), то это можно и без изменения языка :-)
[18:56:10] <vlad2> Опять же - свопинаем автокомплит. Через точку без вариантов :)
[18:56:36] <vlad2> Все равно - программер будет страдать ;)
[18:56:44] <valexey> не, автокомплит можно и без точек :-) нужно мыслить творчески. :-)
[18:57:35] <valexey> более того, через точку автокомплит убог чуть менее чем полностью - он мне не позволяет найти те функции которые мне нужны. ибо, сцуко, учитывает только первый аргумент
[18:57:58] <vlad2> Не. В общем случаю у аргумента скоп уже и он короче, чем просто имя метода (которое первое ввидится).
[18:58:44] <valexey> да какой нафиг метод? частенько все аргументы равнозначны. и искать надо не по первому, а по третьему скажем (потому что вот так моск за него зацепился)
[18:58:59] <valexey> ну и вообще, часто нужно найти вообще все что можно вот с этой переменной сделать.
[18:59:07] <valexey> а это не методы вообще ни разу
[18:59:17] <vlad2> Одно другого не отменяет - сначала вводишь переменную..
[18:59:32] <valexey> и-и?  а при чем тут точка?
[19:00:29] <vlad2> Ввобишь переменную - оно ищет все, что с ней связано. Против - начинаешь вводить имя метода - и он ищет по всем методам всех переменных в скопе.
[19:01:12] <vlad2> Короче - методы все равно надо делать (сразу после динамичесих массивов).
[19:01:34] <vlad2> Потому что за ручные VTBL тоже засмеют.
[19:01:35] <valexey> ну, дык, если тебе нужно найти что можно сделать вот с этим вот набором переменных (частный случай - одна переменная) просто банально пишешь: <a,b,42>
[19:01:55] <valexey> по правой угловой скобке среда тебе предложит все что подходит для именно трех переменных такого типа
[19:02:02] <valexey> трех и более в одной функции
[19:02:06] <valexey> все
[19:02:08] <vlad2> Дык, это сложнее, чем написать a. :)
[19:02:11] <valexey> зачем точка?
[19:02:15] <vlad2> И сложнее найти.
[19:02:29] <valexey> кому сложнее? программисту проще - оно найдет точнее так
[19:02:36] <valexey> да и среде тоже проще :-)
[19:02:44] <valexey> но это да, непривычно ;-)
[19:02:51] <vlad2> Сложнее автокомплиту.
[19:03:01] <vlad2> А его делать тоже программер будет.
[19:03:13] <valexey> он железный :-) (автокомплит в смысле)
[19:03:26] <vlad2> Это оно потом железный. Когда его сделали.
[19:03:32] <valexey> на самом деле это не так страшно как кажется. лишь немного про алгоритмы подумать :-)
[19:04:11] <vlad2> Кроме того, человеку читать эту херню тоже сложнее: set(a, b) - WTF?
[19:04:20] <vlad2> Или это set уровня модуля.
[19:04:34] <vlad2> Или это set из модуля где тип А.
[19:04:42] <vlad2> Или?
[19:04:58] <vlad2> Так что только точка.
[19:05:14] <valexey> Ну, в Обероне то такой проблемы нет :-)  если сказано что set(a,b), значит оно тут, в модуле где-то :-)
[19:05:18] <vlad2> Другие варианты - удел функциональщиков.
[19:06:10] <valexey> ладно, пойду напишу на Обероне-07/11 со стандартной либой решение твоей задачки. Точнее концепт.
[19:06:27] <vlad2> Я думал мы понимаем, что писать локальные обертки/редиректы - это страдание :)
[19:06:33] <vlad2> Да, давай!
[19:07:19] <valexey> Ну, если руками писать - то страдание. Если оно автоматом пишется - то уже нет :-)
[19:08:05] <vlad2> А читать потом нагереренный трэш? :)
[19:08:26] <valexey> а нужно посмотреть насколько оно трешем будет
[19:08:38] <vlad2> Ну ладно, посмотрим.
[19:14:31] <valexey> vlad2: гм. вопрос - а константы какого типа у нас могут быть?
[19:14:55] <valexey> процедурного могут? :-)
[19:15:11] <vlad2> Попробуй ;)
[19:15:32] <valexey> не, с точки зрения языка :-)
[19:15:53] <valexey> там, блин, настолько мутно все с константами этими...
[19:18:01] <vlad2> Вообще конечно процедуру ты не можешь менять - так что можно было бы (опять же - можно вспомнить плюсовые шаблоны, которые позволяют).
[19:18:15] <vlad2> Но зачем? ;)
[19:19:35] <valexey> как зачем? алиасы же. чтобы потом руками не вбивать это в секции инициализации модуля
[19:19:45] <valexey> + защита от дибила (чтобы никто не поменял гарантированно!)
[19:19:58] <valexey> MODULE A;
PROCEDURE Foo*;END Foo;
END A.

MODULE test;
IMPORT A;
CONST F = A.Foo;
END test.
[19:20:06] <valexey> послали нафиг :-(
[19:20:23] <valexey> надо бы у народа поспрошать как оно.
[19:20:27] <valexey> Kemet: ы?
[19:20:48] <vlad2> Можно сделать, конечно.
[19:22:27] <vlad2> С другой стороны - можно и в VAR запихнуть. От дурака в своем же модуле нет причин страховаться.
[19:22:47] <vlad2> Но в VAR длинее - надо тип расписывать.
[19:23:15] <valexey> и не забыть потом в километре ниже VAR-секции инициализировать эту переменную нужным значением
[19:26:14] <vlad2> А. Да. Блдин.
[19:32:07] <valexey> Слушай, а у нас ведь, по умолчанию, согласно репорту, не гарантируется обNILивание локальных переменных-указателей?
[19:32:40] <Kemet> valexey: не, лучше VAR с модификатором только для чтения и инициализацией по месту объявления
[19:33:13] <valexey> Kemet: а если без расширизмов? насколько я понимаю, то что я предложил - никак репорту не противоречит и языка не расширяет
[19:34:05] <Kemet> ну, физически, что такое "константная" процедура?
[19:34:17] <jordan36957> Почитал, сообщения на счёт массивов... Печаль и грусть.
[19:34:51] <jordan36957> Но, привыкнуть можно.
[19:35:36] <vlad2> Значки [] буду зря пропадать - никто не будет юзать обычные массивы в таком виде.ю
[19:36:52] <vlad2> Сорбственно как у меня сейча с сишными массивами.
[19:37:17] <vlad2> Они использются только для инициализации констант:
[19:37:28] <valexey> ну, юз-кейсы таки остаются. мелкие, но остаются
[19:37:41] <vlad2> T arr[] = {{...}, {...}};
[19:37:44] <vlad2> Все.
[19:38:13] <vlad2> И то, чтоб #include <boost/list_of.hpp> не писать ;)
[19:39:21] <vlad2> Согласно репорту - не гарантируется.
[19:39:43] <vlad2> Хотя "здравый смысл" такую гарантию накладывать должен.
[19:39:54] <jordan36957> как тип массива указывать? Что то типа ArrayInt.Set?
[19:40:43] <vlad2> Там valexey обещал чего-то придумать. Я пока не знаю как к дженерикам подходить.
[19:41:05] <jordan36957> Их нет. Только отдельная тулза для совместимости.
[19:43:11] <jordan36957> Дженерики в отделной программе, которая будет обрабатывать исходник до компиляции. Будет содержать большую часть компилятора. Это же не тупой препроцессор. Тут нужно делать работу потоньше, а не просто подставлять.
[19:43:53] <Kemet> valexey: Это не константное выражение. Даже если брать адрес процедуры, то он неизвестен на этапе компиляции, только на этапе линковки
[19:45:06] <vlad2> Дык, пусть станет известен хоть на этапе загрузки модуля - почему нет?
[19:45:28] <vlad2> Главно, что оно константа и не меняется с момента "доступности".
[19:46:34] <Kemet> тогда это не константа, т.к. ее значение меняется
[19:46:39] <valexey> нет, в репорте ясно сказано, что константа это то что вычисляется во время компиляции
[19:46:43] <valexey> НО
[19:46:48] <vlad2> Не меняется.
[19:46:58] <valexey> с точки зрения языка у процедур нет никаких "адресов"
[19:47:19] <valexey> Адрес процедуры, с точки зрения языка, всегда имеет такой вид: ModuleName.ProcName
[19:47:22] <valexey> всё
[19:47:50] <vlad2> С точки зрения программы значение такой константы всегда одно и то же. То, что там в ранайме делается (когда оно инитится) программу не должно волновать.
[19:48:36] <vlad2> Угу. В этом смсле значение известно на этапе компиляции :)
[19:48:44] <valexey> ага
[19:48:58] <valexey> Блин, с этими языковыми разборками легко в софистику скатиться :-)
[19:49:07] <valexey> Вирт - знатный трололо!
[19:50:10] <vlad2> Да не, дословно на букву репорта полагаться бесполезняк - это ж не святое писание.
[19:50:14] <vlad2> Писано человеком.
[19:50:34] <vlad2> Который даже в страшных снах не предполагал, что оно в жабаскрипт будет транслироваться ;)
[19:50:36] <valexey> гм. ну, на счет святого писания у меня точно такие же сомнения :-)
[20:02:32] <valexey> Kemet: кстати, с точки зрения КОМПИЛЯТОРА это реально константы
[20:02:46] <valexey> он же в объектник складывает в любом случае символьное имя
[20:02:51] <valexey> то есть все вызовы функций так делаются
[20:03:00] <valexey> и эти символьные имена разрешаются уже компоновщиком
[20:03:05] <valexey> так что тут нет никакой разницы
[20:05:34] <Kemet> valexey: там обычные адреса и таблица фиксов
[20:06:46] <valexey> какая разница?  важно что при обычном вызове функции компилятор ТОЖЕ не знает что там будет.
[20:06:59] <valexey> то есть ситуация та же самая
[20:07:39] <Kemet> он знает относительный адрес, его и ставит, а линкер клорректирует его на реальный, т.е. это не константа, т.к. изменяется
[20:08:19] <valexey> ну вот и в случае констант он выставит относительный адрес
[20:08:25] <valexey> а линкер пусть его меняет :-)
[20:08:28] <Kemet> т.е. на этапе компиляции это одно значение, на этапе выполнения совсем другое
[20:09:02] <Kemet> константа на то и константа, что известна и неизменна
[20:10:10] <vlad2> Она изветна и неизменна - Module.Proc :)
[20:10:27] <Kemet> юмористы
[20:10:41] <vlad2> Вот если бы Mosule.Proc была процедурной переменной - тогда можно было бы еще поспорить.
[20:11:15] <vlad2> Хотя и в этом случае можно было бы сказать, что ее значение определяется значением на этапе загрузки модуля.
[20:11:50] <vlad2> Вообще всегда полезно задаваться вопросом "а зачем"?
[20:12:06] <vlad2> А зачем не давать делать процедурных констант?
[20:12:34] <vlad2> С языковой точки зрения - смысла нет.
[20:12:42] <vlad2> С точки зрения имплементации - тоже.
[20:13:17] <vlad2> (все равно резолвать имя Module.Proc в момент загрузки)
[20:13:48] <vlad2> Даже использование со злым умыслом пока не придумать.
[20:14:14] <valexey> Меж тем я там набредил: http://oberspace.dyndns.org/index.php/topic,532.msg18051.html#msg18051
[20:14:46] <vlad2> Нужна кнопка на форуме "открыть код на страничке компилятора" ;)
[20:15:40] <valexey> в данном случае это было бы бесполезно - не заведется же :-) нужно сами стандартные модули эти написано вначале
[20:15:44] <valexey> это ж концепт пока
[20:17:12] <vlad2> И какой будет прототип вот этих функций?
[20:17:14] <vlad2>    ArrayInt.Fill2(input,
                  VectorInt.Make3(1,2,3),
                  VectorInt.Make2(4,5))
[20:17:45] <vlad2> (я собирался фикснуть багу с возвратом массивовов ;)
[20:17:58] <valexey> дык, фикси :-)
[20:18:29] <valexey> А я пока не решил. Либо это будет Fill2(VAR in : ARRAY 2 OF INTEGER; a,b : INTEGER);
[20:18:32] <valexey> либо
[20:18:37] <valexey> Fill2(VAR in : ARRAY OF INTEGER; a,b : INTEGER);
[20:19:02] <vlad2> А Make2?
[20:19:04] <valexey> так. налажал таки
[20:19:14] <valexey> какой нафиг Integer? там VectorInt
[20:19:23] <valexey> /me бьеццо головой апстену
[20:19:53] <valexey> PROCEDURE Make2(a,b,c : INTEGER) VectorInt.T;
[20:20:02] <valexey> PROCEDURE Make2(a,b : INTEGER) VectorInt.T;
[20:20:06] <valexey> вот точнее
[20:23:18] <vlad2> А что за скаляр такой будет VectorInt.T?
[20:23:32] <vlad2> POINTER?
[20:24:03] <valexey> угу. opaque-тип
[20:24:22] <valexey> думаешь чегоя всех задолбал этими нюансами о поинтерах и рекордах?
[20:27:44] <valexey> vlad2: ну как? сильно страшный код вышел? :-)
[20:29:37] <valexey> jordan36957: зацени :-)
[20:30:00] <vlad2> По сравнению с питоном? :) Ужос-ужос :) Но оберонщикам не привыкать.
[20:30:24] <valexey> ну, как будто в плюсах сильно краше было бы :-)
[20:31:51] <vlad2> В плюсах у меня эта задачка вполне кошерно получилась. Хоть и с циклом.
[20:32:02] <valexey> покажи :-)
[20:34:13] <valexey> ну и питоновариант до кучи :-)
[20:58:38] <jordan36957> Что заценить?
[20:58:49] <jordan36957> Ок увидел
[21:01:00] <jordan36957> Нормально.
[21:01:22] <vlad2> a = [[1, 2, 3], [4,5]]
[21:01:31] <vlad2> sep = 10
[21:01:44] <vlad2> reduce(lambda x, y: x + [sep] + y, a)
[21:01:53] <vlad2> Все :)
[21:01:54] <jordan36957> Даже если и будет дин массив, всё равно для создания вектора, нужно использовать процедууры, перегрузки операторов то нет.
[21:01:59] <vlad2> Вобщем есть куда стремиться ;)
[21:03:17] <jordan36957> С такмим массивами, мэнстрима 07 не видать. :-)  Жирное ИМХО.
[21:05:33] <jordan36957> Как выглядит модуль VectorInt?
[21:05:42] <jordan36957> Запости реализацию.
[21:06:36] <vlad2> Он гипотетический пока.
[21:07:02] <jordan36957> ок
[21:07:13] <valexey> jordan36957: зачем тебе видеть ЭТО? :-)
[21:07:21] <valexey> ты б еще на потроха буста посмотрел :-)
[21:07:52] <jordan36957> Интересно.
[21:08:15] <valexey> в потрохах там будет много скучно и однообразно :-)
[21:08:20] <valexey> примерно как в бусте
[21:08:25] <valexey> функция на 2 аргумента
[21:08:29] <valexey> на 3
[21:08:34] <valexey> на 4
[21:08:38] <valexey> на 5
[21:08:44] <valexey> мне продолжить? :-)
[21:08:46] <jordan36957> Ага make1,2,3
[21:08:53] <jordan36957> Я понял.
[21:09:23] <valexey> но лучше это сделать один раз в либе чем заставлять прикладного программиста корячиться
[21:10:07] <vlad2> Причем я знаю как в плюсах сделать этот самый reduce (сделаю если еще раз напорюсь на такую задачку).
[21:10:50] <valexey> ну ты ж понимаешь, что целевая аудитория Оберона немного более нубская? :-)
[21:11:12] <valexey> так что дубово-деревянность и явность там может даже на пользу пойти
[21:11:27] <valexey> ну а питон за это все платит динамической типизацией
[21:16:23] <jordan36957> В общем в рамках рапорта лучше не сделать.
[21:17:43] <jordan36957> Почему нубская? если использовать из js самый минимум, тоже язык простой. В любом языке есть имеративное ядро.
[21:18:08] <jordan36957> типа if while proc record pinter
[21:21:35] <jordan36957> ARRAY OF VectorInt.T это откуда? ARRAY OF нет? Только фикс размер.
[21:22:09] <jordan36957> Если уж уходить от стандарта, то реализовать в языке нормальные массивы.
[21:22:44] <vlad2> Пока от стандарта никто не уходит :)
[21:23:08] <jordan36957> ARRAY OF есть?
[21:24:31] <jordan36957> насчёт astrobe, кто нибудь читал отзывы о языке 07. Интересно как его приняли оберонщики?
[21:25:41] <jordan36957> http://forum.oberoncore.ru/viewtopic.php?f=114&t=3836&start=120
[21:25:57] <jordan36957> Вы представляете как этот код будет выглядеть на 07? :-)
[21:29:58] <valexey> jordan36957: в аргументах функции ARRAY OF да, бывает
[21:30:21] <jordan36957> ок
[21:30:46] <valexey> о! сейчас нам Петруха поднапишет на форум то!
[21:30:49] <valexey> :-)
[21:31:38] <jordan36957> поднапишет двоякое выражение :-)
[21:35:07] <vlad2> А в честь чего?
[21:36:18] <valexey> да фиг знает. но попытка по крайней мере была
[21:36:23] <valexey> возможно уже осуществилась :-)
[21:36:40] <valexey> не, пока нет
[21:50:55] <jordan36957> я тут нашёл исходники quake на delphi.
[21:52:21] <valexey> jordan36957: ты не прав. под wine скорость вычислений та же
[21:52:29] <valexey> ведь wine не является эмулятором
[21:52:39] <valexey> точнее виртуальной машиной оно не является
[21:53:09] <jordan36957> вспомнил wine is not emulator
[21:53:27] <jordan36957> Ошибочка вышла.
[21:53:37] <valexey> это просто API, WinAPI
[21:54:17] <jordan36957> реализация winapi поверх linux api?
[21:54:38] <jordan36957> Как же exe файлы, нужна же среда для их исполнения.
[21:54:46] <jordan36957> Формат другой
[22:01:18] <valexey> ну реализовали загрузчик
[22:01:33] <valexey> который отображет нужные адреса куда надо
[22:01:36] <valexey> всего лишь
[22:03:08] <valexey> о! У Петра мысли навеялись от нашего форума и твоих высказываний
[22:03:12] <valexey> http://juick.com/AKa/
[22:03:17] <valexey> (три последний сообщения)
[22:03:28] <valexey> точнее последнее и предпред последнее
[22:04:09] <jordan36957> Клеветоизвержения
[22:04:20] <valexey> :-)
[22:04:51] <valexey> только Петр не понимает (ну или просто небрежен в высказываниях), что js-среда это теперь далеко не только браузеры
[22:08:06] <jordan36957> js это спецификация. Реализовать то можно где угодно. Даже компилято в натив написать. Чтоб exe собирать.
[22:08:32] <valexey> ну, сейчас js это уже инфраструктура богатая
[22:08:50] <valexey> а язык сам по себе, называется не js а ECMAScript :-)
[22:28:01] <valexey> jordan36957: кстати, не во всех языках есть императивное ядро
[22:28:07] <valexey> ну, например в haskell'e его нет
[22:28:15] <valexey> там вообще statement'ов нет :-)
[22:30:12] <jordan36957> На lispe видел модуль, который позволяет писать как на basic
[22:31:02] <valexey> лисп это метаязык. ну, то есть там можно сделать что угодно вообще
[22:31:17] <valexey> создание DSL - вот эго конек.
[22:42:21] <vlad2> Босс похвастался 3-Д принтером. Прикольно.
[22:42:36] <jordan36957> Что печатает?
[22:42:51] <vаlexey> 3D болт!
[22:42:59] <vlad2> Ключ :)
[22:43:03] <jordan36957> Анжелину Джоли :-)
[22:43:45] <jordan36957> Что за вещество используют при печати? Пластик?
[22:43:58] <vlad2> Да. Он там разный бывает.
[23:01:56] <jordan36957> в си стандартных средств нет, что бы узнать сколько памяти выделяет malloc?
[23:02:59] <jordan36957> Вопрос снимается. Это я не дочитал.
[23:37:38] <vlad2> Или вот таке на обероне:
[23:37:41] <vlad2>        return ( bool( l1 ) != bool( l2 ) )
           ? bool( l1 ) < bool( l2 )
           : l1 ? *l1 < *l2
           : planB();
[23:41:05] <vlad2> Мерещатся жуткие IF/ELSE и ненужные переменные.
[23:41:43] <jordan36957> Что это за мантра?
[23:42:00] <jordan36957> тренарный оператор?
[23:43:07] <vlad2> Тут все. Логические условия и даже XOR :)
[23:43:17] <vlad2> И все это в тернарном опреаторе.
[23:44:33] <vlad2> IF (l1 # NIL) # (l2 # NIL)
[23:45:28] <vlad2>    result := ORD( l1 ) < ORD( l2 )
[23:45:33] <vlad2> И т.д.
[23:45:45] <jordan36957> тренарный оператор есть в delphi в виде процеlуры ifthen
[23:45:47] <vlad2> (не помню, рбаотает ли ORD для BOOL)
[23:46:32] <vlad2> А. Не. Все еще хуже:
[23:46:58] <vlad2> result := ORD(l1 # NIL) < ORD(l2 # NIL)
[23:47:12] <vlad2> Т.е. везде вот этот # NIL надо тащить.
[23:47:19] <jordan36957> Что должен вернуть этот код? Жизнь меня к такому не готовила. :-)
[23:48:39] <vlad2> Там два указателя - l1 и  l2.
[23:48:52] <vlad2> Если в них обоих что-то есть - сравнитьих содержимое.
[23:49:20] <jordan36957> ок
[23:49:44] <vlad2> Если один (и только один) из них нулевой - то вернуть true если нулевой l1
[23:49:56] <jordan36957> В паскале так же, нужно (P <> NIL)
[23:50:05] <vlad2> Если в обоих указателях NIL - о вернуть planB :)
[23:50:29] <vlad2> Короче это функция-компаратор (для sort и т.п.).
[23:52:47] <jordan36957> Уверент не стоит такое вводить в язык. Так можно и до ++i дойти.
[23:54:36] <vlad2> Да, наверное. Тем не менее запись вполне читабельная и лаконичная.
[23:54:50] <jordan36957> :-S ну наверно...
[23:55:49] <jordan36957> такая запись для гурманов. :-)
[23:58:37] <vlad2> В смысле тут нет никаких хэков и неявных действий со стороны компилятора - все заспекано. И в то же время кратко.
[23:59:01] <jordan36957> Так то да. Уж слишком лаконично.