Home
Objective Caml
ocaml@conference.jabber.ru
Понедельник, 12 декабря 2011< ^ >
ygrek установил(а) тему: 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:16:45] <gds> ап, убрал эти рефы из чтения конфига, не выдержал, извените.
[00:23:07] Андрей Ковбович вышел(а) из комнаты
[00:42:11] <gds> в общем, буду лепить склеивающий кот, если других идей нет.
[00:49:09] <bobry> gds: ты чего в Install не открыл Common?
[00:51:49] <gds> bobry: я такие вещи всегда делаю только по нужде.
[00:52:14] <bobry> ну чичас непонятно откуда там command
[00:52:24] <bobry> оказалось что оно есть в Common, который открывается в Types
[00:52:28] <bobry> грязновато как то не?
[00:52:55] <bobry> gds: забудь, торможу
[00:53:15] <gds> bobry: там ещё глубже, там let open .. in, вроде, с command.
[00:54:27] <gds> кстати вот, переопределять модули типа Sys -- ну тоже грязно.  С другой стороны, если есть модуль наподобие Res, который может хорошо обернуть, то при open Res неплохо бы, чтобы были обёрнуты нужные функции Sys.
[00:55:25] <gds> то есть, это оборачивание работает ровно тогда, когда кто-то решает плотно использовать конкретный модуль наподобие Res.  Если использует -- получает обёрнутое в бонус.
[00:56:07] <bobry> было бы круто кстати camlp4 генерить обертки
[00:58:00] <gds> не всегда возможно по разным причинам.  Проще пока забить.
Причины -- и арность функций, и разные виды обёрток, и может что забыл.  Пока лучше тупаково, а там, если будет реально хорошо, то можно и забабахать.
[00:58:45] <bobry> забавно что у нас fetch не знает source_url :)
[00:59:04] <bobry> откуды качать та!
[01:00:25] <gds> bobry: э нет, это специально, мы с Typhon говорили про это.
[01:00:31] <bobry> вай?
[01:01:47] <gds> сцуть в то, что слишком разные варианты бывают, в том числе вариант "не качать, брать какой-то данный пакет", либо "скопировать", либо "распаковать из локальной фс", либо ещё что.  поэтому решили завернуть это в closure, которая знает, откуда что брать, да и не просто знает, а делает это.
[01:02:37] <gds> плюс к тому, индуктивный тип данных разбирать мало хотелось из-за желания децентрализовать разработку и избежать большого матча.
[01:03:09] <bobry> gds: что-то я не понимаю, иде closure то будет?
[01:03:13] <gds> то есть, разбирать придётся, но мне попадают весьма тупые результаты разборки.
[01:03:34] <gds> closure -- внутри метода
  method fetch : dest_dir:string -> (unit, exn) res
[01:05:01] <bobry> стоп-стоп, вот я щас пишу инстанс для http-arch, какие там могут быть "варианты"?
[01:05:16] <bobry> у него будет тупой до нельзя метод fetch
[01:05:49] <gds> ты будешь возвращать объект с методом fetch (с указанным типом)?
[01:08:27] <bobry> откуда?
[01:08:29] <bobry> %)
[01:08:52] <gds> ну ок.  ты будешь реализовывать класс, реализующий этот метод?
[01:09:06] <bobry> уже, ага
[01:10:34] <gds> ну вот, при создании классу передавай этот самый source (не просто урл, а тип данных), и на основании него строй свой #fetch.
[01:11:39] <gds> дело в том, что этот source -- он всегда будет "или то, или это, или совсем другое".  поэтому такое надо по-любому в индуктивные типы данных пихать.  sum types, poly types.
[01:35:08] <gds> запушил, см. src/barbra.ml, спатке.
[01:41:44] gds вышел(а) из комнаты
[01:45:07] <f[x]> ermine: я забил
[01:45:29] <f[x]> brbr'ары - мощно задвинули, респект
[01:52:58] <bobry> что-то я так и не воткнул в чем профит такого подхода
[01:53:00] <bobry> Typhon: ?
[01:54:25] <Typhon> bobry, в Local урла нету, например. потом может ещё появицо где-нибудь вторые и третьи аргументы. может и по-другому можно %)
[01:54:48] <bobry> я правильно понимаю что при таком подходе нам классы по боку?
[01:54:50] <bobry> для source_type
[01:54:56] <bobry> вы просто явно строим нужный fetch ..
[01:56:16] <bobry> gds половину амала перетянул уже :)
[01:56:18] <Typhon> да, принципе нужна то только одна функа, как оказалась, fetch и всё
[01:56:47] <Typhon> хотя можно с классами попробовать, что-нибудь в конструктор иногда передавать, а иногда нет, но тогда сигнатурки разные выйдут :-(
[01:57:33] <bobry> string opt?
[02:00:29] <bobry> Typhon: а что мешает нам для local явно передавать путь?
[02:00:44] <bobry> даже несмотря на то, что он избыточен
[02:00:52] <Typhon> я думаю, что можно накидать рядышком свою версию, или в отдельном бранче, и её юзать, если всё ок будет.
[02:01:15] <Typhon> кстати да, для локал можно его сформировать и передать, всё равно внутри фетч или инсталл придётся мастерить
[02:01:15] <bobry> в отдельном бранче неудобно, ибо еще ничего не работает
[02:03:00] <Typhon> ну тогда можно и прямо там, чо.
[02:03:08] <Typhon> насколько я понимаю, если что переделать будет недорого
[02:03:20] <Typhon> и gds всё равно уже спит ^__^
[02:03:50] <bobry> надо пользоваться моментом, гг
[02:46:30] <bobry> Circular build detected
  (src/source.cmi already seen in [ src/barbra.cmi; src/source.cmi;
                                    src/barbra.cmo; src/barbra.cma ])
[02:46:33] <bobry> грр
[02:47:58] <bobry> как с такими штуками вообще борются?
[02:50:12] <bobry> так, вроде разобрался -- модули ссылались друг на друга. компилятор камла мог бы и написать где именно он нашел рефернсы
[03:03:15] ftrvxmtrx вошёл(а) в комнату
[03:18:24] f[x] вышел(а) из комнаты
[03:24:05] <bobry> а можно матчить res явно? или это плохой стиль?
[03:37:36] letrec вошёл(а) в комнату
[04:27:47] Typhon вышел(а) из комнаты
[04:47:47] letrec вышел(а) из комнаты
[06:21:07] Andrey Popp вошёл(а) в комнату
[06:21:18] Andrey Popp вышел(а) из комнаты
[09:53:45] Typhon вошёл(а) в комнату
[11:20:45] dzhon вошёл(а) в комнату
[11:37:35] Andrey Popp вышел(а) из комнаты
[12:04:08] klapaucius вошёл(а) в комнату
[12:10:21] ermine вошёл(а) в комнату
[12:54:40] dzhon вышел(а) из комнаты: Replaced by new connection
[12:54:41] dzhon вошёл(а) в комнату
[12:56:39] gds вошёл(а) в комнату
[13:01:25] <gds> bobry: res явно -- как хочешь, на любителя.  вроде был какой-то случай, когда даже несмотря на манатки это приходилось.
[13:01:48] <gds> так чё там решили с fetch/install?
[13:30:08] <f[x]> я тогда nih выпиливаю
[13:31:31] <gds> подожди, там вроде был твой полезный код.
[13:31:54] <gds> опции курла, потом что-то из общеполезных функций было, и вроде ещё что-то.  пока лучше оставь.
[13:32:45] <f[x]> ок, тогда выпилишь когда будет не нужен
[13:40:45] <gds> bobry, Typhon, мне кажется, что объекты для децентрализованности это ок, но они как-то усложнили то, что в тупом случае я бы решил как гигантский матч и набор функций наподобие download_from_internets, unpack_tar ~compress:[Gz|Bz2], fs_src_copy, vcs_fetch ~vcs_type:[...].  может так и накодить?  Конечно, с "обратной совместимостью", то есть, как бы отрефакторить программу, чтобы не терялся код.  (как я сделал с чтением конфига -- функции parse_{config,string} остались с той же сигнатурой и семантикой, поменял только нутряк).
f[x], ты вроде не участвовал в этом деле, но твоё мнение тоже интересно (немного контекста: конфиг уже хранится в виде списка из элементов sum type, отражающих зависимости -- имя и способ получения).
[13:41:57] <Typhon> f[x]: них лучше не выпиливать, а впилить в barbr'у, как способ получения пакета (один из)
[13:44:42] <f[x]> ну я за простоту
[13:45:10] <f[x]> там не так много вариантов чтобы хитро абстрагировать
[13:45:15] <f[x]> e.g. https://github.com/camlunity/nih/blob/master/src/engine.ml#L60 :)
[13:48:42] <bobry> gds: в чем ты видишь усложнение?
[13:50:23] <gds> bobry: в том, что непонятно / не прописано, какие объекты должны реализовывать какие методы и как конкретно (с какими пред-пост-условиями наподобие текущих директорий, имён пакетов), ну и в том, что рано или поздно подобный матч надо будет делать, хотя бы чтобы нарожать из sum type разных вариантов поведения.
[13:55:39] <gds> bobry: то есть, если делать на объектах-классах, то надо сначала описать весь интерфейс в понятном виде.  "сегодня мы многое поняли."
[14:00:03] <bobry> gds: ну как непонятно, интерфейс зафиксирован в types -- source_type / install_type
[14:01:38] <gds> непонятно, кто и как будет генерить эти объекты ещё.
[14:01:56] <gds> впрочем, сейчас допиливаю конфиг до спеки, а там, как будут вопросы, спрошу.
[14:02:01] <bobry> okay
[14:04:35] komar вышел(а) из комнаты: Replaced by new connection
[14:04:36] komar вошёл(а) в комнату
[14:06:59] <gds> делать так --
class http_archive (HttpArchive (uri, archive_type))
-- нехорошо.
[14:07:46] <gds> если уже заматчил HttpArchive, просто передавай его аргументы.
[14:08:00] <bobry> gds: а почему это плохо?
[14:08:10] <bobry> лишний матч?
[14:08:15] <gds> потому что две "точки ответственности", два матчинга.
[14:08:51] <gds> кроме того, мне кажется, не http там должен быть, а что-то типа internet -- и ftp чтобы был там, и может ещё что-то.
[14:09:08] <bobry> RemoteArchive?
[14:09:19] <gds> о, катит.
[14:09:31] <bobry> тогда FsArchive надо в local переименовать, для порядку
[14:09:45] <gds> тоже вариант.
[14:10:02] <bobry> но тогда возникает путаница с Local :)
[14:10:15] <bobry> который в нутрях проекта
[14:10:27] <gds> тогда оставляем Fs для файловой системы и Local для локально-подтащенного.
[14:10:57] <bobry> может лучше Internal?
[14:11:05] <bobry> как в оазисе
[14:11:11] <gds> Bundled?
[14:11:17] <bobry> или так
[14:11:41] <gds> а вот, про матчи такие -- когда анализируешь код, проще один раз учитывать этот матчинг, и факт этого матчинга (то, что вытащили какие-то значения из варианта) уже является доказательством того, что матч совершился.
[14:12:54] <bobry> gds: меня на самом деле остановило, что если передать только tuple, то у каждого класса типа source_type будет разная сигнатура конструктора
[14:14:07] <gds> если они определены как класс, то 1. результирующий тип объекта будет одинаковый, 2. типы classname и #classname будут рассматриваться без аргументов конструктора, а просто на основании класса.  сам не знал до кадастра :)
[14:14:34] <bobry> oh
[14:28:07] <gds> можно пошутить и оформить скачивание из интернетов как преобразование тех источников, которые Remote (TarBz2, url), в источники Bundled (TarBz2, "_dep/somepackage.tar.bz2") (которые затем преобразовывать в Bundled (Directory, "_dep/somepackage-1.2.3")).  Насчёт VCS (vcstype, url) -- преобразовывать в источники Bundled (Directory, "_dep/repo-clone").  И вот, когда все источники станут Bundled (Directory, _), можно запускать билд.
[14:28:44] <bobry> gds: sounds sexy, мне нравится
[14:29:01] <bobry> а у vcs можно сохранять как repo-<tag>
[14:29:13] <bobry> или <branch>
[14:29:43] dzhon вышел(а) из комнаты: Replaced by new connection
[14:29:44] dzhon вошёл(а) в комнату
[14:30:50] <gds> а вроде в репкоурле можно указывать бранчи-ревизии, в hg точно.
[14:32:09] <gds> так вот, дальнейшее развитие -- Bundled (Directory, "_dep/package") можно после инсталла преобразовывать в Installed.  А далее, если будем прикручивать межпакетные зависимости, будем смотреть по этим Installed.
[14:33:17] <gds> bobry: прошу, доведи тип "источник пакета" до ума, у тебя более полная картина в голове про remote/local/bundled.
[14:34:34] <gds> ещё чем Installed хорошо, что можно будет в будущем для некоторых пакетов добавлять фиктивные "package",Installed в случае, когда пакет можем/должны брать из системы.
[14:35:47] <bobry> я уже не уверен, что она полная :) но я попробую
[14:53:05] <gds> кстати, допустим, если какая-то vcs не поддерживает ревизию в урле, мы же всегда можем прописать что-то типа
dep <package> <vcs_type> <repo_url> [ rev <revision> | branch <branch> ]
то есть, проблемы нет, а если будет в будущем -- допиливается легко.
[15:01:04] Андрей Ковбович вошёл(а) в комнату
[15:04:58] <gds> а, ещё надо будет различать Bundled (Persistent | Temporary), чтобы Temporary мочить своевременно.  Например, при TarGz -> Directory очевидно .tar.gz2 больше не нужен.  Или после Directory -> Installed в случае Temporary можно мочить директорию.  Ещё полезно было бы Bundled Persistent куда-нибудь копировать перед билдом, чтобы оригинальные забандленные исходники не засирались в случае кривого билда.
[15:06:18] Андрей Ковбович вышел(а) из комнаты
[15:17:25] komar вышел(а) из комнаты
[15:29:43] letrec вошёл(а) в комнату
[16:07:31] dzhon вышел(а) из комнаты
[16:07:44] dzhon вошёл(а) в комнату
[16:22:16] <gds> Typhon: несмотря на заявления науки, два мужыка могут родить: http://paste.in.ua/3443/raw/
и есть идея строить всю работу на пошаговом преобразовании подобного значения до достижения Installed.
[16:22:40] <bobry> лол
[16:22:43] <gds> (дабы избежать появления порочащих слухов, сообщу, что оба были в активной позиции!)
[16:24:21] <bobry> кстати ftp нам неважен, ибо курл-wget сам может разобраться
[16:25:17] <gds> тогда type remote_method = Curl
[16:26:46] <ermine> фтп давить
[16:27:19] <gds> ermine: сделай так, чтобы все люди его не использовали, потом будем давить.
[16:28:01] <ermine> gds: а у тебя уже есть сервер, где ты готов открыть фтп?
[16:28:17] <gds> как это связано?
[16:28:39] <ermine> качать многие могут, а запустить - очень немногие
[16:28:48] <ermine> и их число уменьшается с каждым годом
[16:28:53] <gds> ну и что с того?
[16:30:34] <ermine> ну ладно, них так них
[16:31:02] Typhon собеседовал ща переводчика ТАПЛа %)
[16:32:09] <bobry> Typhon: какого из?
[16:32:38] <ermine> а он еще помнит, о чем там писали?
[16:32:52] <Typhon> bobry: Бронникова Георгия
[16:33:05] <Typhon> Отт же в германии %)
[16:34:27] <bobry> ну может ты его по скайпу :)
[16:34:43] <bobry> и как, взяли себе такого кошерного дядьку?
[16:35:27] ermine давно отта в скайпе не видела, видимо не пользуется
[16:35:58] <bobry> он вроде на днях вещал на scala.by, видимо через скайп
[16:37:00] <gds> ermine: в скайп же нельзя зайти через links, ты чего!
[16:37:51] <ermine> gds: тут скапы нет
[16:38:19] <ermine> так что всё чисто
[16:39:37] <Typhon> странно, что scala.by не на Lift, или Circumflex, вроде все так хвалят
[16:43:05] <bobry> кстате -- тесты пишем с капуттом! а не raise Tests_failed :)
[16:43:11] <bobry> кто бы это не закоммитил
[16:46:28] <Typhon> я было хотел што-нибудь подтянуть, из зависимостей, но потом плюнул %)
[16:46:50] <Typhon> gds: годная тема с низведением типа до инсталлед
[16:51:12] <bobry> Error: This expression has type [> `TargGz ]
       but an expression was expected of type Types.remote_type
       The second variant type does not allow tag(s) `TargGz
Command exited with code 2.
[16:51:15] <bobry> чертовы варианты
[16:51:17] <bobry> и чертовы опечатки
[16:51:43] <gds> легко ловится, не беда.
[16:52:35] <gds> ну и аннотации типов не лишни.
[16:55:29] <bobry> надо сегодня будет утвердить синтаксис конфига v1
[16:55:36] <bobry> а то там каша из http-tar, fs-src итп
[16:57:56] bobry afk
[17:10:16] Kakadu вошёл(а) в комнату
[17:39:55] dzhon вышел(а) из комнаты: Replaced by new connection
[17:39:55] dzhon вошёл(а) в комнату
[17:44:31] ftrvxmtrx вышел(а) из комнаты
[18:02:47] ad1862 вошёл(а) в комнату
[18:18:47] Andrey Popp вошёл(а) в комнату
[18:40:38] dzhon вышел(а) из комнаты
[18:46:21] <gds> сделал "рабочий цикл": https://github.com/camlunity/barbra/blob/master/src/barbra.ml#L12
[19:12:57] <Andrey Popp> вообще, использование классов вместо модулей в ocaml что-то даёт, кроме наследования? то есть если я не использую наследование — то можно без классов обойтись?
[19:13:25] <Andrey Popp> вообще, классы в ocaml это распространённое явление среди библиотек и тулов?
[19:15:20] <gds> Andrey Popp: наследование тоже можно на модулях в простых случаях.
А так -- что-то даёт.  Подтипизацию.  Возможность носить в одном значении и собственно значение, и методы.  Позднее связывание (в том числе для хитрой логики полезное).
[19:16:07] <Andrey Popp> gds: с модулями вроде тоже можно late-binding сделать? параметрузешь другим модулем и всё...
[19:16:19] <gds> как явление -- бывает распространённое, бывает нет.  Чаще пытаются без объектов делать, и вполне таки получается.  Ну, классика -- любую задачу можно решить вообще на голой лямбде.
[19:18:28] <Andrey Popp> ну это понятно, хотелось про best practices услышать
[19:18:32] <gds> кое-какие вещи в "параметризовать" не получатся, однако надо смотреть подробнее, не уверен.
[19:20:03] <gds> или вот пример удобства классов -- https://bitbucket.org/gds/cadastr/src/f3845ed28a1e/src/cdt.ml#cl-716 -- метод cmp регистрируется в глобальной для класса таблице (берётся в инициализаторе, так как можно обращаться к self), как только унаследуешь этот класс.
[19:21:23] <gds> best practices -- пока не нужно, не использовать: 1. объекты/классы, 2. полиморфные варианты, 3. первоклассные модули, 4. расширения препроцессора.  Как только станет нужно -- станет очевидно, где/что/как нужно.  На худой конец -- ставь проблему в чятике, будем думать.
[19:22:00] <Andrey Popp> ок, спасиб :-)
[19:23:50] <gds> а вот в недопакетном недоменеджере таки использовали полиморфные варианты -- https://github.com/camlunity/barbra/blob/master/src/types.ml#L4 -- там это нужно и, оказалось, вполне удобно.  (как минимум для ограничения типизацией того случая, что мы не можем получать remote directory, только remote {tar,tar.gz,tar.bz2}).
[19:25:44] <gds> можно было бы обойти этот случай, сделав
file = [ Tar | TarGz | TarBz2 ]
remote = file
local = [ File of file | Directory of path ]
, но некрасиво.
[19:44:28] <gds> f[x]: msvc умеет cp -R ?
[19:44:59] <f[x]> cp не связано с msvc
[19:45:04] <f[x]> ну т.е. нет
[19:45:13] <f[x]> в общем случае
[19:47:21] <gds> понял.  почему-то не взял в рассмотрение случай "кто-то скачал msvc-инсталлятор камла и поставил это".
[19:50:14] <f[x]> в текущих реалиях с опенсорсными либами это почти нереальный вариант
[19:56:31] <ermine> что означает хаскильный комбинатор ##?
[19:59:13] <ermine> klapaucius: ты вроде знатный хаскелист?
[20:00:36] letrec вышел(а) из комнаты
[20:01:22] <ermine> На hoogle не находит
[20:01:24] <ermine> фи
[20:08:59] <Andrey Popp> ermine: # это keyword для unboxed types, сомневаюсь что ## можно определить как-то...
[20:10:10] <ermine> да можно конечно
[20:10:12] ftrvxmtrx вышел(а) из комнаты
[20:10:54] <Andrey Popp> ermine: ghci выдаёт parse error
[20:11:59] ftrvxmtrx вошёл(а) в комнату
[20:13:48] <ermine> судя по контексту, это модификатор результата
[20:14:52] <ermine> а у меня не выдает
[20:18:44] ftrvxmtrx вышел(а) из комнаты
[20:25:58] <gds> а в окамле, однако, нет способа удалить переменную окружения, тогда как Unix.getenv таки есть и таки возвращает Not_found или строку.  Unix.putenv "var" "" не удаляет, а оставляет пустую строку.
[20:27:36] <f[x]> gds: ExtUnix.unsetenv
[20:28:01] <gds> а оно под msvc будет работать?
[20:29:22] <ermine> а его в оверблде до сих пор нет?
[20:30:38] <f[x]> gds: хз, если в msvcrt есть такая функа
[20:32:01] <f[x]> gds: http://old.nabble.com/confused-about-UTC-timezones-on-mingw-td25218165.html
[20:32:08] <f[x]> т.е. наверное нет
[20:32:14] <f[x]> там описан вариант с putenv
[20:32:27] <f[x]> надо добавить через winapi значит
[20:34:07] <gds> f[x]: всё понял.  рано панику поднял, для практики хватает выставить в пустое значение (OCAMLPATH, если конкретно).  но вообще -- негламурненько.
[20:34:51] <f[x]> никогда не бывает слишком рано для паники!
[20:36:07] ermine погипнотизировала китайский текст на хаскеле, вроде помогло
[20:37:00] <ermine> там такие славные комбинаторы как <-, <<-, ->>
[20:37:17] <ermine> gds: бери на заметку
[20:44:29] komar вошёл(а) в комнату
[20:56:41] <bobry> gds починил конфиг, вуху
[20:57:04] <gds> ошибки ваши я не подсвечивал, свои по коммит-сообщениям понятны.
[20:58:03] <gds> теперь другая хренотень, я чото не понимаю.  запушил, при сборке оно тупит с типами записи в install.
[20:58:43] <gds> там должно быть поле cons : 'a -> Res.res 'r _ , однако пишет "должно иметь тип unit".  какого -- не понял.
[21:01:45] komar вышел(а) из комнаты
[21:02:18] komar вошёл(а) в комнату
[21:11:23] Typhon вышел(а) из комнаты
[21:12:34] <gds> срань господня с этим вашим original syntax.  обернул всю (fun .. -> ..) в скобки -- заработало.
[21:22:37] f[x] вошёл(а) в комнату
[21:22:40] f[x] вышел(а) из комнаты
[21:25:13] АК вошёл(а) в комнату
[21:25:16] f[x] вошёл(а) в комнату
[21:26:12] <АК> Кто-нибудь из камловых программистов имел дело с GNAT? Или Ада умер?
[21:26:50] f[x] когда-то распечатал учебник по аде, штук 200 листов наверное, даже читал что-то
[21:27:55] ad1862 вышел(а) из комнаты
[21:29:47] <АК> http://ada-ru.org/V-0.4w/toc_ru.html вот это мне показалось очень интересным, особенно объяснение всяких программистских концепций.
[21:30:02] <bobry> gds: вот если бы туарег нормально понимал revised ...
[21:30:42] <gds> bobry: если трахаться по мелочам с original syntax, это будет больше гемора, чем не использовать ни туарег, ни какой другой caml mode.
[21:30:57] <bobry> gds: ты каким пользуешься? или ты не emacsen?
[21:31:20] <gds> пользуюсь емаксом, но без специфики.  максимум -- go to next error.
[21:31:57] <bobry> туарег стало быть?
[21:32:03] <bobry> или какой из них умеет revised?
[21:32:20] <gds> не туарег, никакого.
[21:32:52] <bobry> да ну -- ты как валкин штоле? подсветка синтаксиса только мешает?
[21:33:11] <gds> мне -- точно мешает.
[21:33:45] <gds> как-то проще без подсветки.  заодно +5 к парсингу исходников из txt / неподсвеченных html / pdf.
[21:35:17] <bobry> gds: может нам по src определять remote или нет?
[21:35:54] <gds> bobry: потом -- да, как и любая эвристика.  будет другое ключевое слово в конфиге и всё.
[21:36:08] <gds> сейчас надо сделать самое тупое.
[21:36:20] <gds> в пожелания запиши, кстати.
[21:37:41] <gds> а то попадётся путь https://.../cadastr как имя репки -- что будешь делать?  что будешь делать с путями, которые не распарсишь строго, например, c:\somepath?  эвристики -- после рабочей версии и только в качестве дополнения.  принцип есть: "дубово = рабоче".
[21:38:29] <bobry> ну лана -- пока нафик это
[21:38:44] <bobry> gds, ты кстати чаво коммитишь в стиле whatthecommit?
[21:38:55] <bobry> даешь хоть какие то коментарии к изменениям :)
[21:39:09] <gds> там было реально wtf, проблему выразил выше.
[21:42:20] <bobry> ok
[21:44:23] <bobry> gds: а в чем смысл let project_path = raise Exit in ...?
[21:44:34] <gds> в том, что его надо дописать.
[21:45:43] <bobry> это путь, в котором лежат распакованные и готовые к установке сырцы?
[21:45:48] <gds> обычно да.
[21:46:34] <gds> кроме того, важный момент.  в _dep/src _хранить_ исходники, особенно которые бандлед-директори, вполне даже хорошо.  но их перед билдом нужно копировать куда-то в другую директорию, которую нужно удолять при успешном билде и перед попыткой нового билда.  не нужны "cross-build dependencies".
[21:48:37] <bobry> ну, надо бы with_tmp_dir какой нить чтоли
[21:49:13] ftrvxmtrx вошёл(а) в комнату
[21:51:15] <gds> сделаем.  а ещё лучше, для удобства "разбора полётов" (не сбилдилось зависимое => посмотреть проблему), прописать что-то типа "_dep/tmp/packagename" либо "_dep/work/packagename".
[21:51:45] <bobry> _dep/_build/pkgname? :)
[21:51:50] <bobry> шобы как у oasis'a
[21:53:03] <gds> а вот с оазисом пересекаться не ок, чисто на всякий случай.  просто build может?
[21:54:08] <bobry> ну мы же делаем все в _dep/
[21:54:31] <bobry> по моему пересечение с оазисом тут только на пользу
[21:55:10] <gds> вдруг какой-нибудь имбецил запустит ocamlbuild в _dep и получит ругань вместо простого создания _build?
[21:55:26] <bobry> в _dep же не будет _tags?
[21:55:31] <bobry> или камлбилду пофиг?
[21:55:37] <gds> кстати, запутал ты меня.  не и оазисом, а с камлобилдом же!
[21:55:53] <gds> камлобилд по-любому создаёт и/или использует _build.
[21:56:11] <gds> где-то случайно его запустил -- всё, будь готов rm -rf _build
[22:02:15] <gds> вообще, как вы видели, я за максимальное непересечение.  это удобно, это позволяет создавать легкодиагностируемый софт.
[22:07:10] ad1862 вошёл(а) в комнату
[22:08:06] <bobry> gds: тогда tmp и все
[22:08:28] <bobry> раз уж у нас там такой мини-fakeroot
[22:08:41] <gds> tmp -- очень ок.
[22:10:29] <gds> поправил спеку, глянь.
[22:10:42] ermine вышел(а) из комнаты
[22:19:55] ad1862 вышел(а) из комнаты
[22:34:02] <bobry> gds: ок
[22:35:03] <bobry> gds: а не подскажешь как бы мне выдернуть из Res значение, подняв exception в случае `Error?
[22:35:18] <bobry> что-то я теряюсь в куче функций у res.mli
[22:40:10] Typhon вошёл(а) в комнату
[22:44:47] <bobry> gds: и еще, что ты думаешь по поводу изменения сигнатуры #fetch:
method fetch : unit -> (string, exn) res
т. е. во-первых каждый source_type сам знает как посчитать свой dest_dir, а во-вторых, fetch возвращает project_path, который у нас используется в go
[22:45:04] <Typhon> dest_dir же всегда один, не? %)
[22:45:50] <Typhon> exn_res, вроде бы
[22:47:56] <bobry> Typhon: ну для каждого пакета свой по идее
[22:48:21] <Typhon> ну да, я имею ввиду, от source_type дест_дир не должен зависеть
[22:48:33] <bobry> хотя да, ты прав, что-то я фигню написал
[23:05:21] <gds> bobry: да, Res.exn_res.  а зачем?
[23:12:07] <bobry> предлагаю юзать let (</>) = Filename.concat
[23:12:18] <bobry> подглядел в х-ле, выглядит удобно
[23:14:38] <gds> впиши в коммон, йо!
[23:15:57] <bobry> уже йо
[23:16:31] <gds> ваистену коммон!
[23:18:14] <bobry> как то ты странно отступаешь, мой туарег тебя не понима
[23:18:52] <gds> ну будут диффы с пробелами, чочо.  я же не буду затачивать свой код под твой туарег, или как?
[23:20:13] <bobry> ну надо просто настроить наши туареги на что-то одно
[23:20:24] <bobry> шобы все было единообразно
[23:21:06] <gds> ещё раз повторю.  у меня простой текстовый редактор.  у меня нет туарега.  кто хочет выравнивать согласно tuareg.el или как там его -- по-моему, ему надо куда-то пройти?
[23:21:36] <gds> или сделать так, чтобы туарег принимал и revised syntax, и все расширения.  но это нереально.  поэтому - ...
[23:21:47] <bobry> да я не хочу ничего выравнивать, я просто жму tab, и он выравнивает не так как ты
[23:22:19] <gds> ну и говорю же, будут диффы с пробелами, в чём проблема?  когда оазис перегенерирует, как-то нормально же получается, тонна диффов?
[23:23:50] <bobry> кстати, я похоже налажал -- на шаге Remote _ -> Bundled (Temporary, ...) мне надо только выкачать архив?
[23:24:01] <bobry> а распаковывать его надо на другом шаге?
[23:24:38] <bobry> просто если да, то наверное проще действительно сделать пачкой функций, а не объектами
[23:24:40] <gds> Remote -> Tem.. -- да, выкачать.  распаковывать будет более общая функция, которая и другое распакует.
[23:25:59] f[x] вышел(а) из комнаты
[23:26:20] f[x] вошёл(а) в комнату
[23:29:21] <gds> собственно, потому я именно так разделил шаги: распаковывать понадобится и другие архивы тоже, в том числе с локальной файловой системы и забандленные.  Можно было бы curl | tar -xzf - какой нибудь, но разве что в качестве оптимизации, то есть, потом.
[23:29:31] f[x] вышел(а) из комнаты
[23:31:48] <bobry> понял, щас поправлю
[23:32:52] f[x] вошёл(а) в комнату
[23:35:14] f[x] вышел(а) из комнаты
[23:35:36] <gds> а я вот думаю.  копировать диры через cp -R -- явно фейл, но более нормальное решение (учитывая, каким я его вижу) -- чуть перебор пока.  в общем, пока будет Copy.directory_recursive ~src ~dst, а там разберёмся.
[23:36:09] f[x] вошёл(а) в комнату
[23:36:23] <gds> (понятно, оно будет вызывать cp -R.)
[23:36:47] <gds> ну не Copy, а что-то типа Fsutil, наверное.
[23:39:03] <bobry> а готового ничего такого нет?
[23:39:41] <bobry> http://forge.ocamlcore.org/projects/ocaml-fileutils
[23:42:23] bobry пушнул правильную версию remote_archive
[23:45:38] <bobry> gds: а не хочешь в go получать новое состояние и потом в конце вызывать go <new state>? http://paste.in.ua/3447/
[23:45:41] <gds> fileutils -- хз, умеет ли оно msvc.  если нет -- в топку.
в общем, пока тупо cp -R.  потом, как будет время, всё равно накодю хреньку для кадастра, чтобы по файловой системе как по trie ходить.  независимо от.
[23:45:44] <bobry> а то меня как то угнетают эти повторы
[23:46:01] <bobry> ну оазис его пользует, он же собирается на виндах?
[23:46:11] <gds> венды <> msvc.
[23:46:25] <bobry> тогда я чего то не понимаю
[23:46:55] <gds> венды -- { 1. cygwin, 2. mingw, 3. msvc } * { 1. с mingw/cygwin, 2. без mingw/cygwin }.
[23:47:21] <gds> bobry: про new_state -- не хочу, так как там не везде новое состояние даётся.
[23:47:59] <bobry> везде кроме Installed
[23:48:47] <gds> да.  Ну так там и нет повторов, везде либо go_temp_dir (одна функция такая), либо go tconf, либо особый случай.
[23:50:14] <bobry> (remote_type :> local_type) вот это очень клево выглядит
[23:50:27] <gds> сторалсо.
[23:50:49] <bobry> gds: ты щас чо куешь? чтобы я знал куды не лезть
[23:50:52] <bobry> Kakadu: куку
[23:51:19] Andrey Popp вышел(а) из комнаты
[23:53:30] <gds> bobry: так вот и хз чо делать.  наверное, локальное копирование сделаю, впишу его в цыкыл.
[23:53:54] <bobry> мб лучше install?
[23:54:00] <bobry> шобы у нас был рабочий цикл для tgz
[23:54:33] <gds> install готов, вообще.  да, впишу его.
[23:54:44] <gds> кстати, Global.ml -- вроде не ок?
[23:54:54] <bobry> да я вот сомневался, в итоге добавил таки
[23:55:11] <gds> я про регистр.
[23:55:26] <bobry> черт.. х-ль есть мне моск
[23:55:33] <bobry> щас поправлю, сори
[23:55:34] <gds> а ещё <80 колонок лучше делать, я считаю.  универсальнее.  в общем, буду исправлять.
[23:55:46] <bobry> да-да, <80 тоже хорошее дело
[23:58:01] <gds> а исправил так:
            | Bundled (_, (#remote_type as archive_type), file_path) ->
[23:58:33] <bobry> кошерно
[23:58:47] <gds> хаха, а не покатит install без "todo: copy persistent dir %S to work dir"
[23:58:47] <bobry> хотя оно по моему deprected в 3.12
[23:58:48] <bobry> не?
[23:58:59] <gds> ну а как ещё на подтип ссылаться.
[23:59:13] <gds> может и de'prick'ated, поглядим.
[23:59:15] <bobry> явно перечислять конструкторы
[23:59:32] <bobry> да, копирование придется делать :( ну щас можно и cp -R
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!