Hello everyone,

I don't know if there are French speakers lurking on this group, but
I'd really appreciate if somebody could make sure that my translation
of the Clojure rationale is accurate and typo-free.

Clojure
=======

Clients et investisseurs ont des investissements substantiels dans les
plate-formes standards utilisées en industrie, telles que la JVM, et
sont
confortables avec leur performance, leur stabilité et leur sécurité.
Même
s'ils envient la brièveté, la flexibilité et la productivité des
langages
dynamiques, les programmeurs Java ont des soucis de compatibilité avec
l'infrastructure des clients, d'accès aux bibliothèques et modules
déjà
existants et de performance avec lesquels ils doivent composer.  De
plus, ils
font face chaque jour à des problèmes en lien à la concurrence dûs à
l'utilisation de threads et de verrous.  Clojure est un effort pour
créer un
langage dynamique et pragmatique dans ce contexte.  Il vise à être un
langage
à usage général qui est adapté à toutes les tâches pour lesquelles
Java est
utilisé.  Il reflète également la réalité que, dans un contexte de
programmation concurrente, la mutation omniprésente et incontrôlée des
valeurs
doit être éliminée.

Clojure atteint ses buts en se jumelant à une plate-forme utilisée en
industrie, la JVM; en modernisant un langage vénérable, Lisp; en
encourageant
la programmation fonctionnelle via des structures de données immuables
et
persistantes; et en offrant un support de première classe pour la
concurrence
via un système de mémoire transactionnelle (software transactional
memory, STM)
et des agents asynchrones.  Le résultat est un langage robuste,
pratique et
rapide.

Pourquoi Clojure?
-----------------

Pourquoi ai-je écrit un nouveau langage de programmation?  Parce que
je
voulais:

* Un Lisp
* Adapté à la programmation fonctionnelle
* En symbiose avec une plate-forme établie
* Créé pour la concurrence

Et je n'en trouvais aucun.  Voici un aperçu de quelques unes des idées
derrière Clojure.

Lisp est une bonne chose
------------------------

- Souvent émulé et pillé, jamais dupliqué
- Le calcul lambda produit un noyau très petit
- Presque pas de syntaxe
- Les avantages principaux sont encore que le code est du data et les
  abstractions syntaxiques
- Pourquoi pas un Lisp standardisé?
    - Innovation lente ou inexistante suite à la standardisation
    - Les structures de données fondamentales sont modifiables et
      non-extensibles.
    - La concurrence n'est pas adressée dans les spécifications
    - De bonnes implémentations existent déjà pour la JVM (ABCL, Kawa,
SISC)
    - Les Lisps standards sont leur propre plate-forme
- Clojure est un Lisp qui n'est pas contraint par la rétro-
compatibilité
    - Étend le paradigme de code-is-data aux vecteurs et aux maps
    - Les structures de données fondamentales sont immuables
    - Les structures de données fondamentales sont des abstractions
      extensibles
    - Adopte une plate-forme existante (JVM)


La programmation fonctionnelle est une bonne chose
--------------------------------------------------

- Données immuables et fonctions de premier ordre
- La programmation fonctionnelle est possible dans Lisp, mais par
convention
  et discipline
    - Si une structure de données est modifiable, il est dangereux de
présumer
      qu'elle ne le sera pas
    - Dans les Lisps traditionnels, seule la liste est
structurellement
      récursive
- Les langages de programmation fonctionnelle purs sont habituellement
typés
  statiquement
    - Pas idéal pour tout le monde ou dans tous les cas
- Clojure est un langage fonctionnel avec une emphase sur le dynamisme
    - Toutes les structures de données sont immuables, persistantes et
sont
      structurellement récursives
    - Collections et types de retour hétérogènes
    - Polymorphisme dynamique


Langages et plate-formes
------------------------

- Les machines virtuelles, pas les systèmes d'exploitation, sont les
  plate-formes du futur.  Elles offrent:
    - Des systèmes de types
    - Des bibliothèques
        - Abstraites du systèmes d'exploitation
        - *Énorme* ensemble d'accessoires
        - Bibliothèques standards et externes
    - La gestion de la mémoire et d'autres ressources
        - Un ramasse-miettes est un accessoire de la plate-forme, pas
du
          langage
    - Bytecode et compilation JIT
        - Abstraits du matériel de l'ordinateur
- Langage en tant que plate-forme vs. langage + plate-forme
    - Ancienne méthode: chaque langage défini son propre support
d'exécution
        - Ramasse-miette, bytecode, systèmes de types, bibliothèques,
etc.
    - Nouvelle façon (JVM, .NET)
        - Le support d'exécution est indépendant du langage
- Langage construit pour une plate-forme vs. langage porté à une plate-
forme
    - Bon nombre de nouveaux langages adoptent la philosophie "le
langage est
      la plate-forme"
    - Quand ils sont portés vers une autre plate-forme, ils ont des
problèmes
      de compatibilité
        - Différents modèles de gestion de mémoire, de système de
type, de
          concurrence, etc.
        - Duplication des bibliothèques
        - Si le langage est originalement écrit en C, les
bibliothèques
          écrites en C ne sont plus disponibles
- La plate-forme est décrétée par le client
    - "Doit fonctionner avec Java ou .NET" vs. "Doit fonctionner sous
Unix ou
      Windows"
    - La JVM a une longue histoire d'utilisation et un niveau de
confiance en industrie
        - Et maintenant, son code source est ouvert
    - L'interopérabilité avec d'autre code est requise de nos jours
        - Pouvoir appeler du C n'est plus suffisant
- Java/JVM *est* le langage et la plate-forme
    - D'autres langages pour la JVM ont longtemps existé et ont
maintenant
      l'appui de Sun
    - Java peut être fastidieux et insuffisamment expressif
        - Absence de fonctions de premier ordre, pas d'inférence de
types,
        etc.
    - La capacité de pouvoir appeler Java est critique
- Clojure est le langage, la JVM est la plate-forme


La programmation orientée-objet est surestimée
----------------------------------------------

- Créée pour la simulation, elle est maintenant utilisée partout, même
lorsque
  que c'est inapproprié
    - Encouragée par Java et C# dans toutes les situations dû à
l'absence de
      support idiomatique pour tout autre paradigme
- Les objets modifiables sont le nouveau code spaghetti
    - Il est difficile de raisonner à leur sujet, de les comprendre et
de les
      tester
    - Ils sont un désastre pour la programmation concurrentielle
- L'héritage n'est *pas* la seule façon de faire du polymorphisme
- "Il est préférable d'avoir 100 fonctions qui opèrent sur une
structure de
  données que d'avoir 10 fonctions qui opèrent sur 10 structures de
données" -
  Alan J. Perlis
- Les structures de données de Clojure sont des objets immuables,
représentés
  par des interfaces.  Autrement, Clojure n'offre pas de système de
classes.
- Clojure possède un grand nombre de fonctions pour un petit nombre de
  structures de données primaires (seq, map, vecteur, ensemble)
- Écrivez du Java en Java et utilisez le à partir de Clojure

Le polymorphisme est une bonne chose
------------------------------------

- `switch`, la correspondance structurelle, etc. produisent des
systèmes
  fragiles
- Le polymorphisme produit des systèmes extensibles et flexibles
- Les multi-méthodes de Clojure découplent le polymorphisme de la
  programmation orientée-objet et des types
    - Support pour plusieurs taxonomies
    - La répartition se fait via des propriétés statiques, dynamiques
ou
      externes, via du méta-data, etc.

La concurrence et le future multi-coeur
---------------------------------------

- L'immuabilité élimine beaucoup de problèmes
    - Partage entre les threads
- Mais des états changeants sont une réalité pour certains types de
programmes
- Le verrouillage manuel est trop difficile à faire correctement
- Le système de mémoire transactionnelle et le système d'agents de
Clojure
  s'occupent du travail difficile


Pour plus d'informations sur Clojure, visitez le site web officiel:
http://clojure.org

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to