guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Auto compile from many different languages that interoperates with g


From: Stefan Israelsson Tampe
Subject: Re: Auto compile from many different languages that interoperates with guile
Date: Sat, 9 Sep 2017 00:25:44 +0200

FYI I just added generators with a small extension, to the python compiler, now this works:

module(f)

def foreach(f,l):
   for x in l:
       f(x)

def gen(l):
    def f(x):
        yield(gen) x

    foreach(f,l)

for x in gen(list(1,2,3)):
    pk(x)

>> 1,2,3

Have fun


On Fri, Sep 1, 2017 at 10:45 PM, Stefan Israelsson Tampe <address@hidden> wrote:
Hi,

I am maintaining a prolog->scheme compiler and a python->scheme compiler. The nice thing with those implementation is that they work well with the guile module system and are proper scheme functions and variables etc. So python objects can be treated as goops objects and prolog predicates can be used in kanren etc.

There is a headake though. When loading a module from one language to another language the autocompilation fails. It would be nice to load a python module and work with it from scheme land and vice versa.

One problem is the following funciton in system base compile

(define* (compile-file file #:key
                       (output-file #f)
                       (from (current-language))
                       (to 'bytecode)
                       (env (default-environment from))
                       (opts '())
                       (canonicalization 'relative))
...)

form is either specified or current-language and what I propose is to add a knob that enables another version of the default for from e.g. something like the following.

(define %extension-map '((("py" "python") python) ((("pl" "prolog") prolog) (("scm") scheme)))
(define %use-extension-map #f)
(define (default-from-file file)
  (define default (current-language))
  (if %use-extension-map       
       (let* ((ext   (get-extension file))
               (lang  (find-language ext %extension-map)))
           (if lang lang default))))

(define* (compile-file file #:key
                       (output-file #f)
                       (from (default-from file))
                       (to 'bytecode)
                       (env (default-environment from))
                       (opts '())
                       (canonicalization 'relative))

...)

I think that we already have variables that discovers the source files that guile can compile and I don't think that we should get name clashes as long as we use the prefix (languge prolog module) as a prefix for modules in other languages than scheme.

WDYT


reply via email to

[Prev in Thread] Current Thread [Next in Thread]