Question pour les Unixiens.
Je reprends mon code de langage de programmation (il date de 2014 ; la
honte). Initialement j'avais travaillé sur un modèle interprété, avec
un tableau d'opcodes pointant sur des fonctions. Un modèle simple et
bigrement efficace. A se demander pourquoi personne ne l'utilise (je
n'ai pas trouvé beaucoup d'exemples similaires).
Chaque opcode Basic lançait une fonction via l'appel suivant :
(*PtrFunction[PoolCode[ProgramCounter]])(&ProgramCounter,
&PoolCode[0], &PoolInteger[0], PoolString);
C=A+B se traduisant dans un opcode 3, var 3, var 1, var 2. Et par le
code :
++*ProgramCounter;
PoolInteger[PoolCode[*ProgramCounter+2]]=PoolInteger[PoolCode[*ProgramCounter]]+
PoolInteger[PoolCode[*ProgramCounter+1]];
*ProgramCounter+=3;
Soit très peu d'instructions à traiter.
Aujourd'hui je suis sur ma lentissime machine XP et c'est donc vers
TCC que je me suis tourné pour recompiler ma bestiole. Et pour le
coup, vu qu'il y a libtcc, l'idée d'un traducteur Basic > C me tente,
car grâce à lui je peux implémenter un EVAL limité. L'idée : compiler
le code de l'EVAL à la volée, en remplaçant les variables appelées par
leurs équivalents dans le programme C, trouvés via un tableau de
référence.
Venons-en au fait. TCC = pas de RISC OS. Quoique. TCC créé du code ELF
sous Linux et ARM de surcroit. Donc il pourrait créer de l'AOF. Mieux,
l'ELF existant sous RISC OS et étant supporté par le cross compilateur
GCC proposé sous Linux, je me demande même si un portage brut de TCC
ne serait pas capable à son tour de créer - depuis RISC OS - des
binaires ELF fonctionnels.
Qui pour tenter le coup côté Linux ? Il faut GCCSDK 4.7.4 R3
http://www.riscos.info/index.php/GCCSDK_Releases
Puis compiler TCC et me le faire passer pour voir si ça marche.
http://download.savannah.nongnu.org/releases/tinycc/
De mémoire GCCSDK est un peu pénible sous Linux, car il marche via des
scripts automatisant les portages. A l'époque je générais un makefile
via configure sur mon PC et le reprenait tel quel pour compiler la
version ARM d'un soft en appelant le cross compilateur en direct.
C'est sale et vilain, mais cela marche peut-être encore.
Je doute que libtcc marche sous RISC OS, mais vu que la plupart des
trucs ELF recompilés marchent, je m'interroge.
Et c'est aussi un bon moyen de voir si la méthode ne pourrait pas être
reprise pour compiler des compilateurs plus gros. Par exemple
FreePascal.
A+, David
--
RISC OS FR - www.riscos.fr
Informations sur RISC OS et sa communauté
Licences ABC et Raspberry Pi gratuits !