J'aime beaucoup KhiCAS, j'aime beaucoup ce que vous faites, mais je trouve plusieurs choses qui ne vont pas dans le code de KhiCAS et dans votre manière de faire :
- Pourquoi n'utilisez-vous pas de système de versionning (git, svn, cvs, ...) pour gérer votre code ? La distribution en archive marche, mais ne permet aucunement de garder des traces de l'historique des modifications et empêche l'envoi simple de patches. Je pense que l'utilisation de git permettrait d'amener pas mal de contributeurs à KhiCAS (dont moi).
- Dans l'état actuel de choses, le code source ne compile pas sur N0110, je suis obligé, à chaque mise à jour, de patcher votre code pour pouvoir le link, notamment à cause de fonctions qui sont définis sous certaines conditions de préprocesseur mais qui sont utilisé tout le temps (cf. patch joint).
- L'indentation et la qualité du code sont plus que bancales. Certains fichiers font plus de 10 000 lignes (kdisplay.cc par exemple). Il est impossible pour quelqu'un de sensé de mettre les mains dans le code sans chopper une migraine.
- Le système de compilation de GIAC relève de la magie noire. En cherchant pendant deux heures je n'ai pas réussi à comprendre comment il fonctionne.
Avec toutes ces observations, j'arrive à en penser que c'est irrattrapable. Il faudrait un rewrite complet pour avoir quelque chose de propre. Vous pouvez au moins essayer de séparer les sources en plusieurs fichiers et d'indenter correctement votre code.
Cordialement.
Show/Hide spoilerAfficher/Masquer le spoiler
Patch nécessaire à la compilation de giac-1.6.0 (23/07/2020 - sha256: a8455930c26b36f367eac279233ee3839881e844beb53513f283cf37d6bb4806)
- Code: Select all
diff -ur giac-1.6.0/src/help.cc giac-1.6.0-new/src/help.cc
--- giac-1.6.0/src/help.cc 2020-07-17 20:20:55.000000000 +0200
+++ giac-1.6.0-new/src/help.cc 2020-07-23 22:27:00.578690605 +0200
@@ -296,18 +296,22 @@
}
const char * items[1+static_help_size];
kk=0;
+#ifdef MICROPY_LIB
if (xcas_python_eval && !python_heap){
python_init(python_stack_size,python_heap_size);
}
+#endif
for (;pos<static_help_size;++kk,++pos){
const static_help_t & sh=static_help[pos];
const char * ptr=sh.cmd_name;
+#ifdef MICROPY_LIB
if (xcas_python_eval){
if (!is_python_builtin(ptr) && mp_token(ptr)==0){
--kk;
continue;
}
}
+#endif
if (strcmp(ptr,s.c_str())==0){
howto=sh.cmd_howto[lang-1];
if (!howto)
diff -ur giac-1.6.0/src/kdisplay.cc giac-1.6.0-new/src/kdisplay.cc
--- giac-1.6.0/src/kdisplay.cc 2020-07-23 09:47:21.000000000 +0200
+++ giac-1.6.0-new/src/kdisplay.cc 2020-07-23 22:27:25.324670451 +0200
@@ -9389,7 +9389,9 @@
#endif
){
python_heap_size=d*1024;
+#ifdef MICROPY_LIB
python_free();
+#endif
}
continue;
}
@@ -9410,7 +9412,9 @@
#endif
){
python_stack_size=d*1024;
+#ifdef MICROPY_LIB
python_free();
+#endif
}
continue;
}
@@ -9463,8 +9467,10 @@
python_compat(p,contextptr);
if (edptr)
edptr->python=p;
+#ifdef MICROPY_LIB
if (do_confirm((lang==1)?"Effacer le tas MicroPython?":"Clear MicroPython heap?"))
python_free();
+#endif
*logptr(contextptr) << "Xcas interpreter\n";
Console_FMenu_Init(contextptr);
return 0;
@@ -12027,11 +12033,13 @@
int console_main(GIAC_CONTEXT){
#ifdef NUMWORKS
+#ifdef MICROPY_LIB
mp_stack_ctrl_init();
//volatile int stackTop;
//mp_stack_set_top((void *)(&stackTop));
//mp_stack_set_limit(24*1024);
#endif
+#endif
python_heap=0;
sheetptr=0;
shutdown=do_shutdown;