Home
Objective Caml
ocaml@conference.jabber.ru
Понедельник, 16 января 2012< ^ >
f[x] установил(а) тему: OCaml / ОКамл / Камль -- http://caml.inria.fr | http://camlunity.ru/ (теперь с git доступом!) | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв и тормозит, move on | stdlib only? - ССЗБ | Fight FUD with fire
Конфигурация комнаты
Участники комнаты

GMT+4
[00:01:53] f[x] вошёл(а) в комнату
[00:04:24] <bobry> и еще нытье -- в х-ле для всек контейнеров единообразный интерфейс. в частности для каждого есть fromList / toList
[00:04:29] <bobry> в камле... ?
[00:06:11] <f[x]> есть from_enum to_enum
[00:06:21] <bobry> stdlib?
[00:07:04] <f[x]> см. топик
[00:08:54] <bobry> f[x]: ну я же добавил предисловие "нытье" :)
[00:09:11] <bobry> у французов похоже в общем с дизайном плохо ..
[00:09:19] <bobry> (val (module ... : ...) : ...)
[00:09:24] <bobry> лисп какой то блин
[00:09:34] <bobry> гадты у них также плохо сделаны?
[00:13:42] <Kakadu> люди,  а вот если есть рекурсивная структура-дерево которую надо катаморфизмнуть, но всё может обломиться, если при проходе дерева обнаружится плохой кусок..... то как репортить ошибки такого катаморфизма
[00:13:44] <Kakadu> что-то я подвечер туплю
[00:15:27] <gds> Kakadu: "по-разному".
[00:15:31] <bobry> Kakadu: катаморфизмнуть == свернуть?
[00:15:38] <Kakadu> угу
[00:15:51] bobry для этого вчера Either заюзал
[00:17:34] <bobry> # (::);;
Error: Syntax error
[00:17:36] <bobry> wtf?
[00:17:49] <Andrey Popp> как в iteratees наверное можно
[00:17:49] <gds> хаха ло
[00:17:51] <gds> л
[00:18:47] <bobry> gds: возроди камло в моих глазах, что это за особый статус (::)?
[00:19:14] <gds> original syntax :)
[00:19:17] <bobry> uhuh
[00:19:23] <bobry> гребаные французы
[00:19:29] <Kakadu> напишу какойнить Ok of 'a | Error of 'where * 'what
[00:19:44] <gds> впрочем, и в revised тоже надо сначала определить.
[00:19:59] <bobry> тоже для практичности? лол
[00:20:04] <gds> Kakadu: давай!  только лучше Error of exn
[00:20:17] <bobry> а не лучше ли просто raise тогда
[00:20:24] <bobry> и обернуть свертку в try
[00:23:54] <Kakadu> Да, лучше просто исключение
[00:24:18] <gds> просто исключения -- не очень хороши тем, что нужно их везде и всегда ловить, в том числе "с нижнего уровня", там, где ты об этом и не думаешь.  тип res полезен тем, что, в случае каких-то прослоек апи, знаешь, что функция в среднем уровне, которую вызываешь с верхнего уровня, обязана по-своему обработать ошибки нижнего уровня.
[00:31:51] <Kakadu> gds: мысля ясна
[00:32:42] <gds> вообще, машу вать.  исключения, как и императивщина -- они вам как state monad в х-е.  она есть, она неявная, вы это можете пользовать, но нужно ли оно?  думайте.  в случае низкоуровневого кода -- точно, всё это нужно.  а так -- хз хз.
[00:33:20] <gds> а в случае апи/библиотек -- нафиг оно надо.  делайте чисто функционально.  конечно, если это возможно.
[00:34:59] <bobry> что то я запутался
[00:36:08] <bobry> у меня есть StringMap, у которого type key = string, и есть функция parse_string : string Stream.t -> string
[00:36:32] <bobry> я ей вытягиваю все строки, в том числе ключи для StringMap
[00:37:06] <bobry> тайп чекер камла теперь ругается StringMap.key is incompatible with type string
[00:37:10] <bobry> как такие штуки лечатся?
[00:38:23] <Kakadu> StringMap в другом файле?
[00:38:31] <Kakadu> определен?
[00:38:41] <bobry> не, в том же, там тип key абстрактный
[00:38:48] <bobry> интересно можно ли как нибудь восстановить его тип
[00:39:36] <Kakadu> у меня было что я писал StringMap и в млишнике в качестве типа получалась какая-то несуразица некомпилируемая
[00:39:48] <Kakadu> приходилось руками править млишник
[00:39:54] <Kakadu> но это походу не твой случай
[00:40:11] <bobry> я даже попробовал обернуть StringMap в еще один модуль, с include StringMap with type key = string
[00:40:15] <bobry> не помогло
[00:47:21] <Kakadu> Надо смотреть конкретный твой случай
[00:47:31] <Kakadu> там наверное какой-то мелкий глупый косяк
[00:48:20] <bobry> Kakadu: есть время посмотреть? я могу пушнуть
[00:49:25] <Kakadu> барбра?
[00:50:43] <bobry> cobson
[00:51:46] <bobry> https://github.com/superbobry/cobson/blob/master/src/bson.ml#L114
[00:51:50] <bobry> ругается вот в этом месте
[00:52:35] <bobry> но мне интересен и вопрос в целом -- можно ли восстановить абстрактный тип
[00:52:55] <Kakadu> Obj.magic )
[00:54:52] <gds> ох я сейчас кому-то...
[00:57:18] <Kakadu> gds: а у меня рефлексивность есть
[00:59:12] <gds> магией драться нечестно!
[01:00:12] <Kakadu> Нам про рефлексивность рассказывали на 1й паре по алгебре на 1м курсе. Магии тогда ещё не было
[01:02:44] <Kakadu> bobry: пробовал типы руками указать?
[01:03:05] <bobry> Kakadu: пробовал, эффекта ноль
[01:03:18] <gds> при таком раскладе руками не поможет.  но из исходника непонятно ничего -- откуда взялось что, например.
[01:03:55] <bobry> gds: ну так то streams же
[01:04:08] <gds> нет функтор
[01:04:23] <bobry> тогда я не понял что там не понятно
[01:04:47] <bobry> есть конечно жуткий хак
[01:05:07] <bobry> можно объявить тип key' = string и переопределить нужные функции с этим типом
[01:05:13] <bobry> но это слишком :)
[01:06:13] <Kakadu> Не, что то я не торт
[01:07:04] <Kakadu> надо идти спать, а завтра фигачить фа-диез
[01:07:11] <Kakadu> и ботать филосфию ТТ
[01:07:20] <bobry> и главное не ясно -- нафига было делать key абстрактным в сигнатуре
[01:08:42] <Kakadu> а почему нельзя просто Map.Make(String)?
[01:09:20] <gds> всё можно сделать, только надо подумать.  сейчас мне лень.
[01:09:25] <bobry> потому что first class modules
[01:09:33] <bobry> простой скинтаксис не для французов
[01:10:02] <gds> и fcm вполне ок в плане типов.  это твой косяк.
[01:10:26] <bobry> в чем мой косяк? я про то что там синтаксис избыточный
[01:10:51] <gds> косяк в типе про key.  синтаксис -- другое дело.
[01:11:16] Kakadu вышел(а) из комнаты
[01:11:20] <bobry> как же ок, почему у map тип key скрыт?
[01:12:10] <gds> потому что в абстрактном случае он не нужен.  в конкретном -- укажи type sharing.
[01:12:53] <bobry> type sharing это with type ... ?
[01:13:39] <gds> да.  однако, может быть нужно будет что-то кроме этого, в подобном стиле.
[01:21:20] <gds> а у меня бида за бидой.  канпелятор не хочет угадывать типы, даже так: http://paste.in.ua/3676/ .  ну что тут поделать, а.
[01:23:48] <gds> универсальный ответ: утро вечера ядреннее.  Так Победим.
[01:24:02] gds вышел(а) из комнаты
[02:16:59] Andrey Popp вышел(а) из комнаты
[03:40:30] letrec вошёл(а) в комнату
[03:40:36] letrec вышел(а) из комнаты
[03:40:42] letrec вошёл(а) в комнату
[04:43:01] f[x] вышел(а) из комнаты: Computer went to sleep
[04:50:04] letrec вышел(а) из комнаты
[05:12:58] <bobry> Typhon: а ты случаем не помнишь что там за patch_length в кобзоне?
[05:13:00] <bobry> нафига оно?
[05:15:07] <Typhon> хм, а покажи?
[05:15:10] <Typhon> я не помню так сразу
[05:17:24] <bobry> https://github.com/superbobry/cobson/blob/master/src/bson.ml#L228
[05:17:31] <bobry> я чета спеку полистал -- ничего такого не нашел
[05:24:56] bobry тут хотел прикрутить к кобзону of_bson, но уперся в то что Document не Map
[05:25:40] <bobry> кстати для gds'a есть задачка из одного слова "WTF?!" https://gist.github.com/1617642
[08:26:31] ermine вошёл(а) в комнату
[08:45:11] Andrey Popp вошёл(а) в комнату
[10:01:11] Andrey Popp вышел(а) из комнаты
[11:23:21] ftrvxmtrx вышел(а) из комнаты
[11:29:26] bobry вошёл(а) в комнату
[11:29:27] klapaucius вошёл(а) в комнату
[11:45:49] <bobry> Typhon: не вспомнил случаем? :)
[11:46:24] <Typhon> я всю ночь работал %_
[11:46:25] <Typhon> %)
[11:46:29] <Typhon> ничего не вспомнил
[11:49:44] <bobry> жаль-жаль, придется by trial and error :)
[11:58:42] dzhon вошёл(а) в комнату
[12:12:36] gds вошёл(а) в комнату
[12:16:49] savikov вошёл(а) в комнату
[12:17:06] Kakadu вошёл(а) в комнату
[12:18:16] dzhon вышел(а) из комнаты: Replaced by new connection
[12:18:17] dzhon вошёл(а) в комнату
[12:19:48] Kakadu вошёл(а) в комнату
[12:27:07] <Kakadu> https://github.com/Kakadu/lablqt/commit/49634bc1c4e35d300e53d771d0e6195e8a402e67#L0L32
[12:27:19] <Kakadu> я что-то не понимаю или мне впаривают?
[12:27:30] <Kakadu> по-моему впаривают
[12:28:00] <Kakadu> помню как-то у f[x] спрашивал что быстрее printf vs. print_endline
[12:28:46] <savikov> имхо 2
[12:30:23] <savikov> let print_endline s = print_string s; print_endline "\n" ;;
[12:43:22] <bobry> да, printf действительно медленней
[12:44:21] <gds> ну и что, что printf медленнее?  что, онаносекунды там считаете?
[12:44:44] <Kakadu> для одного аргумента моджет и медленннее, но уже для 2х я не уверен
[12:44:51] <Kakadu> у любом случае printf читабельнее
[12:45:18] <gds> да какая разница в скорости тут?
[12:45:55] <gds> это же вообще какая-то генерилка файлов, там затыки будут на вводе-выводе.
[12:46:06] <Kakadu> gds: мне пофиг на скорость тут, я раньше писал print_endline но потом массово перещел на принтф, ибо он читабельнее , ИМХО
[12:46:09] <bobry> gds: http://windowsclient.net/blogs/damonwildercarr/WindowsLiveWriter/GetMoreLinqOperationsandIntegratet.5only_B9AA/premature_6_2.jpg
[12:46:34] <gds> bobry: ДА!!!
[12:54:05] <Kakadu> Надо запилить с qrntzz соединялка камла и qml
[13:21:22] <gds> интересно, почему хорошая мысля приходит опосля.  думал над полиморфными списками в шелл-дсл, а кодирование подходит только для списков одного уровня.  вот и будут только списки строк, ну максимум чисел ещё.
[13:35:08] <bobry> gds: я там тебе выше вопросик оставлял, глянь плиз как будет минутка
[13:35:20] <gds> глянул, но не понял, в чём wtf
[13:36:59] <bobry> не понятно почему в первом случае у key теряется тип
[13:37:55] <gds> module M = Map.Make((val (module String : Map.OrderedType) : Map.OrderedType with type key = ...)) ?
[13:38:40] <gds> а вообще я чото не понимаю этой конструкции.  зачем она?  Map.Make берёт модуль, зачем тут val?
[13:38:47] <bobry> в OrderedType нету key, есть только t
[13:39:05] <bobry> gds: ну если я правильно понимаю то семантически они эквивалентны
[13:40:03] <gds> короче, напиши минимальную версию кода и с ней уже разбирайся, так всегда проще.
и знай, любое ограничение модуля абстрагирует типы.
[13:40:17] <bobry> да я уже разобрался вчера
[13:40:28] <bobry> просто не понятно почему в абстрактном случае результат такой
[13:41:35] <gds> модуль, возникающий от (M : T), делает абстрактный M.t, если T.t тоже абстрактный.  Это нужное свойство для типизации модулей.
[13:51:24] dzhon вышел(а) из комнаты: Replaced by new connection
[13:51:25] dzhon вошёл(а) в комнату
[13:59:18] shaggie вошёл(а) в комнату
[14:33:35] savikov вышел(а) из комнаты: QIP 2010: Спокойное общение
[15:21:24] Kakadu вышел(а) из комнаты
[15:28:26] Kakadu вошёл(а) в комнату
[15:30:09] savikov вошёл(а) в комнату
[15:41:59] letrec вошёл(а) в комнату
[15:42:07] letrec вышел(а) из комнаты
[15:42:23] letrec вошёл(а) в комнату
[15:48:18] <savikov> картошечки бы сейчас =_=
[15:51:12] <savikov> а для работы с сетью какие модули есть? ^^"
[15:53:38] <Kakadu> ocamlnet?
[15:54:02] <savikov> а где вообще можно взглянуть на список доступных модулей?^^
[15:54:20] <savikov> понятно что скорее всгео на оф сайте
[15:54:25] <savikov> но вот найти не могу v_v
[15:56:08] <Kakadu> нет их там
[15:56:33] <savikov> -_-
[16:33:22] <letrec> savikov: доступных где? в твоём дистрибе? или вообще?
[16:35:06] <gds> если будете "вообще" смотреть, подождите, я тут кое-что локальное у себя допишу, чтобы не было стыдно показывать :]
[16:37:13] <f[x]> по-моему у gds'а по любому вопросу есть секретный блокнотик с решением
[16:41:34] <gds> почти.  но не для любых вопросов, ить.  но в данном случае я тупо спетросянил.
[16:55:04] <gds> savikov: а по-серьёзу -- "ocamlfind ocamlbrowser -all" запускай и увидишь, что у тебя сейчас доступно для использования.
[16:55:31] <savikov> ок, гараж почищу... приду и отпишу =="
[16:55:35] <savikov> и заранее спб
[17:02:35] <letrec> или #list;;
[17:02:42] <letrec> в топлевеле
[17:03:49] <gds> но это пакеты, а не модули.  впрочем, пакеты даже информативнее.
[17:08:21] <letrec> есть такое http://ocaml.paste.pro/5140305
[17:08:41] <letrec> вопрос как создать значение типа PackedInt?
[17:09:39] <f[x]> никак
[17:09:42] <f[x]> без магии
[17:10:14] <f[x]> если это реальный код - то обычно есть другие модули в которых возвращаются значения такого типа
[17:10:24] <letrec> надо что-то типа val : create ... -> t?
[17:10:35] <f[x]> угу
[17:12:15] <letrec> я хочу абстрагироваться от целочисленного типа, объявляю сигнатуру и пишу кучу структур для всех интересующих меня типов
[17:12:43] <letrec> непонятно как вышеозначенный create написать так, чтобы не разрушать абстракцию
[17:12:48] <gds> letrec: говорят, сейчас для чисел модно zarith использовать.
[17:13:18] <letrec> gds: я этим страдаю не для практической цели, просто систему модулей изучаю
[17:14:23] <gds> create должен брать какое-то типизированное значение.  То есть, нужно либо сделать модули чуть разными (например, с разнотипным create), либо брать из вариантного типа (`Int of int | `Int32 of int32 | ...).  Либо можно придумать более сложные схемы, в зависимости от нужды.
[17:15:29] <letrec> т.е. create в сигнатуре делать нечего, если я не хочу полиморфно создавать значения (а я не хочу) и надо просто их реализовать в соответсвующих структурах?
[17:17:04] <letrec> http://ocaml.paste.pro/5140306 типа так?
[17:17:07] <gds> полиморфно всё равно не получится, разве что "полиморфно в зависимости от модуля".  Можешь, например, в модуле PackedInt сделать функцию of_int : int -> t.  (но тогда не нужно ограничивать её сигнатурой PACKED, так как она скроет функцию (но можно для compile time check сделать "module TestInt = (PackedInt : PACKED)")).
[17:17:38] <gds> как раз про это описал, что скроет.
[17:18:56] <letrec> т.е. сигнатуры служат исключительно для контроля видимости, а модули типизируются не номинально, а структурно?
[17:20:06] <f[x]> letrec: бинго! в мануале прочитал? :))
[17:20:07] <gds> именно так.  И ограничением " : PACKED" как раз отрезаешь всё согласно сигнатуре.  Оттого я часто не ограничиваю сигнатурами (либо ограничиваю только для compile time checks того, соответствует ли модуль).
[17:21:23] <gds> кстати, и записи (частично), и объекты тоже типизируются структурно.  Вот и надо было им разводить такой зоопарк...
[17:21:54] <letrec> f[x]: сам допёр :)
[17:22:29] <letrec> gds: про объекты я знал, но до них ещё не дошёл
[17:22:44] <f[x]> letrec: это хинт такой - что можно читать мануал - там всё чётко описано
[17:22:47] <letrec> меня как раз структурная типизация торкает
[17:23:16] <gds> но номинальную тоже накрутить можно поверх, и несложно.  (кстати, в мануле это чотко описано, но в применении к объедктам.)
[17:23:46] <letrec> f[x]: я читаю не только мануал, но и 3 книги паралельно, но когда с пацанами обсуждаешь, то лучше доходит :)
[17:24:04] <f[x]> ок!
[17:24:06] <gds> f[x]: в самом деле, что за глупости ты предлагаешь!  зачем манул, если есть чятик!
[17:25:40] <f[x]> :)
[17:26:28] <letrec> я вот здесь http://caml.inria.fr/pub/docs/manual-ocaml/manual004.html не могу найти про то, что модули структурно типизируются
[17:38:30] <f[x]> letrec: http://caml.inria.fr/pub/docs/manual-ocaml/manual018.html#htoc84
[17:41:00] Typhon вышел(а) из комнаты
[17:43:08] <f[x]> первая часть - это неформальное вступление
[18:28:47] dzhon вышел(а) из комнаты
[18:34:36] savikov вышел(а) из комнаты
[18:36:25] <letrec> есть такое http://ocaml.paste.pro/5140312
[18:37:25] <letrec> когда мы пишем PackedInt.create 1 новое значение создаётся физически или компилятор просто int выделяет в куче?
[18:37:44] <letrec> криво сформулировал
[18:38:34] <letrec> т.е. если бы был не Int, а какой-то boxed тип, создалось бы новое значение в памяти?
[18:39:23] <f[x]> нет
[18:39:33] <f[x]> копирование всегда явное
[18:39:45] <letrec> т.е. эта абстракция халявная?
[18:39:55] <letrec> мы за неё ничего не платим?
[18:39:55] <f[x]> нет :)
[18:40:06] <letrec> ок, какой оверхед?
[18:40:19] <f[x]> > compiler doesn't inline over functor boundaries
[18:40:53] <f[x]> посмотри асм, емнип там будет косвенный вызов IntPrinter.print
[18:43:33] <letrec> вот же засада, я где-то читал, что MLton расфункторивает всё в клочья
[18:43:49] <letrec> и бастракция халявная получается
[18:45:09] <f[x]> угу
[18:45:36] <f[x]> только компилит полчаса и рантайм у него тормозной
[18:45:59] <f[x]> и дохлей чем камль (казалось бы, как такое может быть?)
[18:50:18] <letrec> что дохлее это да, судя по сайту
[18:50:38] <bobry> sml еще дохлее, не?
[18:53:13] <letrec> sml это же вроде как стандарт, а не реализация, не?
[18:59:43] <letrec> а есть какие-то принципиальные сложности с over functor boundaries? или просто никто не сделал?
[18:59:52] <letrec> с инлайнингом
[18:59:56] Typhon вошёл(а) в комнату
[19:00:20] <gds> если программа дойдёт до стадии, когда избавление от функторов поимеет профит, это можно будет сделать.  1. ocamldefun (дохлый, но, может, можно пофиксить, 2. ручное создание модулей: вместо Functor(Module) копипастим модуль, затем убираем создание функтора и переименовываем результат.  результат: бывший функтор будет использовать фиксированный модуль вместо аргумента.
[19:01:05] <gds> но, почти уверен, программа не дойдёт до стадии, когда избавление от функторов будет обоснованным.  кроме случаев, когда "ехал функтор через функтор".
[19:01:37] <bobry> letrec: sml of new jersey? http://www.smlnj.org/
[19:01:46] <letrec> ну, а тупо хештаблица разве не будет работать быстрее, если сравнение проинлайнить?
[19:03:00] <bobry> http://www.cafepress.com/+hackers_black_tshirt,71014523
[19:03:05] <bobry> всем по футболке!
[19:03:15] <bobry> ocaml hackers, we don't need no unsafePerformIO
[19:04:13] Kakadu вышел(а) из комнаты: Replaced by new connection
[19:04:13] Kakadu вошёл(а) в комнату
[19:05:48] <letrec> футболка хорошая
[19:06:44] <f[x]> letrec: конечно, годный инлайнинг годен
[19:07:53] bobry вышел(а) из комнаты
[19:12:05] <letrec> gds: я тогда не понимаю, что имеется в виду под "программа не дойдёт до стадии, когда избавление от функторов будет обоснованным". о какой стадии идёт речь?
[19:12:24] <gds> речь о стадии "дрочево на производительность".
[19:12:40] <gds> точнее, о процессе, ну и о конкретной стадии "избавление от функторов".
[19:13:08] <letrec> ну, если ты это не руками делаешь, а компилятор, то почемц бы и нет?
[19:14:17] <gds> в данном случае компилятор не делает.  Но оверхед не настолько большой в целом, про то и говорю.  Чаще будут совершенно другие проблемы.
[19:14:37] <letrec> уловил мысль
[19:14:54] <letrec> обычно оно именно так и обстоит
[19:15:52] <letrec> а наследованию хаскельных тайпклассов в камле соответсвует include в сигнатурах?
[19:17:28] <f[x]> letrec: принципиальный сложности просто с хорошим инлайнингом и separate compilation
[19:17:33] <f[x]> * ые
[19:17:57] <f[x]> gds: ocamldefun собственно и делает пункт 2 - чисто синтаксически
[19:20:07] <letrec> f[x]: т.е. к моменту инлайнинга у нас может не быть того, что могли бы проинлайнить? потому как его компилили отдельно?
[19:20:11] <gds> letrec: про тайпклассы -- смотря как их делать.  если на модулях, то да.
[19:20:32] <letrec> gds: на модулях, а можно ещё как-то?
[19:21:01] <gds> про инлайнинг -- и separate compilation, и ещё, наверное, внутренняя раскладка модулей в памяти может мешать.  если грамотно сделать, конечно, не будет проблем.
[19:21:20] <f[x]> letrec: ну для обычных модулей в cmx складываются куски модулей - кандидаты на инлайнинг
[19:21:22] <gds> f[x]: ага, про ocamldefun помню, говорили, но удивительно тогда, почему оно только под старыми камлами работает.
[19:23:16] <f[x]> но видимо чтобы нормально инлайнить функторы - надо их компилить в точке применения
[19:23:16] <gds> letrec: можно и на объектах.  Я, например, в cadastr сделал на объектах.  Есть значение с типом ti 'a, которое хранит полезные операции над 'a.  Однако внутри там.. не то, что магия, но специфические вещи, чтобы сделать это дело очень расширяемым, вплоть до того, что ti 'a может предоставлять функции, работающие с типами, неизвестными на момент компиляции собственно кода, содержащего ti 'a.
[19:23:46] <f[x]> в результате получаем плюсовые шаблоны во всей их красе (с дикими затратами на время и память компиляции)
[19:24:02] <f[x]> правда один бонус что в камле есть компилированные интерфейсы
[19:24:11] <gds> ещё затраты на объём кода, кеш-недружественно, по слухам.
[19:25:09] <f[x]> gds: короче похоже без whole program optimization это нормально не делается
[19:25:50] <gds> то есть, memory dereference и компактный код в целом лучше лезет в кеш и лучше по производительности, чем тонны инлайненного.  В том числе по этой причине инриа и не делала инлайнинг нормальный, в рассылке лерой что-то говорил про это.
[19:26:36] <f[x]> ну да, транслирую - "prefer to err on the safe side"
[19:26:37] <gds> да, whole program opt. -- нужно.  но сложный это вопрос вообще.
конечно, имея свой "линкер" в виде ocamlopt *.cmx -o binary, и свои либы в .cmxa, можно было бы и сделать что-то.
[19:26:44] <letrec> gds: мне один чел из интела, который занимался оптимизацией говорил именно это
[19:27:00] <letrec> про объём кода
[19:27:18] gds виртуально повысился в своих глозах
[19:27:34] <f[x]> т.е. как везде - нужно знать меру, а вот как её узнать
[19:27:53] <letrec> только профайлером видимо
[19:27:56] <f[x]> на игрушечных примерах - инлайнить всё подряд - круто, а в реальности - хз
[19:28:10] <f[x]> jit'ом их, jit'ом - ага
[19:28:11] <gds> мне тут х-е#бы говорят, что это всё просто.  Задача вообще тривиальная.  Всё никак руки не дойдут поспрашивать их про детали.
[19:28:34] <letrec> инлайнинг просто?
[19:28:40] <gds> просто, да.
[19:28:44] gds afk 1h
[19:28:49] <f[x]> ещё вариант - отдать на откуп кодеру - прагмами
[19:28:58] <f[x]> но это будет очевидный мрак и ужас
[19:29:02] <letrec> в F# вроде так
[19:29:20] <letrec> там есть ключевое слово для функций inline
[19:30:12] <f[x]> там оно вроде не для этого
[19:30:30] <f[x]> а для ad-hoc полиморфизма
[19:32:04] <letrec> а как они ему помогают?
[19:32:31] <letrec> http://msdn.microsoft.com/en-us/library/dd548047.aspx Inline functions are functions that are integrated directly into the calling code.
[19:32:51] f[x] не копенгаген
[19:33:14] <f[x]> компилер выбирает какую реализацию звать глядя на типы в окружающем "calling code"
[19:35:23] <Kakadu> вроде f[x] правду говорит
[19:35:44] <f[x]> тут в конфе сплошные f# специалисты как посмотрю :)
[19:38:42] <Kakadu> чо, мне диплом на этой херне делать
[19:38:45] <letrec> а без инлайнинга этого не происходит?
[19:39:09] <letrec> Kakadu: будешь нас ликбезить
[19:39:27] <Kakadu> f[x]: там в #dotnet вообще подвывать начали. Жалуются что в чатике три Форневера
[19:39:34] <f[x]> letrec: нет, type inference тогда работать не будет
[19:40:13] <Kakadu> мы там обсуждали какой-то наркоманский паттерн-матчинг, а зрители не хотели видеть эту порнографию
[19:40:34] Kakadu вышел(а) из комнаты
[19:46:17] <letrec> в #dotnet обсуждали pattern matching? это бесчеловечно
[19:46:50] Typhon вышел(а) из комнаты
[19:47:44] Kakadu вышел(а) из комнаты
[19:48:04] ftrvxmtrx вошёл(а) в комнату
[20:00:28] bobry вышел(а) из комнаты
[20:05:26] bobry вошёл(а) в комнату
[20:07:02] bobry вышел(а) из комнаты
[20:18:13] bobry вошёл(а) в комнату
[20:19:21] ftrvxmtrx вышел(а) из комнаты
[20:24:45] bobry вышел(а) из комнаты
[20:31:48] bobry вошёл(а) в комнату
[21:12:40] Kakadu вошёл(а) в комнату
[21:17:30] letrec вышел(а) из комнаты
[21:17:52] <bobry> Kakadu: ping
[21:18:42] <Kakadu> bobry: понг
[21:18:54] <bobry> ты случаем этого мужыка не знаешь? https://sites.google.com/site/kubenskiy/Home/teacher
[21:19:05] <bobry> в csцентре будет fp вести в следующем семестре
[21:19:12] <bobry> я вот думаю -- пойти-не пойти
[21:19:39] <Kakadu> Мне рассказывали
[21:19:46] <bobry> что рассказывали?
[21:19:47] <Kakadu> но он с матмеха ушел --- я его не застал
[21:20:08] <Kakadu> Что если интересуешься функциональщиной --- то можно к нему за дипломами
[21:20:41] <bobry> хммм, неплохая характеристика :)
[21:21:09] <Kakadu> короче я хз
[21:25:56] <Kakadu> bobry: А его лекции рассчитаны на всех или на уже знакомых с функциональщиной?
[21:28:12] <bobry> думаю что на всех
[21:28:14] <Kakadu> если для всех, то думаю записываться надо если только надо халявный экзамен/зачет
[21:28:31] <bobry> да я там вольнослушатель, мне эти экзамены по боку
[21:34:18] ftrvxmtrx вошёл(а) в комнату
[21:38:29] ftrvxmtrx вышел(а) из комнаты
[21:43:46] <bobry> специально для gds'a «y point is more fundamental: the problems we are solving are not simple, elegant problems. We're dealing with the real world, where ugliness like asynchronous exceptions is the norm. Elegant solutions are wonderful, but we can't have that elegance at the cost of correctness. Any solution to the problems at hand needs to take into account all the bad stuff that can happen.»
[21:43:52] <bobry> src: http://www.yesodweb.com/blog/2012/01/conduit-versus-enumerator
[22:03:28] dzhon вошёл(а) в комнату
[22:04:51] f[x] вошёл(а) в комнату
[22:39:32] <gds> bobry: про сирани эстетство -- да, чел верно зрит (причём в корень).  А по сути -- прочитал, но не понял, что именно он хотел сказать.  Типы в итератах плохие?  Да он мой туториал не читал просто.  Или что лучше переименовать?  Если вник, расскажи всратце.
[22:40:52] <bobry> я пока не вник, с итератами то не разобрался, а тут еще эти кондуиты
[22:41:08] <Kakadu> Кондуит и Швамбрания
[22:44:44] shaggie вышел(а) из комнаты
[23:13:47] ermine вышел(а) из комнаты
[23:24:20] ftrvxmtrx вошёл(а) в комнату
[23:38:07] komar вышел(а) из комнаты
[23:40:56] komar вошёл(а) в комнату
[23:45:45] Typhon вошёл(а) в комнату
[23:46:04] Typhon вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!