Bonsoir,
En ce moment je regarde comment faire un binding entre le langage
Objective-C et Lua (un autre langage que j'aime bien depuis pas mal de
temps) et je me disais que bientôt, je pourrais aussi essayer de faire
un binding Objective-C pour Lisaac (le bientôt sera peut être dans 6
mois vu le temps dont je dispose actuellement)
En gros, Objective-C permet une très grande introspection, avec le nom
d'une classe, on peut obtenir la classe elle même, et avec le nom d'une
méthode, il est possible d'appeler la méthode directement et de
recevoir les résultats.
Ce que je vais vous dire suppose que vous ayez compris mon travail sur
la compilation par projets de Lisaac.
l'idée c'est qu'il serait possible de définit une projet Objective-C
qui exporterait un certain nombre de prototype (correspondant aux
classes ObjC). Et si un prototype est utilisé, alors le compilateur
Lisaac irait voir la description de la classe ObjC correspondante à la
demande, et générerait le code qu'il faut pour que l'appel se passe
bien.
Maintenant, il y a un problème, c'est qu'ObjC autorise les majuscules
et minuscules dans ses identifiants, et pas Lisaac. Donc comment faire ?
- soit on change la syntaxe Lisaac pour autoriser par exemple des
majuscules au milieux des identifiants (qui devraient commencer par
une minuscule) et on autorise les minuscules dés la 3e lettre dans les
noms de prototypes.
- soit on doit gnérer une table de correspondance (automatiquement,
mais qui pourrait être retouchée à la main), mais ça revient presque
à une génération de binding automatique ...
Et il y a encore un dernier problème, comment convertir les types
standard ObjC en types standard Lisaac (par exemple NSString en
STRING). Je me disais qu'il serait peut être possible de définir
partiellement un prototype pour NSString qui contiendrait alors:
- la table des correspondances entre les méthodes ObjC et Lisaac
- et quelques slots en plus comme par exemple from_string et to_string
Le seul petit souci, c'est qu'a ma conaissance, l'import/export
automatique (slots from/to_type) ne marche que lorsqu'on affecte un
objet a une variable d'un autre type, c'est à dire:
+ var :NS_STRING;
+ obj :STRING;
var := obj;
Et que par contre cela ne marche pas si on passe l'objet en paramètre:
+ obj :STRING;
OBJC.want_ns_string obj;
pour résumer, ce que je verrais bien c'est :
- un outil qui crérait des prototypes en fonction des classes ObjC, les
prototypes ne seraient que partiels et contiendrait une section de
correspondance entre le nom des méthodes ObjC et Lisaac, et d'autres
slots en plus, éventuellement
- un plugin du compilateur pour comprendre ces prototypes modifiés, et
qui serait capable de lire des projets ObjC. les projets ObjC
feraient une correspondance entre le nom d'une classe ObjC et Lisaac,
et le compilateur ferait du mieux ensuite pour trouver les noms des
méthodes ObjC (si la correspondance n'a pas été définie auparavant)
Note, les méthodes ObjC ressemblent un peu aux slots Lisaac, c'est à
dire que par exemple on peut faire en ObjC:
NSString* s;
s = [NSString stringWithCString: <cstr> length: <len>];
Qui pourrait se traduire en Lisaac:
+ NS_STRING s;
s := NS_STRING.string_with_cstring <cstr> length <len>;
Bon, voila, qu'en pensez-vous ?
Mildred
--
Mildred Ki'lya
E-Mail: mildred593(at)online.fr
Site: <http://mildred632.free.fr/>
XMPP: <[EMAIL PROTECTED]> (GoogleTalk, Jabber)
GPG: 197C A7E6 645B 4299 6D37 684B 6F9D A8D6 [9A7D 2E2B]
_______________________________________________
Isaac-devel mailing list
[email protected]
https://mail.gna.org/listinfo/isaac-devel