Занимаюсь дипломом - 4

Oct 31, 2010 17:40

 Итак, я решил старые проблемы с deriving и получил новые. На функциях он не падает. Полиморфный тип ('a. 'b) PMap.t я обренул тут.

Получил новую проблему: deriving повисает, когда две переменные рекурсивные. (По-видимому надо использовать механизм подбный тому, что есть в ocamldebug - печатать только до определеной глубины). Впрочем даже "великий и ( Read more... )

ocaml, диплом

Leave a comment

Comments 3

gds October 31 2010, 15:04:03 UTC
например, можно для каждого типа (фактически, в каждом модуле Show_xxxxx) завести ссылку на список значений этого типа, и перед печатью проверять на физическое равенство (равенство указателей) с помощью List.memq, и если оно равно, то печатать не значение данного типа, а хотя бы тупо printf "recurring value addr=%i" ((Obj.magic val) : int).
После печати конечно чистить глобальные списки.
Или сразу пробегать и смотреть, какие значения будут встречаться снова, чтобы их как-то особо пометить при печати сразу.
Ну или завести один глобальный список на все значения, и хранить там значения с типом Obj.t, получаемые через Obj.repr. (хранить есть смысл только те значения, которые Obj.is_block val && Obj.tag val < Obj.no_scan_tag (замечу, порядок условий важен, так как "&&" ленивое).)

А зачем вообще используется deriving?

Reply

dimitrykakadu October 31 2010, 18:42:52 UTC
Да, я понимаю, что можно дописывать библиотеку очень долго, и подобный метод мне тоже пришел в голову, но как-то нехочется. Получается, что я решаю второстепенные задачи по допиливанию библиотек, вместо решения моей. Что-то как-то не хочется очень сильно в это углубляться.

http://github.com/Kakadu/Triss/blob/master/haxe/type.ml
там начиная со строки `type t = ` идет тип, который представляет AST программы на Haxe. Я очень хочу на него смотреть удобно. Я думал что с помощью deriving наступит коммунизм, но нет, и тут умериканцы постарались!) А писать printf для типа в 150 строчек я пока с духом не собрался(. Хочется простого решения.

Да, я пробовал загружать всё это добро в оcamldebug. Но, из-за JaneStreet's Core у меня проблемы с линковкой в камлодебаге. Надо будет их как-то решить, либо сильно перелопатить код в triss_main.ml, чтобы посмотреть на него в топлевеле. Правда я не уверен, что там не будет тех же проблем что в камлодебаге. Надо будет

Reply

dimitrykakadu October 31 2010, 19:12:31 UTC
Мне всё-таки помогли я подгрузил в камлодебаг все либы, что мне были нужны. Ура!

Reply


Leave a comment

Up