Je cherchais un langage de programmation pratique qui n'a pas de mots clés réservés mais je n'ai pas eu de chance d'en trouver un.
Je travaille sur un langage de programmation pour ma propre édification et divertissement et je n'ai pas encore eu besoin d'inclure de mots-clés, c'est ce qui m'a conduit à ma recherche et à la question:
Je ne pense pas que la commodité de l'auteur du compilateur soit importante pour l'utilisateur final de la langue. Les ordinateurs sont suffisamment puissants de nos jours pour pouvoir déduire des significations à partir du contexte. Pas plus qu'un écrivain n'a besoin d'étiqueter des noms, des verbes et autres lors de l'écriture d'un roman, pourquoi un programmeur devrait-il étiqueter des fonctions et des variables avec function x() {}
ou set x = 1
ou var x = 1
etc; quand je peux déduire du contexte des instructions qu'il s'agit d'une déclaration de fonction ou d'une invocation ou qu'une étiquette est une affectation à une valeur ou une référence à cette valeur d'étiquettes?
Voici un exemple concret de ce que fait mon analyseur actuel, pas besoin de mots-clés réservés pour supporter des choses courantes qui auraient normalement un tas de bruit comme func
ou function
ou dec
ou quoi.
Déclaration de fonction
sum3(a,b,c) -> a + b + c.
Invocation de fonction
x = sum3(1,2,3).
Fonction anonyme nommée x
x = (a,b,c) -> a + b + c.
y = x(1,2,3).
J'aimerais savoir pourquoi les mots clés sont si importants pour un langage de programmation réussi?
Réponses:
MUMPS a beaucoup de succès, est largement utilisé dans les assurances et les soins de santé et n'a pas de mots réservés. Je dirais qu'ils aident à écrire un code plus clair, mais ils ne sont pas strictement nécessaires. APL est un autre exemple. APL voit l'utilisation de scripts uniques dans l'industrie nucléaire, entre autres. J , membre de la famille APL manque également de mots clés.
Les mots clés aident les rédacteurs du compilateur à implémenter l'analyse plus facilement. APL est réputé associatif de droite. Ils aident également à renforcer les conventions et à améliorer la lisibilité. APL n'est pas connu pour être extrêmement lisible par la plupart.
la source
Un langage bien connu sans mots-clés est Lisp. Ce qui se rapproche le plus des mots-clés est ce qu'on appelle des formulaires spéciaux - leur nombre peut varier selon les dialectes - qui reçoivent un traitement spécial de l'interprète. En dehors de cela, ils ne se distinguent pas des fonctions normales en termes de la façon dont ils sont utilisés, à l'exception qu'ils ne peuvent pas être redéfinis (au moins en Lisps que je connais).
Cela se traduit par une syntaxe simple (mais lourde de paren), et est l'une des choses qui a permis à Lisp d'avoir un système de macro si puissant. D'un autre côté, Lisp est souvent considéré comme difficile à lire. APL et MUMPS, encore plus, j'ai vu les deux décrits comme à mi-chemin de Brainf * ck. Les mots-clés aident dans ce département et facilitent également la lecture du code pour nous les humains.
Je ne dirais donc pas que les mots clés sont nécessaires pour une langue réussie, mais ils aident certainement une langue à réussir.
la source
if
en C serait un identifiant valide s'il n'était pas défini comme spécial (un mot-clé). Cela signifie que ceif
n'est pas un identifiant etif = 10
donne une erreur de syntaxe. Si je ne me trompe pas, la syntaxe minimale de Lisp ne distingue pasdefun
def
,x
,y
et+
dans(defun f (x y) (+ x y))
.if
est notamment un nom de variable valide dans Common Lisp (et d'autres Lisp-2)(defparameter if nil)
ne cassera rien et il peut être utilisé sous des formes telles que(unless if (setf if t))
(defun if ...)
échouera. Prise en compte des commentaires et modification de la réponse. Je peux convenir que les formulaires spéciaux ne sont pas des mots-clés au même niveau qu'en C par exemple, ils sont toujours la chose la plus proche de Lisp.TCL n'a pas de mots clés, et en fait seulement 12 règles de syntaxe. bien que ce ne soit pas aussi populaire qu'autrefois, il a sa niche avec attente et intégré dans ECAD et les routeurs, donc cela compte certainement comme pratique à mon avis.
Je pense aussi que cela peut montrer pourquoi beaucoup de langues ne suivent pas cette voie. Oui, il est parfaitement possible d'écrire un analyseur TCL (sans doute plus facile que de nombreuses autres langues), mais vous ne pouvez pas écrire une grammaire BNF très utile pour la langue et beaucoup de gens semblent avoir du mal à apprendre la langue. Je soupçonne que c'est au moins en partie à cause du manque de mots clés.
la source
Est-ce à dire que vous voulez une grammaire qui n'est pas sans contexte? Bonne chance.
Il ne s'agit pas d'être puissant ou non. Il y a des règles éternelles et immuables sur les langues - mathématiques. Ceci, et le fait qu'un langage de programmation doit être syntaxiquement facile fera que les CFG règneront pour quelques décennies à venir.
Btw., Dans Haskell comme la syntaxe, vous écrivez juste quelque chose comme
pour définir une fonction. Mais notez que le "mot-clé" dans ce cas est le '='. Si vous le manquez, des choses terribles se produiront dans l'analyseur.
Mais c'est un point où je suis d'accord avec vous, je trouve cela beaucoup plus intuitif que tous les mots-clés def, dcl, fun, fn, function ou autre qui introduisent des fonctions dans d'autres langues.
Pourtant, cette grammaire peut être écrite en clair et ancien LALR (1), aucune signification n'est "déduite du contexte" ici.
la source
{ int x = 0; x = "HELLO"; }
devrait produire un arbre d'analyse mais lorsque le compilateur recherche x dans la deuxième affectation, il voit qu'il a été déclaré en tant qu'int et émet une erreur de type. Le programme est donc rejeté même si sa structure CF est correcte.Pour autant que je sache, Smalltalk est la langue qui a le moins de mots-clés (si je ne compte pas les langues comme Brainfuck). Mots - clés sont Smalltalk
true
,false
,nil
,self
,super
etthisContext
.J'ai conçu un langage, inspiré de smalltalk, qui n'avait pas de mots-clés. Mais après un certain temps d'utilisation, j'ai fini par ajouter quelques mots clés, principalement pour le sucre syntaxique.
Donc, mon avis est que la langue sans mots-clés est possible, mais ce n'est pas très pratique et c'est la raison pour laquelle toutes les langues populaires ont des mots-clés.
la source
true
,false
etnil
pourrait être défini comme des méthodes sur ce récepteur implicite, et, compte tenu des capacités de réflexion, les trois autres probablement aussi.true
,false
etnil
sont des valeurs bien connues fournies par l'environnement etself
,super
etthisContext
sont des variables que vous ne pouvez pas définir mais dont les valeurs changent à la suite de l'exécution.Vous semblez travailler sous une fausse hypothèse, que les mots clés sont là pour faciliter les choses pour le compilateur. Bien qu'ils facilitent les choses pour le compilateur, ils ont un avantage beaucoup plus important: ils facilitent les choses pour la personne qui lit le code .
Oui, vous pouvez regarder un tas de contexte et comprendre que vous regardez une déclaration de fonction ou une déclaration de variable, mais selon le contexte et la complexité du code impliqué, cela pourrait prendre beaucoup de temps à comprendre . Ou, vous pourriez avoir un mot-clé pratique comme fonction ou var , et vous savez immédiatement ce que vous regardez.
Oui, ils compliquent le code écrire , mais étant donné que les programmes passent beaucoup plus de temps à la maintenance qu'à la production, et que leur code est lu, débogué et maintenu beaucoup plus qu'il n'a été créé, en essayant de concevoir votre langage pour rendre facile à écrire au lieu de facile à lire est un cas classique d'optimisation prématurée nuisible.
Aussi, ne dédaignez pas les concepts qui facilitent le travail du compilateur. Plus il est facile d'analyser, plus votre code sera compilé rapidement, ce qui signifie que les cycles d'édition-construction-débogage s'accélèrent, ce qui signifie que votre productivité augmente.
Lorsque vous avez une base de code volumineuse et complexe, cela peut représenter une différence non négligeable de productivité. Par exemple, là où je travaille, nous avons un programme à l'œuvre qui représente environ 4 millions de lignes de Delphi. Nous avons un autre module d'environ 300 000 lignes de C ++. Ils prennent tous deux à peu près la même durée de compilation. (Environ 3 minutes.) Si nous avions 4 millions de lignes de C ++, la construction pourrait prendre une heure!
la source
Il existe de rares exemples.
APL n'utilise que des symboles - mais beaucoup d'entre eux! Vous avez besoin d'un clavier spécial pour utiliser la langue.
Voir cet article wikipedia
CORAL 66 - avait des mots clés mais ne les reconnaissait que s'ils étaient cités avec des guillemets simples.
PL / 1 avait également des mots clés - mais vous pouvez également les utiliser comme noms de variables ou de procédures.
Dans l'ensemble, votre question revient un peu à demander "pourquoi les langues parlées ont-elles des mots?".
la source
La raison principale est qu'il est plus facile pour les humains et les ordinateurs d'analyser. Désambiguïser un langage complexe sans mots-clés nécessiterait de nombreux symboles comme syntaxe, et cela serait source de confusion massive et inutile. C'est beaucoup plus facile à lire
function
que$!{}
. Et le contexte ne résout pas toutes les ambiguïtés.la source