Hi Triet, thanks a lot for all your work and support to port TeXmacs to Guile-2.0! We were in need of some Guile hacker to help us. I maintan a git mirror of the svn repository at gitorious so the guile-2.0 port can be forked easily from there. It would be nice to have your attempt as a git fork somewhere publicly accessible.
Best, max On 5 sept. 2013, at 15:00, Triet Lai wrote: > Hi, > > I've made an attempt to port TeXmacs to guile-2 for some time (please see a > patch included > in attachment). It's progressed slowly as I've got a fairly little time to > work on > that. Here are some issues of building and running TeXmacs with guile-2 that > I've > encountered: > > * Small C API change in guile-2: > Such as introduction of `scm_t_subr' type in the 5th parameter of > scm_c_define_gsubr() . I've added a new detection code in > autoconf script to fix the signature issue. > > * Changes in guile: > > ** Top level definition: > > Guile-2 doesn't allow definitions are defined in expression context. In other > words, > definitions must be either: > > - At the top level of a program, or > > - At the beginning of the body of `lambda' and its derived forms such as: > `let', `let*', > `letrec' and `letrec*' > > The simplest fix is: moving these definitions out of conditional expressions > and using > `set!' in the expressions to bind the symbols to the desired `lambda's. For > example: > > (if foo? > (begin > (define (bar arg) (noop)))) > > can be rewritten as: > > (define bar #f) > (if foo? > (begin > (set! bar (lamda (arg) (noop))))) > > ** Loading guile module behaves differently in guile-1 and guile-2: > > Let say in the top-level of program we import a module: > > (use-modules (my-module)) > > and in my-module.scm we have a hypothetical code: > > (do-some-work) > (define-module (my-module)) > ... > > The difference between guile-1 and guile-2 is the question of what modules > that guile uses to > lookup the definition of `do-some-work'. > > - guile-1: the current module up to the point of (define-module (my-module)) > is the > current module of top-level program, i.e.: (guile-user), so if > `do-some-work' is defined > in the top-level program, its definition can be found. > > - guile-2: it creates a fresh module (i.e. unnamed module) before loading the > file so > current module is a fresh module up to the point of (define-module ...) > > As a result, the (texmacs-module ...) macro no longer works in guile-2 since > this macro is > defined in the top-level of program; only (guile) module is available at that > point. > > The heart of current TeXmacs module logic are in 3 macros and they are also > the most > troublesome to run with guile-2: > > - inherit-modules: it re-exports public definitions defined in various > modules so that > these definitions are easier to access "globally". > > - texmacs-module: besides creating a new module, the macro also lets the > current module > access "global" definitions, which have been re-exported by prior > inherit-modules > (N.B. whilst it's convenient, I'd prefer to have an explicit control on > importing > module) > > - tm-define: it provides mechanism to override a macro's definition depending > on its > context (i.e. contextual polymorphism). > > In guile-1, the process of loading all TeXmacs modules at boot time is > illustrated in the attached > figure tm-1.png (or you can use freemind to open the tm-1.mm file). The icon > (1) > indicates current module in these places are mostly (guile-user) module. > > To replace the usage of `texmacs-module' with `define-module' macro comes > with guile, I've > re-organised the process a little bit (see attached figure tm-2.png or > tm-2.mm): > > - I've wrapped all glues into a separate module called (texmacs-glue). In the > future, we > might want to sub-divide the glues into several modules (e.g. dynamic > libraries) and > only load those needed depending on platform or configuration. > > - I've created a new (texmacs-core) module where we will put important > "global" macros and > variables such as `inherit-modules', etc. It also re-exports all public > glues defined in > (texmacs-glue) > > - All modules (including the top-level) will need to use (texmacs-core) > module explicitly. > > In general, replacing (texmacs-module) with (define-module) is quite > straightforward. But > the major problem that I'm having at the moment is to compile the expansion > of `tm-define' > macro. Here is steps to quickly see the problem after applying the attached > patch: > > - Edit init-texmacs.scm & find this line: > (include "kernel/boot/boot.scm") > > - Add a following line after the above line and also comment out the rest of > the file: > (use-modules (tm-test)) > > - Here is the minimum content of tm-test.scm: > (define-module (tm-test) > :use-module (texmacs-core)) > > (use-modules (kernel boot abbrevs) > (kernel boot ahash-table) > (kernel boot debug) > (kernel texmacs tm-define)) > > (tm-define (foo) > (display* "bar")) > > You'd see this error message: > > ;;; ERROR: build-constant-store: unrecognized object #<procedure nval head> > > I've haven't got a chance to look deeper into that. I guess, looking at the > output of macroexpand > for (tm-define ...) might give some hint why the compiler chokes there. > > Regards, > TL > > On Wed, Sep 4, 2013 at 11:42 PM, François Poulain <fpoul...@metrodore.fr> > wrote: > Hi, > > Some weeks ago, I met some Scheme hackers, and a former Guile > maintainer. I talk with him about porting TeXmacs to Guile-2.0. He is > interesting in helping us to do the work (actually he already helped > me on some problems). > > So I started a branch to port TeXmacs to Guile-2.0. It doesn't work at > all, but I hope it will. :) > > However, I seen some arrangement in TeXmacs code in order to work with > Guile-2.0. So, can you tell me if you encountered peculiar problems, or > any useful advise ? > > François > > -- > François Poulain <fpoul...@metrodore.fr> > > PS: is texmacs-dev@gnu.org down? > > <tm-patch.diff><tm-1.png><tm-2.png><tm-1.mm><tm-2.mm>_______________________________________________ > Texmacs-dev mailing list > Texmacs-dev@gnu.org > https://lists.gnu.org/mailman/listinfo/texmacs-dev
_______________________________________________ Texmacs-dev mailing list Texmacs-dev@gnu.org https://lists.gnu.org/mailman/listinfo/texmacs-dev