[00:00:22] <subjrs> у жабы время другое однако
[00:02:05] <subjrs> фсе, переход с 09 на 10 отлично отработался в логах
[00:03:09] <subjrs> valexey: было бы на ком ...
[00:03:25] <valexey> на Аде же!
[00:03:57] <subjrs> редкое имя нынче
[00:21:24] <kemiisto> gcc -v удивляет в хайку
[00:21:28] <kemiisto> 2.95
[00:21:31] <kemiisto> то-то!
[00:21:33] <kemiisto> =)
[00:21:42] <valexey> kemiisto: вообще то там четверка :-)
[00:21:48] <valexey> ты какую сборку то поставил? :-)
[00:21:57] <kemiisto> alpha 2
[00:22:07] <valexey> есть gcc 2.95 сборка, есть 4 сборка, есть гибрид
[00:22:36] <valexey> 2.95 используется для бинарной совместимости с BeOS софтом
[00:57:34] <valexey> http://www.linux.org.ru/gallery/screenshots/6124095
[00:57:37] <valexey> пример деградации
[01:10:14] <valexey> ня. что-то мне виндовозные расширения файлов уже мешают. нафига у readme писать еще и .txt ?
[01:10:18] <valexey> что, и так не понятно?
[01:12:10] <kemiisto> :-D
[01:12:19] <kemiisto> спокойной всем ночи
[01:12:21] <kemiisto> бб
[01:12:28] <valexey> BB CB!
[01:12:33] <valexey> ver 1.6
[01:12:43] <kemiisto> :-P
[01:13:49] <valexey> няблин. таки надо писать IO либу для Oberon07
[01:13:55] <valexey> ибо оно токо выводить пока умеет.
[01:24:56] <valexey> Ваще написание биндингов/стандартной либы оно успакаивает, это однообразная работа где не нужно думать. Ну, это как например в Angry Birds на йфоне играть.
[01:25:22] <белый шум> дзен
[01:26:33] <valexey> Только винда все портит конечно. Ну да пофиг.
[01:26:47] <valexey> Надо подумать под какой лицензией это говно публиковать потом :-)
[01:27:02] <valexey> Думаю что-то вроде EPL/MPL вполне сойдет.
[01:28:47] <valexey> Вообще, в оберонах очень не удобно же, что нет спецификации на модуль. В результате приходится мордой елозить по всему модулю выискивая в тексте заветные звездочки.
[01:30:22] <valexey> Да-а... Бида!
[01:30:42] <valexey> Внимание вопрос! Вот есть у вынь-апи функции такой вот аргумент: LPVOID lpBuffer
[01:30:50] <valexey> и как мне к этому биндинг напейсать?
[01:31:04] <valexey> В абироне же нет просто напросто соответствующего типа.
[01:31:12] <valexey> хоть пополам разорвись же.
[01:31:22] <белый шум> а это какая функция?
[01:31:22] <valexey> Переносимо никак не написать.
[01:31:39] <valexey> Это ReadConsole
[01:32:07] <белый шум> в ББ PtrVoid* = INTEGER;
[01:32:38] <valexey> ога-ога. а на 64битной системе все полетит к чертям.
[01:32:53] <valexey> потому как в описалове языка сказано, что INTEGER это железно 32 бита
[01:32:58] <valexey> а указатель там будет 64бита.
[01:33:01] <valexey> и превед.
[01:33:19] <valexey> О! Будет POINTER TO ARRAY :-)
[01:33:31] <белый шум> поэтому оно и переименовано
[01:33:42] <белый шум> заменют, перекомпилят и всё
[01:33:43] <valexey> а в абироне нельзя переименовывать.
[01:34:13] <белый шум> а
[01:34:24] <valexey> то есть в 07
[01:34:25] <белый шум> ну, тогда какой-нить POINTER
[01:34:57] <valexey> ога. главное чтобы компилятору не шизанулось думать, что там где-то какая-то метаинформация может лежать.
[01:35:03] <valexey> а то в рантайме полезет и сломает нахрен.
[01:35:20] <белый шум> [untagged] нету?
[01:35:36] <valexey> неа. тем более что untagged даже в КП нету.
[01:36:13] <valexey> блин. ну вот как работать с инструментарием когда нет к нему полного набора исходников?
[01:36:29] <valexey> повбивал бы этих коммерсантов по самую маковку в говнецо-с.
[01:36:37] <белый шум> :)
[01:36:50] <белый шум> проблемы индейцев шерифа не ебут
[01:37:16] <valexey> и это нечто без сырцов собираются продавать.
[01:37:18] <valexey> ужоз же.
[01:37:32] <valexey> по моему, это аффтар должен доплачивать за пользование этим.
[01:40:05] <белый шум> это речь про компилер?
[01:40:10] <белый шум> абирона?
[01:40:16] <valexey> дас
[01:41:03] <белый шум> я после ББ пугаюсь всяких консолей
[01:41:28] <valexey> А ещё Вирт красава -- у всех примитивных типов размер четко указал, а у BOOLEAN'a забыл
[01:41:29] <белый шум> одно исключение - fpc, потому что к нему уже сто лет настроен редактор с тулзами
[01:41:47] <valexey> консоли наше все.
[01:44:16] <valexey> белый шум: внимание вопрос -- в абироне бывает POINTER TO примитивный тип?
[01:44:25] <valexey> POINTER TO INTEGER например
[01:44:56] <белый шум> нет
[01:45:06] <valexey> То есть будет ошибка компиляции?
[01:45:08] <белый шум> только на массивы и рекорды
[01:45:16] <белый шум> в ББ - выдаёт ошибку
[01:45:22] <valexey> когда я напишу VAR p : POINTER TO INTEGER;
[01:45:31] <valexey> а потом не буду это дело инициализировать.
[01:46:12] <белый шум> не даёт откомпилять.
[01:47:04] <valexey> няблин
[01:47:13] <valexey> а абироне 07 указателы бывают только на записи.
[01:47:17] <valexey> убейте меня!
[01:47:48] <белый шум> а как же там динамические массивы запилили?
[01:48:03] <valexey> никак. через левое расширение языка.
[01:48:27] <белый шум> НЕ через указатели?
[01:48:44] <valexey> ну, кроме того там же нет указателей на массивы. p : ARRAY OF SomeType; ... NEW(p, 1000);
[01:48:52] <valexey> зачем тут указатели на массив?
[01:49:12] <белый шум> в ББ динамические массивы только через указатель
[01:49:28] <valexey> А как там?
[01:50:09] <valexey> А, хотя я наврал
[01:50:16] <valexey> там таки POINTER TO ARRAY OF CHAR
[01:50:20] <белый шум> » p : ARRAY OF SomeType;
вот такое не даст откомпилять без указания длины.
а динамические вот так:
POINTER TO ARRAY OF Some;
NEW(p, len)
[02:00:27] <белый шум> только вот почему-то я этими самыми массивами почти не пользуюсь
[02:00:36] <белый шум> разве что строками
[02:00:58] <белый шум> а, ещё в джабере, буфер для сокетов задаю
[02:01:03] <белый шум> динамический
[02:08:29] <valexey_> От задачи зависит
[02:15:18] <valexey_> Ня
[02:15:41] <valexey_> Строка в 92 символов в коде
[02:15:46] <valexey_> Не пойдет
[02:15:57] <белый шум> ужс
[02:15:59] <белый шум> :)
[02:16:34] <белый шум> ещё и в моношире поди
[02:16:42] <белый шум> ваще ад
[02:16:56] <valexey_> А это без разницы
[02:26:20] <valexey_> У, блин!
[02:27:02] <valexey_> какой компилятор, точнее парсер глючный
[02:32:48] <valexey> а, хотя нет, это наверно я глючный.
[02:32:51] <valexey> и вирт
[02:40:01] <белый шум> а в чём глюк?
[02:41:40] <valexey> вот скажи ка, вот тут ты какую-нибудь ошибку видишь?
[02:41:43] <valexey> PROCEDURE ReadConsole* (CONST a : INTEGER;
buf : POINTER TO ARRAY OF CHAR);
BEGIN
END ReadConsole;

[02:43:34] <белый шум> CONST?
[02:43:54] <valexey> а что конст? он там допустм. ок. сейчас выпилю конст
[02:44:10] <valexey> опять ошибка
[02:44:13] <valexey> та же самая.
[02:44:16] <valexey> конст тут не при чем
[02:46:22] <белый шум> не вижу. может, какая буква кириллическая затесалась
[02:48:29] <valexey> нихрена не понимаю
[02:48:33] <valexey> MODULE Test;

PROCEDURE Tst* (CONST a : INTEGER; buf : ARRAY 20 OF CHAR);
BEGIN
END Tst;

END Test.
[02:48:46] <valexey> C:\Projects\oberon07m\Test>..\bin\compiler.exe Test.ob7
line = 2 pos = 53 OF expected
line = 2 pos = 56 Declaration?
line = 2 pos = 59 Declaration?
line = 2 pos = 63 Declaration?
line = 2 pos = 64 Declaration?
Compilation failed
[02:49:02] <valexey> блин. убейте меня.
[02:51:10] <белый шум> ARRAY OF CHAR
[02:51:20] <белый шум> в параметрах без цифирки
[02:51:26] <valexey> почему?
[02:51:33] <белый шум> хз
[02:51:44] <белый шум> либо именованый тип, либо без цыферки
[02:52:05] <valexey> line = 2 pos = 60 Structure type can not be value type
[02:52:09] <valexey> вот. получи :-)
[02:52:53] <белый шум> нда-а
[02:52:53] <valexey> а, вот так вот работает: VAR buf : ARRAY OF CHAR
[02:53:26] <белый шум> а IN есть в 07?
[02:53:41] <valexey> неа, есть CONST, VAR и просто (VAL)
[02:53:47] <белый шум> а
[02:54:04] <valexey> на конст не матюгается тоже
[02:54:52] <valexey> о! а открытые массивы там есть, у Вирта то.
[02:55:02] <valexey> они могут быть именно что аргументами функции.
[02:57:35] <valexey> не, вирт таки жжет.
[02:57:50] <valexey> FormalType = ["ARRAY" "OF"] qualident.
qualident = [ident "."] ident.
[02:57:54] <valexey> и всё.
[02:58:11] <valexey> то есть по грамматике судючи, туда можно взасунуть ЛЮБОЙ идентификатор
[02:58:34] <белый шум> а разве нет?
[02:59:04] <valexey> нет, туда можно засунуть только идентификатор типа
[02:59:08] <белый шум> ну, поди, имя модуля никак не засунешь
[02:59:19] <valexey> а где это сказано? :-)
[02:59:28] <valexey> cудя по грамматике -- засунешь.
[02:59:53] <белый шум> массив модулей :)
[03:00:21] <valexey> а чо?
[03:00:24] <valexey> нормально.
[03:00:33] <белый шум> компонентный подход :)
[03:00:37] <valexey> кстати, у него в грамматике ВООБЩЕ не перечислены примитивные типы.
[03:00:45] <valexey> /me facepalm
[03:00:58] <valexey> то есть, судя по грамматике, они не являются ключевыми словами.
[03:08:03] <valexey> О, блин. Зашибись.
[03:08:44] <белый шум> массив модулей откомпилялся? :)
[03:08:57] <valexey> Не :-)
[03:09:00] <valexey> MODULE Test;
TYPE ArrType = POINTER TO ARRAY OF CHAR;

PROCEDURE Tst* (CONST a : INTEGER; buf : ArrType);
BEGIN
END Tst;

END Test.
[03:09:06] <valexey> Вот такое откомпилировалось.
[03:09:43] <valexey> А вот если подставить ArrType в декларацию функции, то компилиться перестанет.
[03:09:49] <valexey> Интуитивно понятно, блин.
[03:09:52] <белый шум> нда
[03:09:54] <valexey> Плюсцы отдыхают.
[03:21:58] <белый шум> это уже фича компилера
[03:22:11] <белый шум> в ББ откомпилялось
[03:22:15] <белый шум> и так и так
[03:22:31] <valexey> это не фича компилятора, это убожество языка :-)
[03:22:43] <valexey> Вот тут описал: http://oberon.talk4fun.net/index.php?topic=55.msg1689#new
[03:25:36] <белый шум> ночью такое читать вредно...
[03:26:00] <белый шум> ладн, надо спать
[03:33:36] <valexey> у-у, блин. оно там еще и от порядка элобарации модулей зависит...
[03:46:41] <valexey> о, компилятор крашнулся
[04:08:52] <valexey> Ну вот. за два-три часа нашел ворох багов в компиляторе и дизайне языка, и сделал биндинг аж к целой одной функции.
[04:10:28] <valexey> такое ощущение складывается, что низкий порог вхождения у Оберона-07 это миф.
[07:44:21] <vlad3> Ты не забывай записывать все грабли...
[08:14:54] <geniepro> > <valexey> по моему, это аффтар должен доплачивать за пользование этим.
)))))
[08:22:41] <geniepro> да вапще Оберон -- это мифологический персонаж, так что всёЮ с ним связанное, -- мифы!!!111 )))
[09:09:23] <geniepro> как продвигается написание биндингов со скоростью 0.3 процедуры в час? ))
[09:09:54] <valexey_> Я только что проснулся :-)
[09:10:18] <geniepro> 5 часов на сон? )))
[09:11:19] <valexey_> 4 :-)
[09:11:29] <geniepro> "Не бережёте Вы себя, Юрий Венедиктович!"
[09:19:15] <valexey_> Нет, вот какого фига я должен имитировать указатель там через 32 бит integer?
[09:22:50] <valexey_> Так писать не переносимо...
[09:23:31] <geniepro> надо написать собственный компилятор -- не будет проблем с отсутствием исходников, я сам езыг можно сделать юзабельным ))
[09:27:47] <valexey_> Огв
[09:44:11] <valexey_> Да, а при попытке в чужую функцию не целое число, а указатель на массив, то есть через var, компилятор падает.
[09:52:48] <valexey_> Вообще надо хотя бы сделать нормальное описание языка. Не на 16 страниц
[09:53:26] <valexey_> И нормальную грамматику
[09:56:11] <geniepro> оно не будет совместимо с виртом ))
[09:56:44] <valexey_> Угу. Зато оно будет совместимо с реальным миром
[10:04:37] <geniepro> нормальная грамматика -- какие есть примеры? Ада?
[10:05:30] <valexey_> Луа вроде имеет вполне нормальную грамматику
[10:05:49] <valexey_> Да даже у оберона второго она лучше
[10:13:11] <valexey_> То есть понятней, удобней.
[10:21:30] <geniepro> де кемиисто со своим заявлением "Клевета!!!111"? )))
[10:22:03] <valexey_> Отдыхает видимо от клевет :-)
[11:15:10] <valexey_> Кстати, в каком виде хотим видеть либу ввода-вывода оберона?
[11:15:49] <valexey_> А то я ведь сейчас кальку с stdio.h сделаю :-)
[11:18:46] <geniepro> ну типа дубовые требования ))
[11:19:14] <valexey_> Да они какие то уж слишком дубовые...
[11:19:55] <geniepro> зато переносимые -- в КП и обероне два вроде реализован ввод/вывод одинаково
[11:20:00] <valexey_> Можно попробавать сделать кальку с ады
[11:20:16] <valexey_> Можно свой велосипед
[11:20:52] <valexey_> vlad2 что думаешь?
[11:24:31] <geniepro> с ады? там же параметризованные пакеты -- put и get перегруженны
[11:27:34] <valexey_> Это нас не остановит :-)
[11:28:35] <valexey_> Кроме того Ada.text_io не параметризуемый
[11:34:12] <geniepro> разве?
[11:34:26] <valexey_> Только что посмотрел
[11:35:04] <valexey_> О! Может рифат сейчас что ответит
[11:36:20] <geniepro> ввод/вывод чисел параметриованные пакеты
[11:36:53] <valexey_> Числа это не текст :-)
[11:37:42] <valexey_> Но вообще да, ада не очень подходит
[11:38:00] <valexey_> Лучше всего подходит или си или модула
[11:39:43] <valexey_> Вообще да, надо придумать форматный ввод и вывод
[11:39:48] <valexey_> Оно
[11:40:01] <valexey_> Без этого неудобно
[11:41:06] <geniepro> в аде же ещё перегрузка функций/процедур/операций есть. а в оберонах же перегрузки нет?
[11:41:08] <geniepro> зачем форматный? достаточно сделать конкатенацию строк
[11:41:25] <valexey_> Гм. А в описании оберона сказано ли какова ассоциативность у оператора плюс?
[11:42:06] <valexey_> Конкатенацию не сделать на уровне библиотеки
[11:58:03] <valexey_> О! Я придумал!
[11:58:21] <valexey_> конкатенация не нужна
[12:01:23] <valexey_> r := s("hello test")+i(10)+r(10.34)+endl();
[12:05:29] <valexey_> Каждая из функций возвращает число записаных символов.
[12:06:17] <valexey_> вроде бы получается красаво
[12:07:18] <valexey_> Красиво :-)
[12:18:42] <белый шум> как называется такая задача: есть набор квадратных областей, надо разместить их на экране так, чтобы они максимально не пересекались. размер экрана ограничен
[12:19:11] <valexey_> На рисование графа похоже
[12:19:26] <valexey_> И на задачу о рюкзаке
[12:43:35] <geniepro> > r := s("hello test")+i(10)+r(10.34)+endl();
чем это отличается от
IO.WriteString("hello test"); IO.WriteInt(10); IO.WriteReal(10.34); IO.Ln;
???
[12:45:15] <valexey_> Видно что это связано. Выражение в одну строчку это нормально, несколько инсинуаций не нормально
[12:45:33] <белый шум> а зочем IO.WriteInt? почему не O.Int?
[12:45:49] <valexey_> Кроме того будем знать сколько реально оно заняло места на экране
[12:45:53] <geniepro> а зочем лишняя сущность O? ))
[12:46:04] <белый шум> а зочем винегрет IO?
[12:46:29] <geniepro> IO -- всем понятно что это такое. а что такое О?
[12:46:38] <белый шум> кому всем?
[12:46:41] <белый шум> :)
[12:46:46] <geniepro> всем программистам
[12:46:57] <geniepro> кому непонятно -- тот не программист )
[12:47:09] <valexey_> Output лучше писать полностью
[12:47:11] <белый шум> ололо :)
[12:47:16] <белый шум> Out ок
[12:47:23] <белый шум> в книге вирта Out
[12:47:26] <valexey_> Или хотя бы out
[12:47:29] <белый шум> и In
[12:47:38] <белый шум> вполне же разумно :)
[12:47:51] <valexey_> Но не в этом суть
[12:48:13] <geniepro> text_io -- вот как надо на самом деле
[12:48:40] <geniepro> Text_IO, учитывая case sensitive в оберонах
[12:48:48] <valexey_> Форматный вывод таки надо как то придумать
[12:49:02] <geniepro> как передавать переменное число аргументов?
[12:49:06] <белый шум> In:=ConsoleIn, Out:=ConsoleOut
[12:49:45] <valexey_> Никак. Списком не вариант, слишком долго готовить
[12:49:46] <белый шум> а ещё логичнее StdConsole потому что консоли разные бываю
[12:50:35] <valexey_> В оберона же даже нет синтаксиса инициализайии массивов
[12:51:14] <valexey_> Значит пойдем по пути буста и хаскеля :-)
[12:51:49] <valexey_> Хотя нет, не выйдет видимо...
[12:51:55] <valexey_> Хотя...
[12:52:51] <valexey_> Вопрос - откуда из сообщении о языке следует, что в языке нет перегрузки функций?
[12:54:10] <valexey_> Ведь там явно следует что сигнатура функции включает в себя не только идентификатор, но и типы формалтных аргументов
[12:54:17] <белый шум> а как её оформить?
[12:54:23] <valexey_> А также их число
[12:54:40] <valexey_> А какие проблемы?
[12:55:44] <valexey_> Может существовать несколько функций ч разными сигнатурами но одинаковыми идентификаторами
[12:55:54] <белый шум> ну, вот, надо мне, допустим, два итератора сложить перегруженым ПЛЮСом. как это описать?
[12:56:15] <valexey_> При чем тут плюсы?
[12:56:31] <valexey_> Про операторы речи не шло
[12:57:14] <белый шум> а, точно да :)
[13:02:17] <белый шум> один форум не грузится вообще, другой устанешь ждать. выходной без оберона! ))
[13:09:11] <valexey_> А зачем тебе по нему быстро бегать?
[13:10:25] <белый шум> ткнул, прочитал, пошёл дальше... всё равно в итоге, после загрузки оказывается, что ничо интересного
[13:14:41] <valexey_> Набросил :-)
[13:16:17] <valexey_> Описание оберона дыряво и не однозначно :-)
[13:24:09] <kemiisto> .
[13:24:34] <белый шум> .__.
[13:28:09] <valexey_> Kemiisto как тебе свежие клеветы?
[13:28:19] <kemiisto> valexey_: нормально
[13:28:30] <kemiisto> ну, вроде как, и не совсем клеветы
[13:28:33] <kemiisto> =)
[13:43:17] <valexey_> Короче я придумал как сделать принтф
[13:43:47] <valexey_> Но будет несколько лиспообразно :-)
[13:46:19] <valexey_> Prints("%s %d", Int(10, Str("hello", nil)));
[13:46:51] <valexey_> Как вам это? :-)
[13:48:00] <kemiisto> не нужно!
[13:48:15] <valexey_> Альтернатива?
[13:49:52] <kemiisto> не нужна! :-D
[13:50:01] <kemiisto> ААА! НЕТ!
[13:50:03] <kemiisto> этот же
[13:50:12] <kemiisto> текст как интерфейс!!!111
[13:50:17] <geniepro> а будет ли тут проверка компилятором типов параметров? если нет, то нинужен такой принтф
[13:50:41] <kemiisto> geniepro: отстал ты от жизни =)
[13:50:46] <kemiisto> проверка типов...
[13:50:48] <kemiisto> фи!
[13:50:49] <geniepro> почему? ))
[13:50:55] <kemiisto> посоны вон на пистоне пишут!
[13:51:00] <kemiisto> и фсё работает!
[13:51:09] <geniepro> посоны -- ламеры, пусть пишут )))
[13:51:13] <kemiisto> используй ТЕСТЫ!!!111
[13:51:29] <valexey_> Не будет. как и в си, но в отличае от си тут гарантировано не будет порчи памятм
[13:51:39] <geniepro> самый лучший тест -- тот, кторый работает во время компиляции ))
[13:52:15] <valexey_> То есть тут будет проверка в рантайме, а в си даже этого нет
[13:52:59] <geniepro> я вот в хаскелле не пользую принтф -- нинужен он, хоть и есть
[13:53:37] <valexey_> Ну да, там есть show :-)
[13:54:27] <valexey_> Но вообще есть ряд задач где вывод по шаблону или формату много удобней
[15:16:15] <geniepro> http://www.kronos.ru/literature/extacy
[15:16:41] <geniepro> Модула-2 в Extacy
--------------------------------------------------------------

Модула-2 транслятор - m2c - реализует язык, описанный Н.Виртом
в работе "Программирование на Модуле-2" (3 и 4 издания), с
добавлением некоторых расширений, а именно:

- обероновский стиль представления численных констант;
- динамически открытые массивов;
- массивы констант;
- параметры только для чтения;
- процедуры с переменным числом параметров;
- экспорт только для чтения;
- переименование импортируемых модулей;
- средства мультиязыкового программирования.

Оберон-2 в Extacy
--------------------------------------------------------------

Оберон-2 транслятор - o2c - реализует язык, описанный Н.Виртом
и Х.Моссенброком в работе "Язык программирования Оберон-2", с
некоторыми расширениями, включающими:

- реализация типа CARDINAL (с вариациями LONG и SHORT);
- перечислимые типы;
- функции HIGH и VAL, как в Модуле-2;
- константные массивы;
- параметры только для чтения;
- модуловский стиль представления численных констант;
- средства мультиязыкового программирования.
[15:17:45] <valexey> трансляция в Си -- no way! :-)
[15:19:23] <valexey> Впрочем, переделать под llvm не должно быть сложно.
[15:20:35] <kemiisto> а у тех, кому надо, всё уже переделано =)
[15:20:43] <kemiisto> а чо no way то!?
[15:20:58] <valexey> к чему лишние зависимости?
[15:24:03] <geniepro> благодаря трансляции в си получается переносимость на все платформы, де есть си
[15:24:39] <geniepro> я подозреваю, что этот транслятор -- прародитель XDS
[15:24:46] <valexey> но теряем часть возможных оптимизации и часть семантики.
[15:24:50] <valexey> угу.
[15:24:55] <kemiisto> geniepro: ты - наблюдательный!
[15:24:57] <valexey> исходники там есть?
[15:25:15] <kemiisto> valexey: только сам знаешь у кого! =)))
[15:25:53] <geniepro> он же платный, для запада. какие исходники?
[15:26:09] <valexey> он сейчас бесплатный для всех
[15:26:45] <geniepro> какую часть семантики можно потерять при трансляции в си, которая сохранится при трансляции в ассемблер? о_О
[15:27:54] <valexey> то которая в сях не бывает :-) например проверка на границы массивов. на уровне машины, а не языка.
[15:28:33] <geniepro> ну вставят код проверки границ массивов, какая проблема?
[15:28:54] <valexey> как? на сях ты этого не сделаешь.
[15:29:21] <valexey> ты ж не забывай, что функционально асм богаче любого другого языка.
[15:29:48] <geniepro> как не сделаю? if (i < 10) arr[i] = 100; else error("Oops!@);
[15:30:09] <valexey> и? это будет проверка на уровне ЯВУ, а нужно на уровне инструкций процессора
[15:30:16] <valexey> x86 умеет проверять такие вещи.
[15:30:26] <valexey> на сях это не выразимо.
[15:31:15] <geniepro> x86 умеет, а какие-то другие процы -- не умеют. а софтверная проверка везде отработает
[15:31:45] <valexey> дык это дело компилятора как это реализовывать. реализация должна быть максимально эффективна.
[15:32:48] <geniepro> тогда компилятор вставит препроцессорные проверки типа процессора и там де надо добавит проверки в сях, а там де не надо -- вставит ассемблерные вставки
[15:33:21] <valexey> о, да! только есть нюанс -- сишный компилятор в общем случае ничего ни про какой асм не знает :-)
[15:34:06] <geniepro> это проблема препроцессора -- определить какой процессор и компилятор сей. не сможет определить -- делать сишный код проверки
[15:34:59] <valexey> задача сильно усложняется. зачем это все? если не хочется компиляться в асм, можно компиляться в llvm :-) оно как минимум проще строже и понятней чем си.
[15:35:40] <geniepro> а кто-нить тут работал на типизированном ассемблере? Type Assembly Language TAL
[15:36:03] <valexey> ну, вот llvm явно типизированный :-) причем строго типизированный.
[15:36:20] <geniepro> ну он не х86
[15:36:33] <geniepro> а так и MSIL тоже типизированный
[15:36:43] <valexey> да, он асбтрактной регистровой машины с бесконечным числом регистров.
[15:37:44] <geniepro> вот интересно про настоящий проц, а не про виртуальный
[15:38:18] <valexey> а какая разница? то что асм будет типизированным не сделает проц типизированным :-)
[15:40:44] <geniepro> что случилось со спутниками ГЛОНАСС? они были запрограммированы на Модуле-2 и утонули )))
[15:44:00] <geniepro> valexey: как продвигается изобретение собственного языка с неполнотой по тьюрингу? ))
[15:44:19] <valexey> пока никак. ковыряюсь вот с этим седьмым обероном
[15:44:34] <valexey> на cmd'шниках обустраивают билд-систему :-)
[15:44:52] <geniepro> надеюсь, оно того стоит. надо потребовать от рифата 10% от стоимости лицензии )) или 20% )))
[15:45:15] <valexey> бакс! :-)
[15:46:52] <valexey> а то сейчас то что есть, оно срет всем подряд прямо в тот же каталог
[15:47:45] <geniepro> ну так 1 проект -_ 1 каталог ))
[15:48:00] <valexey> ога, и куча мусора после сборки.
[15:48:11] <valexey> исходники, объектники, не понятные sym-файлы
[15:48:13] <valexey> пара скриптов
[15:48:22] <valexey> и файло проекта.
[15:48:56] <geniepro> надо в скрипте сделать удаление мусора после компиляции -- всё равно она мгновенная ))
[15:49:10] <valexey> дык уже
[15:50:01] <geniepro> ну вот, кому нужно -- всё наладит как надо ))
[15:51:06] <valexey> я как бэ привык, что бинарник лежит в bin, исходники в src, объектники в obj, а ридмишка, и мейкфал -- в корне директории проекта.
[15:51:26] <valexey> А, блин. Линкер падает.
[15:51:30] <valexey> Тьху!
[15:51:42] <geniepro> )))
[15:51:45] <valexey> Компилятор падает, линкер падает.
[15:51:57] <valexey> И при этом оно 10 баксов стоит.
[15:52:02] <geniepro> и всё это удовольствеи стоит 10 баксов с разработчика ))
[15:52:06] <geniepro> )))
[15:52:24] <valexey> А чо? Правильно, за секс надо платить!
[15:52:49] <geniepro> Рифат должен оплачивать услуги тестеров )))
[16:03:17] <valexey> geniepro: вот так там выглядит проектный файл. точнее, список линкуемых файлов для HelloWorld
[16:03:18] <valexey> Console
WinApi
Kernel
Console
Sample1
Exit

[16:03:26] <valexey> По моему, это некий капец.
[16:03:32] <valexey> Консоль дважды!
[16:19:27] <geniepro> первая консоль -- тип программы -- гуи или консольная
[16:19:59] <valexey> С чего бы?
[16:20:06] <valexey> Это ж команда линкеру.
[16:20:43] <geniepro> там де-то описано было, или рифат на форуме писал, не помню уже
[16:22:41] <geniepro> вапще подобные файлы должны хотя бы уж в формате WinIniFile быть
[16:23:27] <valexey> вообще я бы предпочел чтобы liner.exe и compiler.exe по /? или -help выдавали бы справку как их использовать.
[16:23:59] <valexey> алсо я бы предпочел, чтобы они списки файлов принимали параметров отдельным. А не так велосипедно.
[16:25:33] <geniepro> и вапще -- вон в ghc есть опция make, по которой он сам определяет все модули, которые нужно скомпилять/слинковать ))
[16:26:03] <valexey> та это ладно бы :-)
[16:26:06] <geniepro> но правда в хаскелле нет частей инициализации модулей, которая имеет значение в оберонах
[16:26:22] <valexey> кстати, ты видимо не прав. В бинаре линкера не видно никаких констант console
[16:26:29] <valexey> то есть это не отдельный режим.
[16:27:16] <valexey> А когда в хаскеле идет инициализация консоли и прочие глобальные необходимые вещи?
[16:29:59] <geniepro> это сокрыто внутрях рантайма. но если надо работать с сокетами, то main начинается так:

main = withSocketsDo $ do
blablalba
[16:31:06] <geniepro> типа того:
[16:31:12] <geniepro> import Network
import qualified System.IO as IO
import qualified Control.Exception as E

host :: String
host = "127.0.0.1"

port :: PortID
port = PortNumber 1219

main :: IO ()
main = withSocketsDo $ do
tryConnect


tryConnect :: IO ()
tryConnect = do
hnd <- connectTo host port
putStrLn "Successfully connected! Running loop..."
hnd `IO.hSetBuffering` IO.NoBuffering

runLoop hnd
`E.catch` \_ -> do
tryConnect


runLoop :: IO.Handle -> IO ()
runLoop hnd = do
s <- getLine
hnd `IO.hPutStrLn` s
case s of
"quit" -> return ()
_ -> runLoop hnd
`E.catch` \_ -> do
putStrLn "Connection closed!"

[16:32:01] <valexey> Зато в окамле элаборация происходит сразу!
[16:32:10] <valexey> А хаскель спасает просто ленивость :-)
[16:32:22] <geniepro> элаборация -- это что за матюг новый такой? ))
[16:32:38] <valexey> старый это матюг
[16:32:46] <valexey> курите Аду :-)
[16:32:54] <valexey> о! мегамодуль!
[16:32:56] <valexey> MODULE Exit;

IMPORT WinApi;

BEGIN
WinApi.ExitProcess(0);
END Exit.

[16:33:08] <valexey> Без него програмко падает.
[16:33:57] <geniepro> кстати, пользовательская программа запускается после инициализации модуля Exit ))
[16:34:10] <geniepro> тьфу, до
[16:34:17] <geniepro> инициализации ))
[16:34:27] <valexey> да
[16:34:52] <geniepro> там в файле проекта модули указаны в порядке их инициализации. ЗЛОООО )))
[16:35:12] <valexey> Дык в Сях то же самое.
[16:36:03] <valexey> Но есть нюанс! Там ВНАЧАЛЕ идет элаборация всех единиц компиляции, и ЗАТЕМ передается управление на точку входа-main
[16:36:07] <valexey> а тут точки входа нет вообще.
[16:39:38] <geniepro> linker.exe projectfile binaryfile
projectfile is file which contains “console” or “window” in the first line for
building console or gui application. Following lines in project file should contain
modules names in order, which they are initialized.
[16:39:46] <geniepro> http://exaprog.com/userguide.pdf стр. 3
[16:40:14] <geniepro> так что я не ашипся ))
[16:41:38] <geniepro> build 3: Dijkstra's circle fixed. -- разве не Dijkstra's loop?
[16:47:35] <valexey> да, винда крива.
[16:47:54] <valexey> то что там аж в хедере PE указывается консольное это приложение или оконное -- явный костыль.
[17:02:58] <valexey> о, допилил таки. так уже можно работать тащемто :-)
[17:08:32] <белый шум> на 4фане необходим отдельный раздел про компилер абирона
[17:08:53] <valexey> зачем? других активных тем считай и нет.
[17:09:00] <valexey> это сезонное явление.
[17:09:06] <белый шум> да свалка какая то
[17:09:12] <белый шум> непорядок :)
[17:09:37] <valexey> Все активные темы всегда на верху. По названию тем видно о чем там. Даже тэг есть [Oberon-07m]
[17:09:47] <valexey> Кстати, вот скриптик который я наваял:
[17:09:53] <valexey> @echo off

set prj_name =sample1
set src_dir =src
set bin_dir =bin
set obj_dir =obj
set compiler = "C:\Projects\oberon07m\Bin\compiler.exe"
set linker = "C:\Projects\oberon07m\Bin\linker.exe"

for /f "skip=1" %%i in (%prj_name %.prj) do (
%compiler % %src_dir %/%%i.ob7
)

copy %prj_name %.prj %obj_dir %
move *.obj %obj_dir %
move *.sym %obj_dir %

cd %obj_dir %

%linker % %prj_name %.prj %prj_name %.exe
cd ..
move %obj_dir %\%prj_name %.exe %bin_dir %
[17:10:02] <valexey> дешево, сердито.
[17:10:42] <белый шум> такое надо в конфиг компилера
[17:10:51] <белый шум> куда объектные, куда бинари
[17:11:02] <белый шум> как у fpc сделано
[17:11:16] <valexey> Зачем? Компилятор про бинарь не знает. Он знает про объектники. :-)
[17:11:36] <valexey> Вот линкер слишком умный. Лишить бы его этого ума...
[17:11:47] <белый шум> ну, линкер туда же
[17:14:43] <geniepro> %prj_name % -- зачем пробел?
[17:15:02] <valexey> иначе оно не понимает.
[17:15:15] <valexey> а, я даже могу сказать почему так
[17:15:22] <geniepro> set prj_name =sample1 -- тут перед = надо убрать пробел просто
[17:15:24] <valexey> это тупой-тупой шелл виндовозный.
[17:15:27] <valexey> ога.
[17:15:39] <valexey> поубивал бы.
[17:16:12] <geniepro> да намана, я сам юзаю такие cmd файлы, но без сильной логики -- всякие циклы там не умею готовить ))
[17:16:38] <valexey> ну, тут даже цикл есть :-)
[17:16:43] <белый шум> крутой шелл был у Norton Dos
[17:16:59] <geniepro> что, и такой дос был? ))
[17:17:01] <белый шум> я там делал даже псевдогуй меню на bat ах
[17:17:20] <белый шум> ну, он поверх обычного работал
[17:17:34] <valexey> ты с Norton Commander'ом не путаешь? :-)
[17:17:38] <белый шум> нет
[17:17:45] <белый шум> ndos.com
[17:18:14] <geniepro> а, эта хрень -- часть нортон утилитис
[17:18:31] <белый шум> TEMP\
README.1ST
SYMCFG.BIN
INSTALL.CFG
NUSETUP.CFG
NORTON.CMD
EMERGNCY.CMD
NDOS.COM
NDOS2E.COM
IMAGE.DAT
FFORMAT.DOC
BE.EXE
CALIBRAT.EXE
DIRSORT.EXE
DISKEDIT.EXE
DISKMON.EXE
DISKREET.EXE
DISKTOOL.EXE
DUPDISK.EXE
FILATTR.EXE
FILEDATE.EXE
FILEFIND.EXE
FILEFIX.EXE
FILSIZE.EXE
FL.EXE
IMAGE.EXE
INSTALL.EXE
INSTDOS.EXE
LP.EXE
NCACHE2.EXE
NCACHE2E.EXE
NCC.EXE
NCD.EXE
NDD.EXE
NDIAGS.EXE
NDIAGS_R.EXE
NDOSHELP.EXE
NORTON.EXE
NUCONFIG.EXE
RESCUE.EXE
SFORMAT.EXE
SMARTCAN.EXE
SPEEDISK.EXE
STARTUP.EXE
SYSINFO.EXE
TXSEARCH.EXE
UNERASE.EXE
UNFORMAT.EXE
WIPEINFO.EXE
FFORMAT.EXE
BSA.EXE
ERAPROT.EXE
NCACHE.EXE
NHELP.EXE
FILINFO.EXE
TIMEMARK.EXE
ASK.EXE
ADVISE.HLP
CALIBRAT.HLP
DISKEDIT.HLP
DISKMON.HLP
DISKREET.HLP
DISKTOOL.HLP
DS.HLP
DUPDISK.HLP
FILEFIND.HLP
FILEFIX.HLP
NCC.HLP
NCD.HLP
NDD.HLP
NDIAGS.HLP
NDOSHELP.HLP
NORTON.HLP
NUCONFIG.HLP
RESCUE.HLP
SFORMAT.HLP
SMARTCAN.HLP
SPEEDISK.HLP
SYSINFO.HLP
UNERASE.HLP
UNFORMAT.HLP
WIPEINFO.HLP
NDOS.HLP
NU.HLP
NUDOS5.HLP
TROUBLE.HLP
DISKREET.ICO
FILEFIND.ICO
FILEFIX.ICO
NCD.ICO
NDOS.ICO
NORTON.ICO
PETER.ICO
SFORMAT.ICO
SYSINFO.ICO
DISKEDIT.ICO
NDD.ICO
IMAGE.IDX
INSTDOS.INF
NDOS.INI
FFORMAT.INI
DISKREET.INI
DISKMON.INI
SMARTCAN.INI
EP.INI
NCACHE.INI
NORTON.INI
RESCUE.INI
NU.INI
descript.ion
READ.ME
WHATS.NEW
CONFIG1.NPC
CONFIG2.NPC
CONFIG3.NPC
ZIP.OVL
NDOS.OVL
NORTON.OVL
NUCONFIG.OVL
FFORMAT.QPR
NLIB100.RTL
NDIAGS.SND
CONFIG.SYS
DISKREET.SYS
IO.SYS
MSDOS.SYS
KEYSTACK.SYS
[17:18:49] <geniepro> что-то такое помню -- тоже делал подобное лет 10 назад )
[17:18:49] <белый шум> во, оно всё скопом ставилось и работало
[17:19:35] <белый шум> в досбоксе работает вроде
[17:43:04] <valexey> vlad2 geniepro не знаете какого-нибудь плюгинчика для фара, чтобы несколько файлов редактировать? То есть иметь на экране одновременно.
[17:58:54] <valexey> гы. в дубовых требованиях имеется Гуй!
[17:59:01] <valexey> Как необходимая хрень.
[18:05:46] <valexey> правда там можно тодько точки ставить да мышку координатить
[18:05:51] <valexey> то есть рисовать нормально нельзя
[18:06:29] <белый шум> дубовые
[18:07:14] <valexey> то есть оно ж жутко тормозить будет.
[18:07:18] <valexey> поточечно то если рисовать.
[18:08:02] <белый шум> может имелось в виду просто абстрактная растровая хрень
[18:08:04] <geniepro> > vlad2 geniepro не знаете какого-нибудь плюгинчика для фара, чтобы несколько файлов редактировать? То есть иметь на экране одновременно.

знаю. DOS Navigator называется...
[18:08:15] <valexey> зло.
[18:09:28] <geniepro> я Edit+ юзаю
[18:09:46] <valexey> Edit+ это кто такое?
[18:10:12] <kemiisto> виндузятники
[18:10:14] <kemiisto> =)
[18:10:23] <valexey> дык оно же под венду
[18:10:25] <kemiisto> познайте силу vim!!!
[18:10:29] <kemiisto> emacs!!!
[18:10:35] <kemiisto> TextMate!!!
[18:12:28] <белый шум> ББ
[18:13:04] <valexey> ББ ничего не умеет.
[18:13:17] <kemiisto> КЛЕВЕТЫ!!!
[18:13:25] <kemiisto> ББ умеет всё!
[18:13:36] <белый шум> бгг
[18:13:45] <белый шум> всё или ничего!
[18:13:56] <белый шум> исключений нет.
[18:14:00] <kemiisto> просто precondition не соблюден
[18:14:09] <kemiisto> ты - не тот, кому надо
[18:14:11] <kemiisto> =)
[18:14:31] <белый шум> ха-ха ))
[18:15:11] <geniepro> фар тоже под венду же
[18:15:27] <valexey> доснафигатор есть под винды?
[18:15:36] <valexey> вроде был когда-то, но сейчас не нахожу.
[18:16:20] <geniepro> там интерфейс турбовижновый ))
[18:16:30] <valexey> не, есть некроманстер же
[18:17:14] <белый шум> а он юникодный?
[18:17:22] <geniepro> http://www.ritlabs.com/en/products/dn/
[18:17:39] <geniepro> дос-навигатор? разве в досе был юникод? ))
[18:18:07] <белый шум> фууу :)
[18:18:09] <valexey> юникод от оси не зависит :-)
[18:18:21] <valexey> http://ndn.muxe.com/
[18:18:25] <valexey> тащеито вот
[18:18:37] <geniepro> а бб юникодный? ))) вухахахахаха
[18:19:22] <белый шум> geniepro: таки да ;)
[18:19:37] <белый шум> ucs2 вроде тут
[18:19:53] <белый шум> ну, один хер всё в utf8 льётся
[18:20:47] <geniepro> во-первых -- unicode-16 есть в бб тока в бете 1.6, которая никогда не станет релизом, а значит юзать её в промышленном софте не следует
[18:21:18] <geniepro> во-вторых -- труЪ-юникод -- это UTF-8, которого в ББ нету
[18:22:24] <белый шум> ну, не боги горшки обжигают
[18:23:15] <белый шум> это не бета, это релиз-кандидат :)
[18:25:00] <valexey> вечный
[18:26:37] <белый шум> не в пример опенсурсу, да
[18:27:41] <valexey> вообще то ББ это и есть опенсурс.
[18:27:45] <valexey> типичный.
[18:28:17] <белый шум> комьюнити никакое
[18:28:32] <valexey> дык я и говорю -- типичный опенсорсный проект.
[18:28:36] <белый шум> только клеветы вокруг :)
[18:28:43] <valexey> типичный опенсорсный проект -- дохлый проект.
[18:29:06] <geniepro> rvp74
1:25p что значит гордиться кодом?
"Если ты гордишься кодом, ляг поспи и все пройдет"
Приблизительно так пересказывают книгу "Совершенный код". Ну то есть, если ты написал кусок кода, от которого тебя распирает и ты гордишся им, то этот кусок кода стоит переписать. Мысль весьма спорная и поэтому нетрудно было найти среди коллег несогласных.
Поэтому я решил проверить.
Ниже кусочек кода на Пайтоне которым я горжусь, а следом за ним переписанный кусок кода:

def dot (x,y):
return sum(xi*yi for xi,yi in zip(x,y))


переписанный вариант:

def dot (x,y):
sum = 0
for i in range(min(len(x),len(y))):
sum += x[i] * y[i]
return sum

Конечно, второй вариант работает в 3/2 раза быстрее на трехэлементных векторах, но для меня он менее нагляден.
Первый же вариант большинству не понятен. То есть смысл переписания может заключаться в том чтобы код был понятен даже быдлокодеру. А значит надо писать быдлокод! Вот и весь смысл переписывания, наверное.
[18:29:46] <geniepro> млин, надо писать говнокод (((((((
[18:30:54] <valexey> надо документировать код
[18:31:35] <valexey> конечно джава и оберон это попытки угодить быдлокодерам.
[18:31:52] <valexey> все высокоуровневые конструкции по факту выпилили.
[18:32:01] <valexey> но это не помогает :-)
[18:32:04] <geniepro> dox xs ys = sum $ zipWith (*) xs ys
[18:32:21] <geniepro> dot = sum . zipWith (*)
[18:32:47] <белый шум> заклинания
[18:32:56] <geniepro> чо он гордился своим кусочком кода, не пойму )))
[18:33:35] <geniepro> какие заклинания? сумма перемноженных элементов списков xs и ys
[18:34:01] <valexey> угу. элементарно
[18:34:03] <белый шум> и как я сразу не догадался :)
[18:34:19] <valexey> смысла не больше чем на одну строку кода
[18:34:24] <geniepro> хаскелл изучай -- развивай моск )))
[18:34:38] <белый шум> фу какие двойные стандарты
[18:34:51] <белый шум> только что говорили, что надо чтобы было понятно
[18:34:51] <valexey> где?
[18:35:00] <белый шум> и тут же "не понял - сам дурак"
[18:35:00] <valexey> дык это и есть понятно.
[18:35:02] <белый шум> :D
[18:35:09] <valexey> без лишних сущностей.
[18:35:32] <geniepro> так понятно же. тех кто хаскелл знает, быдлокодерами назвать язык ни у кого не повернётся )))
[18:35:59] <белый шум> когда другие наваяли и отладили эту "одну строчку"
[18:36:08] <valexey> это тот самый случай, когда даже документации функций не надо, достаточно посмотреть на их типы.
[18:36:13] <valexey> zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
[18:36:37] <valexey> sum :: Num a => [a] -> a
[18:36:49] <valexey> больше ничего тащемто и не надо знать.
[18:37:42] <белый шум> » заклинания
[18:39:43] <geniepro> http://rvp74.livejournal.com/186580.html потроллить его надо обероном каким-нить )))
[18:39:46] <valexey> та какие заклинания? у оберона синтаксис объявлений функций сложнее же.
[18:40:58] <valexey> а вот на питоне я эти заклинания не понимаю, кстати.
[18:41:03] <geniepro> оберонопрограмма -- быдлозаклинания )))
[18:41:04] <valexey> там чего-то лишнего намешано
[18:41:30] <geniepro> на питоне ровно тот же самый код, просто более низкоуровнево
[18:41:51] <valexey> потому и менее понятно :-)
[18:42:04] <valexey> алсо у функций типы не посмотреть.
[18:47:57] <valexey> geniepro: а кстати, что будет, если в zipWith подать списки разной длины?
[18:49:32] <valexey> ага, вижу, обрежется
[18:49:35] <geniepro> результирующий список будет минимальной длины
[18:49:59] <valexey> http://tryhaskell.org/ рулит
[18:50:20] <kemiisto> хаскелл - гамно! =)
[18:50:25] <kemiisto> нипанятно никуя
[18:50:30] <kemiisto> нинужен!
[18:50:40] <valexey> :-)
[18:50:45] <valexey> да ладно, там просто все.
[18:51:09] <geniepro> ----------------------------------------------
-- | 'zipWith' generalises 'zip' by zipping with the function given
-- as the first argument, instead of a tupling function.
-- For example, @'zipWith' (+)@ is applied to two lists to produce the
-- list of corresponding sums.
zipWith :: (a->b->c) -> [a]->[b]->[c]
zipWith f (a:as) (b:bs) = f a b : zipWith f as bs
zipWith _ _ _ = []
[18:51:39] <geniepro> zip = zipWith (,)
[19:07:09] <valexey> /me отрепортил еще одну багу компоновщика
[19:12:52] <geniepro> абирон -- углючище )))
[19:14:52] <geniepro> дал команду cabal update -- чота серьёзно апдейтится список хаскельных либ ))
[19:17:13] <valexey> но я таки напишу свой принтф для оберона :-)
[19:17:29] <valexey> и пусть живые позавидуют мертвым!
[19:19:12] <valexey> дас, по форматированию кода, по оформлению, самые красивый код на Аде.
[19:19:28] <valexey> Питон с его обязательными отступами нервно курит в сторонке.
[19:19:47] <valexey> про всякое сишное я молчу вообще. да и хаскель страшен. А вот Ада...
[19:20:10] <geniepro> пример в студию ))
[19:20:12] <valexey> Именно так должен выглядеть промышленный код!
[19:21:19] <geniepro> вот у мя в руках книга Василеску -- там довольно жестокий код. идентификаторы в верхнем регистре -- жесть ))
[19:21:42] <valexey> ну вот например: http://www.google.com/codesearch/p?hl=ru#pFm0LxzAWvs/darwinsource/tarballs/other/gcc_os-1660.tar.gz%7C8Jg0dVvDwFw/gcc_os-1660/gcc/ada/a-textio.ads&q=Text%20lang:ada&d=7
[19:21:54] <geniepro> книга на русском была издана в 1990 году ))
[19:22:15] <valexey> ну и тушка: http://www.google.com/codesearch/p?hl=ru#pFm0LxzAWvs/darwinsource/tarballs/other/gcc_os-1660.tar.gz%7C8Jg0dVvDwFw/gcc_os-1660/gcc/ada/a-textio.adb&q=Text%20lang:ada&d=7
[19:24:07] <geniepro> #ifndef __NHC__
-- | @'createDirectoryIfMissing' parents dir@ creates a new directory
-- @dir@ if it doesn\'t exist. If the first argument is 'True'
-- the function will also create all parent directories if they are missing.
createDirectoryIfMissing :: Bool -- ^ Create its parents too?
-> FilePath -- ^ The path to the directory you want to make
-> IO ()
createDirectoryIfMissing create_parents path0
| create_parents = createDirs (parents path0)
| otherwise = createDirs (take 1 (parents path0))
where
parents = reverse . scanl1 (</>) . splitDirectories . normalise

createDirs [] = return ()
createDirs (dir:[]) = createDir dir throw
createDirs (dir:dirs) =
createDir dir $ \_ -> do
createDirs dirs
createDir dir throw

createDir :: FilePath -> (IOException -> IO ()) -> IO ()
createDir dir notExistHandler = do
r <- try $ createDirectory dir
case (r :: Either IOException ()) of
Right () -> return ()
Left e
| isDoesNotExistError e -> notExistHandler e
-- createDirectory (and indeed POSIX mkdir) does not distinguish
-- between a dir already existing and a file already existing. So we
-- check for it here. Unfortunately there is a slight race condition
-- here, but we think it is benign. It could report an exeption in
-- the case that the dir did exist but another process deletes the
-- directory and creates a file in its place before we can check
-- that the directory did indeed exist.
| isAlreadyExistsError e -> (do
#ifdef mingw32_HOST_OS
withFileStatus "createDirectoryIfMissing" dir $ \st -> do
isDir <- isDirectory st
if isDir then return ()
else throw e
#else
stat <- Posix.getFileStatus dir
if Posix.isDirectory stat
then return ()
else throw e
#endif
) `catch` ((\_ -> return ()) :: IOException -> IO ())
| otherwise -> throw e
#endif /* !__NHC__ */
[19:24:21] <geniepro> наманный такой код ))
[19:24:40] <valexey> ога-ога. с сишными макросами.
[19:25:10] <valexey> Вот хоть пополам разорвись, а код на Аде красивей смотрится и читается легче :-)
[19:26:10] <valexey> По сравнению с Адой, Оберон это просто мерзкий карлик какой-то.
[19:26:24] <geniepro> там стока комментариев, что и кода почти нету ))
[19:26:49] <geniepro> ну так Ада -- дама же ))
[19:26:52] <valexey> да ладно, в тушке кода достаточно.
[19:27:06] <valexey> вот в спеке, да.
[19:27:09] <valexey> но на то она и спека
[19:28:35] <geniepro> омг говнокод детектед:
[19:28:40] <geniepro> loop
ch := Getc (File);

if ch = EOF then
raise End_Error;

elsif ch = LM then
File.Line := File.Line + 1;
File.Col := 1;

elsif ch = PM and then File.Is_Regular_File then
File.Page := File.Page + 1;
File.Line := 1;

else
Item := Character'Val (ch);
File.Col := File.Col + 1;
return;
end if;
end loop;
[19:28:51] <geniepro> куеугт в цикле ))
[19:29:01] <geniepro> retrun*
[19:29:02] <valexey> ужоз!!1
[19:29:03] <geniepro> return* ))
[19:29:12] <valexey> и исключение кстати тоже
[19:37:02] <valexey> " По аналогии с троллингом должен существовать и эльфинг. Принципы эльфинга таковы: В тред приходит некое существо и начинает активно соглашаться с автором поста. Сыпать комплиментами. Превозносить до небес интересы автора, его взгляды, пол, возраст, национальную принадлежность. Автор сначала рад, потом горд, потом начинает смущаться, потом раздражается (ибо эльфа заткнуть практически невозможно), потом доходит до белого каления и банит эльфа. После чего мучается угрызениями совести - к нему пришел такой замечательный человек, а он...
Лучше всего эльфинг выглядит в сочетании с троллячими постами. Например - пишет тролль пост: "Сегодня жестоко запинал котенка, бугага." К нему тут же приходит эльф и начинает: "О, как это замечательно - пинать котят! Просто восхитительно! Меня всегда радуют люди с такими необычными интересами! Котята такие милые, когда их пинаешь! Автор, вы обязательно должны еще не раз попинать котенка и вывесить фотографии нам на радость!!!" Тролль в состоянии полного офигения. Он пытается как-то спровоцировать хоть какой-нибудь скандал, но не тут-то было! Эльфов невозможно задеть. Они непробиваемы. Если эльф начинает сдавать позиции, он зовет в тред еще несколько эльфов, которые с удвоенной силой начинают поддакивать автору поста, хором требуя проды и фоток. Тролль плачет, банит всех подряд, но на место каждого забаненного эльфа приходят двое-трое новых. В конце концов тролль удаляет нафиг запись, потом дневник (эльфы перекидываются на другие записи), потом вообще уходит из интернета и больше не появляется. Эльфы еще несколько месяцев вспоминают у себя на дневниках этого чудесного, прекрасного, тонко чувствующего человека, который принес им столько радости и веселья.
Ужасная сила, эти ваши эльфы. © "
[19:41:23] <geniepro> тестирую hlint на своём калькуляторе. походу нужно снова причёсывать код )))
[19:42:47] <geniepro> getIntegralSheet :: (Integral a, Read a) => IO (Sheet a)
getIntegralSheet = do
s <- getLine
let (r:_) = words s
rows = read r
ss <- sequence $ replicate rows getLine
return $ read $ unlines (s:ss)
`catch` \_ -> do
return $ read "1\t1\n'#Error: no data"

Input.hs:33:11: Error: Use replicateM
Found:
sequence $ replicate rows getLine
Why not:
(Control.Monad.replicateM rows getLine)

Input.hs:35:17: Error: Redundant do
Found:
do return $ read "1\t1\n'#Error: no data"
Why not:
return $ read "1\t1\n'#Error: no data"

2 suggestions

[19:43:57] <valexey> :-)
[19:47:59] <geniepro> Types.hs:35:22: Warning: Use :
Found:
"#" ++ s
Why not:
'#' : s
а и правда ))
[19:49:43] <geniepro> Types.hs:167:27: Warning: Redundant bracket
Found:
(take columns) . (++ repeat "")
Why not:
take columns . (++ repeat "")
а вот тут не уверен, что будет лучше, как он советует...
[20:15:59] <geniepro> log
[20:16:00] <Жаба> geniepro, Logs here: http://62.109.22.137/oberon@conference.jabber.ru/
[20:16:36] <geniepro> уже 100 кБт нафлудили ))
[21:04:54] <valexey> могём, да.
[21:07:07] <белый шум> не 100, а 84... минус оверхед xml :D
[21:07:30] <valexey> html
[21:07:36] <valexey> откуда там xml? :-)
[21:07:43] <белый шум> у меня ;)
[21:08:09] <valexey> все одно знатно нафлудили :-)
[21:08:14] <valexey> флудерасты
[21:09:11] <valexey> кстати тут, в конфе, как я понимаю, в среднем трафик больше чем на форуме :-)
[21:09:43] <valexey> правда тут поток сознания, а не отдельные куски продуманных мыслей.
[21:11:44] <valexey> О какая интересная штука: http://thesz.livejournal.com/1203015.html
[21:12:27] <valexey> http://libnoise.sourceforge.net/examples/complexplanet/index.html
[21:13:12] <valexey> на плюсах конечно же писано. ибо так быстрее всего со всех точек зрения :-)
[21:15:35] <valexey> geniepro: а кстати, помнишь наш тот пример с макросами для твоей задачки? Так вот, это отличный пример куска хедера который фиг с два автоматически отобразишь в какой-нибудь оберон.
[21:29:19] <geniepro> на обероне это и вручную не отобразить )))
[21:32:37] <valexey> ну я ж говорю, проблема современных систем в том, что в качестве языка описания интерфейсов выбран слишком высокоуровневый Си
[21:32:41] <valexey> его хедеры
[21:32:56] <valexey> Вот был бы там оберон, никто бы не плакал :-)
[21:33:11] <valexey> Особенно если ему отпилить наследование записей.
[21:41:58] <белый шум> .set log http://jabb.im/1m6
[21:41:58] <тихий бот> белый шум, log = http://jabb.im/1m6
[21:42:01] <белый шум> log
[21:42:02] <тихий бот> белый шум, http://jabb.im/1m6
[21:42:03] <Жаба> белый шум, Logs here: http://62.109.22.137/oberon@conference.jabber.ru/
[22:10:39] <белый шум> log
[22:10:39] <тихий бот> белый шум, http://jabb.im/1m6
[22:10:40] <Жаба> белый шум, Logs here: http://62.109.22.137/oberon@conference.jabber.ru/
[22:10:57] <белый шум> .list
[22:10:57] <тихий бот> белый шум,
log = "http://jabb.im/1m6"
[22:11:26] <белый шум> .set log логи тут ==> http://jabb.im/1m6
[22:11:26] <тихий бот> белый шум, log = логи тут ==> http://jabb.im/1m6
[22:11:40] <белый шум> работает блин
[22:12:17] <subjrs> крутатень крутатешенька )
[22:12:21] <subjrs> version
[22:12:21] <Жаба> subjrs, you have Psi 0.14-patched on "PCLinuxOS"
[22:12:59] <subjrs> линупс на ноуте!
[22:13:49] <subjrs> вифи карту с полпинка поднял, какой хороший дистр
[22:14:05] <geniepro> log
[22:14:05] <Жаба> geniepro, Logs here: http://62.109.22.137/oberon@conference.jabber.ru/
[22:14:06] <тихий бот> geniepro, логи тут ==> http://jabb.im/1m6
[22:14:06] <subjrs> под дебианом пришлось аж фирмваре качать и конвертить
[22:14:28] <subjrs> а шо, жаба еще жива?
[22:14:56] <geniepro> .set log логи тут ==> http://yaplakal.ru
[22:14:56] <тихий бот> geniepro, log = логи тут ==> http://yaplakal.ru
[22:15:03] <geniepro> log
[22:15:03] <Жаба> geniepro, Logs here: http://62.109.22.137/oberon@conference.jabber.ru/
[22:15:03] <тихий бот> geniepro, логи тут ==> http://yaplakal.ru
[22:15:19] <белый шум> бггг
[22:15:41] <белый шум> .set бггг вам бы всё пиздохаханьки
[22:15:41] <тихий бот> белый шум, бггг = вам бы всё пиздохаханьки
[22:15:44] <белый шум> бггг
[22:15:45] <тихий бот> белый шум, вам бы всё пиздохаханьки
[22:16:22] <geniepro> .set log а логов-то и нету )))
[22:16:22] <тихий бот> geniepro, log = а логов-то и нету )))
[22:16:27] <geniepro> log
[22:16:27] <Жаба> geniepro, Logs here: http://62.109.22.137/oberon@conference.jabber.ru/
[22:16:27] <тихий бот> geniepro, а логов-то и нету )))
[22:16:42] <subjrs> жабу не наипете )
[22:18:14] <белый шум> .set log жаба лж0т!
[22:18:14] <тихий бот> белый шум, log = жаба лж0т!
[22:19:29] <subjrs> .set log я тупое скотино
[22:19:29] <тихий бот> subjrs, log = я тупое скотино
[22:19:41] <geniepro> .list
[22:19:41] <тихий бот> geniepro,
log = "я тупое скотино"
бггг = "вам бы всё пиздохаханьки"
[22:19:58] <subjrs> все, бот нифига теперь не тихий
[22:20:55] <geniepro> а то, что абиронское поделие не соотвествует своему названию -- я уже привык )))
[22:22:28] <geniepro> .set оберон фу кака
[22:22:29] <тихий бот> geniepro, оберон = фу кака
[22:22:32] <geniepro> оберон
[22:22:32] <тихий бот> geniepro, фу кака
[22:22:40] <geniepro> ))
[22:23:15] <geniepro> .set .set бугага
[22:23:16] <тихий бот> geniepro, .set = бугага
[22:23:29] <geniepro> .set log сасямба
[22:23:30] <тихий бот> geniepro, log = сасямба
[22:23:36] <geniepro> log
[22:23:36] <Жаба> geniepro, Logs here: http://62.109.22.137/oberon@conference.jabber.ru/
[22:23:36] <тихий бот> geniepro, сасямба
[22:24:01] <geniepro> хм, чота не сработало ))
[22:24:17] <subjrs> сработало ж
[22:24:21] <geniepro> .list
[22:24:21] <тихий бот> geniepro,
log = "сасямба"
бггг = "вам бы всё пиздохаханьки"
оберон = "фу кака"
.set = "бугага"
[22:24:51] <geniepro> нет, не сработало. я думал, что команда set перегрузится и перестанет работать ))
[22:26:28] <geniepro> .set клевета ты -- сасямба
[22:26:28] <тихий бот> geniepro, клевета = ты -- сасямба
[22:26:58] <valexey_> Клевета
[22:26:59] <geniepro> так, ждём, когда кемиисто начнёт обвинять всех в клевете )))
[22:27:13] <valexey_> клевета
[22:27:13] <тихий бот> valexey_, ты -- сасямба
[22:27:14] <geniepro> .set Клевета ты -- сасямба
[22:27:15] <тихий бот> geniepro, Клевета = ты -- сасямба
[22:27:38] <valexey_> Регистрочувствительное
[22:27:51] <geniepro> ещё и окончаний не понимает ))
[22:28:09] <geniepro> Клевета!!!111
[22:28:12] <valexey_> Тупое :-)
[22:28:30] <geniepro> гыгыгы, ещё и цифр не отличает ))
[22:28:44] <valexey_> Клевета клевет
[22:29:02] <valexey_> Оно точную команду хочет
[22:29:10] <geniepro> Клевета
[22:29:11] <тихий бот> geniepro, ты -- сасямба
[22:29:11] <valexey_> Подстроку не ищет
[22:29:15] <geniepro> Клевета 1
[22:29:29] <geniepro> мрак ))
[22:29:56] <valexey_> Та ладно. Принцип Калашникова же )
[22:30:21] <geniepro> .list
[22:30:22] <тихий бот> geniepro,
log = "сасямба"
бггг = "вам бы всё пиздохаханьки"
оберон = "фу кака"
.set = "бугага"
клевета = "ты -- сасямба"
Клевета = "ты -- сасямба"
[22:31:22] <valexey_> Гонка вооружений у ботов! Госдеповская Ада против православного оберона!
[22:31:44] <valexey_> оберон берет реванш!
[22:32:05] <geniepro> эскалация ботизации )))
[22:32:25] <subjrs> Госдеповская Ада представленна в виде последней редакции
[22:32:34] <valexey_> У буржуев как обычно железо лучше, но наши таки рулят матобеспечением!
[22:32:54] <белый шум> » Подстроку не ищет
это ж команда.
пишем beginMeinCampf же не равно begin :)
[22:33:09] <geniepro> .set блаблабла Мономорфизм, полиморфизм и экзистенциальные типы
Роман Душкин

Аннотация: В статье описываются экзистенциальные типы данных и их применение в функциональной парадигме программирования. Даются определения необходимых понятий — мономорфизма, полиморфизма (высших рангов) и их связи с экзистенциальными типами. Примеры определений типов и функций для их обработки приводятся в основном на языке программирования Haskell.



Article describes the notion of existential types and related theoretical concepts (monomorphism, polymorphism, etc), with examples in Haskell.



Обсуждение статьи ведётся по адресу
http://community.livejournal.com/fprog/8541.html.
[22:33:10] <тихий бот> geniepro, блаблабла = Мономорфизм, полиморфизм и экзистенциальные типы
Роман Душкин

Аннотация: В статье описываются экзистенциальные типы данных и их применение в функциональной парадигме программирования. Даются определения необходимых понятий — мономорфизма, полиморфизма (высших рангов) и их связи с экзистенциальными типами. Примеры определений типов и функций для их обработки приводятся в основном на языке программирования Haskell.



Article describes the notion of existential types and related theoretical concepts (monomorphism, polymorphism, etc), with examples in Haskell.



Обсуждение статьи ведётся по адресу
http://community.livejournal.com/fprog/8541.html.
[22:33:15] <geniepro> блаблабла
[22:33:18] <тихий бот> geniepro, Мономорфизм, полиморфизм и экзистенциальные типы
Роман Душкин

Аннотация: В статье описываются экзистенциальные типы данных и их применение в функциональной парадигме программирования. Даются определения необходимых понятий — мономорфизма, полиморфизма (высших рангов) и их связи с экзистенциальными типами. Примеры определений типов и функций для их обработки приводятся в основном на языке программирования Haskell.



Article describes the notion of existential types and related theoretical concepts (monomorphism, polymorphism, etc), with examples in Haskell.



Обсуждение статьи ведётся по адресу
http://community.livejournal.com/fprog/8541.html.
[22:33:23] <geniepro> )))
[22:33:24] <белый шум> блаблабла
[22:33:34] <тихий бот> белый шум, Мономорфизм, полиморфизм и экзистенциальные типы
Роман Душкин

Аннотация: В статье описываются экзистенциальные типы данных и их применение в функциональной парадигме программирования. Даются определения необходимых понятий — мономорфизма, полиморфизма (высших рангов) и их связи с экзистенциальными типами. Примеры определений типов и функций для их обработки приводятся в основном на языке программирования Haskell.



Article describes the notion of existential types and related theoretical concepts (monomorphism, polymorphism, etc), with examples in Haskell.



Обсуждение статьи ведётся по адресу
http://community.livejournal.com/fprog/8541.html.
[22:33:39] <geniepro> .list
[22:33:54] <тихий бот> geniepro,
log = "сасямба"
бггг = "вам бы всё пиздохаханьки"
оберон = "фу кака"
.set = "бугага"
клевета = "ты -- сасямба"
Клевета = "ты -- сасямба"
блаблабла = "Мономорфизм, полиморфизм и экзистенциальные типы
Роман Душкин

Аннотация: В статье описываются экзистенциальные типы данных и их применение в функциональной парадигме программирования. Даются определения необходимых понятий — мономорфизма, полиморфизма (высших рангов) и их связи с экзистенциальными типами. Примеры определений типов и функций для их обработки приводятся в основном на языке программирования Haskell.



Article describes the notion of existential types and related theoretical concepts (monomorphism, polymorphism, etc), with examples in Haskell.



Обсуждение статьи ведётся по адресу
http://community.livejournal.com/fprog/8541.html."
[22:33:55] <subjrs> брр, пора валить
[22:34:07] <valexey_> Существовательные типы данных!
[22:34:35] <белый шум> бггг
[22:34:35] <тихий бот> белый шум, вам бы всё пиздохаханьки
[22:36:19] <белый шум> .del блаблабла
[22:36:20] <тихий бот> белый шум, блаблабла deleted
[22:36:33] <valexey_> Жестоко
[22:37:55] <geniepro> не, мутабельность -- зло!!!111 )))
[22:41:07] <geniepro> а рэп -- это кал ))
[22:41:26] <белый шум> блаблабла
[22:41:31] <белый шум> ))
[22:42:22] <geniepro> description Epigram '09
last change Tue, 22 Feb 2011 13:40:21
url http://www.e-pig.org/darcs/Pig09

shortlog6 weeks ago pwm@cs.nott.ac.uk My bad commit | commitdiff
6 weeks ago pwm@cs.nott.ac.uk Tweak to def eq commit | commitdiff
6 weeks ago pwm@cs.nott.ac.uk Morning warm-up - brought back Prop commit | commitdiff
6 weeks ago pwm@cs.nott.ac.uk A crummy lam pi sig distiller for ya? commit | commitdiff
7 weeks ago adam.gundry@cis.strath ... Cochon works, albeit with only two tactics: help and quit commit | commitdiff
7 weeks ago adam.gundry@cis.strath ... Make most of ProofState.Edition compile, if not necessar ... commit | commitdiff
7 weeks ago pwm@cs.nott.ac.uk Pushed Elim change to DisplayTm commit | commitdiff
7 weeks ago adam.gundry@cis.strath ... Beginnings of a proof state commit | commitdiff
7 weeks ago pwm@cs.nott.ac.uk Brought back Elim functor commit | commitdiff
7 weeks ago adam.gundry@cis.strath ... Check definitional equality on change of direction commit | commitdiff
7 weeks ago pwm@cs.nott.ac.uk some def eq stuff commit | commitdiff
7 weeks ago adam.gundry@cis.strath ... Spiny typechecker (needs equality) commit | commitdiff
7 weeks ago adam.gundry@cis.strath ... A little bit of sugar and a Show instance for Tm commit | commitdiff
7 weeks ago pwm@cs.nott.ac.uk Remembered to add EtaQuote.lhs this time commit | commitdiff
7 weeks ago adam.gundry@cis.strath ... Stk and toBody and suchlike commit | commitdif
[22:42:30] <geniepro> http://www.e-pig.org/darcsweb?r=Pig09
[22:46:39] <geniepro> ладно, всем бб
[22:46:45] <geniepro> воистину бб ))
[23:00:53] <kemiisto> нафлудили то!!! =)
[23:01:01] <kemiisto> луна в раке чолэ!?
[23:01:06] <kemiisto> :-O
[23:05:37] <белый шум> бггг
[23:05:38] <тихий бот> белый шум, вам бы всё пиздохаханьки
[23:11:06] <белый шум> .del бггг
[23:11:06] <тихий бот> белый шум, бггг deleted
[23:43:31] <белый шум> .set ping ну, пинг... и чо?
[23:43:31] <тихий бот> белый шум, ping = ну, пинг... и чо?