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

GMT+4
[00:03:23] digital_curse вышел(а) из комнаты
[00:23:35] Typhon вошёл(а) в комнату
[00:30:30] Kakadu вышел(а) из комнаты
[00:48:54] gds вышел(а) из комнаты
[01:45:56] ygrek вышел(а) из комнаты
[01:56:56] sceptic вошёл(а) в комнату
[04:36:46] Typhon вышел(а) из комнаты
[08:08:06] iNode вышел(а) из комнаты
[08:41:00] iNode вошёл(а) в комнату
[09:00:32] gds вошёл(а) в комнату
[09:16:47] ermine вошёл(а) в комнату
[09:20:14] <gds> ermine: отходил вчера на весь вечер.  что решила касаемо типизации?
[09:50:44] <ermine> gds: ничего пока не решила, маюсь раздумьями
[09:58:25] <gds> ermine: чем именно не хватает определения типа int vs string по Is_long(value)?
[11:01:03] f[x] вышел(а) из комнаты
[11:06:18] ʇsʎɯ вошёл(а) в комнату
[11:09:37] f[x] вошёл(а) в комнату
[11:27:21] serp256 вошёл(а) в комнату
[11:28:20] Kakadu вошёл(а) в комнату
[12:13:59] ygrek вошёл(а) в комнату
[12:14:14] ygrek вышел(а) из комнаты
[12:14:44] ygrek вошёл(а) в комнату
[12:18:54] npoektop вошёл(а) в комнату
[12:23:52] ʇsʎɯ вышел(а) из комнаты
[12:26:28] yakov вошёл(а) в комнату
[12:26:33] <yakov> hey
[12:26:56] <yakov> а как мне выяснить какой у меня камл? mingw или msvc? :-)
[12:32:09] <yakov> вот блин, кроме того что все пересобирать надо так еще и camlidl хочет именно блин MSVCшный компилер :-(
[12:34:20] <yakov> прямо клубок противоречий :-(
[12:36:25] Typhon вошёл(а) в комнату
[12:37:14] <f[x]> ccomp_type в ocamlc -config
[12:37:16] <Typhon> yakov: качай overbld, пацаны рекомендуют
[12:41:40] <yakov> ccomp_type: cc
[12:41:54] <yakov> мингв чтоль.
[12:42:06] <yakov> Typhon: че за оверблд?
[12:43:06] <yakov> хехе
[12:43:14] <yakov> гдсовская фиговина.
[12:43:34] <yakov> меня она не спасет. я ж написал выше у меня всякие камлидлы..
[12:43:45] <yakov> и часть софта я беру бинарями
[12:44:20] <yakov> я не хочу весь свой стек пересобирать gtk и всякие другие зависимости
[12:44:33] <yakov> тем более МСВЦ-шный меня стремает компилятор
[12:49:16] <yakov> сайт-то сдох :-(
[12:59:50] <gds> camlidl собрать под mingw можно, если там нет работы с COM.
gtk в оверблде есть.
а вот бинарный софт -- это облом.
[13:00:16] <yakov> хм, да, кома-то у меня нет
[13:00:25] <yakov> просто биндинги по ходу дела
[13:00:33] <yakov> спс gds!
[13:00:49] <yakov> gtk с gtksourceview2? ;-)
[13:00:52] <gds> они собираются (если вдруг что глючит, буду фиксить camlidl сам, так как мне он нужен безглючный)
[13:00:55] <gds> без sourceview вроде.
[13:01:16] <yakov> ну, я как раз за ради него весь огород делаю. новая версия фрамы хочет его.
[13:01:17] <gds> gtk 2.12, собранный в рамках glade/win32
[13:01:22] <gds> а, тады ой.
[13:01:27] <yakov> сайт-то не пашет!
[13:02:23] <gds> какой сайт?
[13:02:30] <yakov> вроде с грехом пополам собралось все только кое-где просраны длл-ки. ща патчить буду, а то кастомный рантайм не линкуется - грит нету _gmalloc_n для wrapper.o из lablgtk2va
[13:02:37] <yakov> lablgtk2.a
[13:02:48] <yakov> сайт оверблд-а
[13:02:54] <yakov> из жж-то
[13:03:26] <gds> http://sf.net/projects/overbld/files/ -> torrents -> profit
[13:05:47] <gds> тут ещё проблема в том, что компиляция gtk -- вроде непростой процесс.  то есть, если в той сборке gtk не дают sourceview, то геморно его оформить будет.  или есть другие бинарные сборки gtk?
[13:35:34] <gds> "В OCaml ОО-типы [...].  Там vtbl любого объекта содержит входы для любого имени метода, кторое  встречалось компилятору."  -- лолшто?
[13:35:57] <ermine> gds: 'a option в одном месте попался
[13:36:47] <ermine> gds: а еще есть сожаление, что если делать модули для каждого тпа базы отдельно, то такие модули будут содержать сотни функций, две трети которых - одинаковые для всех модулей
[13:37:08] <ermine> классы чоль делать
[13:38:25] ʇsʎɯ вошёл(а) в комнату
[13:38:42] <gds> если 'a option по значению угадывать -- в случае None не угадаешь, в случае Some x -- бери x=Field(v, 0) и угадывай тип x.
[13:39:17] <ʇsʎɯ> у меня вопрос: юзер myst тут давно был последний раз? может освободите ник для меня?
[13:40:26] <ermine> gds: 'a option -> 'a
[13:40:52] <gds> по 'a option можно получить или None, или значение типа 'a, ну и?
[13:40:55] <ermine> gds: если был бы просто 'a option -> unit, то накласть
[13:41:47] <ermine> gds: ну я задумаласть какой результат возвращать, сейчас у меня прога падает потому что я пока 'a возвращаю как string
[13:42:06] <gds> а какое значение с типом 'a option получает функция?
[13:42:17] <gds> ermine: можно без классов, на модулях.  Пример:
module Yourdb =
let common_func : 'a db -> ...
module Intdb = struct
let spec_func : int db -> ...
end
module Stringdb = struct
let spec_func : string db -> ...
end
end
и далее:
open Yourdb
open Stringdb
тут common_func будет "резолвиться" в Yourdb.common_func, а spec_func -- в Yourdb.Stringdb.spec_func.  А если вместо/после "open Stringdb" сделаешь "open Intdb", spec_func будет Yourdb.Intdb.spec_func.
[13:43:53] <ermine> а что на сишней стороне? дубликаты?
[13:44:13] <ermine> я пока насчитала как минимум пять дубликатов
[13:44:45] <ermine> это такое только в модулях надо делать, но плохо что модули не наследуют тела
[13:45:07] <gds> наследуют, но специфически: include Modulename
[13:45:32] <f[x]> gds: реквестирую линк на "лолшто"
[13:45:51] <f[x]> компиляция gtk или lablgtk?
[13:45:55] <gds> f[x]: http://dmzlj.livejournal.com/124031.html?thread=1709951#t1709951
[13:46:04] <f[x]> lablgtk (я сам удивился) компилится легко
[13:46:06] <gds> я про gtk говорил, lablgtk вполне разумен.
[13:46:17] <f[x]> а, тогда ой
[13:46:49] <gds> ermine: на сишной стороне -- например,
type keytype = Int | String
extern cfunc : keytype -> 'a db -> kva -> kuku = "my_cfunc"
let spec_func = cfunc Int : int db -> kva -> kuku
А в my_cfunc первым параметром смотри на keytype.
[13:47:13] <gds> кроме того, не обязательно "наследовать" модули в том решении, которое я предлагаю.
[13:48:49] <f[x]> ʇsʎɯ: ники резервируются на уровне сервера, а не конференции
[13:49:05] <ʇsʎɯ> шьорт
[13:49:40] <ermine> на уровне сервиса
[13:49:47] <ʇsʎɯ> меня постоянно не пускает при обрыве
[13:49:57] <ʇsʎɯ> каждый раз вручную заходить надо
[13:51:48] <ermine> gds: у меня еще одна засада в том, что вместо 'a хочется иногда подсунуть еще один абстрактный тип, который так же типизируется 'a dbt, вот туда надо функции set_data/get_data и еще пара функций, включая указание на то, вызывать маллок или нет..
[13:52:46] <ermine> я еще подумаю
[13:53:14] <gds> ermine: ну это "ещё одна засада", а текущая засада как, решится ли предлагаемым мной способом?
второй тип таким же образом добавить несложно, предполагаю.
[13:54:21] <ermine> gds: это будет двойная типизация 'a t -> 'a dbt -> string dbt -> а вот что тут - хз: или следовать принципу немутабельности аргументов и возвращать 'a dbt * string dbt, либо возвращать unit и модифицировать аргументы
[13:56:35] <gds> а зачем возвращать или менять -- что именно делаешь?
[13:58:07] <ermine> gds: в оригинале bdb так и работает с парами key/data - берет аргументы для запроса и возвращает результат на месте аргументов get(DB* db, DBT *key, DBT *data, ...)
[13:59:03] <ermine> gds: ну Unix.read в этом плане не отличается
[13:59:20] <gds> окамловские 'a dbt -- мутабельные сами по себе?
[13:59:40] <gds> (проводя параллель, скажу, что в Unix.read сам по себе string -- мутабельная структура)
[13:59:46] <ermine> сишний мутабельный
[14:00:31] <gds> а окамловский?  советую делать иммутабельными, соответственно функция чтобы возвращала тупл (и при этом не меняла ничего) -- основные принципы функциональщины.
[14:01:34] <ermine> а если господа тут не будут возражать против:
let key = DBT.create_int 1 and data = DBT.create_string () in  get db key data; print_endline (DBT.get_data data), то все мутабельно будет
[14:02:15] <ermine> и этим можно будет воспользоваться для уменьшения вызовов маллока
[14:02:28] <ermine> в цикле
[14:02:53] <gds> ну смотри, как хочешь.  Если сама по себе bdb императивная шняга, можно сделать и императивный интерфейс.  Если можно без потерь завернуть в функциональный, лучше так и сделать.
[14:05:23] <ermine> мечты :)
[14:05:39] <ermine> насчет завернуть ф функциональный подход
[14:09:26] ermine навербализовалась тут
[14:10:28] <gds> следующие полгода у тебя молчанка?
[14:11:34] <ermine> посмотрим
[14:11:37] <olegfink> ermine, я, может, чего-то и не понимаю в происходящем, но ведь из мутабельного всегда можно сделать немутабельный уже на стороне окамла
[14:11:50] <ermine> я ж делаю bdb в основном как бэкенд для своего сайта
[14:12:31] <olegfink> т.е. чем плоха ситуация, когда нижний слой биндингов максимально повторяет си, а красивости наворачиваются уже с пользовательской стороны?
[14:14:09] <gds> ситуация неплохая, только при изготовлении немутабельного нужно будет копировать значения перед передачей в функции, которые меняют значения.
[14:14:12] <ermine> olegfink: ну если хочется реюзить структуру (я выше говорила про уменьшение числа выовово маллоков), то придется все делать мутабельным
[14:14:25] <ermine> olegfink: например, для работы с курсором
[14:17:01] <ermine> у камла АПИ весьма удобное для работы с С напрямую
[14:17:09] f[x] чует нарушение принципа make it run, но молчит молчит
[14:17:24] <ermine> только вот логика реализации неудобная местами то ли у цэ, то ли у камла
[14:17:48] <olegfink> ну не знаю, мне в общем-то не кажется удивительным, что в нашем жестоком нечистом мире за функциональщину надо приплачивать
[14:18:24] <olegfink> т.е. хочу скорость -- возьму императивный кусок биндингов, хочу красоты -- функциональную обертку, а за тем и другим вместе -- к бруксу
[14:19:59] <gds> а ещё в окамле периодически случается так, что императивный код медленнее аналогичного функционального.  Причина тому -- иногда изменения памяти дороже, чем создание новых значений.
[14:20:34] <ermine> ну поэтому мы тут с камлом играем, а не с хаскилем
[14:42:50] <yakov> да-а, я все попутал, лаблгтк конечно
[14:57:02] ʇsʎɯ вышел(а) из комнаты
[16:25:55] <gds> краткий пересказ рассылки: lablgtk теперь будет требовать 2.14, а какой-то храбрец берётся допиливать ocamldefun.
[16:30:22] <f[x]> http://codepad.org/cNp5vcVa
[16:31:14] <f[x]> ocamldefun - ок
[16:32:01] <yakov> 2.14 чего
[16:33:00] <gds> 2.14 gtk
[16:33:31] <gds> пример с Ctype.Unify -- это хороший баг :)
[16:34:34] dimpar вошёл(а) в комнату
[16:37:00] <ermine> а че это тут прилипли к gtk?
[16:37:52] dimpar вышел(а) из комнаты
[16:38:18] <gds> с одной стороны -- yakov хочет собрать frama-c или ололо того.  с другой стороны, в рассылке анонс про новую версию lablgtk.
[16:38:22] <f[x]> ни у кого 3.12 нету проверить?
[16:43:20] ygrek вышел(а) из комнаты
[16:43:46] <gds> 3.12.0+dev17 -- вылетает.  дома где-то было +dev18, но совершенно уверен. через 1.5..2 часа скажу точнее.
[16:43:57] <f[x]> спасибо
[16:44:24] <gds> * но совершенно не уверен
[16:45:07] ermine решила почитать CWN, о, там про фантом типы
[16:48:14] <f[x]> http://caml.inria.fr/mantis/view.php?id=5057
[16:54:50] <yakov> это сильно, собрал начисто лаблгтк, собрал привет мир. так он не пускается грит нет cairo_format_stride_for_width в libcairo-2.dll :-/
[16:55:06] <yakov> когда собирал что лаблгтк что привет мир никаких ошибок не было :-(
[16:55:24] <yakov> dependency walker тоже самое показывает
[17:00:19] <f[x]> gtk какой версии?
[17:00:24] <f[x]> попробуй поновее
[17:00:33] <f[x]> или постарее :)
[17:00:40] <gds> у меня в файлах исходников lablgtk2 нет подстроки "format_stride", подозрение на кривую инсталляцию gtk.
[17:02:00] <yakov> да-а, подменил длл-ку, местами полегчало. кривозней некуда. :-(
[17:04:00] <yakov> как они умудрились такой ацкий бандл состряпать
[17:04:20] <f[x]> не забудь багрепорт написать
[17:06:47] <yakov> да кому! это ж фрама-тим.
[17:06:52] <yakov> им про такое бесполезно писать.
[17:07:43] <yakov> тем более старая версия..
[17:25:37] Mon вышел(а) из комнаты
[17:26:17] Mon вошёл(а) в комнату
[17:30:23] gds вышел(а) из комнаты
[17:34:33] iNode вышел(а) из комнаты
[17:35:46] <yakov> смортрю в книгу вижу фигу. как ocamlbuild подпихнуть cmo файл?
[17:36:53] <f[x]> т.е. готовый cmo?
[17:37:54] <f[x]> можно тупо ocamlbuild -cflags 'q.cmo'
[17:38:29] <f[x]> точнее -lflags
[18:39:19] gds вошёл(а) в комнату
[19:07:07] npoektop вышел(а) из комнаты
[19:18:37] Kakadu вышел(а) из комнаты
[19:24:29] iNode вошёл(а) в комнату
[19:28:32] yakov вышел(а) из комнаты
[19:47:59] serp256 вышел(а) из комнаты
[20:48:46] sceptic вышел(а) из комнаты
[21:27:12] serp256 вошёл(а) в комнату
[21:29:26] Typhon вышел(а) из комнаты
[21:46:18] serp256 вышел(а) из комнаты
[21:53:11] serp256 вошёл(а) в комнату
[22:12:53] serp256 вышел(а) из комнаты
[22:19:28] sceptic вошёл(а) в комнату
[22:23:16] ygrek вошёл(а) в комнату
[22:42:33] Typhon вошёл(а) в комнату
[22:49:37] serp256 вошёл(а) в комнату
[22:57:23] serp256 вышел(а) из комнаты
[23:03:33] serp256 вошёл(а) в комнату
[23:12:45] iNode вышел(а) из комнаты
[23:16:26] iNode вошёл(а) в комнату
[23:34:17] serp256 вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!