caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
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).
>
>

  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;
as well as URLs for NNTP newsgroup(s).