Dear All,

It is my pleasure to announce the long-awaited MELT 0.9.9 rc1 plugin release 
candidate 1 for GCC 4.6, 4.7, and 4.8. This is a significant improvement 
over previous MELT plugins.  In short, mixing at will MELT and C/C++ code 
is even much easier than before (in particular, because with hooks, MELT can 
generate almost arbitrary C/C++ functions coded in MELT, 
so MELT can interact much more with GCC, because you can now code in MELT 
nearly arbitrary 
functions callable from C/C++ code. This also facilitates a lot coding in MELT 
arbitrary callbacks for external libraries.)

You can download the gnuzipped source tarball from

   http://gcc-melt.org/melt-0.9.9-rc1-plugin-for-gcc-4.6-or-4.7-or-4.8.tar.gz

This is a gzipped source tarball of 5691552 bytes of md5sum 
2d9e420c63e55fcebbbb0e3d6f7a846d
extracted from MELT branch svn rev. 199574 on june 01st 2013


################################################################
NEWS for 0.9.9 MELT plugin for GCC 4.6 & 4.7 & 4.8
[[june, 01st, 2013]]

This is a significant release. A lot of new features are
appearing. Much more ability to mix arbitrary C/C++ & MELT code in any
way and both directions!

This is the last MELT release supporting GCC 4.6 and GCC compilers in
C only. Future MELT releases with will be C++ only (i.e. emit C++
code), for GCC 4.7 & 4.8 or later...


   Language improvements
   =====================

   ***
   * Code chunks can contain void side-effecting expressions of :VOID
     ctype, translated to some C/C++ block. Hence code chunks can even
     be indirectly nested. Within the macro-string, write $(...) for
     the expression. You may want to make it a PROGN ending with
     (VOID) to force it to be void.  Sub-expressions -of :VOID ctype-
     inside code chunks are evaluated at the place of appearance, and
     are expanded to C/C++ blocks at their occurrence.


   ***
   * Expression chunks are expanded into C/C++ expressions. Syntax is

        (EXPR_CHUNK <state-symbol> <ctype> <macro-string> ...)

   For instance, to get the pid of the cc1 running your MELT extension, use
      (expr_chunk getpid_chk :long #{/*$GETPID_CHK*/ (long)getpid()}#)

   Important notice: any sub-expression appearing in some EXPR_CHUNK
   is evaluated before, like for primitives, so will always be
   evaluated.


   ***
   * Ability to emit some C code in the implementation part. Syntax
     (CIMPLEMENT <code-string>)

   This is a companion to the existing CHEADER. Useful to declare some
   specific non-inlined C++ function or static variable with CHEADER
   and to define it with CIMPLEMENT.



   ***
   * New ability to add module "static" value variables in MELT
   
        (DEFVAR <varname>)
   
   The so defined variable <varname> is (in the generated C/C++ code)
   a pointer [to some MELT value] inside a static array. Garbage
   collection support is generated.  The variable <varname> cannot be
   exported with EXPORT_VALUES, you need to export functions accessing
   or changing it.  Once defined, you can use SETQ to assign to such a
   module variable (and also DEFHOOK with :VAR)


   ***
   * New ability to define hooks, that is C/C++ functions coded in
     MELT. Syntax is 

        (DEFHOOK <hookname> <input-formals> <output-formals> <ctype> 
                 [:var <module-variable>] <body...>)
     
    The optional <module-variable> given with a :var annotation should be 
    a module variable previously defined with DEFVAR. 
    For example, with the following code

        (defvar varlist)
        (setq varlist (list))
        (defvar varhook)
        (defhook appendnumhk (:long n) (:long outlen) :void 
                 :var varhook
            (list_append varlist (constant_box n))
            (setq outlen (list_length varlist)))

    you get two generated extern "C" functions in the emitted C/C++ code
            void melthook_APPENDNUMHK (melt_ptr_t hook, long n, long* outlen);
    and
            void melthookproc_APPENDNUMHK (long n, long* outlen);

    which you could use e.g. in some other code_chunk-s. The first
    function melthook_APPENDNUMHK needs the hook value `appendnumhk' as
    its first argument; the second function melthookproc_APPENDNUMHK
    is generated because a :var annotation has been given, and uses
    the hook value automagically stored in that `varhook' module
    variable.
    
    Many functions previously coded in C/C++ inside the melt-runtime.c
    have been migrated to predefined hooks coded in MELT inside
    melt/warmelt-hooks.melt etc...

    Hooks are a very important addition: with them you can mix C/C++ & MELT 
code 
    at will.


   Runtime improvements
   ====================

   *** 
   * To register your MELT pass, use the INSTALL_MELT_PASS_IN_GCC
   function instead of the obsolete INSTALL_MELT_GCC_PASS
   primitive. Notice that INSTALL_MELT_PASS_IN_GCC is incompatible
   with the older INSTALL_MELT_GCC_PASS, because you need to pass
   the :after keyword instead of the "after" cstring, etc, etc...


   ***
   * Many plugin events are interfaced (using hook machinery). 
   Some of them are incompatible with previous MELT releases.


   ***
   * Add macro melt_low_debug_value(Message,Value) to debug-print 
   some arbitrary MELT value in C/C++ code or chunk. 
   This goes thru a predefined hook, similar to the DEBUG macro of MELT.


   *** 
   * Add C variable melt_plugin_name containing the name of the MELT
   plugin, useful for using register_callback.


   ***
   * Many bug fixes and internal improvements... Emitted C/C++ code 
     contains more checks..

   ***
   * More primitives and functions
   
#################

Please download and report bugs on gcc-m...@googlegroups.com


Regards.
-- 
Basile STARYNKEVITCH         http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mines, sont seulement les miennes} ***

Reply via email to