2009-02-16 6 views
12

Je suis sur le point de démarrer une distribution linux basée sur LFS juste pour un projet hobby. Je prévois de faire des tâches très inhabituelles, et la plupart impliqueront la modification de presque tous les scripts de la distribution. (principalement des scripts d'initialisation, mais aussi j'écrirai un simple ensemble de scripts de gestionnaire de paquets.) Puisque je vais aller si loin de la norme, et puisque je n'ai jamais été fan des langages dynamiques (perl, python, bash et le reste sont bons, mais pas mon fort), je me demandais si quelqu'un connaissait un langage interprété qui a effectivement déclaré des variables.Quelqu'un connaît-il des langages de script statiquement typés?

+0

Python est fortement typé. Pas dynamique. Vous ne pouvez pas ajouter un nombre et une chaîne en mode silencieux sans conversion explicite. – George

+2

@gdivos: Python est fortement typé * et * dynamique.Il est dynamique car vous pouvez essayer d'appeler n'importe quelle fonction avec n'importe quel type d'argument, et un type de paramètre non concordant ne sera pas détecté avant l'exécution. Un langage statique détecterait ce problème au moment de la compilation (ou au moins avant l'exécution). –

+1

Il n'existe pas de langage interprété. Chaque langue peut être implémentée par un compilateur ou un interpréteur. Et, en fait, la grande majorité des langages de programmation ont au moins une implémentation de chacun. En outre, la plupart des implémentations de langage moderne ont à la fois un compilateur et un interpréteur. Puisque vous mentionnez Haskell: Hugs est un interpréteur Haskell. V8 est un compilateur JavaScript. Microsoft PowerShell est un compilateur. Il y a quelques années, les développeurs de Bash envisageaient de passer à une implémentation compilée. La JVM HotSpot est à la fois un interpréteur et un compilateur. –

Répondre

0

Regardez dans la commande "typeset" dans votre shell préféré. bash et ksh93 peuvent tous deux appliquer des entiers et des chaînes, utiliser des références (variables variables), etc. Avec ksh93, vous pouvez aussi faire des calculs en virgule flottante et utiliser des objets avec des attributs. Le typage statique ne vous achète pas vraiment quelque chose d'utile dans les scripts init et similaires. Vous allez principalement lire des fichiers et exécuter des commandes du système - ce qui est très bon pour le shell. Prenez le temps avec le livre O'Reilly "learning the Korn Shell" avant de décider que tous ces autres Unix sont bêtement conçus ...;)

+0

et "set -o nounset" au début du script ... – dannysauer

+0

Ceci est une suggestion terrible. Si l'OP n'a pas de langage dynamique, il va * détester * les scripts shell. Ils sont beaucoup plus dynamiques que n'importe quel autre langage de script. –

+1

Cette réponse fournit une suggestion pour appliquer des types dans une langue que l'OP connaît déjà et dans laquelle les scripts d'initialisation sont probablement déjà écrits. Je suppose que j'aurais plus de votes si je venais de dire "c'est impossible" ou "ici, utilisez ce langage que trois personnes ont entendu parler", :) – dannysauer

1

F# offre une combinaison de «type de sécurité, de concision, de performance, d'expression et de script».

+0

F # n'est pas un langage de script. – shoosh

+3

Qu'est-ce qui définit un langage de script? Une syntaxe légère? Un REPL? F # a ces ... – Brian

+0

étant interprété plutôt que compilé. – shoosh

6

Généralement, les langues typées statiquement sont des langues compilées. Je suppose que la raison en est que l'analyse statique des types est plutôt coûteuse et que vous devez examiner en profondeur tout le code que vous traitez. Une fois que vous avez fait cela, c'est comme perdre de ne pas écrire toutes ces informations dans un fichier, de sorte que vous n'avez pas à le faire à nouveau la prochaine fois. Donc, vous vous retrouvez rapidement avec un langage compilé. Par contre, transformer un langage compilé en un langage "non compilé" est plutôt facile. Vous ne stockez simplement les résultats de la compilation nulle part mais les exécutez directement. Un compilateur que je connais qui fournit un tel wrapper est GHC, le compilateur standard Haskell. Vous pouvez ajouter #!/usr/bin/runhaskell à vos fichiers source, puis les exécuter directement. Et puisque vous prévoyez d'être loin de la norme, Haskell semble être un ajustement parfait;). Mais attendez-vous à un temps de démarrage assez important pour vos scripts, car toute l'analyse et l'optimisation de "compilation" ne sont pas gratuites. Haskell n'est pas fait pour les scripts shell et c'est un langage fonctionnel, donc si vous ne l'avez jamais vu auparavant, cela pourrait prendre un certain temps pour s'y habituer. Mais il a très peu de surcharge syntaxique et la force des langages fonctionnels est l'abstraction, donc je ne vois pas pourquoi vous ne pourriez pas créer une bibliothèque qui rende les scripts de shell amusants. Il y a même quelques experimental Haskell shell, mais il semble que ce soit plus une preuve de concept qu'une vraie solution. En général, je dirais que la surcharge de toute l'analyse de type est significative, mais je vous suggère de choisir votre langage compilé statiquement typé préféré et chercher un wrapper comme runhaskell pour exécuter des scripts écrits dedans.

+7

Il n'existe pas de * langage compilé *. Chaque langue peut être implémentée par un compilateur ou un interpréteur. Et, en fait, la grande majorité des langages de programmation ont au moins une implémentation de chacun. En outre, la plupart des implémentations de langage modernes ont en fait * un * compilateur * et * un interpréteur. Puisque vous mentionnez Haskell: Hugs est un interpréteur Haskell. V8 est un compilateur JavaScript. Microsoft PowerShell est un compilateur. Il y a quelques années, les développeurs de Bash envisageaient de passer à une implémentation compilée. La JVM HotSpot est à la fois un interpréteur et un compilateur –

1

Groovy. Par défaut, il est dynamique, dactylographié. Mais prend également en charge le typage statique.

Questions connexes