2010-08-18 19 views
4

Existe-t-il des langages avec vérification de type statique comme en C++ avec une syntaxe moderne comme en Python, et sans GIL? Je crois, Python 3 avec la capacité de déclarer explicitement le type de chaque variable serait «presque là», mais GIL me rend triste. Java est sympa, mais j'ai besoin de quelque chose de plus "intégrable" sans encombrement JRE.Recherche d'une langue forte/explicite sans GIL

Mise à jour: Tout ce qui est lié à .NET ou non-open est un no-go.

Mise à jour2: J'ai besoin d'un typage explicite + fort pour écrire du code plus sûr au détriment de la vitesse de développement. GIL est important car le code va être très étendu et fonctionnera sur des serveurs multicœurs, il doit donc utiliser efficacement plusieurs processeurs.

Update3: plate-forme cible est Linux (Debian) sur x86

+2

Pourquoi la «vérification de type statique» est-elle si importante? Quel problème avez-vous qui est réellement résolu par ceci? Pouvez-vous être précis sur les problèmes que vous rencontrez? Python est très, très fortement typé et les types font explicitement partie de chaque objet. Il n'y a pas de capacité de conversion et pas de flou sur le type d'un objet. –

+1

Le manque de typage statique fait partie de la force de Python. De plus, le GIL est dans 99% des cas le moins préoccupant. +1 sinon, j'adorerais utiliser un langage qui n'a pas de syntaxe désagréable '{}' et ';', ceux-ci sont à peine nécessaires pour une langue moderne. –

+0

@ S.Lott: Il a dit statiquement typé, pas fortement typé. –

Répondre

2

Je pense que GO serait répondre à vos besoins.

Ceci est mon sentiment personnel, mais go code ressemble beaucoup au code python.

Il a encore une approche de compilation classique mais google développera certainement un interprète.

google Sur le site:

Go est un langage universel conçu avec la programmation des systèmes esprit. Il est fortement typé et garbage-recueillies et a soutien explicite pour la programmation concurrente. Les programmes sont construits à partir de packages , dont les propriétés permettent une gestion efficace des dépendances. Les implémentations existantes utilisent un modèle de compilation/liaison classique pour générer des fichiers binaires exécutables.

+0

GO est expérimental, il pourrait être tué comme Google Wave. En outre, il manque le support de Windows qui est essentiel car le développement est principalement sur la plate-forme Windows. – BarsMonster

+0

il y a un projet de port pour windows http://code.google.com/p/go-windows/ – bua

4

Boo

Boo est un objet orienté, statiquement langage de programmation typé qui cherche à utiliser le soutien de la Common Language infrastructure pour l'internationalisation Unicode, et web applications, tout en en utilisant une syntaxe inspirée de Python et un spécial accent sur la langue et compilateur extensibilité. Certaines fonctionnalités de la note comprennent l'inférence de type, les générateurs, les méthodes multimodes, le type de canard optionnel, les macros , les vraies fermetures, la correction, et les fonctions de première classe . Boo a été développé activement depuis 2003.

cython

Cython est une langue qui fait l'écriture des extensions C pour le langage Python aussi facile que Python lui-même. Cython est basé sur le très connu Pyrex, mais prend en charge plus de fonctionnalités de pointe et optimisations .

La langue Cython est très proche de le langage Python, mais Cython supporte en outre appeler C fonctions et déclarant les types C sur variables et les attributs de classe. Cette permet au compilateur de générer très du code C efficace à partir du code Cython.

+0

+1 Je voulais aussi recommander Boo. Il ressemble à Python et a incroyablement de nombreuses fonctionnalités, y compris la syntaxe extensible. Il utilise un VM, et c'est ".NET", mais c'est un logiciel libre. – Eike

+0

Je ne peux pas verrouiller sur Windows, et je ne suis pas prêt à compter sur mono. – BarsMonster

4

Tout ce qui fait partie de la famille ML peut fonctionner pour vous. Ocaml est un bon endroit pour commencer, mais il a un GC stop-the-world dernier que j'ai regardé. Haskell est célèbre en tant que laboratoire pour les modèles de concurrence innovants. Les compréhensions de Python provenaient de Haskell, où elles constituent une syntaxe pratique pour certaines idées très fondamentales. Et Erlang est fortement dynamiquement typé, amusant à écrire, et fait mieux la concurrence que n'importe qui d'autre.

+0

+1 pour ML/Haskell, si la concurrence est si importante, mieux vaut utiliser un langage fonctionnel. Et leurs systèmes de types sont aussi statiques/forts que possible, mais en même temps extrêmement expressifs. – delnan

+0

OCaml a un GIL. – bfontaine

2

Après avoir lu votre spec mise à jour:

J'ai besoin taper explicite + fort pour écrire un code plus sûr au détriment de la vitesse de développement. GIL est important que le code va être assez vaste calcul et sera fonctionner sur des serveurs multi-cœurs, il doit utiliser efficacement plusieurs CPU

Que signifie exactement « calcul étendue » signifie? Quel domaine de problème? Que font les autres personnes travaillant dans ce domaine? Si vous êtes sérieux avec cette spécification, vous ne pouvez pas faire beaucoup d'autres choses que d'utiliser C++ en relation avec des bibliothèques bien testées pour le multithreading et l'informatique numérique.

mon 0,02 $

RBO

+0

Ceci est une application client-serveur avec 1000s de clients, où je vais avoir une partie du code de logique métier partagée entre le client et le serveur. Tout cela devrait pouvoir être mis à jour à la volée. Les performances sont critiques principalement du côté serveur. Je ne peux pas livrer et/ou mettre à jour les binaires C++ à la volée ou les compiler à partir de la source sur les clients. Mais livrer le module de bytecode mis à jour et le remplacer à la volée est ce dont j'ai besoin. – BarsMonster

+0

Python avec multi-traitement? De toute façon, vous ne devriez pas effectuer d'E/S lourdes dans un seul processus, il y a des goulots d'étranglement dans le système d'exploitation que vous ne pouvez pas prendre en compte en les insérant dans l'espace utilisateur. –

3

Ada est un fortement typé, compilé langue avec un moderne, facile à lire la syntaxe et une fiabilité éprouvée pour l'informatique multi-cœurs. Ada a été conçu pour être utilisé dans de grands systèmes critiques en temps réel où le logiciel DOIT fonctionner à tout prix. «Ada prend en charge les contrôles d'exécution pour protéger contre l'accès à la mémoire non allouée, les erreurs de débordement de tampon, les erreurs in-one, les erreurs d'accès au tableau et autres bogues détectables. , mais peut également être compilé efficacement, il comprend également des installations pour faciliter la vérification des programmes, ce qui explique pourquoi Ada est largement utilisée dans les systèmes critiques, où toute anomalie peut entraîner des conséquences très graves, par exemple des morts ou des blessures accidentelles. Ada est utilisé comprennent l'avionique, les systèmes d'armes (y compris les armes thermonucléaires), et les engins spatiaux. " (citation de l'article Wikipedia ci-dessus).

Ada est disponible gratuitement dans le cadre de GCC/GNAT et devrait être facile à installer sur Debian.Vous pouvez également trouver des compilateurs et des bibliothèques à jour (à la fois sous licence GPL et sous licence GPL) à http://libre.adacore.com/libre/

Ada peut être compilé en Java bytecode pour être utilisé dans une JVM ou compilé en binaire utilisation métallique ou incorporée.