Home
Objective Caml
ocaml@conference.jabber.ru
Вторник, 25 августа 2009< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся!
Конфигурация комнаты

GMT+4
[00:05:02] <ygrek> gds: насчёт грехопадения - всегда есть отмазка - "в исследовательских целях"
[00:06:25] <ygrek> насчёт камлобилда - да, выглядит страшно - но в принципе даже если стандартные правила не подходят всегда можно дойти до самого нижнего уровня и вручную всё сделать
[00:06:30] <ygrek> но это крайний случай
[00:08:32] <ygrek> насчёт недоначатых проектов - release early, release often. Пусть и недоделанное - строчка в гугле каши не просит.
[00:09:29] <ygrek> да, а насчёт ocaml/msvc - don't ask to ask -- ask
[00:09:47] <ygrek> насчёты закончились - уполз спать
[00:10:58] <ygrek> ах да, Лерой конечно крут. Ну и вообще вся та тусовка inria'вская.
[00:11:05] <gds> касаемо объектов, дело хуже. Если это объектное гуано выйдет в широкое использование, хомячки будут это дело юзать и жаловаться, что у окамла гадская типизация и отвратительная производительность. А так оно и будет, ибо простора для юзер-левел оптимизации -- ровно никакого. Ни тебе переписывания кода (rewriting), ни переписывания map .. (а лучше map .. $ map ..) в один цикл. Если бы Typedtree включили в дело подобно camlp4/ast, было бы клёво. Но не будет щастя -- только левый окамл дистрибьютить.
С другой стороны, хомячки юзают себе C++, Java и C# и даже не думают жаловаться о них. Поэтому может и лучше оставить "типизированный C со сборкой мусора".
[00:12:04] <gds> > release often. Пусть и недоделанное - строчка в гугле каши не просит.
у окамловских погроммистов дебильнейший менталитет. если не работает -- не релизить.
[00:12:14] <ygrek> ломать надо
[00:12:28] <ygrek> что за typedtree? это какой-то реальный проект или идея?
[00:12:59] <gds> typedtree -- модуль из окамловской типовыводилки. Даёт охрененно адекватное дерево -- и ast, и типы, всё есть.
[00:13:47] <gds> конечно, это не синтаксическое расширение, так как туда попадает то, что уже прошло стадию source -> lexing -> parsing (camlp4 тут) -> вывод типов.
[00:14:06] <ygrek> а, то есть к нему нет доступа с уровня языка
[00:14:30] <ygrek> но как промежуточный формат для оптимизации например - самое то видимо?
[00:15:24] <gds> именно что доступа нет. я делал патч, чтобы рядом с module.cm[ox] выплёвывало module.tt с маршалленным представлением, и всё получалось. это когда ocaml->js пробовал. затык оказался совсем в другом, не тут.
[00:15:58] <ygrek> сорри, я уже сплю
[00:16:08] <gds> утром почитаешь :)
[00:16:10] ygrek ушёл, теперь точно
[00:19:54] <sevenov> хмхм. У меня вот вопрос, больше теоретический.
[00:20:11] <sevenov> Хм. Сначла спрошу, занимался ли кто нибудь обработкой изображений?
[00:21:39] <gds> ygrek: промежуточный формат и типы знает: можно посмотреть, что если есть object value v =123; value add : obj int -> obj int -> obj int; ... end и подобный же объект с числом 234, то можно их сложить (у обоих есть add) и либо вызвать метод add на конкретных литералах, либо вообще посчитать на этапе компиляции. Ну и кое-где убрать объекты нафиг, доведя до простых значений. Формат чоткий, но на практике не пробовал его использовать.
[00:22:09] <gds> ygrek: > да, а насчёт ocaml/msvc - don't ask to ask -- ask
туплю адово. Имеешь ввиду, что нужно брать за коня за рога и тупо начинать делать, а потом уже интересоваться конкретными деталями?
[00:23:53] <gds> sevenov: я -- мало. Если обработка = пиксель-дрочинг, то, при всём моём уважении к окамлу, лучше взять что-нибудь другое или генерить из него кот. Если хитрая обработка -- даже не знаю, смотреть надо на алгоритмы.
[00:24:49] ygrek вышел(а) из комнаты
[00:25:02] <sevenov> gds, мне бы мат. литературы на тему, как можно реализовать, грубо говоря, жпг->гравировка.
[00:25:13] <sevenov> хм, херово объяснил.
[00:29:23] <gds> идею понял. Проще взять имеющийся графический софт (гимп, пхотосхор) и посмотреть, как у них. Дальше, посредством интернетов, детали будут всплывать как кал из-под снега. Всегда, когда нужна была графика/звук, так и получалось.
[00:32:26] <sevenov> gds, в гимпе не вижу такого.
[00:42:41] <gds> всякие контрасты, sharpen, контуры.. я реально плохо знаю это дело. Тогда гуглить по предметной области, может там есть варианты для фотошопа. Ничего умнее не вижу.
[01:01:49] <sevenov> Фильтр Лапласа )
[01:01:53] <sevenov> Вот что нужно
[01:23:06] sevenov вышел(а) из комнаты
[01:23:28] sevenov вошёл(а) в комнату
[03:04:33] sevenov вышел(а) из комнаты
[03:13:08] sevenov вошёл(а) в комнату
[04:40:19] sevenov вышел(а) из комнаты
[06:48:20] john вышел(а) из комнаты: Replaced by new connection
[06:48:21] john вошёл(а) в комнату
[07:25:49] john вышел(а) из комнаты
[07:33:30] john вошёл(а) в комнату
[08:23:20] gds вышел(а) из комнаты
[09:01:26] gds вошёл(а) в комнату
[09:20:08] 604 вошёл(а) в комнату
[09:21:53] <604> gds> > release often. Пусть и недоделанное - строчка в гугле каши не просит.
у окамловских погроммистов дебильнейший менталитет. если не работает -- не релизить.
почему же дебильнейший? release early, release often, release crap?
[09:24:06] <gds> дебильнейший -- потому что до release частенько не доходит, если проект не вылизан до блеска котовьих яйц. А полезный код таки остаётся в загашниках.
[09:31:36] <604> лучше глючноватый, чем никакой?
[09:32:40] <gds> вон как было с моей библиотекой для работы с dbf-файлами: она работает, удовлетворяет моим потребностям, но потребности ограниченные: только несколько типов полей разгребать умею, остальные считаю ошибочными. Желания дописывать работу с остальными типами у меня нет, так как на практике мне не нужно. А с имеющимися типами работает чотко, ровно. Релизить тоже как-то лениво, так как кому это говно нужно. По итогу, недавно зарелизил, положил в публичный репозиторий, и некто ygrek внёс туда изменения, которые, как догадываюсь, сделали библиотеку работающей и для него.
[09:38:51] <604> >или может просто стрёмно признаваться в том, что используют.
а чего стыдиться-то?
[09:45:20] <gds> в теории -- чего угодно. Например, что не принадлежат к илитни касте pure functional programmers. Однако скорее дело не в этом.
[09:49:20] <604> а в чем? "я сам себе напишу всё, что нужно"?
[09:54:32] <gds> а хрен его знает о точных причинах. какие-то свои замутки, нездоровый идеализм, нежелание участвовать в коммуникациях. или может наоборот, из-за заниженной самооценки.
впрочем, я не психиатор, а постановка удалённого диагноза само по себе диагноз, поэтому воздержусь.
[10:01:33] <gds> впрочем, к чему о плохом -- есть этот чятик, есть lj\ru_{caml,lambda,declarative}, есть defun.ru полудохлый, есть официальная рассылка и рассылка для нубов, ну и все дела.
[10:07:21] <604> рассылка для нубов? как подписаться?
[10:09:18] <gds> http://tech.groups.yahoo.com/group/ocaml_beginners/
только там нужен yahoo id.
[10:10:30] <604> интересно...
[10:12:26] <gds> если вопрос имеет конкретную форму и если пробовал что-то по нему сделать, то проще отписать сюда, вероятно помощь будет быстрее.
[10:28:15] <604> я уже понял. тут удивительно дружелюбное сообщество
[10:29:02] ygrek вошёл(а) в комнату
[10:30:33] f(x) вошёл(а) в комнату
[10:38:52] <f(x)> gds: да, за ocaml-dbf спасибо - пригодилась.
[10:39:26] <gds> ой-вэй. фигассе.
[10:40:49] <gds> судя по репо, были только две серьёзные проблемы -- deleted_flag и eof?
[10:44:38] sceptic вошёл(а) в комнату
[10:48:59] <f(x)> угу
[10:49:35] <f(x)> > <gds> ygrek: > да, а насчёт ocaml/msvc - don't ask to ask -- ask
> туплю адово. Имеешь ввиду, что нужно брать за коня за рога и тупо начинать делать, а потом уже интересоваться конкретными деталями?
ну вообще это было тому кто жаловался что ocaml/msvc не хочет компилить
[10:50:49] <f(x)> > release early, release often, release crap?
Вот это вообще глупость. Не нравится - не ешь, никто ведь не заставляет.
[10:52:34] <604> ну вот оно так обычно и получается...
[10:55:12] <gds> вообще гады они, эти опенсорсники. Они должны, просто обязаны писать правильный и рабочий код, а они, мало того что пишут плохой код, так ещё и ограничивают его использование.
[10:55:43] <f(x)> :))
[10:58:16] Typhon вошёл(а) в комнату
[10:59:59] <604> я опенсорсников не обвиняю в том, что код получается плохой, сам понимаю, что вряд ли с первого раза получается хорошо. Но проблема в том, новые фичи добавлять интереснее и веселее, чем чинить старые баги. и ситуация парадоксальная: вроде люди работают, релизы выходят, а допилить до юзабельного состояния не получается
[11:02:09] <f(x)> люди делают то что им интересно
[11:02:35] Michael Holub вошёл(а) в комнату
[11:03:00] <Michael Holub> доброе утро
[11:03:38] <604> just for fun - основная движущая сила и проклятье опенсорса
[11:04:07] <f(x)> о боги, какое ещё проклятье? это проклятье для тех кто решил что опенсорсрешит все их проблемы
[11:04:16] <gds> юзабельное -- доступное для использования. я использую много гнутого софта. подтверждаю: его использовать можно.
но виноваты немалой частью и пользователи: они тупо забивают на проблемы, не дёргая разработчиков, в результате имеем что имеем: старые баги остаются на месте.
[11:04:53] <f(x)> Michael Holub: доброе
[11:05:45] <Michael Holub> а подскажите с тупым вопросом, я с окамлем не больше часа знаком :) http://pastie.org/private/pqgwhydcnzoyrb0mvkzja - что-то меня очень удивил в данном случае паттерн-матчинг
[11:06:58] <f(x)> [1;2;3] а не запятая
[11:07:05] <f(x)> http://ocaml-tutorial.org
[11:07:07] <Michael Holub> а, угу, я уже понял :)
[11:07:18] <Michael Holub> сорри, привык к запятой, поэтому меня смутило
[11:07:27] <Michael Holub> спасибо
[11:09:36] <604> да даже если дёргают разработчиков, отнюдь не факт, что это будет исправлено. взять ту же историю с хоткеями в ФФ: все страдали, а прислали патч только после того, как пообещали денег
[11:10:27] <gds> немудрено, в том плюсовом аде ковыряться добровольно мало кому хочется.
[11:17:40] <gds> Michael Holub: если не секрет, что довело до окамла человека, знающего хаскель?
[11:18:58] <Michael Holub> не знающего :)
[11:19:46] <Michael Holub> ну экспериментирую на самом деле, хочется посмотреть и более практичный окамль и академичный хаскель
[11:27:10] <Michael Holub> да и вообще пересечение ocaml@c.j.r и haskell@c.j.r явно не пустое множество, в хаскелле много мозговзрывающих концептов, которые я пока не осиливаю типа RankNTypes, а с окамлем проще читать окасаки :)
[11:54:03] <Michael Holub> а в окамле есть искалка функций по типам аргументов? вроде hayoo для самизнаетечего :)
[11:55:28] <gds> не встречал.
[11:55:54] <gds> хотя вроде в ocaml batteries что-то на тему улучшенного топлевела делали.
[11:55:57] <Michael Holub> а как обычно паттерн-матчат строки? никак?
[11:56:03] <gds> (топлевел -- в смысле repl)
[11:56:08] ygrek вышел(а) из комнаты
[11:56:30] <gds> обычно берут и матчат: match str with "kva" -> "kuku" | ne_kva -> ..
[12:00:18] <604> хм... т.е. под глубокомысленным термином pattern matching скрывается продвинутый вариант самого обычного switch'а?
[12:00:55] <Michael Holub> ну конструкторы он еще матчить умеет плюс всякие плюшки вроде character ranges, скорее чуть более продвинутый if
[12:02:01] <gds> а под термином sum type скрывается всем известный сишный enum.
[12:06:44] <gds> кстати, let-in привязки -- это на самом деле обычные переменные.
[12:07:00] <gds> а модули -- всем известные C++'ные namespace'ы.
[12:10:26] <gds> между прочим, мифические closure (тоже очередное умное слово) -- это всего лишь
struct closure { value (*code_ptr)(value[]); value* env; }
в общем, тоже сишная штука.
[12:11:13] gds срывает покровы
[12:11:29] <Typhon> феерически расставляет точки, даже
[12:11:43] <gds> да! точки над ьi.
[12:12:47] <Michael Holub> осталось снять пародию на всем известный ролик и тем самым поднять популярность ФП до небес
[12:15:47] <gds> "есть у меня друг.. точнее, подруга..", или как там :)
[12:19:00] <gds> кстати, ещё малоизвестный, но тщательно скрываемый факт: словом тупл частенько называют весьма кривые массивы, которые мало того, что не расширяются, так даже не гарантируют совпадения типов элементов.
[12:21:37] <604> :))
[12:21:59] <604> жжошь, как говорится
[12:22:36] gds кланяется.
[12:31:43] f(x) вышел(а) из комнаты
[12:42:09] Typhon вышел(а) из комнаты
[12:43:14] Typhon вошёл(а) в комнату
[12:48:20] gds вышел(а) из комнаты: Replaced by new connection
[12:48:21] gds вошёл(а) в комнату
[13:03:22] f(x) вошёл(а) в комнату
[13:03:52] f(x) вышел(а) из комнаты
[13:04:05] f[x] вошёл(а) в комнату
[13:15:43] <ermine> f[x]: ты камлобилдом компиляешь с lablgtk?
[13:49:06] <f[x]> угу
[13:49:45] <f[x]> не хочешь этому клиенту release crap сделать? ;)
[13:51:43] <f[x]> open Ocamlbuild_plugin
open Command
module C = Myocamlbuild_config
;;
dispatch begin function
| After_rules ->
C.extern "extlib" ~cma:"extLib";
C.extern "lablgtk2" ~cma:"lablgtk";
| _ -> ()
end
[13:52:04] <f[x]> Myocamlbuild_config -> http://repo.or.cz/w/sqlgg.git?a=blob_plain;f=src/myocamlbuild_config.ml;hb=HEAD
[13:52:26] <f[x]> $ cat _tags
true: use_extLib, use_lablgtk, annot, debug
[13:52:28] <f[x]> всё
[13:56:19] ygrek вошёл(а) в комнату
[14:04:15] <ermine> f[x]: я вчера навскидку попробовала скомпилить простое окошко, оно скомпилилось, но не работает - gtk ругался на NULLы :)
[14:04:54] <ermine> только у меня через ocamlfind кажись было
[14:05:24] <ermine> вечером буду перебирать кусок камлобилда по новой
[14:06:43] <ermine> спасибо за ссылки и куски
[14:07:09] <gds> ну чо, у нас сейчас модно release crap? тогда держите "Backtracking, Interleaving, and Terminating Monad" -- http://paste.defun.ru/m5f8613a4
[14:09:28] <ermine> gds: ты переташил свой молдавянский ресурс туда?
[14:09:51] <ermine> а, копипаста
[14:10:11] <gds> ресурс у меня хохляцкий, а не малдаванский!
да, тупая копипаста.
[14:11:41] <ermine> ох уж этот ревизед
[14:12:36] <gds> при отсутствии комментариев, имхо, пофиг :)
original тоже есть.
но главная дока -- пдфка от киселёва и ко
[14:13:25] <ermine> в ревизед прежде всего тут бросается в глаза нотация t 'a
[14:13:32] <ermine> что кажется нелогичным
[14:13:36] <ermine> :P
[14:13:49] <gds> мне -- наоборот. "список целых".
[14:15:55] <gds> то есть, в целом, сначала идёт общая информация -- что за тип это вообще, а потом уже уточнение -- какими типами он параметризован.
('k, 'v) Hashtbl.t vs Hashtbl.t 'k 'v
[14:18:42] <ermine> в ревизед они уже выглядят как настоящие аргументы и опять возникает мысль об заветном партиал аппликешне
[14:19:25] ygrek вышел(а) из комнаты
[14:19:26] <gds> он почти есть :) type string_hash 'v = Hashtbl.t string 'v
[14:20:28] <ermine> хехе
[14:20:52] <gds> ни разу не partial, но -- что ж поделать.
[14:23:31] ermine заценила полиморфизм как возможность добавления в библиотеку поля "userdata" структуры
[14:24:17] <ermine> чота подобных приступов гениальности нечасто случается
[14:24:58] <gds> эээ, разверни мысль слегка.
[14:27:57] <ermine> в библиотеке основная стрктура type t = { куча полей} есть, я тут думала как привязать к сессии определенные значения, которые принадлежат программе, а не библиотеке, работающей с данной сессией работы (связи), потом догадалась что можно их хранить в самой библиотеке, как это делается в некоторых сишних библиотек, которые позволяют в аргументах своих функций void* userdata аргумент заюзать
[14:29:05] <ermine> таким образом type t превращается в type 'a t = { userdata:'a}
[14:29:22] <ermine> не параметрический, а полиморфизмный
[14:30:14] <gds> в определённой части (в userdata) -- да, полиморфно.
[14:30:23] <gds> кстати, ещё два решения есть у подобных проблем.
[14:30:42] <ermine> пока я туда записываю имя сессии, чтобы по нему вытаскивать из всяких хэштаблиц то что надо
[14:31:17] <gds> 1. если type t = объект, а функции в либе требуют открытый объектный тип, то пара методов, добавленных в объект, не помешают никому.
[14:31:53] <gds> 2. если нет возможности менять библиотеку, можно через weak hashtable ассоциировать значение либы со значением программы.
[14:33:39] <ermine> а, да, про второй способ я забыла
[14:35:21] <ermine> вообще сначала я хотела избавиться от глобальных таблиц любого пошиба, но щас думаю, что не получится
[14:36:19] <ermine> поэтому пока себе обеспечила хранение ключа
[14:37:26] <gds> кстати, по производительности способ { userdata : 'a } самый крутой.
[14:39:05] ermine в подобных оптимищациях слабо разбирается, но лично рыться в базах стала бы только когда больше ничего другого не остается
[14:40:31] <gds> а чего там разбираться. вытащить поле из записи -- O(1). из объекта -- от O(1) до O(log(количество_методов)). из хеш-таблицы -- O(log(количество_объектов)).
[14:42:33] <ermine> а ты часто юзаешь неклассовые объекты?
[14:43:09] <gds> не слишком часто. так же, как и классовые. но случается.
[14:47:37] john вышел(а) из комнаты
[15:03:51] Typhon вышел(а) из комнаты
[15:05:30] Typhon вошёл(а) в комнату
[15:05:57] <gds> из обсуждения журнала "практика фп", об источниках вдохновения:
lj\hobohabilis : Нет, кошерной будет версия без папоротника на обложке. А к формату, форме и содержанию претензий нету. Все здорово и замечательно - видно, что старались.
lj\lionet : Без папоротника? Мы и так от конопли удержались, куда кошерней-то?
[15:20:24] <f[x]> за релиз в paste.defun.ru зачёт в карму не идёт
[15:21:41] <gds> это пре-релиз.
[15:24:42] <gds> думаю, каменты потом настрочить, в caml-list выдвинуть на обсуждение.
но вот codepad.org отказался исполнять код -- говорит, invalid stream concatention или типа того. Там стоит 3.10.1, вроде не далеко от 3.11.1.
я ж там хитрю, использую недокументированные функции Stream.
вот и не знаю, корректный ли код.
[15:31:12] <gds> а чтобы проверить корректность хотя бы на практике, нужно заюзать это дело в нехилой программе. а писал я это just for fun, и необходимость в этой монаде возникает апериодично и редко.
[15:31:27] ygrek вошёл(а) в комнату
[16:06:29] Typhon вышел(а) из комнаты
[16:07:16] Typhon вошёл(а) в комнату
[16:31:42] ygrek вышел(а) из комнаты
[16:35:27] <gds> кажется, буду сейчас переписывать глючный древний кал луговского (oci8ml, оракловские биндинги).
camlidl что ли заюзать.
[16:36:46] <gds> ибо вручную рисовать биндинги скучновато..
[17:12:42] <ermine> а статически скомпиленный код работает быстрее чем подгруженный через dynlink?
[17:13:20] ermine в данный момент страдает вопросом как описывать в конфиге плагины, которые либо статически вкомпилены, либо динамически подгружены
[17:14:32] <ermine> что-то типа <plugin name='weather' какего='weather.cmo'/> но поди пойми как описывать для байткода и нейтива одновременно
[17:15:55] <gds> без расширения и всё.
[17:16:30] <ermine> ага
[17:17:23] <ermine> вообще это часть решения проблем с созданием системы хуков, как же оно много частей вовлекает в переделку
[17:17:39] <ermine> вообще это здорово
[17:17:56] <gds> глобальный рефакторинг и вообще переписывание -- часто полезно.
[17:18:41] <ermine> не, потянула за ниточку в одном месте, вывалился клубок
[17:18:58] <ermine> причем в клубке то о чем я мечтала и хотела переделать
[17:19:25] <gds> знаем такое.
особенно хорошо, когда клубок вытягивается чисто на уровне типов.
[17:20:39] <ermine> не, типы как раз мало трогаются, тут связи между модулями
[17:21:06] <ermine> вот например тот же вопрос как уловить, что есть в системе такой-то плугин
[17:21:19] <ermine> и запустить его, если он включен в конфиге
[17:21:27] <ermine> при любом способе компиляции
[17:22:39] <ermine> сначала я хотела хуки, живущие только в сессиях, но пока поняла, что это невозможно - хуки глобальны, а в сессиях хранятся только данные, к ним относящиеся
[17:23:18] <ermine> невозможно потому что заранее нельзя узнать куда зарегать
[17:23:49] <ermine> щас буду делать список плугинов, который создается при пробегании по конфигу
[17:24:32] <ermine> только это пока не решает вопрос как справиться с вкомпиленными плугинами
[17:25:03] <gds> вкомпиленные пусть регистрят себя -- "вот он я!".
[17:26:29] <ermine> и делать отдельную процедуру для их запуска, чтобы они сами в хуки сували и запускали свои процессы?
[17:26:33] <ermine> видимо так
[17:27:36] <gds> угу, как-то так. хотя конкретные детали тебе виднее.
[17:28:55] <ermine> да я сама не знаю, нахожусь ли я в творчестком упадке или припадке
[17:29:13] <gds> в последнее время вроде последнее.
[17:30:26] <ermine> спасибо за комплимент
[17:32:51] <ermine> а вот Pervasives.at_exit всегда выполняется?
[17:34:19] gds вышел(а) из комнаты
[17:36:07] <ermine> надо проверить
[17:45:02] <ermine> при нормальном завершении программы at_exit выполняется, а вот при прибинии сигналами не выполняется
[17:48:54] <ermine> sigint (ctrl-c) чота не ловится и не реагируецо
[17:52:07] <ermine> вру - сигналы выполняются, а принтфы внутри их калбэков не выполняются
[18:26:33] john вошёл(а) в комнату
[18:28:54] gds вошёл(а) в комнату
[18:52:59] Mon вышел(а) из комнаты
[19:00:44] Mon вошёл(а) в комнату
[19:01:52] Mon вышел(а) из комнаты
[19:02:23] Mon вошёл(а) в комнату
[19:03:21] Typhon вышел(а) из комнаты
[19:04:46] <gds> решил поковырять ocaml/msvc. дофига чото качать надо...
[19:08:53] <f[x]> ну вообще тобы компилять хватает 1.5 мб exe и lib файлов
[19:08:59] <f[x]> * чтобы
[19:09:32] <f[x]> там {ml,link,mt}.exe
[19:09:49] <gds> мне надо скомпилировать им окамл, если в целом.
[19:09:54] <f[x]> ну если ещё сишный биндинги тогда конечно cl нужен в более-менее вменяемом объёме
[19:10:00] <f[x]> а :)
[19:10:03] <f[x]> а нафига?
[19:11:52] <gds> традиция :)
там вылезают разные гадости частенько, если вдруг криво поставлю сишный компилятор и прочее. т.е. я как бы форсирую это дело. заодно и посмотреть, как оно это делает.
[19:14:15] <f[x]> ну удачи :)
[19:16:08] <gds> а гемор вообще?
[19:17:45] f[x] вышел(а) из комнаты
[19:40:54] <604> как страшно жить... вот в этом http://john.5070.info/tag/ocaml/ концентрированном потоке сознания реально можно разобраться?
[19:52:23] <gds> если про судоку на окамле, то примерно понятно. fold81 разве что извратный, на вникание потрачу кучу времени.
[19:57:29] <gds> отжиг замечательный, но в реальном коде такое писать опасно :)
[20:01:15] <604> особенно порадовала простыня на пхп
[20:07:17] <604> опасно - потому что сам потом не разберешься?
[20:08:13] <gds> и сам, и кто-нибудь другой, и отлаживать не всегда легко.
[21:04:30] Michael Holub вышел(а) из комнаты
[21:10:27] Michael Holub вошёл(а) в комнату
[21:40:56] <604> как здорово... кто-нибудь знает, как в графической оболочке окамля для винды закончить ввод целого числа? энтер тупо переводит на следующую строку. в консольной версии энтер работает как положено
[21:41:51] <604> вопрос, конечно, тупой, может кто-то сталкивался?
[21:44:08] <gds> как это "закончить"?
[21:45:20] <604> в прямом смысле. сообщить, что я закончил ввод числа 13 после того как нажа 1 и 3
[21:45:59] <gds> закончить ввод и что дальше после окончания числа идёт?
[21:46:32] <604> выполнение программы с введенным числом
[21:49:28] <604> let i = read_int ();;
консольная версия ждет, пока я введу число. Я нажимаю 1,3,Enter, она выдает
val i : int = 13
графическая версия просто переводит курсор на следующую строку и ждет ввод дальше
[21:59:22] <ermine> жуть
[21:59:26] <604> угу
[21:59:48] <604> глюк по ходу
[21:59:56] <ermine> вводи числа типа 1.5+e15
[22:01:44] <604> неа. оно как-то срабатывает, если затереть предыдущую строку, но четкой последовательсти не смог установить. видимо, придется консольной версией пользоваться
[22:03:55] <ermine> а ты выводи печать строки, которую ты вводишь
[22:04:18] <ermine> в хек-кодах :)
[22:04:46] <604> зачем?
[22:04:53] ermine сама бьется головой об стол и делает гениальные изменения в своем коде
[22:05:16] <ermine> чтобы посмотреть что в буфере оказывается перед конвертацией в инт
[22:06:15] <604> насколько я понял, оно даже в буфер не может попасть, из-за того, что на чтении застревает. Ладно, ща по их баг-трекеру пошарю
[22:08:24] <gds> есть идея, что stdin проги, делающей read_int, совсем не равен тому, откуда прога читает ввод с клавиатуры.
[22:10:18] <604> вполне возможно. она иногда читает-таки число, иногда в результате моих манипуляций падает с Exception: Failure "int_of_string".
[22:12:47] <gds> String.length (print_int ());; -- ?
[22:13:34] <gds> .ляяя..
[22:13:38] <gds> я тупой.
[22:13:51] gds сваливает.
[22:14:49] <604> что это было?..
[22:15:52] <ermine> пацтол?
[22:17:17] ermine добыла дыню из холодильника и теперь применяет ее как попкорн
[22:28:47] <ermine> уф
[22:33:38] Michael Holub вышел(а) из комнаты
[22:53:08] <gds> вредно изменять сознание, говорить с человеком в реале и писать в чятик.
В общем, мысль была про то, что неплохо бы посмотреть на то, что именно входит в состав вводимой строки. Как-то так:
# Scanf.scanf "%i%s" (fun x y -> (x,y,String.length y));;
123
- : int * string * int = (123, "", 0)
#
не знаю, получится ли это в гуйне.
[23:02:20] <604> хм. в гуйне получилось то же самое
[23:05:09] <gds> а просто read_int () после "123<enter>" продолжает ждать прихода?
[23:07:53] <604> ага
[23:08:14] <sceptic> прихода? :)
[23:08:45] <604> хоть чего-нить
[23:11:09] <gds> прихода данных!~
[23:12:39] <604> теперь и scanf отвалилось: Exception: Scanf.Scan_failure "scanf: bad input at char number 3: \n".
[23:12:58] <604> откуда он их берёт?..
[23:14:33] <gds> scanf или read_int недочитали.
[23:17:37] <604> Scanf.scanf "%s" (fun y -> (y,String.length y));;
сразу же, без ввода
- : string * int = ("", 0)
[23:18:03] <gds> ага, есть идея. ща.
[23:18:39] <604> пробовал несколько раз запустить, чтобы вычитал буфер (?) - никаких изменений
[23:20:12] <604> в свежезапущенной сессии предыдущая команда тоже застревает на чтении
[23:24:57] <604> ладно, забей на это. Не трать свое драгоценное время
[23:25:35] <604> я могу и через консоль поработать
[23:30:52] <gds> что вывел на текущий момент. есть канал, есть возможность его читать, есть условия, до которых читать.
если читаем до упора -- Scanf.scanf "%[\000-\255]" ignore -- то действительно до eof.
если читаем строку -- она заканчивается чтением одного из cr|lf.
посмотреть, что в буфере посимвольно -- Scanf.scanf "%c" (fun x -> x)
с точки зрения логики (как я уже понял), scanf'у важно указать признак окончания того, что именно читать.
почему read_int в гуе не работает -- до сих пор не знаю.
но можно ограничить число одной строкой (т.е. с кушаньем конца строки) -- let my_int = Scanf.scanf "%s" int_of_string
[23:32:57] Michael Holub вошёл(а) в комнату
[23:33:17] <Michael Holub> File "tries.ml", line 19, characters 76-101:
Error: This expression has type lex_node
but an expression was expected of type lex_node
- а как понимать такое несовпадение типов? :)
[23:35:10] ygrek вошёл(а) в комнату
[23:35:13] <604> same shit. Оставим эту глюкавую гуйню. меня больше интересует другое. в DAWOC'e пример
let rec hilo n =
print_string "type a number: ";
let i = read_int () in
if i = n then print_string "BRAVO\n\n"
else
begin
if i < n then print_string "Higher\n" else print_string "Lower\
n" ;
hilo n
end ;;
я один тут вижу потенциальное переполнение стека, если юзер попался крайне тупой или упрямый?
[23:36:34] <gds> Michael Holub: тип дважды определён?
[23:37:17] <Michael Holub> gds, неа
[23:37:34] <Michael Holub> я слышал о таких глюках в toplevel, но я просто #use юзаю, он же все выгружает?
[23:37:42] <Michael Holub> или он просто исполняет в toplevel сорц?
[23:38:36] <gds> 604: есть полезная оптимизация -- tail-recursive calls elimination. советую почитать. если очень просто, то в некоторых случаях вызов функции можно превратить в jmp.
[23:38:38] <Michael Holub> кстати похоже именно исплняет, перегрузил и выдало уже другую ошибку
[23:39:06] <gds> Michael Holub: таки да, оно просто исполняет, и не должно выгружать ничего.
[23:39:08] <Michael Holub> а в хаскелле на tail-call optimization частенько можно и подзабить :)
[23:39:19] <Michael Holub> gds, а как сделать релоад? никак?
[23:40:28] <gds> насчёт хаскеля не знаю.
релоад -- вроде никак. Канонiчный способ -- из емаксов всяких загружать буфер/кусок в свежий топлевел, где истязать его.
[23:45:28] <ygrek> gds: ocaml/msvc - если чётко следовать инструкции то всё собирается нормально, ну может немножко здравого смысла понадобится в процессе :) Просто зависимостей куча и ошибиться можно.
[23:47:02] <ygrek> хм, http://john.5070.info/tag/ocaml/ и john это очевидно одно и то же лицо. Не палится :)
[23:47:31] <gds> разумеется одно и то же. с тех пор, как я узнал, что ygrek = f[x], иногда подглядываю за жыдами.
[23:49:06] <gds> сейчас запнулся на:
[3] MASM version 6.11 or later. The full distribution of Visual C++ 2005
    contains MASM version 8. Users of the Express Edition of Visual C++
    2005 can download MASM version 8 from
http://www.microsoft.com/downloads/details.aspx?FamilyID=7A1C9DA0-0510-44A2-B042
-7EF370530C64&displaylang=en
    To obtain MASM version 6.11, see
    http://users.easystreet.com/jkirwan/new/pctools.html.
у меня express edition. то, что по первой ссылке, качается, но после принятия первого условия быстренько заполняет несколько раз один progress bar и молча вылетает. вторая ссылка не открывается -- "ожидание ответа от ...".
[23:51:07] <604> я вроде оттуда же качал, установилось нормально
[23:51:51] <ygrek> у меня masm где-то с древних времён был
[23:52:31] <ygrek> нужен вообще по-моему только ml.exe, а он и со студией идёт - попробуй положи его в PATH
[23:53:06] <ygrek> ещё есть masm32.com
[23:53:15] <ygrek> я оттуда когда-то качал
[23:54:41] <gds> тьфуты, нашёл. http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvc/thread/c9cede83-a5d5-4209-91a5-b9e28673550b/ -- лажа в том, что оно не сообщает об успешной установке (хотя винда -- должна, в отличие от юниксов), и что ставит повторно без упоминания о том, что оно уже стоит.
я люблю винду.
[23:54:50] <gds> конечно, и ml.exe тоже нашёл.
[23:55:09] <gds> "C:\Program Files\Microsoft Visual Studio 8\VC\bin\ml.exe", если с путями по умолчанию.
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!