48 votes

Quels langages statiques sont similaires à Python?

Python est la plus belle langue que j'ai connaissons actuellement, mais le typage statique est un gros avantage en raison de l'auto-complétion (même si il y a un support limité pour les langages dynamiques, ce n'est rien par rapport à celle prise en charge en statique). Je suis curieux de savoir s'il y a des langues qui essayez d'ajouter les avantages de Python un langage statiquement typé. En particulier, je suis intéressant dans les langues avec des fonctionnalités telles que:

  • En charge de la syntaxe: comme pour les dictionnaires, les interprétations de la matrice
  • Fonctions: le mot-Clé arguments, fermetures, tuple/plusieurs valeurs de retour
  • Exécution de la modification/création de classes
  • L'évitement de la spécification des classes partout (en Python c'est en raison de duck-typing, bien que l'inférence de type est la meilleure dans un langage statiquement typé)
  • La métaprogrammation support: Ceci est réalisé en Python par la réflexion, les annotations et les metaclasses

Existe-il des langages à typage statique, avec un nombre important de ces fonctionnalités?

36voto

Jørn Schou-Rode Points 19947

Boo est un langage à typage statique pour Common Language Infrastructure (alias la plate-forme Microsoft .NET). La syntaxe est fortement inspirée de Python, et hashes / lists / array font partie de la syntaxe:

 i = 5
if i > 5:
    print "i is greater than 5."
else:
    print "i is less than or equal to 5."

hash = {'a': 1, 'b': 2, 'monkey': 3, 42: 'the answer'}
print hash['a']
print hash[42]

for item in hash:
    print item.Key, '=>', item.Value
 

15voto

Manuel Ceron Points 3568

Cobra est un langage statiquement typé pour le CLR (comme Boo). De sa page Web:

Cobra est un langage de programmation à usage général avec:

  - a clean, high-level syntax
 - static and dynamic binding
 - first class support for unit tests and contracts
 - compiled performance with scripting conveniences
 - lambdas and closures
 - extensions and mixins
 - ...and more
 
 Sample code:

"""
This is a doc string for the whole module.
"""


class Person
    """
    This is a class declaration.
    """

    var _name as String  # declare an object variable. every instance of Person will have a name
    var _age as int

    cue init(name as String, age as int)
        _name = name
        _age = age

    def sayHello
        # This is a method

        # In strings, anything in brackets ([]) is evaluated as an expression,
        # converted to a string and substituted into the string:
        print 'Hello. My name is [_name] and I am [_age].'

    def add(i as int, j as int) as int
        """ Adds the two arguments and returns their sum. """
        return i + j
 

10voto

Norman Ramsey Points 115730

Bien qu'il n'est pas orienté objet, Haskell propose un certain nombre de fonctionnalités qui vous intéressent:

  • En charge de la syntaxe pour les interprétations de la liste, en plus d' do de la notation pour une grande variété de séquençage de fixation des constructions. (En charge de la syntaxe pour les dictionnaires est limitée à des listes de paires e.g,

    dict = ofElements [("Sputnik", 1957), ("Apollo", 1969), ("Challenger", 1988)]
    
  • Les fonctions de soutien fermetures complètes et plusieurs valeurs de retour à l'aide de n-uplet types. Mot-clé arguments ne sont pas pris en charge, mais une fonctionnalité puissante de "implicite" arguments peuvent parfois remplacer.

  • Pas d'exécution de la modification de classes, types ou des objets.

  • L'évitement de specificying les classes/types de partout dans le monde par l'inférence de type.

  • La métaprogrammation en utilisant le Gabarit Haskell.

Aussi, juste pour que vous vous sentirez à la maison, Haskell a d'importantes indentation!

En fait, je pense Haskell a une sensation différente à partir de Python dans l'ensemble, mais c'est principalement en raison de la très puissant système de type statique. Si vous êtes intéressés à essayer un langage statiquement typé, Haskell est l'un des plus ambitieux ceux qui sont là en ce moment.

8voto

Luhmann Points 3274

Il peut ne pas correspondre à tous vos besoins, mais jetez un oeil à Boo - La wristfriendly langue de l'interface CLI

Si vous le faites, je vous recommande vivement DSLs à Boo: les Langages Spécifiques au Domaine en .NET qui, en dehors de la DSL aspects, couvre Boo syntaxe dans une très belle annexe et beaucoup de méta-programmation.

En outre, les tutoriels sont une grande ressource.

5voto

dzen Points 2623

essayez le langage de programmation Go? J'ai vu un paradigme similaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X