web-dev-qa-db-fra.com

Quel est le but de Scala Langue de programmation?

C'est mon avis que chaque langue a été créée dans un but spécifique. Quel était Scala Créé-t-il et quels problèmes résolvent-il le mieux?

40
user68109

Une des choses mentionnées dans Tanks by Martin Odersky sur Scala est-ce une langue qui s'attaque à divers problèmes. Il ne parlait pas de l'échelle dans le Sens de la performance, mais dans le sens où le la langue elle-même peut semble à expansion via des bibliothèques. Pour que:

val lock = new ReentrantReadWriteLock
lock withReadLock {
   //do stuff
}

On dirait qu'il y a du sucre syntaxique spécial pour traiter j.u.c serrures. Mais ce n'est pas le cas, il suffit d'utiliser le scala Language de telle manière que cela apparaît Pour être. Le code est plus lisible, n'est-ce pas?

En particulier, les différentes règles d'analyse du scala Language facilitent la création de bibliothèques qui ressemblent à une langue (ou à une DSL) spécifique au domaine. Regardez Scala-Test par exemple:

describe("MyCoolClass") { 
  it("should do cool stuff") {
     val c = new MyCoolClass
     c.prop should be ("cool")
  }
} 

(Il y a beaucoup plus d'exemples de cela - j'ai découvert celui-ci hier). Il y a beaucoup de discussions sur les nouvelles fonctionnalités dans le Java Langue dans JDK7 ( Connecte de projet ). Beaucoup de ces fonctionnalités sont du sucre syntaxique spécial pour traiter certaines Numéro. Scala a été conçu avec des règles simples qui signifient de nouveaux mots-clés pour chaque peu de contrariété ne sont pas nécessaires.

16
oxbow_lakes

Un autre objectif de Scala= était de combler le fossé entre fonctionnel et orienté langues. Il contient de nombreuses constructions inspirées (c'est-à-dire copie de!) Langues fonctionnelles. Je suis une chose de l'incroyablement puissant assortie de motif , le Cadre de concurrence basé sur l'acteur et (bien sûr) fonctions de premier ordre et d'ordre supérieur.

Bien sûr, votre question a dit qu'il y avait un but spécifique et je viens de donner 3 raisons distinctes; Vous devrez probablement demander à Martin Odersky!

13
oxbow_lakes

D'accord avec les réponses précédentes, mais recommandez l'introduction à ne vue d'ensemble du langage de programmation Scala :

Le travail sur Scala découle d'un effort de recherche visant à développer une meilleure prise en charge des langues pour le logiciel composant. Il y a deux hypothèses que nous aimerions valider avec l'expérience Scala. Premièrement, nous postulons qu'un langage de programmation pour le logiciel de composant doit être évolutif en ce sens que les mêmes concepts peuvent décrire de petites parties aussi bien que de grandes parties. Par conséquent, nous nous concentrons sur des mécanismes d'abstraction, de composition et de décomposition plutôt que d'ajouter un ensemble important de primitives qui pourraient être utiles pour les composants à un niveau d'échelle, mais pas à d'autres niveaux. Deuxièmement, nous posturons que la prise en charge évolutive des composants peut être fournie par un langage de programmation qui génère et généralisce la programmation orientée objet et fonctionnelle. Pour des langues typées statiquement, dont Scala est une instance, ces deux paradigmes étaient jusqu'à présent largement séparés. (Odersky)

Je qualifierais personnellement Scala à côté de Python en termes de problèmes qu'il résout et comment. La différence remarquable et la plainte occasionnelle est la complexité de type. Je pense que les abstractions de Scala sont compliquées et sont parfois apparemment convoluées mais pour quelques points:

  1. Ils sont également surtout facultatifs.
  2. Le compilateur de Scala est comme des tests et une documentation gratuits en tant que complexité cyclomatique et lignes de code escalade.
  3. Lorsqu'il est clairement mis en œuvre Scala peut effectuer des opérations autrement toutes mais impossibles derrière des API cohérentes et cohérentes. De - Collections SCALA 2.8 :

Par exemple, une chaîne (ou plutôt: sa classe de support) peut être considérée comme une séquence de caractères, mais ce n'est pas un type de collecte générique. Néanmoins, cartographier un caractère à la carte de caractère sur une riche riche devrait donner à nouveau un riche riche, comme dans l'interaction suivante avec la Scala RÉPP:

scala> "abc" map (x => (x + 1).toChar)
res1: scala.runtime.RichString = bcd

Mais que se passe-t-il si on applique une fonction de caractère à une chaîne? Dans ce cas, nous ne pouvons pas produire de chaîne en conséquence, il doit s'agir d'une séquence d'éléments int. En effet, on obtient:

"abc" map (x => (x + 1))
res2: scala.collection.immutable.Vector[Int] = Vector(98, 99, 100)

Donc, il s'avère que la carte donne différents types en fonction de ce que le type de résultat de l'argument de fonction réussi est! (Odersky)

7
Texas

Un autre des objectifs de conception originaux était bien sûr de créer une langue qui fonctionne sur la machine virtuelle Java et est entièrement interopérable avec des classes Java. Cela a (au moins) deux avantages:

  • vous pouvez profiter de l'ubiquité, de la stabilité, des caractéristiques et de la réputation de la JVM. (Think Management Extensions, compilation JIT, collection avancée des ordures, etc.
  • vous pouvez toujours utiliser toutes vos bibliothèques préférées JavaScala _ commercialement dans de nombreux cas (la mienne par exemple).
7
oxbow_lakes