Home
Objective Caml
ocaml@conference.jabber.ru
Суббота, 13 марта 2010< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся! | release crap | voice по запросу | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+3
[00:03:08] <ygrek> можешь быть уверен что если что-то можно было сделать не так как все, то в камле так и сделали
[00:04:31] <sceptic> :D
[00:10:33] <olegfink> ygrek, твои бы слова, да камлевым проблемам со сборкой либ во что-то там
[00:10:45] <olegfink> так как у всех языков с этим траблы, у окамла все должно собираться само
[00:11:20] <ygrek> не надо ля-ля :) у каких языков есть _три_ порта под windows?
[00:11:44] <olegfink> ровно три?
[00:11:47] <olegfink> или хотя бы три?
[00:11:49] valexey вышел(а) из комнаты
[00:12:04] <ygrek> хотя бы
[00:12:09] <olegfink> си
[00:12:18] <ygrek> ой, ну так нечестно
[00:12:25] <gds> ололо на башорг
[00:12:59] <olegfink> кстати, где у окамла три порта?
[00:13:07] <olegfink> или ты про msvc, cygwin и mingw?
[00:13:31] <ygrek> си это не язык, а эфир, сущность всего живого (в кремнии) и олицетворение deus ex machina
[00:13:34] <ygrek> угу
[00:13:42] <olegfink> сколь я помню, там некоторым количеством ифдефов обходятся
[00:14:03] <olegfink> плюс естественно всякие перлы и прочие авк
[00:14:13] <ygrek> да, усложним условие задачи - три дистрибутива одной реализации одного языка
[00:14:42] ermine вышел(а) из комнаты
[00:14:43] <ygrek> три (убиться тапком) бинарных дистрибутива под одну платформу
[00:14:58] <olegfink> интересно, это показатель крутости? :-)
[00:15:14] <ygrek> это показатель французкости, очевидно
[00:15:28] <ygrek> забота о пользователях
[00:15:35] <ygrek> любовь к ближнему
[00:15:51] <ygrek> homo homini
[00:16:15] <olegfink> ага, а также единственно возможное решение проблем, специфичных для каждой сборки
[00:16:43] <olegfink> но вообще да, согласен, все не так круты
[00:17:27] <ygrek> т.е. на каждую проблему есть один порт под которым эта проблема решена
[00:18:03] <ygrek> задача пользователя - выбрать порт так чтобы минимизировать пересечение кол-ва актуальных проблем и проблем решённых в этой сборке
[00:18:09] <olegfink> это вообще правильная стратегия разработки: по бренчу на каждый фикс.
[00:18:52] <ygrek> разработчики тебя услышали, теперь у нас очевидно будет шесть сборок {cygwin,msvc,mingw}-{sse2,no-sse2}
[00:19:49] <olegfink> ну там видимо дальше пользователь должен запускать GA, который скрестит сборки и получит один бинарник, обладающий свойствами всех родителей
[00:20:32] <ygrek> вообще правильно было бы собрать все бренчи камля в одно место и раздавть инсталлятор где галочками выбираешь компоненты :
хочу jocaml + oc4mc + metaocaml минус sse2 минус camlp4
[00:20:42] <ygrek> например
[00:21:14] <olegfink> а разве jocaml с metaocaml вообще по версиям пересекаются?
[00:21:23] <ygrek> точно! нейросеть на нанотехнологиях решает
[00:21:29] <olegfink> ygrek, ну видимо это называется build system
[00:22:12] <ygrek> это называется build system которая прошла тьюринг тест так что сами разработчики уже не знают кто из них человек, а кто машина
[00:22:21] <olegfink> гентушники вот даже прямо минусики и рисуют
[00:23:25] <olegfink> так это давно
[00:23:41] <ygrek> jocaml и metaocaml (с недавних пор) подстроились под релизы камля и раздаются в виде минимального набора патчей
[00:23:42] <olegfink> вот в каком-нибудь репозитории кути часть коммитов подписана человеками, а часть роботами
[00:23:52] <ygrek> что есть гуд
[00:23:59] <olegfink> о, metaocaml ожил?
[00:24:11] <olegfink> по сайту и не скажешь
[00:24:17] <Typhon> недавно письмо было в рассылке
[00:24:34] <Typhon> MetaOCaml lives!
[00:24:45] <olegfink> ой, 700 unread
[00:24:48] <Typhon> http://groups.google.com/group/fa.caml/browse_thread/thread/098357ea26046912
[00:25:17] <olegfink> нашел, спасибо
[00:26:03] <ygrek> что-то меня разнесло потрепаться, пойду спать
[00:26:32] <olegfink> Light testing confirms that BER MetaOCaml is
[00:26:34] <olegfink> backwards-compatible with MetaOCaml, handling previously written
[00:26:51] <olegfink> MetaOCaml code exactly as it was. -- там они же вроде поменяли какие-то токены местами по сравнению с окамлом?
[00:26:57] <olegfink> или это мне уже сны снятся
[00:27:14] <olegfink> что-то вроде <. поменяли с <
[00:27:18] <olegfink> ой, .M
[00:34:54] gds вышел(а) из комнаты: Replaced by new connection
[00:34:55] gds вошёл(а) в комнату
[00:55:07] ygrek вышел(а) из комнаты
[02:49:06] Typhon вышел(а) из комнаты
[04:50:27] gds вышел(а) из комнаты: Replaced by new connection
[04:50:28] gds вошёл(а) в комнату
[09:38:48] Kakadu вошёл(а) в комнату
[09:59:40] iNode вошёл(а) в комнату
[10:01:21] ygrek вошёл(а) в комнату
[11:02:07] ermine вошёл(а) в комнату
[11:04:48] sceptic вышел(а) из комнаты
[11:10:08] sceptic вошёл(а) в комнату
[11:11:51] sceptic вышел(а) из комнаты: offline
[11:54:50] Kakadu вышел(а) из комнаты
[12:01:50] ygrek отослал результаты по ocaml-sse2
[12:51:12] valexey вошёл(а) в комнату
[13:04:41] Typhon вошёл(а) в комнату
[13:21:13] <valexey> а есть в камле нечто вроде forward declaration? экспериментирую. хочу две функции которые вызывают друг друга.
[13:30:13] <Typhon> valexey,  let rec x a = y a and y a = x a;; ?
[13:30:13] <ygrek> let rec f x = g (x - 1) and g x = f (x + 1)
[13:30:53] <valexey> ага. спасибо.
[13:31:15] <valexey> теперь надо понять что за and такой :-)
[13:31:32] <valexey> интуитивно понятно, но надо ж полностью понять :-)
[13:33:26] <ygrek> http://caml.inria.fr/pub/docs/manual-ocaml/index.html
[13:34:40] <valexey> пока тьюториал читаю. www.ocaml-tutorial.org
[13:45:17] <valexey> да, чувствуется что ocaml писали французы :-)
[14:48:38] <ermine> вот щас пригодилось, что в вики много инфы про создание биндингов
[14:49:32] <ermine> valexey: галантный язык?
[14:56:36] <valexey> на аду сильно смахивает концепциями :-)
[14:56:50] <valexey> некоторыми
[14:58:56] <ermine> мне в свое время казалось, что он сильно на С похож
[15:03:17] <valexey> ну, я в плане строгой типизации.
[15:05:08] <ermine> да разве ява злобно типизирована? там кастить можно
[15:05:56] <valexey> а при чем тут ява?
[15:06:26] <ermine> ой, ты про аду
[15:06:48] <valexey> я именно про строгую типизацию -- никаких неявных приведений типов!
[15:07:40] <ermine> ты просто еще до классов и операций вида <: еще не добрался
[15:08:33] <valexey> в том месте тоже похоже на аду :-)
[15:08:41] <valexey> но по хорошему да, ещё не добрался.
[15:09:27] <valexey> хмм... а разве my_ref := 100;;  это эквивалентно *my_ptr = 100; ? мне кажется что это больше похоже на my_ptr = &100; // это псевдокод конечно, но тем не менее.
[15:11:07] Kakadu вошёл(а) в комнату
[15:11:24] Kakadu вышел(а) из комнаты
[15:11:34] <Typhon> тип ref это такой record с единственым мутабельным полем, my_ref := 100 экв. my_ref.contents <- 100 (если не напутал ничего)
[15:14:30] <valexey> а чем таки let my_ref = 100;; лучше/хуже/отличается от let mutable my_mut = 100;; ?
[15:15:27] <Typhon> а что такое "let mutable my_mut" ? oO
[15:16:09] <valexey> ага. значит это уже нововведение F#
[15:17:02] <valexey> см. про mutable в F# тут : http://habrahabr.ru/blogs/programming/55272/
[15:17:15] <Typhon> я в интерпретаторе посмотрел уже :)
[15:17:29] <valexey> т.е. в F# реально можно (я пробовал) написать let mutable что-тотам = чему-то-там
[15:17:43] <valexey> в окамле похоже нельзя.
[15:17:52] <valexey> по кр. мере мну интерпретатор материт.
[15:20:39] digital_curse вошёл(а) в комнату
[15:43:00] <valexey> хез.. а google protobuf'a для камла нету?
[16:13:12] <valexey> хехе. примерчик из тьюториала засегфолтил интерпретатор.
[16:14:11] <ygrek> какой?
[16:18:02] <valexey> второй графический с тьюториала.
[16:18:13] <valexey> причем вылетает если пущать после первого.
[16:18:21] Typhon вышел(а) из комнаты
[16:18:23] <valexey> или пускать два раз подряд
[16:18:39] <valexey> read_line ();;
- : string = "Random.self_init ();;"
# - : unit = ()
#           val iterate : float -> float -> int -> float = <fun>
#                   Segmentation fault
[16:25:52] <ygrek> ни фига не понял
[16:25:55] <ygrek> код?
[16:25:57] <ygrek> ссылка?
[16:27:17] <valexey> http://www.ocaml-tutorial.org/the_structure_of_ocaml_programs
[16:27:36] <valexey> первые два. начиная с open Graphics;;
[16:32:16] <ygrek> не крэшится
[16:33:42] <ygrek> может тебе стека не хватает?
[16:37:11] <valexey> оно крашится в случае если вначале запускаешь первый пример, а потом из того же интерпретатора второй.
[16:39:28] <valexey> http://paste.org.ru/?9p6gn3
[16:39:32] <valexey> вот хм.. лог
[16:39:35] <ygrek> не крэшится, рисует второй рисунок поверх первого
[16:40:03] <ygrek> что за ОС? версия? ulimit -s
[16:41:07] <valexey> $ ulimit -s
8192
[16:41:18] <valexey> $ uname -a
Linux valexey-desktop 2.6.26-2-686 #1 SMP Wed Nov 4 20:45:37 UTC 2009 i686 GNU/Linux
[16:41:34] <valexey> debian lenny
[16:41:37] <ygrek> вот это откуда? Exception: Graphics.Graphic_failure "fatal I/O error".
[16:41:46] <ygrek> закрываешь руками окно?
[16:42:12] <valexey> да
[16:43:18] <ygrek> у меня после этого интерпретатор выходит
[16:46:30] <valexey> кстати, а есть не консольный интерпретатор?
[16:48:46] <ygrek> под винду, но он кривой
[16:49:38] <valexey> не, у меня не подвинда тут.
[16:55:33] <valexey> хм. а почему (+);; -- выдает тип выражения (Int->Int-Int), а (;);; -- не выдает?
[16:55:58] <valexey> хотя написано, что "The ; is an operator, just like + is. "
[16:57:23] <ygrek> это неверно
[16:58:04] <valexey> ну вот и читай после этого тьюториалы...
[16:58:23] <valexey> "it takes two ints and returns an int (the sum). ; has type unit -> 'b -> 'b - it takes two values and simply returns the second one."
[17:00:01] <valexey> все лгут!
[17:03:11] <ermine> в чем?
[17:03:41] <valexey> дык см. выше
[17:03:54] <ermine> лень
[17:04:09] <ermine> у меня тут свои грабли, не менее мистические
[17:06:43] <valexey> гм. а в камле ведь никак не посмотреть какие модули пользует данный модуль? ведь open опционален.
[17:10:23] ygrek вышел(а) из комнаты
[17:10:32] ygrek вошёл(а) в комнату
[17:10:49] <ermine> ocamldep находит
[17:11:04] ygrek вышел(а) из комнаты
[17:12:05] <valexey> ага. гут.
[17:12:15] <valexey> хоть тулза есть :-)
[17:28:00] ygrek вошёл(а) в комнату
[17:47:24] valexey вышел(а) из комнаты
[17:55:41] valexey вошёл(а) в комнату
[17:55:52] <valexey> чо-то какой-то маразм в камле с рекордами.
[17:56:24] <valexey> type s1 = { a : int; b : int };;
type s2 = { a : int; b : int };;
{a=3;b=3};;
[17:56:35] <valexey> какой тип будет иметь {a=3,b=3} ?
[17:57:14] <valexey> интерпретатор утверждает что s2
[17:57:18] <valexey> но с какого перепугу?
[17:57:31] <ygrek> rtfm
[17:57:34] <valexey> даже явная квалификация типа не позволяет создать экземпляр s1
[17:57:47] valexey дошел в тьюториале до рекордов
[17:57:58] <valexey> пока оно меня поставило в тупик
[18:23:00] <valexey> что-то в fm я этого не нахожу.
[18:23:28] <valexey> вот тут: http://caml.inria.fr/pub/docs/manual-ocaml/manual003.html#toc7
[18:23:30] <valexey> этого нет
[18:31:20] <valexey> в спеке на f# написано что это да, проблема. и в следующих версиях f# это будет поправлено (можно будет явно квалифицировать тип при объявлении)
[18:32:25] <ygrek> не нахожу этого в мануале
[18:32:32] <ygrek> в 3.12 можно будет явно квалифицировать
[18:39:33] Kakadu вошёл(а) в комнату
[18:44:22] <Kakadu> вот я умею писать функции, которые вызыввают одна другую накрест. А как сделать то же  самое с типами?
[18:49:27] <ygrek> Kakadu: точно так же type q = A of x | B of int and x = q * q
[19:01:57] <valexey> ygrek: а есть где-нибудь спецификация языка?
[19:02:04] <valexey> или тот хм.. мануал и есть спецификация?
[19:22:36] sceptic вошёл(а) в комнату
[19:27:42] <valexey> о! функторы здешние тоже весьма похоже на дженерики адские.
[19:27:53] <valexey> параметризуемые пакеджы
[19:28:58] <valexey> хм. правда я не очень понимаю зачем это, если у нас имеются всякие разные лямбды и вообще hof
[19:34:03] <ygrek> мануал (плюс реализация) и есть спецификация
[19:35:43] <valexey> злые, бесчувственные люди...
[19:35:51] <valexey> но, у f# спека таки есть.
[19:36:04] <valexey> EBNF то хоть есть где языка?
[19:37:01] <olegfink> http://caml.inria.fr/pub/docs/manual-ocaml/language.html ?
[19:38:13] <sceptic> на французском конечно?
[19:47:20] <valexey> какая-то спека не сурьезная
[19:47:59] <sceptic> тебе нужен выворот на пару десятков страниц EBNF?
[19:49:38] <valexey> нет, мне нужно описание языка где будет хотя бы описана ситуация с record'ами.
[19:50:34] <sceptic> google.com/codesearch
[19:51:14] <valexey> злой ты...
[19:51:15] <ygrek> valexey: спеки нет. ситуация очевидная - поля рекордов перекрываются
[19:51:50] <ygrek> let x = 2 let x = 3 - к первому x доступа нет
type x = A type x = A | B - к первому x доступа нет
[19:52:33] <valexey> ужасы какие
[19:59:44] <valexey> пррекрасно. два типа записей:
type s2 = {a:int;b:string};;
type s3 = {a:int;c:int};;
создаем запись:
{a=10;b="hello"}
имеем ошибку:
The record field label b belongs to the type s2
but is here mixed with labels of type s3
[19:59:50] <valexey> и что в таких случаях делать?
[19:59:54] <valexey> убиццо апстену?
[20:02:47] <ygrek> lf
[20:02:48] <ygrek> да
[20:03:15] <ygrek> или вынести запись в отдельный модуль
[20:04:07] <valexey> ясно. значит когда пишешь камловый код, всегда рядом должна быть персональняа апстена.
[20:04:36] <ygrek> да, странно что в туториале не указано
[20:06:41] <valexey> о! няшный модуль Graphics! на f# пока можно положить, ибо для экспериментов и такой графики достаточно.
[20:21:30] <valexey> хм. а tuareg mode довольно таки удобен.
[20:21:46] <valexey> по кр. мере сразу выкинуть не хочется -)
[20:23:52] <valexey> даже некий полуавтокомплит есть и дока.
[21:10:41] <Kakadu> а emacs какой лучше воткнуть? а то у меня в Дебиане 21,22, 23 есть
[21:11:11] <Kakadu> там они вроде интерфейсом отличаются. Может что-то есть ещё на глаз не заметное
[21:11:19] <Kakadu> а то я его только видел пару раз
[21:13:17] <valexey> 22.2.1
[21:13:23] <valexey> у меня. в дебиане
[21:13:29] <sceptic> 23.x конечно же!
[21:13:41] <sceptic> правда последний раз там работу со шрифтами сломали =/
[21:14:01] <valexey> а чем оно лучше?
[21:14:06] <valexey> для дрессировки верблюдов
[21:14:10] <sceptic> XFT
[21:14:23] <valexey> слова какие-то матерные...
[21:14:32] <Kakadu> да уж
[21:14:37] <sceptic> для дрессировки верблюдов нет разницы
[21:15:09] <Kakadu> всё устанавливаю. vim надоел уже
[21:15:24] <valexey> убей его!
[21:15:28] <Kakadu> кого?
[21:15:41] <sceptic> Себя
[21:15:45] <sceptic> vim божественен.
[21:16:14] <Kakadu> очень удобно я скажу про этот vim
[21:16:24] <Kakadu> вот nano надо какнить убить нафиг
[21:16:44] <sceptic> зачем? пускай живёт. смени просто альтернативу
[21:17:14] <valexey> nano божественен! когда нужно что-то сделать очень тупое :-)
[21:17:38] <sceptic> есть vi. nano пугает
[21:26:41] <Kakadu> что-то я вообще не понял где должна появиться менюшка с tuareg
[21:27:58] <sceptic> m-x tuareg-mode
[21:28:26] <Kakadu> [No match]
[21:28:49] <Kakadu> я эти два файла скопировал уже куда можно
[21:28:50] <sceptic> установи его
[21:30:07] <Kakadu> появилось
[21:31:05] <valexey> эмм.. какой то у тебя дебиан с емаксом не правильные.
[21:31:22] <valexey> я ничего руками не прописывал и не ставил. тупо поставил туарег через apt и оно завелось всё сразу.
[21:33:18] <Kakadu> я просто забыл поискать в репозитории
[21:33:24] <Kakadu> =))))
[21:33:50] <valexey> :-)
[21:41:57] <valexey> а как запаттерматчить record'ы по значениям полей?
[21:42:03] <valexey> в мануале не нашел.
[21:44:03] <olegfink> type r = {x:int; y:int} ;;
[21:44:06] <olegfink> # match {x=1; y=2} with {x=1; y=a} -> a | {x=b; y=_} -> b ;;
[21:44:08] <olegfink> - : int = 2
[21:45:52] <valexey> ага. спасибо.
[21:48:12] <olegfink> и в мануале это написано: http://caml.inria.fr/pub/docs/manual-ocaml/manual010.html#toc42
[21:49:08] <valexey> там записано как значения записывать, а не как паттерн-матчить.
[21:49:16] <valexey> в некоторых языках это различается
[21:52:50] <Kakadu> всё-таки если я нфпишу гденить императивный цикл while, то это очень плохо очень будет?
[21:52:55] <Kakadu> в смысле производительности
[21:54:05] <valexey> в смысле производительности это будет очень хорошо :-)
[21:54:17] <valexey> впрочем, это будет также как и хффостовая оптимизированная рекурсия
[22:15:01] <ermine> ygrek: а есть функция, обратная caml_convert_flag_list?
[22:17:59] <ermine> бяда, придется нарисовать
[22:21:07] <ygrek> ermine: ты кстати там в вики за /tips'ами ухаживай
[22:21:17] <ygrek> и что насчёт /portability может добавишь
[22:22:10] <ermine> а там гденить про мой вопрос есть?
[22:22:24] <ermine> tip нашелся в одной из ссылок
[22:23:24] <ygrek> ну наверняка там откуда взялся convert_flag_list есть и обратная функция
[22:24:16] <ermine> в инклюдах не вижу
[22:24:37] <ygrek> ну может и нет :)
[22:26:38] <ermine> хнык
[22:27:26] Typhon вошёл(а) в комнату
[22:36:31] <ermine> ygrek: а как в цэ узнать размер массива, который const int* ?
[22:36:44] <ermine> видимо поэтому и нет функции
[22:37:31] <sceptic> никак
[22:38:01] <ermine> хнык
[22:38:34] <olegfink> ermine, если он compile-time constant, то sizeof(a)/sizeof(a[0])
[22:38:45] <sceptic> хотя если это const int [] = {1, 2, 3, 4}, то как сказал olegfink
[22:39:45] <olegfink> http://ideone.com/JydJxICg
[22:40:16] <ermine> пасиб
[22:41:30] <sceptic> size_t же, sizeof возвращает size_t
[22:43:00] <olegfink> если у тебя в константном массиве элементов больше, чем min(|int|,|size_t|), то проблема у тебя не в использовании int вместо size_t для len, имхо
[22:44:30] <sceptic> возвращаемый тип у sizeof — size_t
[22:44:35] <ermine> нарисовала функцию, щас потестим, авось в кору не упадет
[22:44:43] <sceptic> любой приличный компилятор тебе выдаст варнинг
[22:47:28] <olegfink> видимо, gcc к ним не относится
[22:48:27] Kakadu вышел(а) из комнаты
[23:21:26] <Typhon> ygrek, что-то твоих отчетов о sse2 не видно в рассылке
[23:43:17] <ygrek> Typhon: приватно ушло
[23:53:45] <ermine> чота у меня не работает экспшн в сишней либле, если не линковать с -linkall
[23:55:37] <ermine> похоже не вычисляются топлевел функции
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!