tag:blogger.com,1999:blog-68273632805925329572024-02-08T08:24:51.703+02:00cat **/* | grep яAkshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-6827363280592532957.post-30094682384710800982006-06-02T15:34:00.003+03:002009-02-22T17:01:52.104+02:00Один из проектов о кончине которого я жалею<ad></ad>Сегодня вдруг накатила тоска по одному из моих проектов, который я забросил в связи увлечением Haskell'ом. Разочаровавшись в кафедральной модели разработки O'Caml (невозможность вносить изменения сторонник разработчиков) я решил написать свой ML.. лучше, открытие и гибче. И вот лежит это недописанное чудо на винчестере в архивах, и уже с трудом-то компилируется (в Ocaml'евом camlp4 теперь не loc, а _loc называется, интерфейсы поменяли и тд). Но собрать понастальгировать таки удалось. Оставлю-ка я себе на память процесс работы с компилятором.<br /><br /><b>Компиляция, как это выглядело</b><br /><br /><u>Исходный файл.</u><pre><br />---=====================================================================------<br />-- DESC: Just a test.<br />-- RUN: %(tdir)s/nnl-%(ckind)s %(src)s -O0 -o %(src)s.exec; %(src)s.exec<br />-- EXIT: 13<br />-- RM: %(src)s.exec<br />---=====================================================================------<br /><br />let pairer = \x -> 3, x<br />and add = \(x, y) -> (ffi_call "builtin:int:+" (x:int) (y:int) : int)<br />and apply = \(f, arg) -> f arg in<br /> apply (add, pairer 10)<br /></pre><br /><u>./tools/nnl-llvm --show-all --keep-all ./test/00100-Base/0058000-Test.nn -o a.exec</u><br /><br />АСТ дерево.<br /><pre><br />impl_file:<br /> 8.0 - 11.26: VE_let:<br /> B_simple:<br /> 8.4 - 8.10: VP_ident: pairer<br /> 8.13 - 8.23: VE_fun:<br /> 8.14 - 8.15: VP_ident: x<br /> 8.19 - 8.23: VE_tuple:<br /> 8.19 - 8.20: VE_int: 3<br /> 8.22 - 8.23: VE_long_ident: x<br /> B_simple:<br /> 9.4 - 9.7: VP_ident: add<br /> 9.10 - 9.69: VE_fun:<br /> 9.11 - 9.17: VP_paren:<br /> 9.12 - 9.16: VP_tuple:<br /> 9.12 - 9.13: VP_ident: x<br /> 9.15 - 9.16: VP_ident: y<br /> 9.21 - 9.69: VE_type_constraint:<br /> 9.22 - 9.62: VE_ffi_call: "builtin:int:+"<br /> 9.47 - 9.54: VE_type_constraint:<br /> 9.48 - 9.49: VE_long_ident: x<br /> 9.50 - 9.53: TE_long_ident: int<br /> 9.55 - 9.62: VE_type_constraint:<br /> 9.56 - 9.57: VE_long_ident: y<br /> 9.58 - 9.61: TE_long_ident: int<br /> 9.65 - 9.68: TE_long_ident: int<br /> B_simple:<br /> 10.4 - 10.9: VP_ident: apply<br /> 10.12 - 10.30: VE_fun:<br /> 10.13 - 10.21: VP_paren:<br /> 10.14 - 10.20: VP_tuple:<br /> 10.14 - 10.15: VP_ident: f<br /> 10.17 - 10.20: VP_ident: arg<br /> 10.25 - 10.30: VE_flat:<br /> 10.25 - 10.26: VE_long_ident: f<br /> 10.27 - 10.30: VE_op:<br /> 10.27 - 10.30: VE_long_ident: arg<br /> in_expr:<br /> 11.4 - 11.26: VE_flat:<br /> 11.4 - 11.9: VE_long_ident: apply<br /> 11.10 - 11.26: VE_op:<br /> 11.10 - 11.26: VE_paren:<br /> 11.11 - 11.25: VE_tuple:<br /> 11.11 - 11.14: VE_long_ident: add<br /> 11.16 - 11.25: VE_flat:<br /> 11.16 - 11.22: VE_long_ident: pairer<br /> 11.23 - 11.25: VE_op:<br /> 11.23 - 11.25: VE_int: 10<br /></pre>Типизированное АСТ дерево.<pre><br />impl_file:<br /> 8.0 - 11.26: 13>35>int: VE_let:<br /> B_simple:<br /> 8.4 - 8.10: 14>(15>int -> 16>(17>int * 18>15>int)): VP_ident: pairer/290<br /> 8.13 - 8.23: 14>(15>int -> 16>(17>int * 18>15>int)): VE_fun:<br /> 8.14 - 8.15: 15>int: VP_ident: x/300<br /> 8.19 - 8.23: 16>(17>int * 18>15>int): VE_tuple:<br /> 8.19 - 8.20: 17>int: VE_int: 3<br /> 8.22 - 8.23: 18>15>int: VE_long_ident: x/300<br /> B_simple:<br /> 9.4 - 9.7: 21>(22>(24>int * 25>int) -> 23>int): VP_ident: add/314<br /> 9.10 - 9.69: 21>(22>(24>int * 25>int) -> 23>int): VE_fun:<br /> 9.11 - 9.17: 22>(24>int * 25>int): VP_paren:<br /> 9.12 - 9.16: 22>(24>int * 25>int): VP_tuple:<br /> 9.12 - 9.13: 24>int: VP_ident: x/322<br /> 9.15 - 9.16: 25>int: VP_ident: y/325<br /> 9.21 - 9.69: 23>int: VE_type_constraint:<br /> 9.22 - 9.62: 27>int: VE_ffi_call: "builtin:int:+"<br /> 9.47 - 9.54: 28>int: VE_type_constraint:<br /> 9.48 - 9.49: 29>int: VE_long_ident: x/322<br /> 9.50 - 9.53: 29>int: TE_long_ident: int<br /> 9.55 - 9.62: 30>int: VE_type_constraint:<br /> 9.56 - 9.57: 31>int: VE_long_ident: y/325<br /> 9.58 - 9.61: 31>int: TE_long_ident: int<br /> 9.65 - 9.68: 27>int: TE_long_ident: int<br /> B_simple:<br /> 10.4 - 10.9: 33>(34>(36>(39>37>(24>int * 25>int) -> 35>int) * 37>(24>int * 25>int)) -> 35>int): VP_ident: apply/384<br /> 10.12 - 10.30: 33>(34>(36>(39>37>(24>int * 25>int) -> 35>int) * 37>(24>int * 25>int)) -> 35>int): VE_fun:<br /> 10.13 - 10.21: 34>(36>(39>37>(24>int * 25>int) -> 35>int) * 37>(24>int * 25>int)): VP_paren:<br /> 10.14 - 10.20: 34>(36>(39>37>(24>int * 25>int) -> 35>int) * 37>(24>int * 25>int)): VP_tuple:<br /> 10.14 - 10.15: 36>(39>37>(24>int * 25>int) -> 35>int): VP_ident: f/394<br /> 10.17 - 10.20: 37>(24>int * 25>int): VP_ident: arg/397<br /> 10.25 - 10.30: 35>int: VE_apply:<br /> 10.25 - 10.26: 39>37>(24>int * 25>int) -> 35>int: VE_long_ident: f/394<br /> 10.27 - 10.30: 39>37>(24>int * 25>int): VE_long_ident: arg/397<br /> in_expr:<br /> 11.4 - 11.26: 13>35>int: VE_apply:<br /> 11.4 - 11.9: 42>(36>(39>37>(24>int * 25>int) -> 35>int) * 37>(24>int * 25>int)) -> 13>35>int: VE_long_ident: apply/384<br /> 11.10 - 11.26: 42>(36>(39>37>(24>int * 25>int) -> 35>int) * 37>(24>int * 25>int)): VE_paren:<br /> 11.11 - 11.25: 42>(36>(39>37>(24>int * 25>int) -> 35>int) * 37>(24>int * 25>int)): VE_tuple:<br /> 11.11 - 11.14: 44>(22>(24>int * 25>int) -> 23>int): VE_long_ident: add/314<br /> 11.16 - 11.25: 45>(17>int * 18>15>int): VE_apply:<br /> 11.16 - 11.22: 46>15>int -> 45>(17>int * 18>15>int): VE_long_ident: pairer/290<br /> 11.23 - 11.25: 46>15>int: VE_int: 10<br /></pre><br />Лямбда выражение.<br /><pre><br />(let "13>35>int" pairer/290<br /> (fun "14>(15>int -> 16>(17>int * 18>15>int))" arg.2/-1<br /> (let "16>(17>int * 18>15>int)" x/300<br /> (var "15>int" "arg.2/-1") in<br /> (block "16>(17>int * 18>15>int)"<br /> (int "17>int" 3)<br /> (var "18>15>int" "x/300")))) in<br /> (let "13>35>int" add/314<br /> (fun "21>(22>(24>int * 25>int) -> 23>int)" arg.1/-1<br /> (let "27>int" tuple.2/-1<br /> (var "22>(24>int * 25>int)" "arg.1/-1") in<br /> (let "27>int" y/325<br /> (field "25>int" (var "22>(24>int * 25>int)" "tuple.2/-1") 1) in<br /> (let "27>int" x/322<br /> (field "24>int" (var "22>(24>int * 25>int)" "tuple.2/-1") 0) in<br /> (ffi_call "27>int" "builtin:int:+"<br /> (var "29>int" "x/322")<br /> (var "31>int" "y/325")))))) in<br /> (let "13>35>int" apply/384<br /> (fun "33>(34>(36>(39>37>(24>int * 25>int) -> 35>int) * 37>(24>int * 25>int)) -> 35>int)" arg.0/-1<br /> (let "35>int" tuple.1/-1<br /> (var "34>(36>(39>37>(24>int * 25>int) -> 35>int) * 37>(24>int * 25>int))" "arg.0/-1") in<br /> (let "35>int" arg/397<br /> (field "37>(24>int * 25>int)"<br /> (var "34>(36>(39>37>(24>int * 25>int) -> 35>int) * 37>(24>int * 25>int))" "tuple.1/-1")<br /> 1) in<br /> (let "35>int" f/394<br /> (field "36>(39>37>(24>int * 25>int) -> 35>int)"<br /> (var "34>(36>(39>37>(24>int * 25>int) -> 35>int) * 37>(24>int * 25>int))" "tuple.1/-1")<br /> 0) in<br /> (apply "35>int"<br /> (var "39>37>(24>int * 25>int) -> 35>int" "f/394")<br /> (var "39>37>(24>int * 25>int)" "arg/397")))))) in<br /> (apply "13>35>int"<br /> (var "42>(36>(39>37>(24>int * 25>int) -> 35>int) * 37>(24>int * 25>int)) -> 13>35>int" "apply/384")<br /> (block "42>(36>(39>37>(24>int * 25>int) -> 35>int) * 37>(24>int * 25>int))"<br /> (var "44>(22>(24>int * 25>int) -> 23>int)" "add/314")<br /> (apply "45>(17>int * 18>15>int)"<br /> (var "46>15>int -> 45>(17>int * 18>15>int)" "pairer/290")<br /> (int "46>15>int" 10)))))))<br /></pre>Откомпилированный в LLVM код (llvm assember):<pre><br />declare int "builtin:int:+" (int, int)<br /><br />{int, int}* "fun:39" (int "var:arg.2/-1") {<br /> "temp:34" = cast int "var:arg.2/-1" to int<br /> "var:x/300" = cast int "temp:34" to int<br /> "temp:37" = malloc {int, int}<br /> "temp:35" = add int 0, 3<br /> "temp:37_f0" = getelementptr {int, int}* "temp:37", int 0, uint 0<br /> store int "temp:35", int* "temp:37_f0"<br /> "temp:36" = cast int "var:x/300" to int<br /> "temp:37_f1" = getelementptr {int, int}* "temp:37", int 0, uint 1<br /> store int "temp:36", int* "temp:37_f1"<br /> "temp:38" = cast {int, int}* "temp:37" to {int, int}*<br /> ret {int, int}* "temp:38"<br />}<br /><br />int "fun:32" ({int, int}* "var:arg.1/-1") {<br /> "temp:21" = cast {int, int}* "var:arg.1/-1" to {int, int}*<br /> "var:tuple.2/-1" = cast {int, int}* "temp:21" to {int, int}*<br /> "temp:28" = cast {int, int}* "var:tuple.2/-1" to {int, int}*<br /> "temp:29_addr" = getelementptr {int, int}* "temp:28", int 0, uint 1<br /> "temp:29" = load int* "temp:29_addr"<br /> "var:y/325" = cast int "temp:29" to int<br /> "temp:25" = cast {int, int}* "var:tuple.2/-1" to {int, int}*<br /> "temp:26_addr" = getelementptr {int, int}* "temp:25", int 0, uint 0<br /> "temp:26" = load int* "temp:26_addr"<br /> "var:x/322" = cast int "temp:26" to int<br /> "temp:22" = cast int "var:x/322" to int<br /> "temp:23" = cast int "var:y/325" to int<br /> "temp:24" = call int "builtin:int:+" (int "temp:22", int "temp:23")<br /> "temp:27" = cast int "temp:24" to int<br /> "temp:30" = cast int "temp:27" to int<br /> "temp:31" = cast int "temp:30" to int<br /> ret int "temp:31"<br />}<br />int "fun:19" ({{int ({int, int}*)*}*, {int, int}*}* "var:arg.0/-1") {<br /> "temp:8" = cast {{int ({int, int}*)*}*, {int, int}*}* "var:arg.0/-1" to {{int ({int, int}*)*}*, {int, int}*}*<br /> "var:tuple.1/-1" = cast {{int ({int, int}*)*}*, {int, int}*}* "temp:8" to {{int ({int, int}*)*}*, {int, int}*}*<br /> "temp:15" = cast {{int ({int, int}*)*}*, {int, int}*}* "var:tuple.1/-1" to {{int ({int, int}*)*}*, {int, int}*}*<br /> "temp:16_addr" = getelementptr {{int ({int, int}*)*}*, {int, int}*}* "temp:15", int 0, uint 1<br /> "temp:16" = load {int, int}** "temp:16_addr"<br /> "var:arg/397" = cast {int, int}* "temp:16" to {int, int}*<br /> "temp:12" = cast {{int ({int, int}*)*}*, {int, int}*}* "var:tuple.1/-1" to {{int ({int, int}*)*}*, {int, int}*}*<br /> "temp:13_addr" = getelementptr {{int ({int, int}*)*}*, {int, int}*}* "temp:12", int 0, uint 0<br /> "temp:13" = load {int ({int, int}*)*}** "temp:13_addr"<br /> "var:f/394" = cast {int ({int, int}*)*}* "temp:13" to {int ({int, int}*)*}*<br /> "temp:10" = cast {int ({int, int}*)*}* "var:f/394" to {int ({int, int}*)*}*<br /> "temp:9" = cast {int, int}* "var:arg/397" to {int, int}*<br /> "temp:11_fptr" = getelementptr {int ({int, int}*)*}* "temp:10", int 0, uint 0<br /> "temp:11_f" = load int ({int, int}*)** "temp:11_fptr"<br /> "temp:11" = call int "temp:11_f" ({int, int}* "temp:9")<br /> "temp:14" = cast int "temp:11" to int<br /> "temp:17" = cast int "temp:14" to int<br /> "temp:18" = cast int "temp:17" to int<br /> ret int "temp:18"<br />}<br /><br />int %main () {<br /> "temp:39" = malloc {{int, int}* (int)*}<br /> "temp:39_fptr" = getelementptr {{int, int}* (int)*}* "temp:39", int 0, uint 0<br /> store {int, int}* (int)* "fun:39", {int, int}* (int)** "temp:39_fptr"<br /> "var:pairer/290" = cast {{int, int}* (int)*}* "temp:39" to {{int, int}* (int)*}*<br /> "temp:32" = malloc {int ({int, int}*)*}<br /> "temp:32_fptr" = getelementptr {int ({int, int}*)*}* "temp:32", int 0, uint 0<br /> store int ({int, int}*)* "fun:32", int ({int, int}*)** "temp:32_fptr"<br /> "var:add/314" = cast {int ({int, int}*)*}* "temp:32" to {int ({int, int}*)*}*<br /> "temp:19" = malloc {int ({{int ({int, int}*)*}*, {int, int}*}*)*}<br /> "temp:19_fptr" = getelementptr {int ({{int ({int, int}*)*}*, {int, int}*}*)*}* "temp:19", int 0, uint 0<br /> store int ({{int ({int, int}*)*}*, {int, int}*}*)* "fun:19", int ({{int ({int, int}*)*}*, {int, in<br />t}*}*)** "temp:19_fptr"<br /> "var:apply/384" = cast {int ({{int ({int, int}*)*}*, {int, int}*}*)*}* "temp:19" to {int ({{int ({int, int}*)*}*, {int, int}*}*)*}*<br /> "temp:6" = cast {int ({{int ({int, int}*)*}*, {int, int}*}*)*}* "var:apply/384" to {int ({{int ({int, int}*)*}*, {int, int}*}*)*}*<br /> "temp:5" = malloc {{int ({int, int}*)*}*, {int, int}*}<br /> "temp:1" = cast {int ({int, int}*)*}* "var:add/314" to {int ({int, int}*)*}*<br /> "temp:5_f0" = getelementptr {{int ({int, int}*)*}*, {int, int}*}* "temp:5", int 0, uint 0<br /> store {int ({int, int}*)*}* "temp:1", {int ({int, int}*)*}** "temp:5_f0"<br /> "temp:3" = cast {{int, int}* (int)*}* "var:pairer/290" to {{int, int}* (int)*}*<br /> "temp:2" = add int 0, 10<br /> "temp:4_fptr" = getelementptr {{int, int}* (int)*}* "temp:3", int 0, uint 0<br /> "temp:4_f" = load {int, int}* (int)** "temp:4_fptr"<br /> "temp:4" = call {int, int}* "temp:4_f" (int "temp:2")<br /> "temp:5_f1" = getelementptr {{int ({int, int}*)*}*, {int, int}*}* "temp:5", int 0, uint 1<br /> store {int, int}* "temp:4", {int, int}** "temp:5_f1"<br /> "temp:7_fptr" = getelementptr {int ({{int ({int, int}*)*}*, {int, int}*}*)*}* "temp:6", int 0, uint 0<br /> "temp:7_f" = load int ({{int ({int, int}*)*}*, {int, int}*}*)** "temp:7_fptr"<br /> "temp:7" = call int "temp:7_f" ({{int ({int, int}*)*}*, {int, int}*}* "temp:5")<br /> "temp:20" = cast int "temp:7" to int<br /> "temp:33" = cast int "temp:20" to int<br /> "temp:40" = cast int "temp:33" to int<br /> ret int "temp:40"<br />}<br /></pre>Запуск LLVM оптимизации.<pre><br />=====<br />Alias Analysis Evaluator Report =====<br /> 385 Total Alias Queries Performed<br /> 179 no alias responses (46.4%)<br /> 137 may alias responses (35.5%)<br /> 69 must alias responses (17.9%)<br /> Alias Analysis Evaluator Pointer Alias Summary: 46%/35%/17%<br /> 68 Total ModRef Queries Performed<br /> 20 no mod/ref responses (29.4%)<br /> 0 mod responses (0.0%)<br /> 0 ref responses (0.0%)<br /> 48 mod & ref responses (70.5%)<br /> Alias Analysis Evaluator Mod/Ref Summary: 29%/0%/0%/70%<br />*** Function unreachable from main: builtin:int:-<br />*** Function unreachable from main: builtin:int:/<br />*** Function unreachable from main: builtin:int:*<br />*** Function unreachable from main: builtin:int:%<br />*** Function unreachable from main: builtin:int:=<br />*** Function unreachable from main: builtin:int:<><br />*** Function unreachable from main: builtin:int:<<br />*** Function unreachable from main: builtin:int:><br />*** Function unreachable from main: builtin:int:<=<br />*** Function unreachable from main: builtin:int:>=<br />===== Alias Analysis Evaluator Report =====<br /> 48 Total Alias Queries Performed<br /> 17 no alias responses (35.4%)<br /> 25 may alias responses (52.0%)<br /> 6 must alias responses (12.5%)<br /> Alias Analysis Evaluator Pointer Alias Summary: 35%/52%/12%<br /> 21 Total ModRef Queries Performed<br /> 0 no mod/ref responses (0.0%)<br /> 0 mod responses (0.0%)<br /> 0 ref responses (0.0%)<br /> 21 mod & ref responses (100.0%)<br /> Alias Analysis Evaluator Mod/Ref Summary: 0%/0%/0%/100%<br />===== Alias Analysis Evaluator Report =====<br /> 6 Total Alias Queries Performed<br /> 2 no alias responses (33.3%)<br /> 2 may alias responses (33.3%)<br /> 2 must alias responses (33.3%)<br /> Alias Analysis Evaluator Pointer Alias Summary: 33%/33%/33%<br /> 3 Total ModRef Queries Performed<br /> 0 no mod/ref responses (0.0%)<br /> 0 mod responses (0.0%)<br /> 0 ref responses (0.0%)<br /> 3 mod & ref responses (100.0%)<br /> Alias Analysis Evaluator Mod/Ref Summary: 0%/0%/0%/100%<br /></pre>Результат оптимизации (llvm assember):<pre><br />int %main() {<br /> ret int 13<br />}<br /></pre>Целевой ассебмлер, AT&T нотация:<pre><br /> .text<br /> .align 16<br /> .globl main<br /> .type main, @function<br />main:<br /> subl $2, %esp<br /> fnstcw (%esp)<br /> movb $2, 1(%esp)<br /> fldcw (%esp)<br /> movl $13, %eax<br /> addl $2, %esp<br /> ret<br /></pre><br />Результат работы:<br />akshaal@akshaal:~/mnt/oldprojects/nnl-boot% ./a.exec<br />**** Exit code: 13<br /><pre><br />let f as (++++) = \_ -> \x -> (ffi_call "builtin:int:+" x 10 : int) in<br /> f 6 (10 ++++ 3)<br /></pre><br /><b>==================================================================</b><br />Исходный файл:<br /><pre><br />---=====================================================================------<br />-- DESC: Just a test.<br />-- RUN: %(tdir)s/nnl-%(ckind)s %(src)s -O0 -o %(src)s.exec; %(src)s.exec<br />-- EXIT: 23<br />-- RM: %(src)s.exec<br />---=====================================================================------<br /><br />let f as (++++) = \_ -> \x -> (ffi_call "builtin:int:+" x 10 : int) in<br /> f 6 (10 ++++ 3)<br /></pre><br />Результат:<br /><pre><br />int %main() {<br /> ret int 23<br />}<br /></pre><br />....<br /><br /><br /><b>make test</b><pre><br />--- TEST RESULTS -------------------------------------------------------------<br /><br /> 00100-Base.0001000-Empty.nn : PASS<br /><br /> 00100-Base.0002000-GoodComment.nn : PASS<br /><br /> 00100-Base.0003000-GoodDashComment.nn : PASS<br /><br /> 00100-Base.0004000-GoodSolidComment.nn : PASS<br /><br /> 00100-Base.0005000-GoodComment2.nn : PASS<br /><br /> 00100-Base.0009000-HelpOption.nn : PASS<br /><br /> 00100-Base.000A000-ShowTypedAstOption.nn : PASS<br /><br /> 00100-Base.000B000-ShowAstOption.nn : PASS<br /><br /> 00100-Base.000C000-StopAfterOption.nn : PASS<br /><br /> 00100-Base.000D000-ImplSuffixOption.nn : PASS<br /><br /> 00100-Base.000E000-ImplSuffix.nn : PASS<br /><br /> 00100-Base.000F000-WithoutImplSuffix.nn : PASS<br /><br /> 00100-Base.0010000-Struct.nn : PASS<br /><br /> 00100-Base.0011000-GarbageAfterStruct.nn : PASS<br /><br /> 00100-Base.0012000-StructWithoutEnd.nn : PASS<br /><br /> 00100-Base.0013000-GraphOp.nn : PASS<br /><br /> 00100-Base.0014000-IdentOp.nn : PASS<br /><br /> 00100-Base.0015000-LongGraphOp.nn : PASS<br /><br /> 00100-Base.0016000-LongIdentOp.nn : PASS<br /><br /> 00100-Base.0016800-TypeConstraint.nn : PASS<br /><br /> 00100-Base.0016880-Fun.nn : PASS<br /><br /> 00100-Base.0017000-ShowIntAST.nn : PASS<br /><br /> 00100-Base.0018000-ShowIdentAST.nn : PASS<br /><br /> 00100-Base.0019000-ShowLongIdentAst.nn : PASS<br /><br /> 00100-Base.001A000-ShowOpAst.nn : PASS<br /><br /> 00100-Base.001B000-ShowLongOpAst.nn : PASS<br /><br /> 00100-Base.001C000-ShowIdentOpAst.nn : PASS<br /><br /> 00100-Base.001D000-ShowLongIdentOpAst.nn : PASS<br /><br /> 00100-Base.001E000-ShowParenAst.nn : PASS<br /><br /> 00100-Base.001F000-ShowFloatAst.nn : PASS<br /><br /> 00100-Base.001F800-ShowStringAST.nn : PASS<br /><br /> 00100-Base.0020000-ShowFlatAst.nn : PASS<br /><br /> 00100-Base.0021000-ShowIfThenElseAst.nn : PASS<br /><br /> 00100-Base.0022000-ShowLetAst.nn : PASS<br /><br /> 00100-Base.0023000-ShowApplyAst.nn : PASS<br /><br /> 00100-Base.0023800-ShowFFICallAst.nn : PASS<br /><br /> 00100-Base.0023A00-ShowFFICall0Ast.nn : PASS<br /><br /> 00100-Base.0024000-ShowStructAst.nn : PASS<br /><br /> 00100-Base.0025000-ShowValueAst.nn : PASS<br /><br /> 00100-Base.0026000-ShowImplAst.nn : PASS<br /><br /> 00100-Base.0027000-ShowValuePatAst.nn : PASS<br /><br /> 00100-Base.0028000-ShowOpValuePatAst.nn : PASS<br /><br /> 00100-Base.0028800-ShowTypeConstraintAst.nn : PASS<br /><br /> 00100-Base.0029000-ShowIntTypedAST.nn : PASS<br /><br /> 00100-Base.002A000-ShowFloatTypedAST.nn : PASS<br /><br /> 00100-Base.002B000-ShowParenIntTypeAST.nn : PASS<br /><br /> 00100-Base.0030000-ShowNotTypedAST.nn : PASS<br /><br /> 00100-Base.0032000-ShowPlusTypedAST.nn : PASS<br /><br /> 00100-Base.0033000-ShowPlusUseTypedAST.nn : PASS<br /><br /> 00100-Base.0034000-ShowPlusUseAsOpTypedAST.nn : PASS<br /><br /> 00100-Base.0034800-ShowTypeConstraintTypedAst.nn: PASS<br /><br /> 00100-Base.0034880-ShowFloatTypeConstraintTypedAst.nn: PASS<br /><br /> 00100-Base.0035000-ShowLetInTypedAST.nn : PASS<br /><br /> 00100-Base.0035800-ShowFFICallTypedAST.nn : PASS<br /><br /> 00100-Base.0035900-ShowFFICall0TypedAST.nn : PASS<br /><br /> 00100-Base.0037000-StopAfterLambda.nn : PASS<br /><br /> 00100-Base.0038000-ShowLambdaOption.nn : PASS<br /><br /> 00100-Base.0039000-ShowIntLambda.nn : PASS<br /><br /> 00100-Base.003A000-ShowFloatLambda.nn : PASS<br /><br /> 00100-Base.003B000-ShowNotLambda.nn : PASS<br /><br /> 00100-Base.003C000-ShowApplyLambda.nn : PASS<br /><br /> 00100-Base.003D000-ShowIfThenElseLambda.nn : PASS<br /><br /> 00100-Base.003E000-ShowOpLambda.nn : PASS<br /><br /> 00100-Base.003E800-ShowFFICallLambda.nn : PASS<br /><br /> 00100-Base.003E900-ShowFFICall0Lambda.nn : PASS<br /><br /> 00100-Base.003E980-ShowLetInLambda.nn : PASS<br /><br /> 00100-Base.003F000-EqPrecedence.nn : PASS<br /><br /> 00100-Base.0040000-StopAfterCodegen.nn : PASS<br /><br /> 00100-Base.0041000-ShowCodeOption.nn : PASS<br /><br /> 00100-Base.0042000-OOption.nn : PASS<br /><br /> 00100-Base.0042800-O0Option.nn : PASS<br /><br /> 00100-Base.0043000-ReturnInt.nn : PASS<br /><br /> 00100-Base.0044000-Return123Int.nn : PASS<br /><br /> 00100-Base.0045000-LetIn.nn : PASS<br /><br /> 00100-Base.0046000-LetInWithRebinding.nn : PASS<br /><br /> 00100-Base.0047000-FFIAndLet.nn : PASS<br /><br /> 00100-Base.0048000-ShowAllOption.nn : PASS<br /><br /> 00100-Base.0049000-KeepAllOption.nn : PASS<br /><br /> 00100-Base.004A000-ShowFunAst.nn : PASS<br /><br /> 00100-Base.004B000-ShowFunTypedAst.nn : PASS<br /><br /> 00100-Base.004C000-ShowFunLambda.nn : PASS<br /><br /> 00100-Base.004D000-FunApply.nn : PASS<br /><br /> 00100-Base.004E000-ShowTupleAst.nn : PASS<br /><br /> 00100-Base.004F000-ShowTupleTypedAst.nn : PASS<br /><br /> 00100-Base.0050000-ShowTupleLambda.nn : PASS<br /><br /> 00100-Base.0051000-ShowTuplePatternAst.nn : PASS<br /><br /> 00100-Base.0052000-ShowTuplePatternTypedAst.nn: PASS<br /><br /> 00100-Base.0053000-ShowTuplePatternLambda.nn : PASS<br /><br /> 00100-Base.0054000-Tuple.nn : PASS<br /><br /> 00100-Base.0055000-Tuple2.nn : PASS<br /><br /> 00100-Base.0055800-ShowParenPatternAst.nn : PASS<br /><br /> 00100-Base.0055900-ShowParenPatternTypedAst.nn: PASS<br /><br /> 00100-Base.0056000-Tuple3.nn : PASS<br /><br /> 00100-Base.0057000-CommFunPreced.nn : PASS<br /><br /> 00100-Base.0058000-Test.nn : PASS<br /><br /> 00100-Base.0059000-ShowAnyPatternAst.nn : PASS<br /><br /> 00100-Base.005A000-ShowAnyPatternTypedAst.nn : PASS<br /><br /> 00100-Base.005A800-ShowAnyPatternLambda.nn : PASS<br /><br /> 00100-Base.005B000-AnyPattern.nn : PASS<br /><br /> 00100-Base.005C000-Test.nn : PASS<br /><br /> 00100-Base.005D000-Test.nn : PASS<br /><br /> 00100-Base.005E000-Test.nn : PASS<br /><br /> 00100-Base.005F000-Test.nn : PASS<br /><br /> 00100-Base.0060000-ShowAsPatternAst.nn : PASS<br /><br /> 00100-Base.0061000-ShowAsPatternTypedAst.nn : PASS<br /><br /> 00100-Base.0062000-ShowAsPatternLambda.nn : PASS<br /><br /> 00100-Base.0063000-AsPattern.nn : PASS<br /><br /> 00100-Base.0064000-Test.nn : PASS<br /><br /> 00100-Base.0065000-ShowTypeConstraintPatternAst.nn: PASS<br /><br /> 00100-Base.0066000-ShowTypeConstraintPatternTypedAst.nn: PASS<br /><br /> 00100-Base.0067000-Test.nn : PASS<br /><br /> 00100-Base.0068000-ShowGraphLetBindingAst.nn : PASS<br /><br /> 00100-Base.0068800-ShowGraphLetBindingAst2.nn : PASS<br /><br /> 00100-Base.0069000-ShowGraphLetBindingTypedAst.nn: PASS<br /><br /> 00100-Base.006A000-ShowGraphLetBindingLambda.nn: FAIL<br /> Test doesn't exit with 0. Regexp '^.*\\(let "\\d+>\\(\\d+>int \\* \\d+>int\\)" y/\\d+.*$' not found in stdout.<br /><br /> TestCompiler.description:<br /> Show lambda of graph operator binding in let statement.<br /><br /> TestCompiler.exit:<br /> 2<br /><br /> TestCompiler.run:<br /> ./tools/nnl-llvm --stop-after lambda --show-lambda<br /> /home/akshaal/mnt/oldprojects/nnl-boot/test/00100-Base/006A000-ShowGraphLetBindingLambda.nn<br /><br /> TestCompiler.stderr:<br /> Fatal error: exception<br /> Match_failure("lib/NNL/Lambda/NNLLambdaTranslate.ml", 146, 7)<br /><br /> TestCompiler.stdout:<br /><br /> qmtest.end_time:<br /> 2006-07-02T11:23:48Z<br /><br /> qmtest.start_time:<br /> 2006-07-02T11:23:48Z<br /><br /> qmtest.target:<br /> local<br /><br /> 00200-Backend.00100-LLVM.00006000-KeepCodeOption.nn: PASS<br /><br /> 00200-Backend.00100-LLVM.00007000-KeepBytecodeOption.nn: PASS<br /><br /> 00200-Backend.00100-LLVM.00008000-KeepLinkedOption.nn: PASS<br /><br /> 00200-Backend.00100-LLVM.00009000-KeepOptimizedOption.nn: PASS<br /><br /> 00200-Backend.00100-LLVM.0000A000-KeepAsmOption.nn: PASS<br /><br /> 00300-Runtime.00100-BuiltinIntEq.nn : PASS<br /><br /> 00300-Runtime.00200-BuiltinIntEq2.nn : PASS<br /><br /> 00300-Runtime.00300-BuiltinIntPlus.nn : PASS<br /><br /> 00300-Runtime.00380-BuiltinIntPlus2.nn : PASS<br /><br /> 00300-Runtime.00400-BuiltinIntMinus.nn : PASS<br /><br /> 00300-Runtime.00480-BuiltinIntMinus2.nn : PASS<br /><br /> 00300-Runtime.00500-BuiltinIntMult.nn : PASS<br /><br /> 00300-Runtime.00580-BuiltinIntMult2.nn : PASS<br /><br /> 00300-Runtime.00600-BuiltinIntDiv.nn : PASS<br /><br /> 00300-Runtime.00680-BuiltinIntDiv2.nn : PASS<br /><br /> 00300-Runtime.00700-BuiltinIntMod.nn : PASS<br /><br /> 00300-Runtime.00780-BuiltinIntMod2.nn : PASS<br /><br /> 00300-Runtime.00800-BuiltinIntNe.nn : PASS<br /><br /> 00300-Runtime.00880-BuiltinIntNe2.nn : PASS<br /><br /> 00300-Runtime.00900-BuiltinIntLt.nn : PASS<br /><br /> 00300-Runtime.00980-BuiltinIntLt2.nn : PASS<br /><br /> 00300-Runtime.00990-BuiltinIntLt3.nn : PASS<br /><br /> 00300-Runtime.00A00-BuiltinIntGt.nn : PASS<br /><br /> 00300-Runtime.00A80-BuiltinIntGt2.nn : PASS<br /><br /> 00300-Runtime.00A90-BuiltinIntGt3.nn : PASS<br /><br /> 00300-Runtime.00B00-BuiltinIntLe.nn : PASS<br /><br /> 00300-Runtime.00B80-BuiltinIntLe2.nn : PASS<br /><br /> 00300-Runtime.00B90-BuiltinIntLe3.nn : PASS<br /><br /> 00300-Runtime.00C00-BuiltinIntGe.nn : PASS<br /><br /> 00300-Runtime.00C80-BuiltinIntGe2.nn : PASS<br /><br /> 00300-Runtime.00C90-BuiltinIntGe3.nn : PASS<br /><br />--- TESTS THAT DID NOT PASS --------------------------------------------------<br /><br /> 00100-Base.006A000-ShowGraphLetBindingLambda.nn: FAIL<br /> Test doesn't exit with 0. Regexp '^.*\\(let "\\d+>\\(\\d+>int \\* \\d+>int\\)" y/\\d+.*$' not found in stdout.<br /><br /><br />--- STATISTICS ---------------------------------------------------------------<br /><br /> 146 tests total<br /> 1 ( 1%) tests FAIL<br /> 145 ( 99%) tests PASS<br /></pre><ad2></ad2>Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com0tag:blogger.com,1999:blog-6827363280592532957.post-53231264650770841282005-11-17T18:36:00.001+02:002009-02-22T16:54:18.591+02:00BBK Козлы?Купил я как-то усилитель BBK AV212T. Через какое-то время он перестал включаться. Отнес в гарантийный ремонт. Починили. Заменили какой-то чип. Через какое-то время он опять перестал включаться. Его опять починили, но уже за деньги. Потом опять. Последние два ремонта я пропустил (был в Москве и Киеве и вообще сейчас усилителем пользуется сестра).<br />Теперь вот он сломался и сейчас в ремонте. Любопытство взяло верх и я нашел <a href="http://ast-home.narod.ru/bbk212/">статью</a>. Впечатляет причина повисания которая там описана. Интересно, это специально сделано?? Не является ли это вообще заводским браком?! Кошмар короче. Усилитель расчитаный на 255 включений это порнография какая-то. Я pic'и никогда не программировал, как и что с ним сделать не знаю. Может есть какое-то простое решение, чтобы каждые пол года не тратить деньги? У меня есть две идеи - не выключать. Но не сдохнет ли он этого еще раньше? Поискать человека, чтобы помог перепрошил или приделал PIC. Но таких знакомых у меня кажется нет (может есть у кого в Омске?). А самому разбираться некогда да и не специалист я ни разу.<br /><ad></ad><br /><b>Update:</b> спустя 40 минут:<br />В голове возникло брутальное решение в хакерско-советском стиле. Припаять к контактам GND и SDA EEPROM'а два проводка, вывести их за пределы корпуса. И так оставить. Когда надо очистить EEPROM, то замыкать их. Ну можно тумблер приделать для красоты.Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com2tag:blogger.com,1999:blog-6827363280592532957.post-91868663750014095332004-10-11T13:42:00.001+03:002009-02-22T16:50:47.441+02:00Компилятор моего языка сдвинулся с мертвой точки. Первые шаги в type inference.Несмотря на то, что вся документация по проблеме типизации жутко академическая и читать её почти невозможно....<br />Написание компилятора хоть чуть-чуть, но сдвинулось с мертвой точки. Теперь, помимо создания AST, производится еще и типизация. Правда там кругом stub'ы. Типизация простых выражений (констант) работает. Также работает type checker.<br /><pre>if 1 then 2 else 3<br />>>> Fatal error: exception Failure("Can't unify: expected bool, but found int")<br /><br />666<br />>>> impl_file:<br />>>> 7.0 - 7.3: 4>int: VE_int: 666<br /><br />1.0<br />>>> impl_file:<br />>>> 7.0 - 7.3: 4>float: VE_float: 1.000000e+00<br /><br />(666)<br />>>> impl_file:<br />>>> 7.0 - 7.5: 4>int: VE_paren:<br />>>> 7.1 - 7.4: 4>int: VE_int: 666<br /></pre><ad></ad><br />Теперь нужно сделать нормальный typing environment... ужас. :[]Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com0