Y a-t-il des langages de programmation interprétés extensibles écrits dans Standard, indépendante de la plate-forme C ou C ++? P>
J'aimerais pouvoir simplement mettre toutes les sources dans un répertoire, compiler les sources avec n'importe quel compilateur C ou C ++ conformiste standard et produire un exécutable qui lit et interprète des fichiers de script dans la langue de script désignée. P>
Il semble que de nombreuses langues de programmation "écrites en C" intègrent souvent de nombreuses fonctionnalités dépendantes de la plate-forme, elles nécessitent un certain programme de configuration sur la base de votre système cible (par exemple, Autoconf) qui complique les questions et limite la compatibilité croisée. p>
Je suis intéressé à apprendre sur la conception de la langue de programmation. J'ai joué avec quelques langages de programmation de jouets après avoir suivi des tutoriels impliquant YACC, Lex et LLVM. Cependant, récemment, je suis devenu intéressé par l'étude d'un langage de programmation écrit dans Portable C / C ++, à ce titre, je peux étudier le programme et le code sur n'importe quelle machine qui prend en charge un compilateur C ou C ++ standard (éventuellement même sur mon iPad) et encore avoir une expérience raisonnablement uniforme. P>
Comme il s'agit juste à des fins pédagogiques, le langage de script n'a pas besoin de prendre en charge des fonctionnalités de niveau super bas telles que c, ni il ne faut pas présenter une interface graphique comme Java (je ne pense pas que vous puissiez écrire une sorte de GUI limitée à Standard C / C ++ de toute façon) ou de toute IO compliquée pour cette affaire. Cependant, j'aimerais que la langue soit suffisamment complète qu'il serait pratique d'écrire quelques programmes utiles dans la langue (par exemple, il devrait être possible d'étendre la langue à l'aide de C / C ++ afin que vous puissiez l'utiliser comme une coquille à la TTY) . P>
Merci. P>
EDIT: P>
@ Andrécaron Je préférerais cela si au moins le noyau de la langue était une plate-forme de 100% indépendante. Il serait correct si la langue comprenait une bibliothèque standard importante qui dépendait d'autres bibliothèques pour le rendre "plus utile", cependant, je voudrais pouvoir dépouiller la bibliothèque standard et utiliser uniquement le noyau de la langue (éventuellement avec mesure bibliothèques écrites à la main) Si je voulais. p>
4 Réponses :
Peut-être Lua incorporé ? Strike> P>
En réalité Core Lua est probablement mieux. À première vue, je l'affirmant que l'élua d'exécution sur de nombreux systèmes différents signifiait qu'il était très portable, mais il faut en fait de base Lua et ajoute un tas de pilotes de matériel, ce qui n'est évidemment pas si portable. P>
OCAML serait un autre excellent choix. Il affirme "Le système byTecoded exécute actuellement sur n'importe quel système d'exploitation compatible POSIX avec un C ANSI-CONFORIANT C Compiler " et CAML Light est particulièrement adapté à l'apprentissage. "Le système d'exécution et l'interpréteur de bytecode sont écrits dans Standard C, la lumière CAML Standard est donc facile à porter à presque toutes les plate-forme 32 ou 64 bits." P>
Malheureusement non. De ELUAPROJECT.NET/DOC/MASTER/EN_BUILDING.HTML : "<< > ELUA B> a un système de construction très flexible [...]. Pour l'utiliser, vous devez modifier un seul fichier de configuration ( plate-forme_conf.h i>) situé dans le répertoire spécifique à la plate-forme (< i> src / plate-forme /
Eh bien, ce n'est pas parfait - mais je ne pense pas qu'il y ait une telle chose comme une plate-forme multiplate-forme indépendante indépendante. S'il y en avait, toutes les plates-formes seraient cohérentes et il n'y aurait pas de problèmes inter-plate-forme du tout, non? Tout serait simplement indépendant de la plate-forme. La valeur de LUA est que les modifications nécessaires sont petites et dans un seul fichier, ils ont déjà fait le travail pour rendre la plate-forme Code i> indépendante. Je crois comprendre que vous voulez simplement modifier la construction, pas l'interprète.
@Matt: Je pense que le point est que les bibliothèques d'exécution C (et C ++) sont censées abstraites (presque) toutes les différences de plate-forme. Mais les API standard C nécessitent toujours l'application pour utiliser des données spécifiques à la plate-forme telles que les noms de fichiers.
@Matt en fait, vous pouvez prendre ce que Benvoigt a dit un peu plus loin et nécessite que beaucoup de données spécifiques à la plate-forme soient transmises par argument ou enregistré dans un autre fichier. Cependant, j'imagine que c'est ce que font les outils de construction pour commencer.
Lua est vraiment votre meilleur choix. L'interpréteur Core Lua est à peu près aussi minimaliste que vous pouvez obtenir. La distribution comprend un matrice, mais il est à peu près comme des os nus que possible. Il existe même des instructions qui expliquent quels fichiers que vous devez construire uniquement la langue principale, lesquels sont la bibliothèque standard Lua et lesquelles sont l'interpréteur de ligne de commande. P>
La langue principale elle-même ne touche aucune API ou en-têtes spécifique à la plate-forme. La bibliothèque standard fait, mais seulement de la manière la plus minimale. Et vous ne em> avez pas em> pour construire la bibliothèque standard si vous ne vous en ressentez pas. P>
Il y a des #defines que vous pouvez utiliser pour configurer la construction, mais c'est surtout pour des choses comme la construction de la DLL et similaires. P>
REMARQUE: Le but des utilitaires d'autotools et d'autres utilitaires de construction spécifiques à la plate-forme est de permettre aux bibliothèques d'envelopper efficacement des éléments spécifiques à la plate-forme dans em> une interface neutre de la plate-forme. Il n'y a pas vraiment beaucoup que vous puissiez faire sur la plupart des plates-formes avec des bibliothèques standard de la plate-forme pure-neutre et de C ++. Vous ne pouvez même pas accéder aux arbres de répertoire et rechercher des fichiers, sans parler des choses vraiment utiles comme faire appel à une fenêtre. Pour les applications STDIN / stdout simples, cela pourrait suffire. Mais pour la grande majorité des cas, ce n'est pas le cas. P>
Ma suggestion est que vous vous habituez à avoir à configurer une construction pour une plate-forme spécifique. Sauf si votre domaine est des applications scientifiques (et dans certains cas, pas seulement), vous n'allez pas obtenir de nombreuses programmations de plate-forme-agnostique. Vous allez devoir apprendre à travailler avec ces types de bibliothèques. P>
Lua est un aberrant em> en ce qui concerne les bibliothèques. La plupart des bibliothèques ne sont pas des listes de fichiers que vous pouvez simplement pousser dans un répertoire et compiler Willy-Nilly. Plus tôt vous déterminez comment travailler avec les outils que les bibliothèques utilisent, mieux vous serez. P>
Lua et TCL sont les deux langues interprétées les plus simples, alors obtenez une copie du code source pour les deux et l'examiner. Cependant, je pense que votre question est plus liée à la liaison statique par rapport à la liaison partagée. Un programme statiquement lié n'a aucune dépendance système au-delà de l'interface du noyau, mais un programme lié dynamiquement requiert le bon ensemble de bibliothèques partagées à installer. p>
Avec une langue comme Python, vous devez vous inquiéter des propres bibliothèques de Python (appelées modules) ainsi que des bibliothèques partagées binaires dont dépend un module. Python lui-même est généralement construit à l'aide de bibliothèques partagées, mais Il peut être construit statiquement a>. En outre, j'ai construit un python binaire qui utilise la fonctionnalité RunPath de la bibliothèque partagée de Linux afin que toutes les dépendances binaires puissent être fournies avec Python dans sa propre hiérarchie de dossiers. P>
Si votre question concerne davantage la liaison, jetez un coup d'œil à la construction de StaticpyThon par rapport au Python dynamique standard et aux scripts de construction de pybuild utilisant RunPath. P>
Presque toutes les langues de script récentes sont écrites dans Le fait que la construction nécessite que la configuration ne soit pas une caractéristique de l'interprète, car elle est une adaptation pour la construction de plusieurs plates-formes - généralement considérées une bonne chose. EM> P>
Ils sont tous extensibles en ce sens que vous pouvez écrire des fonctions qui créent de nouvelles fonctionnalités. P> C code> ou
C ++ code>: Perl, Bash, CSH, PHP, HTML, JavaScript, Make, Vim, TCL, etc., c. p>
C'est vraiment une meilleure question pour le Programmeurs Site.
Comment est ce off-sujet? Semble s'adapter solidement dans programmeurs.se SUPPLES SUPPLES SUJETS .
"Intégrez les sources de la bibliothèque dans mon arborescence source" n'est pas vraiment un moyen courant d'inclure des bibliothèques de votre projet en dehors de la plate-forme iOS. Si vous avez l'intention d'utiliser C, vous devez envisager d'ajouter «Utilisation de bibliothèques tiers» et «traiter des autotools» à vos objectifs éducatifs.
La plate-forme 100% est-elle souhaitée ou est quelque chose qui se compose de la boîte sur toutes les plateformes bien avec vous? Il est très difficile d'écrire une sorte de compilateur utile / interprète sans utiliser aucune extension de langue / de bibliothèque i>.
Cela dit, vous voudrez peut-être jeter un coup d'œil à Lua. "L'intégration facile dans d'autres logiciels" est l'un de leurs objectifs principaux, afin qu'ils puissent simplement prendre en charge le scénario souhaité. (En tant que bonus, c'est une langue et une implémentation vraiment infime, il devrait donc être facile de comprendre et éventuellement de supprimer le code dépendant du système d'exploitation.)
Il y a beaucoup de lecture intéressante ici: Apprendre à écrire un compilateur