9
votes

Langue de programmation personnalisée: comment?

Espérons que cette question ne sera pas trop compliquée ou vague. Je sais ce que je veux dans ma tête, alors les doigts croisés, je peux obtenir cela dans le texte.

Je recherche une langue avec une syntaxe de ma propre spécification, alors je suppose que je devrai créer un seul. J'ai passé les derniers jours à lire sur les compilateurs, les lexers, les analyseurs, la langue d'assemblage, les machines virtuelles, etc., et je me lance de trier tout en termes de ce que je dois accomplir mes objectifs (fichier ci-joint au bas avec certaines spécifications). Essentiellement, je suis confondu de la mort sur quels outils, plus particulièrement, je devrai utiliser pour aller de l'avant.

Un peu d'arrière-plan: la langue faite serait d'être utilisée pour mettre en œuvre un serveur de boue multijoueur et textuel. Par conséquent, il nécessite une fonctionnalité facile intégrée pour créer / entretenir les connexions TCP / IP client, IO non bloquantes, accès à la base de données via SQL ou similaire. Je suis également intéressé par la sécurité dans la mesure où je ne veux pas que le code écrit pour cette langue puisse être volé et utilisé par le grand public sans logiciel spécialisé. Cela signifie probablement qu'il devrait compiler au code d'objet

Alors, quelles sont mes meilleures options pour créer une langue qui correspond à ces spécifications

Mes conclusions sont ci-dessous. Ce n'est que mes meilleures suppositions éduquées, alors merci de me contenter si vous pensez que je suis en train de vous diriger dans la mauvaise direction. Je ne comprends que ceci que pour voir à quel point je suis très confus, je suis quand les experts viennent faire des commentaires.

  1. Pour la sécurité du code, je voudrais vouloir une langue compilée et exécutée dans une machine virtuelle. Si je le fais, j'aurai un grand travail à faire, n'est-ce pas? Écrivez une machine virtuelle, une langue assembleuse sur le niveau inférieur, puis sur les bibliothèques de code de code supérieur pour gérer IO, les sockets, etc. moi-même, plutôt que d'utiliser des modules existants?

  2. Je suis tout simplement confus.

  3. Je ne sais pas si j'ai du sens.

    Si quelqu'un pouvait régler mon cerveau, même un peu, je l'apprécierais sincèrement! Alternativement, si je suis vraiment bien sûr et qu'il y a un moyen beaucoup plus facile de le faire, merci de me le faire savoir!


10 commentaires

Ce serait une grande entreprise, pourquoi ne pas aller avec un interprète et ajouter une sécurité et utiliser le langage de programmation existant?


"Pour la sécurité du code, je voudrais vouloir une langue compilée et exécutée dans une machine virtuelle.": Comment une machine virtuelle va-t-elle aider à la sécurité?


@Albireo, pardonne-lui. @Sam pour expliquer un peu, vous voudrez peut-être apprendre de Java: il est facilement décompilé car il utilise une machine virtuelle.


Dis-moi si je me trompe! C'est juste la conclusion que j'ai faite et je suis plutôt confuse en ce moment heh. Je crois comprendre que si j'utilise un interprète et interpréter à, dites, c, alors tout le monde pourrait simplement fuir avec des fichiers que je produis pour ce jeu (après leur interprétation c), et ils auraient une copie utilisable de mon jeu. Toutefois, si j'ai des fichiers qui fonctionnent uniquement dans un environnement de machine virtuelle / d'exécution, ils les fichiers et le code seraient inutiles pour toute personne sans logiciel.


Ok, bien sûr, je reçois que le code lui-même serait facilement lu ... mais vous ne trouveriez pas très facile d'exécuter un fichier de code source Java sans la machine virtuelle, n'est-ce pas? C'est plus ce que je voulais dire par la sécurité que de voir le code brut réel.


SAM, puisque vous devez fournir à votre utilisateur la machine virtuelle, ils peuvent altérer facilement le VM et obtenir le même résultat. Pour obtenir la sécurité, vous devez vérifier toutes les actions pour vérifier si c'est un côté légal ou non côté serveur , pas côté client . BTW, ne pas réussir les informations nécessaires par le client (par exemple, les positions d'autres joueurs s'ils ne peuvent pas "voir" eux-mêmes) est une autre chose que vous devez faire.


@Sam: à moins que votre jeu soit génial, personne ne le volera. Si c'est génial, vous pourrez vous permettre d'experts pour vous aider à vous faire durer. Et si vous offrez simplement un accès au jeu via un serveur Web, personne ne peut voler le code à moins que vous autorisiez télécharger le code. Les pages HTML que votre code rend votre code! = Votre code.


Ce que vous essayez d'atteindre est Sécurité via obscurité , qui (pas si, mais quand ) Résultats dans un FSCKUP. Construisez votre système de manière à ce que même si l'utilisateur tamponne avec le client, l'utilisateur ne sera pas en mesure d'obtenir un gain.


Je recommanderais de mettre la sécurité dans le jeu lui-même. Étant donné que la plupart des gens ont déjà Internet, la meilleure façon de penser est d'utiliser une clé qui est vérifiée en ligne et de se concentrer davantage sur la sécurisation de votre vérification en ligne.


Je pense que la vraie question que les commentaires devraient être posés, c'est ce que vous voulez d'une langue personnalisée que vous ne pouvez pas obtenir d'une autre langue existante?


6 Réponses :


3
votes

Écrire votre propre chaîne de langue et d'outil pour résoudre ce qui semble être un problème standard semble être un mauvais moyen d'y aller. Vous finirez par développer une autre langue, ne pas écrire votre boue.

De nombreux développeurs de jeux prennent une approche d'utiliser des langues de script pour décrire leur propre monde de jeu, voir par exemple: http://www.gamasutra.com/view/freature/1570/Reflections_on_building_three_.php

Voir aussi: https: // Stackoverflow.com/Questtions/356160/Quand-game-scripting-language-s-better-a-uus-lua-or-pytHon pour utiliser des langues existantes (Pythong et Lua) dans ce cas pour les scripts en jeu .


0 commentaires

3
votes

Puisque vous ne connaissez pas beaucoup de compilateurs et de créer des langues informatiques: ne le faites pas. Il y a environ cinq personnes dans le monde qui sont bonnes à cela.

Si vous voulez toujours essayer: Créer une bonne langue à usage général prend au moins 3 ans. À plein temps. C'est un énorme entreprise .

Ainsi, vous devriez essayer l'une des langues existantes qui résout presque tous vos problèmes déjà, sauf peut-être la partie "personnalisée". Mais peut-être que la langue fait des choses meilleures que jamais que vous n'avez jamais imaginées et que vous n'avez pas besoin de la partie "personnalisée" du tout.

Voici deux options:

  1. Python , une belle langue de script. Le VM compilera la langue en code octet pour vous, pas besoin de perdre du temps avec un compilateur. La syntaxe est très flexible mais car il y a une bonne raison pour tout dans Python, ce n'est pas trop flexible.

  2. Java. Avec le nouveau Framework XText , vous pouvez créer vos propres langues dans quelques minutes. Cela ne signifie pas que vous pouvez créer un bonne langue dans quelques minutes. Juste une langue

    Python est livré avec beaucoup de bibliothèques, mais si vous avez besoin de quelque chose d'autre, l'air devient mince, rapidement. De manière positive, vous pouvez écrire beaucoup de bon et solide code en peu de temps. Une ligne de python est généralement égale à 10 lignes de Java.

    Java ne vient pas avec beaucoup de fioritures, mais il y a littéralement des millions de frameds qui font tout ce que vous pouvez imaginer ... et beaucoup de choses que vous ne pouvez pas.

    Cela dit: Pourquoi vous limiter à une langue? Avec Jython , vous pouvez exécuter Python Source dans le Java VM. Donc, vous pouvez écrire le noyau (serveur Web, SQL, etc.) en Java et les parties de l'UI flexibles, les aventures et les trucs, en Python.


6 commentaires

Les étudiants CS typiques sont capables de s'attaquer à la compilation après un cours d'introduction d'une semaine. Il y a littéralement rien compliqué. Certaines choses complexes peuvent apparaître si vous optez une optimisation vraiment dure ou mettez en place des langues avec une sémantique inhabituelle. Tout le reste est juste une marchandise. Pas besoin de mettre en œuvre votre propre GC, votre propre bibliothèque standard, la pensée de la mise en œuvre de la FFI, etc. Tout est disponible gratuitement. Il vous suffit de combiner les trucs existants.


Littéralement rien de compliqué de la même manière que le calcul n'est pas compliqué. Si vous l'étudiez, les détails sont clairs. La plupart des gens ne l'ont pas, donc les détails ne sont pas. Oui, il y a des tonnes de machines allongées, d'une place libre, de certaines commerciales. Mais savoir comment Conception A Good Langauge est seulement conduit quelque peu en sachant comment mettre en œuvre un. Et savoir comment faire une bonne implémentation n'est pas quelque chose qu'un CS diplômé avec une semaine d'AHO / Ullman peut faire. Désolé.


Si OP veut le faire pour le plaisir, ça va. Il devrait être conscient qu'il faudra une énorme quantité d'efforts pour obtenir quelque chose qui peut gérer ce que d'autres personnes considéreraient comme un véritable programme.


3 ans semble un peu exagéré. J'ai réussi à faire une langue jvm avec une tonne de fonctionnalités (opérateurs personnalisés, expressions Lambda, assorti de motifs, ...) en moins d'un an sur mon propre en allant à l'école. Donc, la construction du compilateur n'est pas une grosse affaire (même si vous n'utilisez aucun cadres, à l'exception de l'ASM).


@ClashSoft: Combien de personnes utilisent votre langue? Avez-vous un bon débogueur? Combien de parties de votre langue pourraient être meilleures ou que feriez-vous différents si vous commencez à nouveau? J'ai conçu de nombreuses langues "simples", puis de nombreuses personnes ont commencé à les utiliser et toutes sortes de problèmes surprenants sont arrivés. Je suis mon être de 3 ans pour une langue réelle, Java / Python / C # Niveau de niveau utilisé par des milliers de personnes partout dans le monde.


Je n'ai jamais déclaré que c'était fini, seulement qu'il a actuellement de nombreuses caractéristiques utilisables :). Github.com/Clashsoft/dyvil



10
votes

Conception d'un langage de programmation spécifique à un domaine personnalisé est la bonne approche d'un problème. En fait, presque tous les problèmes sont mieux approchés avec les DSL. Termes que vous aimeriez probablement que Google sont les suivants: Langues spécifiques du domaine et Programmation orientée de la langue .

Certains diraient que la conception et la mise en œuvre d'un compilateur est une tâche compliquée. Ce n'est pas vrai du tout. La mise en œuvre des compilateurs est une chose triviale. Il y a des hordes de compilateurs de haute qualité disponibles et tout ce que vous avez à faire est de définir une transformation simple de votre propre langue en une autre, ou en une combinaison des autres langues. Vous auriez besoin d'un analyseur - ce n'est pas un gros problème aujourd'hui, avec des antlr et des tonnes de générateurs d'analyseurs à base de PEG HOMEBREW. Vous auriez besoin de quelque chose pour définir la sémantique de votre langue - la programmation fonctionnelle moderne Les Langauges brillent dans cette zone, tout ce dont vous avez besoin est quelque chose avec un support pour les adtes et la correspondance des modèles. Vous auriez besoin d'une plate-forme cible. Il y a beaucoup de possibilités: JVM et .NET, C, C ++, LLVM, Lisp commun, Schéma, Python et tout ce qui est fait d'autres chaînes de texte.

Il existe des cadres prêts à utiliser pour construire vos propres langues. Littéralement, toute mise en œuvre commune des LISP ou du schéma peut être utilisée comme un tel cadre. LLVM a tout ce dont vous auriez besoin. .NET Toolbox est OK - il y a beaucoup d'options de génération de code disponibles. Il existe des cadres spécialisés comme Celui-ci pour la construction de langages avec sémantique complexe.

Choisissez n'importe quelle façon que vous aimez. C'est facile. Beaucoup plus facile que vous ne pouvez l'imaginer.


3 commentaires

Intéressant. Nextuel, je me développe dans le monde .net souvent, mais pour cela, je pense vérifiera la première fois. J'ajouterai plus après avoir créé d'abord ma propre langue :)


@Qmaster, si des exigences de performance ou de latence sont importantes, vous devez tout d'abord examiner LLVM - même avant de générer de la génération de C. Si vous avez besoin de piles incluses (telles que GC, par exemple), .NET ou JVM serait un peu plus facile à traiter.


Je développe avec Delphi et .Net pendant des années et continué de nos jours. Les performances exactes, le codage clair, la facilité de gestion et la plate-forme croisée sont importants pour moi. Au deuxième niveau, je vais regarder GC, etc. Merci pour vos guides.



2
votes

Si vous voulez vraiment créer votre propre petite langue, une solution plus simple et plus rapide consiste à regarder des outils tels que lex et YACK et systèmes similaires ( antlr est une alternative populaire), puis vous pouvez générer du code à une machine virtuelle existante ou en faire un simple.

Faire tout votre possible est une excellente expérience d'apprentissage et vous aidera à comprendre ce qui se passe dans les coulisses dans d'autres machines virtuelles.


0 commentaires

0
votes

Une excellente source de compréhension des concepts de conception et de mise en œuvre de la langue de programmation est Structure et Interprétation des programmes informatiques de MIT Press. C'est une excellente lecture pour que quiconque souhaite concevoir et mettre en œuvre une langue, ou que quiconque cherche à devenir généralement un meilleur programmeur.


0 commentaires

-3
votes

De ce que je peux comprendre à ce sujet, vous voulez savoir comment développer votre propre langage de programmation.

Si tel est le cas, vous pouvez y accomplir par différentes méthodes. Je viens de terminer mes propres miennes il y a quelques minutes et j'ai utilisé HTML et JavaScript (et Dom) pour développer mon propre. J'ai utilisé beaucoup de x.split et x.indexof ("code ici")! = - 1 Pour le faire ... Je n'ai pas beaucoup de temps pour donner un exemple, mais si vous utilisez W3schools et recherchez "Indexof" et "Split" Je suis sûr que vous trouverez ce que vous pourriez avoir besoin. J'aimerais vraiment vous montrer ce que j'ai fait et dépassé le code ci-dessous, mais je ne peux pas être due au vol possible et à la revendication de mon travail.

Je suis à peu près ici pour dire que vous pouvez créer votre propre langue de programmation à l'aide de HTML et de JavaScript, de sorte que vous et d'autres personnes pourraient ne pas avoir d'espoir trop bas. J'espère que cela vous aidera avec la plupart des choses ...


0 commentaires