From: "Ömer Sinan Ağacan" <omeragacan@gmail.com>
To: oleg@okmij.org
Cc: OCaml Mailing List <caml-list@inria.fr>
Subject: Re: [Caml-list] MetaOCaml error while running generated code that
Date: Tue, 12 May 2015 17:01:07 -0400 [thread overview]
Message-ID: <CAMQQO3njz9GmUcK47EgHcBFd81CGRz5_L_Krda8npC=tAY5wbA@mail.gmail.com> (raw)
In-Reply-To: <20150510163426.EC8B1C38CA@www1.g3.pair.com>
> The fix that I have mentioned in the previous message seems to
> work. Before the line with Runcode.run in the file r2.ml, add this
> line
>
> let () = Clflags.recursive_types := true
>
> When compiling the code, you have to add the flag -I +compiler-lib flag to the
> metacocamlc command line.
I just tried this on my program and now it's failing with this error:
➜ unlambda git:(master) ✗ ./unlambda_metaocaml programs/Hello.unl -compile
Fatal error: exception Symtable.Error(_)
Does that look familiar?
Here's the diff of my changes:
diff --git a/Makefile b/Makefile
index 31ab193..4340429 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,7 @@ unlambda_idris: Unlambda.idr
idris $< -o $@
unlambda_metaocaml: Syntax.cmo UnlambdaInterp.cmo UnlambdaCont.cmo
Lift.cmo CmdArgs.cmo UnlambdaStaged.cmo UnlambdaCompiler.cmo
UnlambdaMain.ml
- metaocamlc -rectypes $^ -o $@ -g
+ metaocamlc -rectypes -I +compiler-lib $^ -o $@ -g
qbf_metaocaml: QBFSyntax.cmo QBFEval.cmo QBFMain.ml
metaocamlc $^ -o $@ -g
diff --git a/UnlambdaMain.ml b/UnlambdaMain.ml
index 6a6f72f..8627283 100644
--- a/UnlambdaMain.ml
+++ b/UnlambdaMain.ml
@@ -122,6 +122,7 @@ let _ =
end
end
else if opts.compile then
+ let _ = Clflags.recursive_types := true in
let _ = Runcode.run (UnlambdaCompiler.compile exp_s) (fun x -> x) in
()
else begin
2015-05-10 12:34 GMT-04:00 <oleg@okmij.org>:
>
> I was kind of hoping for a simpler example. So, I wrote one myself. It
> has two files:
>
> the file r1.ml
> let auto'apply g = g g
> let fix f = auto'apply (fun x n -> f (auto'apply x) n)
>
> the file r2.ml, first version
> let c =
> .<let fact self n = if n = 0 then 1 else n * self (n-1) in R1.fix fact 5>.
> let r = Runcode.run c
> let () = Printf.printf "The result is %d\n" r
>
> If we build the executable as
> metaocamlc -rectypes r1.ml r2.ml
>
> and run the result, we see the error you have reported:
>
> File "_none_", line 1:
> Error: Unit imports from R1, which uses recursive types.
> The compilation flag -rectypes is required
>
> Fatal error: exception Failure("Error type-checking generated code: scope extrusion?")
>
>
> The fix that I have mentioned in the previous message seems to
> work. Before the line with Runcode.run in the file r2.ml, add this
> line
>
> let () = Clflags.recursive_types := true
>
> When compiling the code, you have to add the flag -I +compiler-lib flag to the
> metacocamlc command line.
>
> The resulting executable runs and prints the expected result.
>
>> I'm not using REPL. I still tried to do this but (Meta)OCaml REPL is so
>> ridiculously bad I couldn't even manage to load all the dependencies of
>> my program...
> I guess the mileage really varies: I do all my OCaml and MetaOCaml
> development using REPL.
>
> Well, MetaOCaml distribution includes the file to link your own REPL.
> I guess one can easily make MetaOCaml-enabled utop (by linking in the
> necessary libraries and the tiny object file that sets up the
> necessary environment and registers the code printers).
>
>
next prev parent reply other threads:[~2015-05-12 21:01 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-06 17:54 [Caml-list] MetaOCaml error while running generated code that needs -rectypes Ömer Sinan Ağacan
2015-05-07 15:59 ` oleg
2015-05-07 21:49 ` Ömer Sinan Ağacan
[not found] ` <20150510163426.EC8B1C38CA@www1.g3.pair.com>
2015-05-12 21:01 ` Ömer Sinan Ağacan [this message]
2015-05-14 11:43 ` [Caml-list] MetaOCaml error while running generated code that oleg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAMQQO3njz9GmUcK47EgHcBFd81CGRz5_L_Krda8npC=tAY5wbA@mail.gmail.com' \
--to=omeragacan@gmail.com \
--cc=caml-list@inria.fr \
--cc=oleg@okmij.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox