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

GMT+4
[00:02:05] <Kakadu> ну там скорее не пример а куски кода
[00:07:15] Typhon вышел(а) из комнаты: Replaced by new connection
[00:07:16] Typhon вошёл(а) в комнату
[00:09:31] komar вышел(а) из комнаты: Replaced by new connection
[00:09:31] komar вошёл(а) в комнату
[00:23:40] Kakadu вышел(а) из комнаты
[00:24:15] Kakadu вошёл(а) в комнату
[00:26:39] ygrek вошёл(а) в комнату
[00:49:40] Typhon вышел(а) из комнаты: Replaced by new connection
[00:49:41] Typhon вошёл(а) в комнату
[00:54:05] Kakadu вышел(а) из комнаты
[01:05:01] ygrek вышел(а) из комнаты
[02:32:55] <gds> задачка.
есть multithreaded ocaml application (systhreads).  есть (и нужны) некоторые глобальные изменяемые переменные.  такие, которые нужно читать-писать так, чтобы чтение и запись были только в пределах одного треда.  одна мелочь может упростить задачу: изменения всегда идут в стиле "пишет первый, пишет второй (из того же треда, туда же, читает один из них, очищает оба значения".  может, значения стоит организовать в ref (list 'a) для простоты -- не суть важно.  после выхода из блока значения очищаются.
штатный tls в окамле не дают.  lwt использовать только для tls -- дебилизм.
завязываться на "только multithreaded" (и, тем более, форсировать systhreads) -- не могу.  а в single-threaded application не могу использовать Thread (а именно, комбинацию из self->id), чтобы организовать хранение по ключу.  (если на этом этапе стало ясно, что у меня кривые руки -- сразу скажите.)
учитывая краткость этих операций, можно было бы спокойно Mutex.lock/unlock, но см. предыдущий абзац.
выделить перед циклом записи-чтения новое мутабельное значение и забыть его после цикла -- не могу, по логике не вписывается.
какие идеи, что делать?
(у меня тут только идея, что пора спатке.  утром прочитаю.  ПЕШЫТЕ МНЕ!11111)
[02:35:27] <Typhon> там какая-то фигня со скобками
[02:35:28] <Typhon> про мелочь.
[02:59:23] <Typhon> непонятно, в общем:
"""некоторые глобальные изменяемые переменные""" -- """только в пределах одного треда""" так глобальные, или tls?
про мелочь совсем не понял из-за знаков %)
"""есть multithreaded ocaml application""" -- """в single-threaded application """ ?
либо тут действительно неясно написано, либо надо поспать и утром посмотреть :-)
[03:01:50] <Typhon> кстати, вот в ocaml for masses минский пишет, что в жейн стрит у них уже 65 чуваков. а где они, эти чуваки? где их посты/код/вопросы/ответы? или им запрещают там всё ?
[03:01:57] Typhon вышел(а) из комнаты
[03:38:42] letrec вошёл(а) в комнату
[04:48:49] letrec вышел(а) из комнаты
[08:15:48] <gds> Typhon: да, криво сформулировал.  Попробую исправить:
мелочь: изменения всегда идут в стиле "пишет первый, пишет второй (из того же треда, в те же переменные), затем один из них читает обе переменные (либо список значений, если оформлять как список, а не как два ref (option 'a)), и после этого очищает оба значения"
переменные -- глобальные, доступные из разных тредов.  Сейчас их использование похоже на сишечку -- последовательность "взять значение, обработать, присвоить взад" по умолчанию может прерываться как угодно.  Меня бы устроила семантика tls, где эта глобальная переменная существовала бы для каждого треда своя, либо был бы механизм наподобие "взять/присвоить значение, специфичное для треда", либо "взять/присвоить значение, специфичное для данного конкретного цикла set;set;get;clear".
> """есть multithreaded ocaml application""" -- """в single-threaded application """ ?
защита такая нужна фактически только в multi-threaded, однако желательно обеспечить компилируемость кода и в single-threaded (для уменьшения количества извращений при билде).
[08:31:04] komar вышел(а) из комнаты: Logged out
[08:31:07] komar вошёл(а) в комнату
[08:33:35] f[x] вышел(а) из комнаты
[08:37:10] f[x] вошёл(а) в комнату
[08:53:59] <gds> ан нет, там через список не получится, там цимес в том, что присваиватели независимы, а успех мероприятия зависит от того, присвоят ли они оба значения в ref'ы одного и того же модуля.
[09:00:50] <gds> или есть ещё один способ решить проблему, но через другое место.
хочется при матчинге значения с типом t (положим, что это запись) рожать какие-то комбинированные структуры, содержащие поля этой структуры, так, чтобы по ним можно было ходить, и так, чтобы если 1. компилятор знает, что x:t и y:t, 2. в коде вызываются let xx = get_fields x and yy = get_fields y, 3. то компилятор мог бы вывести информацию о том, что при одновременной ходьбе по xx и yy (по одному элементу берём) типы полей одинаковы.
в общем случае -- не одинаковы, так как get_fields может содержать отсылки к Random, например.  Да и сложно было бы убедить компилятор в равенстве типов.
как вариант -- можно рожать комбинированные структуры уже с учётом того, что по ним будут попарно ходить, но не соображу, как это сделать.
[09:03:34] <gds> если для записей "рожать попарно" катит, то для вариантных типов -- "match (a, b) with [ ((A aa), (A ba)) -> fa aa ba | ((B ab), (B bb)) -> fb ab bb | _ -> raise ... ]" -- это гарантированные предупреждения компилятора на матче "_" и почти гарантия того, что этот матч забудут дописать при добавлении варианта.  То есть, в топку.
[10:27:45] ygrek вошёл(а) в комнату
[11:01:59] klapaucius вошёл(а) в комнату
[11:03:40] ermine вошёл(а) в комнату
[11:06:23] Kakadu вошёл(а) в комнату
[11:17:32] <Kakadu> ermine: http://groups.google.com/group/ocaml-core/browse_thread/thread/fe5ed7acb09569cf/138b937f409bbb01#138b937f409bbb01
[11:23:24] bobry вошёл(а) в комнату
[11:31:21] <ermine> Kakadu: медведи медленно идут
[11:31:53] <Kakadu> ermine: хоть на месте не стоят
[11:36:57] <bobry> товарищи, а можно как нить "на лету" загрузить .ml файл в модуль?
[11:42:00] <Kakadu> Ну наверное надо юзать функции топлевела
[11:43:37] <gds> либо топлевел, либо компилятор + dynlink.  но лучше избежать подобного.
[11:50:56] <bobry> в общем что я хочу? хочу загрузить setup.ml сгенерированный OASISом и выдернуть из него мета данные для пакета. не очень понимаю как это можно сделать через топлевел — не могу же я в сердину модуля засунуть #load :)
[11:51:40] <gds> не проще ли выдрать парсилку _oasis из оазиса собственно?
[11:51:46] <bobry> я так и сделал
[11:51:52] <bobry> но thelema говорит что слишком жирно
[11:52:05] <gds> мда.
[11:52:36] <bobry> ну точнее я напрямую дергаю модули OASIS'a, можно и копипастнуть, но это как то не айс
[11:52:36] <gds> ну ладно, есть идейка.
[11:52:55] <bobry> вливайтесь кстати https://github.com/thelema/odb/issues/21
[11:54:34] <gds> cat setup.ml youraddon.ml | ocaml
и пробуй сделать такой youraddon.ml, который сделает ровно конкретное действие, например, выдаст билд-зависимости.
но это зависит от того, что будет делать setup.ml при кормлении им топлевела.  Может надо будет обернуть setup.ml в функтор, который уже издевать по нужде.
[11:54:52] ygrek вышел(а) из комнаты
[11:55:47] <bobry> это как то очень извращенно :(
[11:57:02] <gds> делает ровно сказанное: запускает топлевел, загружает в нём setup.ml, догружает твой код, который уже делает нужные дела.  если телеме жырно.
[11:57:59] <gds> а на деле -- лучше было бы сделать так, чтобы легалл отрефакторил парсилку _oasis и ставил её как библиотеку через ocamlfind (либо, если на момент odb нет библиотек, то просто в отдельную диру для удобства синхронизации выдрал бы).
[11:59:14] <bobry> отдельная дира тоже не прокатит — thelema видимо хочет чтобы оно было однима файлом для удобства установки
[11:59:27] <bobry> что касается отдельной либы для _oasis, це вполне реально, я вчера код поизучал
[11:59:27] <f[x]> а разве oasis либа не даёт такие функции?
[11:59:56] <bobry> f[x]: дает, но принято считать что oasis сложно ставить
[12:02:06] <Kakadu> что же сложнее, оазис или кора
[12:02:15] <bobry> кора
[12:02:21] <bobry> хотя у меня в арче все собиратся ок :)
[12:05:34] <f[x]> ну или да, сделать чтобы setup.ml экспортировал эту инфу в каком-нибудь формате: ocaml setup.ml -info
[12:05:53] <f[x]> а что именно за данные нужны?
[12:05:58] <f[x]> в setup.data их нет?
[12:06:38] <gds> setup.ml -info -- очень грамотно.
[12:07:09] <bobry> кстати классная идея
[12:07:14] <bobry> надо бы ее в issue оформить ле галлу
[12:09:11] <f[x]> gds: а почему бы условную компиляцию не заюзать просто и всё?
[12:09:13] <bobry> с другой стороны, оно же и так уже есть в _oasis
[12:09:18] <bobry> в человекечитаемом формате
[12:09:37] <gds> bobry: проще в виде патча сразу оформить.  То, что я рекомендовал как cat setup.ml youraddon.ml, только более структурированно.
[12:09:42] <f[x]> так тебе же надо в машинно-читаемом?
[12:09:44] <gds> f[x]: для тредов, имеешь ввиду?
[12:09:49] <f[x]> gds: угу
[12:09:53] <bobry> да — в машиночитаемом надо
[12:10:00] <bobry> f[x]: нужен список зависимостей и примерное описание содержания (is_library, is_program)
[12:10:14] <f[x]> bobry: или лучше даже query-лку отдельных полей
[12:10:25] <gds> лучше да, по полям индивидуально.
[12:11:36] <bobry> например?
[12:12:04] <gds> f[x]: на худой конец -- ага, условная компиляция будет.  Но есть кое-какая идейка, связанная с краткостью "set;set;get;clear", но тупая относительно.  Вот, Typhon попробовал вникнуть в проблему, может, как появится, что-нибудь придумает, с моими уточнениями.
[12:12:05] <bobry> там не так много отдельных полей, к тому же меня в основном интересуют секции (Executable, Library, Flag etc)
[12:12:39] <gds> `ocaml setup.ml -info sections` = "Executable qwe\nLibrary ert\n"
[12:13:00] <f[x]> ага - такая себе интроспекция _oasis файла :)
[12:13:14] <gds> ну нормально, лично мне нравится.
[12:13:17] <f[x]> хотя правильней конечно это в xml отдавать
[12:13:22] <f[x]> через DCOM
[12:13:43] <gds> аааааа11111
[12:14:08] <f[x]> а вместо _oasis юзать нормаьную пацанскую базу данных
[12:14:22] <gds> да, постгресовский кластер предоставлять.
[12:15:52] <Kakadu> всё в sexplib формате надо печатать, чтобы парсилось попроще
[12:16:12] <gds> или в yaml, чтобы писалось получше.
[12:16:31] <gds> кстати, пичалька, но мне понадобится парсер yaml через несколько месяцев.
[12:19:01] <bobry> если это будет отдавать какой нить замаршалленый формат то еще ок
[12:20:19] <gds> не ок, так как в теории формат может меняться.
[12:20:35] <gds> ну и неудобно, ну и нет гарантий безопасности.
[12:20:51] <gds> (неудобно -- для обработки чем-то кроме камла)
[12:22:36] <bobry> может лучше таки выпилить парсилку в отдельную библиотеку
[12:25:39] <gds> хуже, чем -info, так как телемка в 30лупку полезет, ему один файл надо.  а обязать setup.ml выдавать метаинфу -- это клёво само по себе, особенно если в удобных для машинной обработки форматах.
[12:25:41] <f[x]> уже бы десять раз sed'ом выпилил то что тебе надо :)
[12:26:23] <bobry> ну тут просто возникает проблема выбора формата
[12:26:29] <bobry> sexplib очевидно не катит
[12:26:35] <bobry> из коробки есть только marshal
[12:26:43] <bobry> который небезопасный и caml-only
[12:31:29] <gds> чем плохо
(2011-10-27 11:12:39) gds: `ocaml setup.ml -info sections` = "Executable qwe\nLibrary ert\n"
?
[12:31:46] <f[x]> слишком просто
[12:32:12] gds хнык хнык
[12:32:14] <Kakadu> bobry: кроме marshal вроде на binio надо посмотреть. мински рекомендовал
[12:32:36] <gds> да чо сразу binio, f[x] правильно предложил xml.
[12:32:49] <gds> и обязательно dtd написать.
[12:33:30] <bobry> Kakadu: binio отваливается по той же причине что и sexplib
[12:34:32] <f[x]> ха, dtd уже не можно, только xsd
[12:34:39] <f[x]> * модно
[12:35:10] <gds> отстал я от энтерпрайза, дааа.
[12:35:13] <Kakadu> bobry: ну тогда sedом парсь
[12:38:39] <bobry> седом как то не кошерно :(
[12:43:36] <Kakadu> ну напиши тогда на камле нейросеть, которая сама понимает в каком формате замутил Легалл оазис и будет сама это парсить всё.
[12:43:55] <Kakadu> :trf:
[12:46:10] bobry вышел(а) из комнаты
[12:46:34] bobry вошёл(а) в комнату
[13:04:56] <Kakadu> bobry: там на лоре троллтред про то что, debian sid стабильнее арча) надо?
[13:16:04] shaggie вошёл(а) в комнату
[13:31:31] bobry вышел(а) из комнаты
[13:32:50] bobry вошёл(а) в комнату
[13:34:05] <bobry> Kakadu: sure
[13:47:01] <bobry> легалл видимо совсем занят — никакой активности ни в issues ни в репке
[13:56:15] bobry вышел(а) из комнаты
[14:01:09] <gds> а вот интересно.  Хочу в "тип объекта" добавить возможность "сериализация в json", которая представляется тупо как ( ('a -> Json_type.t) * (Json_type.t -> 'a) ).  Однако зависимость от json-wheel тащить не хочу.  Зависимость тут -- конкретно Json_type.t.  Причём хочу так, чтобы это был обычный метод, который в случае отсутствия json-wheel просто падал бы, например.
Кое-что тут откровенно противоречиво, а кое-что решается штатным образом только через адов препроцессинг или dynlink (тут он -- беее).  Если у кого будут, тем не менее, идейки -- сообщите.
[14:07:22] <f[x]> brainstorm - забабахать тип изморфный Json_type и функцию отображения
[14:08:45] <gds> о, до такого я не додумался, зачот!
[14:09:07] <gds> а при чётко-выверенных версиях можно даже магею заюзать для отображения.
[14:14:43] <gds> ещё тупая идейка -- при наличии переданного первоклассного модуля Json_type и собственно функций сериализации создавать первоклассный модуль, описывающий преобразование туда-сюда, а при отсутствии -- подсовывать какой-то левый модуль с Json_type.t, равным чему-то ненаселённому/абстрактному.
[14:25:06] <gds> кстати, ещё один вариант.  Сделать так, чтобы метод get_json_methods кидал исключения.  В случае, когда нет json'а -- NoJson.  В случае, когда есть -- HasJson of ( 'a -> Json_type.t ) * ... .  Суть в том, что HasJson кинет только тот код, который знает Json_type.t.
[14:40:08] <Kakadu> оффтоп: http://bash.org.ua/IThappens.ru/2364 )
[14:42:54] <gds> f[x]: правильно ли я понимаю, что вещи, требующие чего-то нестандартного, нужно разбивать на subpackages, в зависимостях которого это самое нестандартное и описывать?
[15:02:43] <f[x]> gds: какой общепринятой практики нету, т.е. если нет необходимости то проще всё в одно и не морочиться
[15:03:01] ygrek вошёл(а) в комнату
[15:33:58] Typhon вошёл(а) в комнату
[15:40:46] letrec вошёл(а) в комнату
[16:02:30] ygrek вышел(а) из комнаты
[16:30:24] bobry вышел(а) из комнаты
[16:30:25] klapaucius вышел(а) из комнаты
[16:33:19] bobry вошёл(а) в комнату
[18:46:12] Kakadu вышел(а) из комнаты
[19:21:40] letrec вышел(а) из комнаты
[19:25:16] letrec вошёл(а) в комнату
[19:59:45] Kakadu вошёл(а) в комнату
[20:30:50] Typhon вышел(а) из комнаты
[21:01:08] shaggie вышел(а) из комнаты
[21:03:53] ygrek вошёл(а) в комнату
[21:07:05] letrec вышел(а) из комнаты
[21:08:18] mrm вошёл(а) в комнату
[21:10:06] <mrm> gds: твой overbld помогает качать тонны нефти :-)
[21:11:50] <mrm> Сейчас появились какие-то официальные бинарники, но мне всё равно overbld нравится, т.к. в нём есть ocamlfind + mingw + куча нужных пакетов
[21:12:12] <mrm> Это такая моральная поддержка сейчас была :-)
[21:14:43] <mrm> Для облегчения баттхерта не хватает туда засунуть atdgen с тысячами зависимостей
[21:19:00] <gds> mrm: про нефть -- шикарно :)
atdgen -- ох знаю, надо.  давно точу на него глаз.
но вот 1. проблема с моим левым хаком otherlibs/unix -- надо портировать на новый окамл хорошо, 2. с тем сегфолтом не разобрались, который был на новой версии, но отсутствует на старой, и неизвестно, куда копать.
[21:20:01] <mrm> Да, из-за второго пункта до сих пор сижу на 3.11.2
[21:20:15] <gds> mrm: если уже прошёл баттхёрт с atdgen -- давай скрипты, всуну, потестирую.
[21:20:23] <mrm> До диагностики проблемы руки так и не добрались. Протестировал на куче машин -- нигде не воспроизводится
[21:20:48] <mrm> atdgen и все зависимости собрались и установились с "make; make install"
[21:20:55] <mrm> Без допилки
[21:21:15] <gds> хочется новую версию взять, когда будет хоть какой-нибудь релиз, скоро должен быть.  вот и жду-поджидаю.
[21:21:23] <mrm> Как удобен дистрибутив с ocaml+mingw+ocamlfind !
[21:21:33] <gds> удобен, дык.  для себя же делал :)
[21:21:59] <mrm> 13.0 будет или 12.2 ?
[21:22:17] <gds> смотря какой следующий релиз будет (релиз-кандидат, минорный релиз, хз).
[21:22:43] <mrm> Для atdgen пришлось вручную выкачивать и ставить около 10 пакетов. Но штука зачётная
[21:23:09] <mrm> При помощи неё избавился от всех бинарных апи в тех местах, где не требовалась высокая производительность
[21:23:48] <gds> про 10 пакетов -- о да, так и ожидал, приблизительно.  потому было западло ставить чисто для понтов, когда простого json-static хватило.
[21:24:16] <mrm> Вообще от этого Martin Jambon все либы зачётные и прекрасно документированные
[21:24:21] <mrm> Mikmatch ещё
[21:25:42] <gds> почти все, факт.  (все не щупал.)
[21:29:12] <mrm> Ок, на выходных попробую найти время и интегрировать по-нормальному atdgen в overbld. Нужно будет разобраться с тем, как там работают скрипты скачивания и сборки всего
[21:29:27] <gds> скриптов скачивания нет.  сборка -- то да.
[21:29:41] <gds> тут чо я релиза хоть какого-нибудь жду -- кто-то там критиковал меня за svn trunk, причём далеко не один человек.  С другой же стороны, почему именно следующий релиз -- потому что давно толково не обновлял оверблд.
[21:30:04] <mrm> А почему бы не 3.12.1 ?
[21:30:16] <mrm> Там, вроде, исправлены какие-то траблы с win32
[21:30:28] <gds> потому что скоро будет новый релиз, уже долго тянут, уже скоро должен быть.
[21:30:40] <gds> mrm: atdgen -- если всё там реально make ; make install, то забей, сам асилю.
[21:30:47] <mrm> Это который с GADTами?
[21:30:59] <gds> если будет 3.13, то GADT, да.
[21:31:09] <mrm> Будет какими новыми словечками пощеголять в светском обществе
[21:31:12] <gds> хотя, если реально хочешь помочь, я очень за.
[21:31:20] <gds> светское, ага, помню, рассказывал.
[21:31:54] <mrm> Я бы хотел как-то (пусть минимально) помочь с отличным дистрибутивом камла, который мне много времени и нервов сэкономил
[21:32:04] <mrm> Альтернативы сейчас -- нет
[21:32:25] <mrm> Хотя, судя по статистике скачиваний, мало кто знает про overbld
[21:33:50] <gds> было бы хорошо, помощь любую уважаю.  На худой конец -- не будем релиз делать, пока не потестим достаточно, то есть, все могут косячить как хотят без проблем.
про скачивания -- есть такое дело.
[21:36:01] <gds> "насильно мил не будешь".  пропеарить, разве что, достойно.
а, вспомнил, что мешало -- хотел какие-то проверки на "может ли данный source-пакет быть скомпилирован супротив таких стоящих бинарных пакетов" (ну, типично, если tcl/tk 8.4 стоит, а обновляют исходники до ocaml 3.10 (или какой там был), то надо как бы намекнуть, что это не ок).  Потом засрался на том, что на sf.net стоит слишком старый меркуриал, не умеющий тот вид бранчей, которые мне были нужны.
[21:36:21] <mrm> Мотивирующие картинки из софтины, использующей overbld:
[21:36:24] <mrm> http://img824.imageshack.us/img824/7933/primedebugger.png
[21:36:37] <mrm> Промежуточное представление программы:
[21:36:41] <mrm> http://img594.imageshack.us/img594/6666/tempuni.png
[21:38:38] <gds> нравится!
[21:38:45] <gds> ещё как!
[21:39:52] <mrm> Там даже полноценные лексические замыкания есть
[21:40:17] <mrm> WB = BiSolve (fun (WB) -> Lg(RO)-1.18*Lg(WB)^2+4.26*Lg(WB)-3.82, 1, 100, 0.001)
[21:40:37] <mrm> Функция -- решатель нелинейных уравнений. Первый аргумент -- замыкание
[21:43:07] <mrm> Я бы умер это на Делфи7 писать (где все структуры данных заменяет TStringList)
[21:43:57] <gds> понял, интересно.  небось, BiSolve берёт на вход представление в виде индуктивного типа данных?
[21:44:45] <mrm> Я не знаю, что такое "индуктивный тип данных" (краснеет). Тут полная динамика в стиле Python
[21:44:58] <mrm> Вообще система типов похожа на питоновскую
[21:45:36] <mrm> Если бы я не писал замену для этого инструмента (с полным сохранением обратной совместимости), то придумал бы какую-нибудь статику с выводом типов
[21:45:52] <mrm> Да хоть HM (пользователи умные -- физики, как никак)
[21:46:20] <gds> уточню: BiSolve работает с представлением, в котором есть функция от WB, равная Minus (Lg(RO)) (Mult 1.18 (Lg ...)), или же данная функция пригодна только для подсовывания туда конкретного WB и получения результата?
[21:47:09] <mrm> Почитал про рекурсивные типы :-)  Это функция с одним аргументом
[21:47:17] <mrm> Функции -- объекты первого класса
[21:47:35] <gds> то есть, BiSolve получает, грубо говоря, функцию float -> float?
[21:47:52] <mrm> fun (...) -> ...     -- это краткий синтаксис для описания функций, тело которых состоит из выражения
[21:47:59] <mrm> Да
[21:48:09] <mrm> И решатель её вызывает на каждой итерации
[21:49:01] <mrm> Раньше решатель на каждой итерации заново выполнял разбор строки и интерпретировал выражение
[21:49:02] <gds> ага.  вот теперь всё понял.  тоже хорошо -- тем, что очень практично.
[21:49:13] <mrm> А теперь замыкание компилируется и очень быстро работает
[21:50:05] <mrm> А для обратной совместимости сделал специальный хак (строка-аргумент на этапе компиляции парсится и преобразуется в замыкание)
[21:50:19] <mrm> И таких хаков -- тысячи
[21:50:36] <mrm> Увы
[21:52:05] <mrm> Они омрачают мою жизнь и пачкают руки в крови
[21:53:22] <gds> мне нравится подход в целом, когда вносится хоть какой-нибудь порядок, даже хотя бы статическая классификация хаков и их обход через строгую типизацию.  Несколько раз я ловил конфликты на этих обходах и явно эти конфликты разрешал, что было в пользу.
[21:54:27] <mrm> Хаки препроцессора у меня реализованы в модульном стиле (все под одной сигнатурой)
[21:54:40] <mrm> И их можно включать-выключать через json api
[21:55:19] <mrm> В перспективе можно начать выключать самые лютые хаки и вынуждать пользователей использовать новые возможности
[21:56:09] <gds> грамотно.  Если физики, то справятся, по идее.
[21:56:34] <mrm> Пример мелкого говнохака: http://slexy.org/view/s205oZTgiq
[21:58:01] <mrm> Который сам по себе является говнокодом :-)
[21:58:32] <mrm> Даже какие-то названия переменных в него вшиты. Ужос :-)
[21:59:28] <mrm> Зато на камле подобные вещи пишутся быстро и работают надёжно
[21:59:30] ygrek вышел(а) из комнаты
[22:14:11] <gds> в общем, я спатке.  был очень насыщенный день.
mrm, если не лень, попробуй как-нибудь всунуть atdgen в оверблд.  Если будут вопросы -- давай их, заодно задокументирую вопросы-ответы.  Вдруг кому-нибудь ещё пригодится.  (раньше сделать это я догадаться не мог, сейчас уже проще так.)
на худой конец, можно попробовать оформить две ветки: ту, в которой у клиентов не падает, и ту, в которой основное дело будет делаться, ну и мержить их всяко.
[22:14:55] gds вышел(а) из комнаты
[22:20:53] ermine вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!