[08:59:09] <vgodunko> http://en.wikipedia.org/wiki/Rope_%28computer_science%29
[09:05:52] <vgodunko> Даёшь для Ada!
[10:10:07] <gour> /me глянул на IBM Rationale Ada прайс и почесал репу...
[10:10:11] <gour> http://www.itshop.ru/IBM-Rational/IBM/Rational/Software/IBM/Rational/ADA/Developer/Enterprise/Edition/l3t1i1067
[10:10:54] <gour> полтора мульёна в год - неслабо так...
[10:42:05] <landgraf> у нас все дорого, ага )))
[10:47:16] <gour> Ж)
[10:48:21] <landgraf> а что в нем такого хорошего? может поюзать :)
[10:48:54] <gour> в где? в rational ada? не знаю.
[11:18:31] <yeo> возьми поюзай! base edition Supports the following operating systems: HP-UX, IRIX, IBM AIX, and Tru64
[11:18:57] <yeo> а enterprise  Sun SPARC Solaris and Linux operating systems
[11:19:02] <gour> а есть где взять?
[11:19:21] <gour> (так чтобы не только взять, но и взамен ничего не отдавать :) )
[11:19:39] <yeo> у landgraf-а :D
[11:19:45] <gour> :D
[11:22:48] <Okasu> а есть программы, которые генерируют тело из спека, заменяя тела процедур nullом?
[11:23:05] <Okasu> просто каркас
[11:24:24] <yeo> gnatstub, но он не null в теле ставит а возбуздение исключения
[11:24:46] <yeo> если в GPS, то есть тупо пункт в меню
[11:25:25] <Okasu> yeo: а где в GPS искать жтот пункт?
[11:25:32] <landgraf> Okasu, есть срач в linkedin по этому поводу )
[11:26:03] <yeo> Edit/Generate Body
[11:26:17] <landgraf> gour, я могу для внутренного пользования качать, но пока не придумал зачем оно мне надо
[11:26:49] <Okasu> yeo: спасибо
[11:26:54] <yeo> landgraf: боюсь там даже Ada 2005 нет
[11:27:34] <yeo> зато там есть TCP/IP стек на Аде! :) для embedded
[11:27:34] <Okasu> landgraf: да я уже свой велосипед написал на руби, а как написал - полез спрашивать есть ли или нет уже :)
[11:27:50] <Okasu> посмотрим, может мой велосипед и лучше окажется
[11:28:02] <yeo> Круто!
[11:28:33] <yeo> этож надо парсить spec
[11:29:15] <Okasu> ага, много некрасивых регекспов
[11:29:37] <Okasu> но вышло довольно компактно 80loc
[11:31:15] <Okasu> >could not locate gnatstub
[11:31:40] <Okasu> GPS говорит, ну понятно в общем, ексепшоны это не совсем то что мне нужно
[11:32:22] <landgraf> yeo, нет, 95-й только
[11:32:25] <yeo> можно попробовать доставить ASIS
[11:33:50] <Okasu> да, стоит он, просто в PATH его небыло, когда GPS запускал
[11:53:09] <Okasu> вот, сделал в своём велосипеде, чтоб он смотрел что возвращает функция в спеке и лепил в боди обхявление переменной возвращаемого типа и возвращаел её
[11:53:41] <Okasu> а то return null; с функциями не проходит :)
[11:54:02] <landgraf> жавист детектед )
[11:54:46] <Okasu> рубист, на жаве не писал никогда :)
[11:55:10] <Okasu> да я посути только руби, да аду знаю
[11:55:17] <Okasu> и немножко лиспа
[11:55:47] <Okasu> увлёкся программированием чуть меньше года назад
[11:56:31] <vgodunko> Okasu: Ada 2005: return X : Type;
[11:56:46] <landgraf> эт что?
[11:56:54] <vgodunko> Но будет засада с unconstrained типама
[11:57:07] <vgodunko> Это как не объявлять переменную
[11:59:21] <Okasu> о, здорово, но у меня такое чувство, что это какой то нечестный трюк из разряда параметров функций(функции как процедуры) ада12
[11:59:52] <vgodunko> Всё честно и очень удобно
[11:59:59] <vgodunko> Например:
[12:00:48] <vgodunko> return R : Rectangle do
  R.X := 0;
  R.Y := 0;
  R.Width := 1;
  R.Height := 1;
end return;
[12:01:35] <Okasu> ого как
[12:02:57] <Okasu> это создаётся запись, тут же ей присваиваются значения и возврат?
[12:03:33] <vgodunko> Да
[12:03:35] <subj_rs> return r : integer := 1;
еще так можно
[12:03:45] <vgodunko> Пример надуманный немного, но отражает суть
[12:05:03] <Okasu> по мне так тут explicitness попрана
[12:05:52] <Okasu> зачем так делать, если уж мочи нет хочется писать коротка - хватай перлы/руби и прочее
[12:07:05] <Okasu> объявление в ретурне, надож придумать такое >.<
[12:07:34] <Okasu> цпп поди даже до такого не докатилась ещё
[12:07:37] <yeo> это для limited объектов, который нельзя перемещать в памяти
[12:08:19] <Okasu> yeo: не нравится мне это, чудно как то
[12:08:48] <subj_rs>
FD := Open_Read (Name  => FN, FMode => Binary);
     return R : String (1 .. Integer (Gnat.Os_Lib.File_Length (FD))) do
...

здесь возвращаемый string объявлен после того, как мы можем узнать размер файла
[12:09:28] <subj_rs> а если бы Open_Read была процедурой, то пришлось бы изголятца очень сильно в 95-м стандарте
[12:10:52] <Okasu> это имеет смысл, но напминает костыль, ладно-ладно не буду спорить :)
[12:11:13] <subj_rs> а мне больше фичу напоминает, удобно и красиво
[12:32:59] <gour> /me подумал и согласился: объявление объекта в определении сигнатуры - изврат, но для limited - помощь. в общем - годный костыль :)
[12:35:51] <valexеy> Okasu: В плюсах таких проблем нет. Тупо  return Rect{0,0,1,1};
[12:35:54] <valexеy> :-)
[12:36:06] <valexеy> Ну или через конструктор. return Rect(0,0,1,1);
[12:36:30] <yeo> тю, в аде тоже return (0,0,1,1);
[12:36:53] <valexеy> эмм. а в чем будет отличие от того костыля что нарисован выше?
[12:37:44] <yeo> вернуть неважно что, лишь бы поменьше букв
[12:38:54] <valexеy> брр. не понял. return (0,0,1,1) -- это в аде 2005? оно автоматом понимает что это создание новой record и возвращение по значению?
[12:39:09] <vgodunko> Это Ada83
[12:39:17] <valexеy> а этот return с do унутре - это уже Ада12?
[12:39:21] <gour> ну... там какбэ сигнатура-то компилятору известна
[12:39:34] <vgodunko> Эквивалентная запись return Rect'(0,0,1,1);
[12:39:39] <gour> так что он понять должен, что значат эти скобочки
[12:39:43] <yeo> расширенный return это Ada 2005
[12:40:01] <valexеy> А в чем фича расширенного ретурна?
[12:40:17] <valexеy> Ну, кроме именованного задания полей записи.
[12:40:24] <gour> если я правильно понимаю, то с этой ретурн-объектом можно не только write, но и read
[12:40:32] <yeo> можно "править" объект который вернет фанка
[12:40:36] <vgodunko> Она кроется в build-in-place
[12:40:50] <valexеy> Э? Ничего не понял. Пример хочу.
[12:41:09] <vgodunko> type T is task
[12:41:24] <vgodunko> entry Start;
[12:41:30] <vgodunko> Тогда:
[12:41:40] <vgodunko> return X : T do
  X.Start;
end return;
[12:42:11] <gour> ... R.X не только в левой части ( R.X := 10; ) но и в правой ( R.Y := 200 - R.X; )
[12:42:47] <valexеy> оу. то есть задача до кучи стартанет по возвращении значения?
[12:45:26] <vgodunko> Типа того.
[12:45:39] <vgodunko> Много можно найти применений практичных.
[12:45:48] <vgodunko> Например, реализация "конструкторов"
[12:45:52] <vgodunko> для OOP
[12:46:18] <valexеy> и деструкторов :-)
[12:48:25] <vgodunko> Нет, деструкторы нам не нужны
[12:48:27] <vgodunko> :-)
[12:50:17] <valexеy> но они есть!
[12:51:16] <vgodunko> http://pastebin.com/zBhY8iJY
[12:52:36] <vgodunko> С деструктором для контролируемых типов проблем нет.
[12:52:50] <valexеy> ешки-матрешки! это ж жутко лямбду напоминает!
[12:53:00] <vgodunko> С псевдо-деструктором для неконтролируемых типов тоже проблем нет
[12:53:27] <vgodunko> А вот с конструкторами у нас напряжёнка :-(
[12:53:35] <vgodunko> Ибо не определены они в языке.
[12:53:54] <valexеy> тяжко вам
[12:54:02] <valexеy> впрочем, в ObjC тоже не сахар. там их тоже нет
[12:54:17] <valexеy> есть лишь соглашения как инициализирующий метод должен называццо
[12:54:21] <valexеy> повбивал бы
[12:54:35] <valexеy> при этом там целый класс этих методов
[12:54:52] <valexеy> и это к тому же не всегда соблюдается
[12:54:53] <Okasu> valexy: нормально, мне на заткнутой со всех сторон аде писать приятнее чем на руби с его вседозволенностью
[12:54:56] <valexеy> жесть и содомия!
[12:55:12] <valexеy> ой, не надо про динамическую типизацию...
[12:55:23] <valexеy> да еще совместно с мутабельностью переменных
[12:57:01] <yeo> даешь множественное виртуальное наследование!
[12:57:34] <valexеy> а то! плюсы - наше ффсйо!
[12:57:58] <valexеy> алсо виртуальное наследование это по сути костыль для множественного наследования. если множественного нет. то нет и виртуального
[12:58:25] <Okasu> valexy: фанат ФП?
[13:04:51] <valexеy> неа. вообще не фанат чего-либо :-)
[13:05:13] <valexеy> кстати, в плюсах же лямбды есть. все это Адское что тут показывали легко делается через лямбды
[13:06:04] <valexеy> интересно, а почему в Аду просто не введут человеческую лямбду и функции высшего порядка?
[13:06:35] <yeo> проще вернуть указатель на фенкцию :)
[13:06:37] <vgodunko> Расскажите мне, что есть лямбды?
[13:06:37] <Okasu> vuфункции есть
[13:06:44] <Okasu> лябмды не нужны
[13:07:26] <yeo> лямдбы это function X(..) return Y; только если не писать X :D
[13:07:31] <Okasu> vgodunko: безымянные функции, для осложнения жизни погромиста
[13:08:02] <yeo> это существенное упрощение! не нужно сидеть и придумывать благозвучное имя функции :)
[13:08:13] <valexеy> безымянные функции - это всего лишь функциональные литералы :-)
[13:08:47] <valexеy> лямбда функции без замыканий особо не живут. ну, то есть они довольно бессмысленны без них.
[13:08:47] <yeo> ну так все остальное в аде же есть?!
[13:08:52] <Okasu> yeo: а потом, когда что то пойдёт не так днём с огнём не сыщешь где что случилось
[13:09:30] <valexеy> ох уж эти мне сказочники...
[13:09:34] <Okasu> http://archimag.lisper.ru/2011/04/29/%d0%91%d0%b5%d0%b7%d1%8b%d0%bc%d1%8f%d0%bd%d0%bd%d1%8b%d0%b9%20%d0%b2%d1%80%d0%b0%d0%b3 приятной отладки :)
[13:09:37] <valexеy> все с лямбдами хорошо.
[13:10:28] <valexеy> лямбде для отладки имя нафиг не нужно. ибо компилятор/отладчик тупо знает номер СТРОКИ и имя ФАЙЛА где оно лежит.
[13:11:08] <valexеy> но это конечно роляет только в случае если текст программы не есть данные и если у тебя есть этап компиляции вообще :-)
[13:11:14] <valexеy> а в лиспе это не всегда
[13:12:26] <vgodunko> Мне нравится само начало.
[13:13:05] <vgodunko> "И в этом нет  какой-либо проблемы, наоборот, отладчик это лучший друг и советник,  позволяющий лучше понять как на самом деле работает программа и какие  нюансы не были учтены."
[13:13:19] <valexеy> вообще, в плане лямбд на лисп смотреть не стоит. там долгое время они были кривые и не правильные (ибо создатель лиспа не понимал что такое лямбда и нафига оно нужно).
[13:13:46] <valexеy> до-о!
[13:13:51] <yeo> а в сях можно вернуть лямбду из контекста?
[13:13:51] <Okasu> valexy: а где они не кривые?
[13:14:17] <vgodunko> Вообще-то Ada 2012 уже близка к лямбдам.
[13:14:25] <yeo> типа { int x; return лямда (x+5); }
[13:14:27] <valexеy> в сях нет (там нет лямбды). в с++ - да. в с++ есть вполне полноценные лямбды с возможностью захвата локальных переменных.
[13:14:31] <vgodunko> Наверное в следующей версии они будут во всю.
[13:14:42] <valexеy> yeo: да, можно. В С++
[13:14:49] <yeo> и что будет? при выхове же уже нет X
[13:14:57] <vgodunko> Техничести мне кажется лямбды ничего не привнесут.
[13:14:57] <yeo> при вызове*
[13:14:59] <valexеy> Скопируется.
[13:15:05] <valexеy> В контекст.
[13:15:07] <yeo> сборка муссора?
[13:15:14] <valexеy> нет
[13:15:50] <valexеy> просто у лямбды будет локальная переменная которая будет равна значению x
[13:16:19] <valexеy> в плюсах поскольку наличие сборщика мусора не гарантируется, имеется несколько семантик для захвата переменных
[13:16:48] <valexеy> http://ru.wikipedia.org/wiki/C%2B%2B11#.D0.9B.D1.8F.D0.BC.D0.B1.D0.B4.D0.B0-.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B8_.D0.B8_.D0.B2.D1.8B.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F
[13:16:50] <valexеy> собственно вот
[13:16:55] <Okasu> valexy: а где они не кривые?
[13:17:22] <valexеy> Okasu: ну, в хаскелле например.
[13:20:04] <Okasu> эх, надеюсь у ады всё будет хорошо
[13:20:48] <vgodunko> У неё и так не плохо ;-)
[13:25:32] <valexеy> в реализации лямбд резко возникают проблемы как только появляется изменяемое состояние :-)
[13:26:25] <valexеy> потому как по определению лямбдатерм он не работает на изменяемом состоянии, там просто такого понятия нет.
[13:26:50] <valexеy> так что появляются сразу костыли и левые интерпретации как лямбда должна выглядеть в системе с изменяемым состоянием :-)
[13:29:10] <vgodunko> Аналогично любой другой функции с side-effect
[13:29:46] <vgodunko> Т.е. совсем неочевидным образом
[13:30:32] <valexеy> не совсем. то есть с лямбдой все еще хуже. ведь есть же лямбдаподстановки. то есть захват контекста. а если у нас контекст может изменяться ПОСЛЕ захвата его лямбдой, то совершенно не понятно что делать
[13:30:43] <valexеy> ибо в высокой теории про это ничего не сказано :-)
[13:31:00] <valexеy> поэтому каждый изгиляется как может ;-)
[13:31:42] <valexеy> ладно, надо поработать.
[13:33:57] <nordwind> а тем временем... http://www.opennet.ru/opennews/art.shtml?num=34087
[13:38:32] <Okasu> vgodunko: да, главное чтоб плохо не стало
[13:39:07] <Okasu> сегодня "давайте ка мы сотрём немного грань меджду функциями и процедурами"
[13:39:32] <Okasu> а завтра вместе с лямбдами и шагу ступить будет нельзя что бы не наступить на какие нибудь неочивидные грабли
[13:47:40] <Okasu> 703 кодолинии за сегодня накодил, охуеть
[13:50:39] <Okasu> 620 из них я сгенерировал восьмьюдесятью :3
[13:56:57] <nordwind> уличнаяы магия
[14:06:30] <Okasu> https://github.com/Okasu/adb-gen этим это http://www.assembla.com/code/openada/mercurial-5/nodes/source/dynamics/btrigidbody.adb из этого http://www.assembla.com/code/openada/mercurial-5/nodes/source/dynamics/btrigidbody.ads
[14:06:47] <Okasu> может кому пригодится, руби код конешно кошмарный вышел
[14:37:06] <yeo> Okasu: хочешь аналог на Аде? На ASIS-е
[15:00:18] <Okasu> yeo: гнатстаб?
[15:03:14] <yeo> можно попробовать свой сгородить
[15:03:50] <Okasu> да, я как раз об этом подумал
[15:10:40] <valexey > дас, зачем эта ваша Ада, когда есть blocky?
[15:11:05] <valexey > blockly
[15:11:07] <valexey > во
[15:11:35] <yeo> забаньте его!
[15:12:00] <valexey > ну он же явно более нагляден! все явно! ошибок меньше!
[15:12:18] <valexey > и даже опечаток не будет, ибо при программировании там НЕ ПЕЧАТАЮТ!
[15:12:21] <valexey > все мышкой!
[15:12:33] <valexey > в браузере :-D
[15:12:35] <gour> не мышкой
[15:12:39] <gour> пальчиком
[15:12:46] <gour> ибо target - планшетик
[15:12:54] <valexey > брр
[15:13:13] <valexey > не, пальчиком не удобно будет - мелковато пока
[15:13:26] <gour> далаааааадна!
[15:14:06] <gour> двумя пальчиками - вжык - зум - вставил блочок - вжжжык - зумаут - радуешься пёстрой ленте =)
[15:14:31] <gour> но вообще это бред, конечно
[15:15:11] <gour> /me вспомнил какой-то блоковый ЯП, на котором ещё софт для бурана делали или что-то типа того
[15:15:44] <gour> дракон вроде
[15:15:49] <valexey > Дракон
[15:16:05] <gour> угу
[15:16:06] <valexey > вот тут драконоиды тусуются: http://forum.oberoncore.ru/viewforum.php?f=77
[15:16:13] <valexey > и аффтар
[15:16:32] <valexey > но вообще на этом ЯП же на буране НИЧЕГО не было написано :-)
[15:16:43] <valexey > там были на бумажке нарисованы некие общие схемы посредством дракона
[15:16:51] <valexey > по которым программисты уже писали на асме вроде как код
[15:17:25] <gour> суровая правда жизни
[15:17:31] <valexey > алсо драйкон сам по себе не шибко достаточный для алгоритмики. например он не умеет манипулировать состоянием. то есть банально не знает ничего про переменные :-)
[15:18:08] <valexey > ну и смодульностью у него примерно никак.
[15:18:32] <valexey > это как всю прогу в одной процедуре писать :-)
[15:18:46] <valexey > а, ну и про типы я там тоже ничего не видел. и про структуры данных
[15:19:16] <gour> в общем грустнота и печальность.
[15:19:28] <valexey > по сути эти визуальные ЯП находятся сейчас где-то на уровне гм…  даже не знаю. асма?
[15:19:35] <valexey > или макроасма
[15:19:48] <valexey > зато они с КАРТИНКАМИ!
[15:23:02] <valexey > How does Blockly scale to large programs?
It doesn't, at least not yet. Blockly is currently designed for creating relatively small scripts. We have ideas for semantic zooming and other techniques that would allow Blockly to scale. But that is not our current focus. Please do not attempt to maintain the Linux kernel using Blockly.

[15:26:07] <gour> хотя... вообще-то нет, они вполне могут жить. этот дракон, как я сейчас смотрю ( http://forum.oberoncore.ru/viewtopic.php?f=62&t=1148 ) - он оперирует ещё и с процедурами (квадратные блоки на схемах), так что нормально. единственное что мне неясно - как происходят обработки нештатных ситуаций

[15:27:56] <valexey > процедуры это хорошо. но переменные то где? :-)
[15:28:04] <valexey > то есть Дракон это таки не язык программирования
[15:28:12] <valexey > это просто вспомогательный инструмент
[15:28:33] <gour> http://forum.oberoncore.ru/download/file.php?id=563&mode=view
[15:28:37] <valexey > ну, то есть некая как-то формализованная хрень которую мы обычно рисуем на бумажке :-)
[15:28:47] <gour> так что и переменных там есть
[15:28:59] <valexey > вот то что внутри этих прямоугольников - не есть дракон
[15:29:04] <valexey > все эти i:=10
[15:29:07] <gour> http://forum.oberoncore.ru/viewtopic.php?f=62&t=1489
[15:29:32] <valexey > тудя предлагается втыкать прям таки код на том языке в который потом кодогенерировать все это дело
[15:29:36] <valexey > например питон или си
[15:30:23] <valexey > таким образом дракон не есть язык программирования таки :-)
[15:30:35] <valexey > это тупо визуализация условных переходов
[15:33:56] <gour> если я правильно понял - там есть чисто описание (как бы комментарии без кода) и есть реализации каждого блока в схеме.
и, да, в основном эта визуализация нужна/полезна для окидывания взглядом общей картины, что-куда-как переходит

[15:34:50] <gour> /me помотал головой, дабы из неё поскорее вытряхнулись все эти прямоугольнички-ромбики и нырнул обратно в работу
[15:35:01] <valexey > :-)
[15:35:56] <gour> http://drakon.su/_media/vy_drakon.png?cache= =)
[15:36:15] <gour> жестокий алгоритм, imho
[15:40:30] <valexey > угу
[15:40:39] <valexey > я даже представляю что на такое заявление начальство ответит :-)
[15:40:56] <valexey > и сколько там будет цензурных предлогов в предложении :-)
[15:48:41] <gour> http://drakon-practic.ru/ есть видео - описание адского^W драконского magick-а: создания программы
[15:51:39] <valexey > да ну. богомерзость же! как представлю как там будет смотреться сколь-нибуь реально сложный алгоритм во всей своей полноте, так мне плохо становится
[15:52:10] <valexey > а раскрасочка то у редактора в меру психоделическая
[15:52:57] <gour> заставляет программиста быть лаконичным :D
[15:53:32] <gour> /me боится представить, как будет выглядеть блоксхема обработки, скажем, html-документа :)
[15:54:14] <valexey > а я боюсь какого-нибудь алгоритма Касараю
[15:54:31] <valexey > html-документ может и нормально будет смотреться, кстати
[15:55:35] <gour> угу. там состояний-то сколько? каждый тег это состояние
[15:58:19] <valexey > ну… э… брр
[15:58:42] <valexey > ну, кейс, чо. + цикл
[15:58:56] <valexey > кстати, а что такое обработка?
[15:59:04] <valexey > тебе дерево построить шоле надо?
[15:59:25] <valexey > дык то может простой конечный автомат осилит. конечные автоматы на драконе строятся как раз хорошо
[16:01:53] <gour> размеры этого конечного автомата будет огромными просто ну и если брать в расчёт неправильность HTML (необязательность наличия закрывающих тегов как пример) - то будет ещё более разлаписто. повторюсь - это html просто как пример привёл.
[16:04:38] <valexey > а, ну да. html это ж славный отпрыск sgml, который есть жесть и содомия
[16:04:41] <valexey > xml на порядок проще
[16:07:06] <gour> ну да. xml проще, но мир жесток, потому - html :D
[16:27:42] <valexey > "Мне, правда, непонятны две вещи. Почему язык со своеобразной подсветкой синтаксиса _текста_ и мышевознёй называется визуальным, и почему после Python следует " наконец, это Blockly" а не "наконец, это Prolog"?"
[16:41:46] <nordwind> нормальный алгоритм. печать исходников на стопке а0
[16:42:09] <nordwind> дракон это мощно
[16:46:41] <valexey > ога. программирование на кульмане :-)
[16:46:52] <valexey > без всякой печати