De nouveaux outils , qui dans leur travail utilisent leurs propres formats pour décrire des fichiers de configuration ou une séquence de commandes exécutables, se font également connaître , ce qui les rapproche aussi beaucoup du concept de «langage de programmation».
Le but de cet article est de formuler des attentes et une implémentation possible d'un langage de programmation abstrait qui peut devenir un outil universel de communication entre un ordinateur et une personne.
À propos des programmeurs.
Si vous partez du tout début, j'ai entendu une fois une affirmation paraphrasée, «chaque programmeur devrait écrire sa propre base de données, son éditeur de texte et son langage de programmation». Et si j'ai écrit les deux premières choses il y a longtemps, le langage de programmation n'a pas encore fonctionné.
Après tout, comment les langages de programmation sont-ils généralement créés?
Chaque programmeur a toujours une sorte d'expérience antérieure:
- connaissance d'un ou plusieurs langages de programmation (comment pourrait-il être sans lui)
- expérience négative de leur utilisation (sinon, si tout vous convient, pourquoi proposer quelque chose de nouveau?)
- désir d'obtenir de nouvelles opportunités (lorsqu'il manque quelque chose dans les langues existantes).
Et avant de décrire la syntaxe, de choisir les mots-clés et de commencer le travail principal: lexer, analyseur, bibliothèques de base, vous devez répondre aux questions de base:
- Compilateur / interprète / transpilateur?
- Typage statique ou dynamique?
- Gestion manuelle de la mémoire ou automatique avec garbage collector?
- Modèle de programmation: POO, fonctionnel, structurel ou quelque chose de nouveau?
- Les insertions d'autres langages de programmation, etc. sont-elles autorisées?
Comme la plupart des lecteurs, j'ai probablement de l'expérience dans l'utilisation de plusieurs langages de programmation. Par conséquent, il est depuis longtemps une pratique que pour résoudre un problème, il vaut mieux prendre une langue connue ou même en apprendre une nouvelle, au lieu de commencer à écrire la vôtre.
De plus, je ne veux pas inventer une autre langue juste pour le plaisir d'une tique ou pour la langue elle-même. Je pense que le but de sa création devrait être en dehors des besoins du développeur lui-même.
Et il me semble que nous avons réussi à déterminer le domaine pour lequel le développement d'un langage de programmation peut être sollicité, et les efforts qui y sont consacrés peuvent apporter de réels bénéfices.
À propos des non-programmeurs.
Ce domaine est la programmation en langage naturel pour les non-programmeurs. Je mets délibérément les mots «non-programmeurs» et «naturel» entre guillemets, car ces termes sont très conditionnels.
Après tout, si ce n'est pas un programmeur qui commence la programmation, alors sans s'en rendre compte, il devient automatiquement programmeur ;-). Par définition, un langage de programmation ne peut pas être «naturel». Plus précisément, pour les ordinateurs, le langage Assembler ou un ensemble d'instructions machine sera très probablement "naturel".
Par conséquent, l'objectif est maximal: rapprocher le langage de programmation du langage humain naturel.
Cela rendra non seulement la lecture du texte du programme plus compréhensible pour les non-professionnels, mais vous permettra également de commencer à composer des programmes simplement en maîtrisant la parole écrite, en utilisant le minimum de règles de base.
Mais il y a un très gros problème dans cette formulation!
Tout langage de programmation est international, car sa syntaxe est indépendante du langage naturel dans lequel le programmeur communique.
Et si le texte du programme est dans un langage «naturel», il ne deviendra compréhensible que pour ceux qui connaissent ce langage, tout en devenant simultanément incompréhensible pour tout le monde.
A titre d'illustration: une ou deux fois .
Si vous fantasmez sur les souhaits d'une telle langue, vous voyez les exigences et restrictions suivantes:
- ( ), , , , .
- / , «» , «» .
- Je veux vraiment voir la
tolérancedans le nouveau langage, la tolérance à la confusion. Une telle "caractéristique" est présente dans l'écriture en langage naturel, et malgré la présence de fautes de frappe, le sens est presque toujours préservé. Naturellement, dans ce cas, il ne faut pas aller jusqu'au fanatisme. Le compilateur ne lit pas les esprits et ne peut pas vraiment «comprendre» ce que l'utilisateur voulait dire, et pourtant il est assez courant d'ignorer les fautes de frappe dans le texte du programme en fonction du contexte (bien qu'avec des messages d'avertissement).
Néanmoins, un tel langage devrait rester juste un langage de programmation avec toutes les possibilités de créer des programmes de tout niveau de complexité, y compris la programmation fonctionnelle et orientée objet et une compréhension sans ambiguïté de ce qui a été écrit.
À propos d'une langue hypothétique
Sur la base des règles d'écriture, les conventions de base et la ponctuation d'une nouvelle langue peuvent ressembler à ceci:
- Tout texte se compose de phrases et de commentaires. Les suggestions sont traitées et les commentaires sont ignorés.
- Une phrase se compose d'une séquence de termes, littéraux et caractères, séparés par des espaces et des signes de ponctuation, et se termine par un caractère de fin de phrase.
- Un terme est une séquence fusionnée de lettres, de chiffres et de symboles ":" et "_".
- Littéral - constantes incluses directement dans le texte du programme, dont le type est déterminé de manière unique. Il s'agit de chaînes de caractères entre guillemets, entiers et nombres réels, et certains formats spéciaux (heure, date).
- Symboles - tous les autres symboles qui n'appartiennent pas aux signes de ponctuation, aux espaces, aux chiffres et aux lettres.
- — , :
- «.»,«;»,«!»,«?»,«…» — .
- «=» — .
- "" () — .
- «()» — / .
- «[]» — .
- «{}» — .
- «$» — .
- «@» — .
- «,» () — .
- «:» () — .
Si tout doit être plus ou moins clair avec le symbole d'affectation, les guillemets, les parenthèses et les crochets, car leur objectif correspond à celui de l'écrasante majorité des langages de programmation, alors le but des caractères restants (accolades, deux points, virgule et fonctions / variables système) doit être un peu expliqué.
Puisque le but d'un langage de programmation hypothétique est toujours d'écrire des programmes, il est alors nécessaire de prévoir la possibilité d'insérer du code de programme ordinaire sans prendre en compte toutes les possibilités et ambiguïtés inhérentes à tout langage naturel.
Cette capacité est également requise pour implémenter des fonctions de bas niveau et pour interagir avec des bibliothèques externes.
Lors de la création de telles insertions, des accolades peuvent être utilisées, tout le texte entre lequel sera inséré dans le fichier final avec peu ou pas de traitement.
Les symboles "$" - une variable système et "@" - une fonction système ont également des objectifs similaires. Si un tel symbole est placé au début d'un mot, il désignera un objet avec un but correspondant. Par exemple, «@exit» signifiera une fonction, et «$ var» signifiera une variable avec des noms appropriés, et les objets eux-mêmes deviendront disponibles à la fois dans le code normal et dans les insertions programmatiques entre accolades.
L'accès aux champs / méthodes d'objets individuels est organisé de la même manière:
"objet @ méthode" ou "objet $ champ".
Le caractère virgule "," est utilisé pour indiquer une séquence de blocs logiques égaux dans une phrase ou pour créer des listes.
Le caractère deux-points ":" est utilisé pour créer des listes et pour indiquer une relation logique entre deux parties d'un mot / texte, y compris le chemin complet du module.
Par exemple, créer une liste: Conséquence / indication d'une relation: Comme vous pouvez le voir, l'utilisation des signes de ponctuation est tirée de leur finalité directe, adoptée par écrit, qui devrait fournir un certain compromis entre la syntaxe dans les langages de programmation standard et l'écriture en langage naturel.
_: 1, 2, .
_:
- 1;
- 2;
- .
module:calc // «calc», «module»
super:module:example$var // «$var» .
À propos des ordinateurs
Puisque nous parlons d'un langage de programmation, nous ne pouvons pas nous passer des constructions algorithmiques standards: succession, branchement et boucles.
Ce qui suit est facilement décrit par les règles habituelles de l'écriture en langage naturel. Dans le cas d'une exécution séquentielle dans une instruction, les opérations et les appels de fonction sont écrits séquentiellement, séparés par des virgules. S'ils se trouvent dans des phrases différentes, ils sont écrits de la même manière les uns après les autres. De plus, la mise en forme des paragraphes ne sert qu'à une meilleure perception du texte et à une séparation logique des fragments individuels.
Lors de la création de structures de contrôle conditionnelles et en boucle, vous aurez déjà besoin de mots-clés. Mais comme, selon les souhaits originaux du langage, il est impossible de réserver les termes usuels pour écrire des constructions algorithmiques, il suffit d'indiquer le symbole de la fonction système devant les mots-clés, ce qui permettra de distinguer un terme ordinaire d'un mot clé (de contrôle).
Naturellement, lors de la programmation, ces termes peuvent être utilisés, mais ce n'est pas du tout nécessaire. Depuis lors de la configuration d'un langage naturel spécifique, les fonctions système et les mots-clés doivent se voir attribuer des termes spécifiques et les utiliser déjà, par exemple:
= @goto,
= @label,
= @continue,
=@break ..
Et le dernier à son tour, mais probablement le plus important en substance, la construction: passer des paramètres lors de l'appel de fonctions. Si nous aspirons à une syntaxe complètement naturelle, nous obtenons le même langage naturel qui est très difficile à analyser.
Néanmoins, il me semble qu'il est possible de combiner les deux approches en évitant l'utilisation obligatoire de parenthèses là où la syntaxe est autorisée. Mais: En d'autres termes, pour l'ordre naturel des arguments, les parenthèses pour les fonctions et les virgules entre les paramètres peuvent être omises. Bien que leur utilisation doive être déterminée principalement par le langage naturel cible, et non par la syntaxe.
: (1, 2(), 3=).
: 1 2 3=.
: ( 2() ).
: 2().
: (2 ).
À propos des objections
Je prévois des objections fondées à l'utilisation d'un tel langage de la part des programmeurs. N'importe quel programme sur celui-ci se révélera beaucoup plus verbeux que d'utiliser la syntaxe formelle stricte des langages informatiques ordinaires.
Par conséquent, permettez-moi de vous rappeler sa propriété obligatoire - la possibilité de convertir le texte d'un programme d'une langue à une autre. Cela vous permet d'écrire des programmes en utilisant une syntaxe strictement formelle sans utiliser de termes de langage naturel redéfinis, et de convertir le texte source en un langage «naturel» pour un «non-programmeur».