Home
Objective Caml
ocaml@conference.jabber.ru
Пятница, 29 октября 2010< ^ >
ygrek установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся! | release crap | judge by commits, not comments | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+4
[00:04:33] arhibot вышел(а) из комнаты
[00:06:33] gds вышел(а) из комнаты
[00:20:18] Kakadu вышел(а) из комнаты
[00:21:15] ermine мучается с camlimages
[00:34:58] ermine вышел(а) из комнаты
[00:36:06] komar вошёл(а) в комнату
[00:55:46] ygrek вышел(а) из комнаты
[01:12:17] komar вышел(а) из комнаты
[01:12:25] komar вошёл(а) в комнату
[01:19:05] serp256 вышел(а) из комнаты
[01:43:06] komar вышел(а) из комнаты
[01:44:46] komar вошёл(а) в комнату
[02:03:33] myxomop87 вышел(а) из комнаты
[02:07:50] komar вышел(а) из комнаты
[02:20:02] zert вышел(а) из комнаты
[06:52:18] Typhon вышел(а) из комнаты
[08:46:07] iNode вошёл(а) в комнату
[09:02:54] gds вошёл(а) в комнату
[09:36:57] <gds> несмотря на то, что харроп спросил в рассылке "How does OCaml update references in the stacks and heap when values are moved by the GC?", я заявляю, что у меня с ним нет ничего общего!
[09:52:14] Typhon вошёл(а) в комнату
[10:16:04] serp256 вошёл(а) в комнату
[10:34:13] ygrek вошёл(а) в комнату
[10:38:01] arhibot вошёл(а) в комнату
[10:47:12] arhibot вышел(а) из комнаты: Replaced by new connection
[10:47:14] arhibot вошёл(а) в комнату
[11:01:17] <f[x]> gds: ты ещё попроси custom_op_move сделать, заодно уж
[11:03:08] <gds> аштойта?  не гуглится, а историю не помню.
[11:03:14] <gds> хотя в целом понятно.
[11:03:43] komar вошёл(а) в комнату
[11:03:44] <gds> но не понятно, как это поможет, если, например, перемещают кусок памяти, в который делают recv().
[11:11:02] myxomop87 вошёл(а) в комнату
[11:14:14] <f[x]> usecase не для recv, а для custom обёрток над разными хэндлами которых может быть много, curl там, или libevent
[11:14:42] <f[x]> хорошо бы ещё померять насколько это влияет на скорость
[11:37:24] <gds> господа, покритикуйте (цель и средства реализации пока что): https://docs.google.com/document/edit?id=10oNr3waN0wqACKkfYBqgGrjLlThCdrHl45BGe7ENsJo&hl=en&authkey=COmk5bMO
[11:38:10] <f[x]> аргх, опера крэшит на гуглодоках
[11:41:10] <gds> Так!
[11:41:16] <gds> сразу операстов видно!
[11:42:34] <gds> кстати, может через publish лучше будет: https://docs.google.com/document/pub?id=10oNr3waN0wqACKkfYBqgGrjLlThCdrHl45BGe7ENsJo
[11:43:58] <komar> gds: че ты как баба епта
[11:44:05] <gds> чоо?
[11:44:11] <komar> на фтп норм выложить неможеш штоле
[11:44:21] <gds> фтп ненужен
[11:46:26] <f[x]> и в js и в си, ну даёшь
[11:47:20] <f[x]> можно парсер и обычный yacc взять, всё равно в камль ast руками придётся конвертить
[11:47:27] <f[x]> т.е. зачем p4 парсер?
[11:47:32] <gds> пока две цели именно такие.  В обоих случаях нужен тупой около-императивный язык.  (в js -- объекты разве что часто нужны.)
[11:47:58] <f[x]> ага, только в js есть gc, а в сях нету, это для начала
[11:48:00] <gds> вот именно про p4 я и думал, нужен ли.
и, видимо, лучше сразу menhir?
[11:48:04] komar вышел(а) из комнаты
[11:48:04] <f[x]> угу
[11:48:40] <gds> про GC -- о да, согласен.  Будет над чем подумать.  Кстати, любым идеям буду рад.
[11:48:53] <gds> а чего, думаете, я в говножыжыцэ начал про GC спрашивать, да и тут тоже...
[11:49:03] <f[x]> имхо это нереально, либо тот либо тот бэкенд будет уг
[11:49:07] <f[x]> либо оба сразу
[11:50:03] <gds> идею понял, но пробовать буду, у меня вариантов нет.
Возможно, будет явная операция создания значений, типа плюсового new.  В js её можно выкинуть.
[11:50:28] <gds> варианты, конечно, есть, тут я наврал.  Но профит тогда будет не оптимальным.
[11:50:30] zert вошёл(а) в комнату
[11:51:03] <f[x]> ты просто не сможешь нормально смаппить функциональный код в сишку без gc
[11:51:10] <f[x]> либо будешь накручивать refcount
[11:51:59] <f[x]> ослабь требования (например -функциональный-)
[11:52:01] <gds> references counting я не буду.  А функционального кода будет не очень много, основа таки императивная.
[11:52:21] <gds> там, где нужно, буду функциональное разворачивать в for+goto+рекурсию :)
[11:52:39] <f[x]> хочется на это посмотреть :)
[11:52:50] <gds> самому тоже.  С другой стороны, очень страшно.
[11:55:07] <gds> с другой стороны, у меня есть преимущество: я могу заставить программиста, использущего трансляцию в си, писать примерно как на си, почти без фп и точно без объектов.
[12:04:57] <Typhon> непонятно зачем в жс и в си транслировать.может генерировать жс, его пускать в браузере (это же нужно, правильно?) а для небраузерного запуска какой-нибудь v8, прости господи, использовать?
[12:05:36] <Typhon> и генерировать тогда по стандартам можно ecmascript
[12:06:24] <gds> в си -- для ембеддед.  Т.е. задачи разные, но тупой императивный язык нужен для обоих.
[12:09:46] <Typhon> а рантайм beep'а не открыт? :)
[12:10:40] <gds> я думал :)  но там консервативный gc, что мне не очень по нраву, ну и, конечно, NIH!1111
[12:11:44] <f[x]> возьми любой компилируемый язык середины 70-х и транслируй его в js
[12:11:55] <f[x]> о, бери си и транслируй в js
[12:12:44] <Typhon> f[x]: тогда писать же придется на си программисту!
[12:13:01] <Typhon> лучше и жс, и си генерировать, по-моему %)
[12:14:07] f[x] предлагает сдаться
[12:14:49] ygrek вышел(а) из комнаты
[12:16:30] <gds> f[x]: прикол в том, что ембеддщик не хочет писать на си.  Точнее, ему приходится, но это ошибконезащищённо.
[12:16:53] <Typhon> правильно не хочет
[12:17:22] <gds> дык.  Только пионеры-системщики с красными глазами хотят писать на си.
[12:19:46] <gds> в плане генерации в си -- я могу даже вплоть до статической проверки впендюрить: если при трансляции получаются лямбды и необходимость в мусорщике, говорить: "э, дарагой, это тебе не js, пиши new + циклы".
[12:20:22] <Typhon> это получается зависимость языка от бэкенда, что, к.м.к., не правильно
[12:20:49] <Typhon> btw, http://mozakai.blogspot.com/2010/08/emscripten-llvm-to-javascript-compiler.html -- вот что нашлось. пока не собрал в голове картинки, что я хочу предложить, но это явно кусок оттуда %)
[12:22:14] <Typhon> про зав-ть разверну чуть -- если семантика языка зависит от бэкенда, то не понятно, зачем делать бэкенды разные для одного языка, а не два языка сразу.
[12:25:55] ermine вошёл(а) в комнату
[12:27:25] <f[x]> у эмбедщиков же есть свой недостижимый идеал - bitc
[12:27:42] <f[x]> Typhon: во во
[12:27:55] <f[x]> языки слишком разные чтобы имело смысл их унифицировать
[12:28:24] <f[x]> т.е. нужен более type-safe си для эмбедщика --> bitC
[12:28:31] <Typhon> или habit :D
[12:29:03] <Typhon> ( http://hasp.cs.pdx.edu/ )
[12:29:15] <f[x]> нужен более type-safe javascript --> haXe или ocamljs
[12:29:29] <f[x]> nih'ов давить
[12:30:11] <gds> > это получается зависимость языка от бэкенда, что, к.м.к., не правильно
ну как сказать.  Я бы хотел в простых случаях разворачивать Array.iter в for-цикл.  То есть, может можно как-то пробовать транслировать в императивщину, но иногда сдаваться, в случаях, когда ад написан.
[12:31:33] <f[x]> Unusual among programming languages, haXe contains a type system which is both strong and dynamic. The compiler will check types implicitly and give compile-time errors, but it also enables the programmer to bypass type-checking and rely on the target platform's dynamic type-handling.
[12:32:12] <f[x]> Current Targets:
Flash 6-8 (AVM1)
Flash 9-10 (AVM2)
Neko
PHP
AS3 (outputs AS source code)
JavaScript
C++
Targets in development:
Java[8]
[12:39:19] <gds> в общем, идею понял.  тогда сделаю штуку для js, потом оторву у неё функциональщину и объекты, добавлю управление памятью, и сделаю штуку для си.  Только вот, чувствую, надо бы сделать так, чтобы и отрывать можно было культурно, и пришивать.
[13:14:09] komar вошёл(а) в комнату
[13:35:16] Kakadu вошёл(а) в комнату
[13:50:14] ʇsʎɯ вошёл(а) в комнату
[13:51:26] ermine вышел(а) из комнаты
[14:16:07] ermine вошёл(а) в комнату
[14:26:20] arhibot вышел(а) из комнаты
[14:33:50] <gds> интересно мнение людей, не слишком долго контачивших с окамлом (ну или воспоминания прошлых лет, когда не вдумывались в rebind/shadowing, если помните).  "let" vs "let rec" -- опишите ваше отношение к ним.
[14:34:42] <Kakadu> я привык уже
[14:35:01] zert как-то нормально сразу относился
[14:36:15] <gds> zert: сразу знал, что let x = .. in let x = .. in .. будет делать rebind?
[14:36:42] <Kakadu> дык это очевидно же?
[14:36:46] <Kakadu> или нет?
[14:37:45] <gds> мне в своё время (как и некоторым другим, судя по периодическим воплям) это не очевидно.  И более того, считают, что каньпелятор должен сам видеть, какая функция рекурсивна, а какая нет, и автоматически подставлять "rec" (!).
[14:38:38] <komar> По воплям let rec от лукавого.
[14:39:08] <gds> по воплям -- синтаксис let rec от глукавого, но семантика let rec как раз им нужна.
[14:39:58] <komar> А так удобно, использую.
[14:40:08] <komar> Правда, примера вспомнить не могу.
[14:40:30] <Kakadu> # let f () = print_endline "5";;
val f : unit -> unit = <fun>
# let f () = f () ;;
val f : unit -> unit = <fun>
# f();;
5
- : unit = ()
# Interrupted.
#
[14:40:31] <gds> то понятно, что любой, пишущий на окамле, использует и let, и let rec.
[14:40:45] <Kakadu> это прикол)
[14:41:03] <Kakadu> никогда не задумывался о таких приколах
[14:41:11] <Kakadu> осталось объяснить когда они нужны)
[14:41:13] <gds> это определение такого же идентификатора.  не настолько уж и прикол, хз.
[14:41:41] <Kakadu> я просто подвожу к следующему вопросу
[14:41:42] <komar> Точно помню, что нужны были.
[14:42:02] <Kakadu> Если у нас компилятор сам подставляет rec, то как он должен интерпритировать код выше?
[14:42:03] <gds> let x = 123 in
let x = x * 2 in
let x = func x in
print_int x
вот зачем нужны.
[14:42:40] <gds> так вот, компилятор не имеет права подставлять/убирать rec.  Многие этого не понимают, и вопят, что таки должен он, и что let rec единственно-правильный.
[14:42:41] <komar> Ну как-то так.
[14:43:32] <gds> понятно, что корни воплей в том, что это поведение не слишком явно раскрыто в мануалах.  Но интересны личные впечатления людей, изучавших окамл -- как у них с этим было.
[14:43:32] <Kakadu> gds: очепятка? вы имели ввиду "без let rec единственно правильный"?
[14:44:10] <gds> Kakadu: имел ввиду "семантика let rec (но с синтаксисом let) единственно-правильна"
[14:44:34] <Kakadu> gds: OK
[14:45:22] <Typhon> я, кажется, на коан наткнулся про let rec. поэтому всё было ок. не припомню недоумений и "а зачем это так!?!?"
[14:46:15] <zert> а я кажется перед окамлем что-то другое изучал, где тоже подобное было
[14:46:18] <zert> но не помню
[15:09:18] ʇsʎɯ вышел(а) из комнаты: Replaced by new connection
[15:09:22] ʇsʎɯ вошёл(а) в комнату
[15:34:00] myxomop87 вышел(а) из комнаты
[15:50:42] <f[x]> в форте для рекурсии специальное слово RECURSE
[15:52:08] f[x] не помнит wtf'ов по let rec, т.к. было понятно зачем он существует
[15:53:54] <ʇsʎɯ> мне ни разу не пригодился
[15:53:58] <ʇsʎɯ> хотя и понятно зачем он
[16:00:50] <f[x]> $ ack-grep -l -c let\ rec *.ml | cut -d: -f 2 | paste -s -d + | bc
35
[16:02:33] <zert> вот я кажись как раз форт перед окамлем и теребил
[16:17:46] ygrek вошёл(а) в комнату
[16:18:01] ygrek вышел(а) из комнаты
[17:11:37] <f[x]> битовая структура которая описывает рантайм фичи либы - как лучше всего экспортировать в камль?
[17:26:11] <gds> классика -- в флаги преобразовывать, в окамловском рантайме даже есть функция какая-то, которая то ли список флагов из битов достаёт, то ли наоборот.
хотя можно и тупо: type feature_set type feature val has : feature_set -> feature -> bool.  Конечно, типы могут быть на самом деле целыми числами, да чем угодно.
[17:31:28] gds вышел(а) из комнаты
[17:41:35] <f[x]> второй вариант нравится, но это ж писанины много :)
[17:55:07] iNode вышел(а) из комнаты
[18:47:33] gds вошёл(а) в комнату
[19:02:40] Typhon вышел(а) из комнаты
[19:23:15] Kakadu вышел(а) из комнаты: I'm happy Miranda IM user. Get it at http://miranda-im.org/.
[19:37:49] serp256 вышел(а) из комнаты
[20:08:43] ʇsʎɯ вышел(а) из комнаты
[20:09:50] ʇsʎɯ вошёл(а) в комнату
[20:13:21] Kakadu вошёл(а) в комнату
[20:17:11] ʇsʎɯ вышел(а) из комнаты
[20:17:57] <gds> с мусорщиком сишным мне вопрос более-менее понятен, то есть, разницу C vs JS в плане мусорщика не учитываем (то есть, вы не учитывайте, а я посмотрю, точно ли придётся делать сишный мусорщик).  Далее, по каким ещё вопросам критиковали мой подход (а именно, генерить и сишечьку, и жабоскриптик из тупого около-императивного языка)?  Затравите же меня!
[21:30:55] Typhon вошёл(а) в комнату
[21:32:10] myxomop87 вошёл(а) в комнату
[22:11:18] Typhon вышел(а) из комнаты
[23:25:25] Typhon вошёл(а) в комнату
[23:32:59] Typhon вышел(а) из комнаты
[23:34:29] komar вышел(а) из комнаты
[23:47:08] <myxomop87> э.. может кто подскажет, оптяь приведение
[23:47:22] <zert> дружелюбное?
[23:47:33] <myxomop87> не очень :)
[23:47:39] <myxomop87> кто-то написал: type id = int
[23:48:02] <myxomop87> теперь я не могу его вывести через printf т.к. оно ругается что тип неизвестен
[23:48:09] <myxomop87> и сложить с ним тоже ничего не могу
[23:48:42] <myxomop87> делал :> но тоже пишет id is not a subtype of int
[23:48:52] <zert> определяй функции для сложения этого типа
[23:49:22] <myxomop87> а другие варианты ?
[23:49:27] <myxomop87> а какже printf ?
[23:57:26] <Kakadu> камлобилд это какая-то хренотень
[23:57:34] <Kakadu> я не понимаю что он мне говорит
[23:57:36] <Kakadu> http://paste.in.ua/1305/
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!