• [^] # Re: Euh ...

    Posté par (site web personnel) . En réponse à la dépêche 23 mars: Conférence au LORIA sur Lisaac, un nouveau langage. Évalué à 6.

    Donc comment exporter des API en C ?
    Ce n'est pas encore très clair pour le moment, mais du fait que Lisaac est censé pondre des objets, c'est à dire un fichier C avec une liste de fonctions et quelques variables, compilable en un .o ensuite utilisé dans l'IsaacOS, on devrait pouvoir produire des API en Lisaac en C, l'idéal serait de générer aussi le .h

    Comment utilisé des API écrits en C ?
    Voir le manuel utilisateur.

    Un exemple tout de même, le driver video adapté à X11, que tu trouveras dans la lib.
    On inline le c entre quote inverse `

    section HEADER

    - name := VIDEO;

    - comment := "X11 Driver video - Xlib -";

    - category := MICRO;

    - bibliography:= "http://IsaacOS.com";
    - author := "Benoit Sonntag (bsonntag@loria.fr)";

    - external :=
    `
    #include <X11/Xlib.h>
    Display *display;
    Window window;
    GC gc;
    Screen *screen;
    XImage *ximage=NULL;
    `;

    section INHERIT

    * parent_bitmap:BITMAP;

    section VIDEO

    - line_tmp:BMP_LINE;

    section PUBLIC


    - is_active:BOOLEAN;

    - planes:UINTEGER;

    - make w,h:INTEGER <-
    ( + data:NATIVE_ARRAY[USMALLINT];

    // Init BITMAP:
    width := w;
    height := h;

    // Creation Server X:
    `display = XOpenDisplay(NULL)`;
    // Screen Default:
    `screen = ScreenOfDisplay(display,DefaultScreen(display))`;
    // Init Graphic context:
    `gc = DefaultGC(display,DefaultScreen(display))`;
    // Creation Window:
    `window = XCreateSimpleWindow(display,RootWindow(display,DefaultScreen(display)), 0,0,@w,@h,2,0,0)`;

    // Event manager:
    //XSelectInput(display,window,ExposureMask);

    // Title window:
    `XStoreName(display,window,"X-Isaac")`;

    // Display Window:
    `XMapWindow(display,window)`;

    planes := `PlanesOfScreen(screen)`:UINTEGER;
    "Video mode: ".print;
    planes.print; "bits\n".print;

    planes
    .when 15 then {
    line_tmp := BMP_LINE_15.create w;
    data := line_tmp.get_storage;
    `ximage = XCreateImage(display,None,15,ZPixmap,0,(char *)@data,@w,1,16,0)`;
    }
    .when 16 then {
    line_tmp := BMP_LINE_16.create w;
    data := line_tmp.get_storage;
    `ximage = XCreateImage(display,None,16,ZPixmap,0,(char *)@data,@w,1,16,0)`;
    }
    .when 24 then {
    line_tmp := BMP_LINE_32.create w;
    data := line_tmp.get_storage;
    `ximage = XCreateImage(display,None,24,ZPixmap,0,(char *)@data,@w,1,32,0)`;
    }
    .when 32 then {
    line_tmp := BMP_LINE_32.create w;
    data := line_tmp.get_storage;
    `ximage = XCreateImage(display,None,32,ZPixmap,0,(char *)@data,@w,1,32,0)`;
    };

    is_active := TRUE;
    );


    Plutôt que de faire un décodeur MPEG2, pourquoi ne pas montrer pleins de petits exemples beaucoup plus didactique ?

    Parce que depuis deux ans, Benoit perd son temps entre des post-docs où on lui demande de faire des choses inutiles, ou de donner des cours. Faut bien vivre..; Et je pense que tu es au courant que pour un jeune chercheur, en France, c'est dur aujourd'hui.
    Le décodeur Mpeg2 est une demande de ST

    Pour te donner une idée, Benoit est en train de réécrire le compilateur quasi intégralement, il avait commencé... fin 2004, depuis il n'a jamais réussi à trouver le temps...

    Pourquoi ne pas par exemple participer au benchmark http://shootout.alioth.debian.org/ ? On peut facilement y comparer les performances mais aussi admirer l'élégange d'un langage.

    Je le ferai quand le compilateur sera libre, pour le moment seule la lib et l'OS le sont (pas encore publié sur le site, car on travaille à préparer la distrib, la doc, finir le compilo, etc... dans deux mois ça devrait être bon)

    Le code Lisaac est bourré de brevets top-secret ?
    C'est justement que c'est pas encore brêveté, c'est ça le problème, quand ça le sera, ça deviendra libre (normalement).

    « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker