Citrine (langage de programmation) - Citrine (programming language)

Citrine
Langage de programmation Citrine logo.png
Paradigme Orienté objet , basé sur des prototypes
Conçu par Gabor de Mooij, Aavesh Jilani
Développeur Gabor de Mooij, Aavesh Jilani
Première apparition 2014
Version stable
0.9.2 / 2020 ; il y a 1 an ( 2020 )
Discipline de frappe dynamique
Système d'exploitation Multiplateforme (multiplateforme)
Licence BSD
Extensions de nom de fichier ctr
Site Internet citrine-lang .org
Les principales mises en œuvre
C
Influencé par
Smalltalk Self

Citrine est un langage de programmation à usage général pour les systèmes d'exploitation multi-plateformes (multi-plateformes) . Il met l'accent sur la lisibilité et la maintenabilité. La lisibilité est obtenue par un minimalisme syntaxique et conceptuel. Le langage est fortement inspiré par Smalltalk et Self mais présente des caractéristiques très distinctives. Comme Smalltalk, Citrine traite tout comme un objet et se concentre sur l'envoi de messages à ces objets. Cependant, contrairement à Smalltalk, Citrine n'a pas le concept de classe. À cet égard, Citrine ressemble plus à Self et JavaScript car il utilise des prototypes . La combinaison de messages de type Smalltalk et de prototypes est ce qui rend Citrine unique.

À partir de la version 0.7, Citrine s'est concentré sur la prise en charge des langues humaines natives au lieu de simplement l'anglais pour aider les gens à réduire le nombre de bogues en raison de la confusion et des malentendus dus aux barrières linguistiques. En tant que tel, Citrine 0.7 et versions ultérieures disposent d'un traducteur pour traduire entre les langues humaines.

Syntaxe

Citrine a une syntaxe très limitée et est très étroitement liée à Smalltalk. Tout dans Citrine est un objet , il y a 5 littéraux :

  • Nil
  • True, False
  • 0,1,2,3
  • 'String'
  • { ...params.. ...block of code... }

Le littéral du bloc de code utilise un tube symbole pour séparer les paramètres de la logique « | », s'il n'y a pas de paramètres, la barre oblique inverse doit être utilisé au lieu de « \ ».

Citrine ne prend en charge que les commentaires en ligne complète, les commentaires commencent par un '#'.

Un programme Citrine est essentiellement une séquence de messages envoyés à des objets. Par exemple, pour déterminer si 5 est un nombre pair, le message « pair ? » est envoyé au numéro 5.

5 even?

C'est ce qu'on appelle un message unaire car il ne prend aucun argument. Un message binaire est toujours un seul caractère UTF-8 ; cela diffère de Smalltalk, où il existe un ensemble fixe de messages binaires. Voici un exemple:

6 + 7.

Ici, un message binaire '+' est envoyé au numéro 6, l'argument de ce message binaire est '7', cela se traduira par un nouvel objet nombre '13'. L'affectation du résultat de cette opération à une variable utilise l'opérateur d'affectation : :=.

total := money + debt.

Notez également que chaque ligne d'un programme Citrine se termine par un point, tout comme dans Smalltalk. Outre les messages unaires et binaires, Citrine propose des messages par mots-clés , qui prennent des arguments entremêlés avec le message lui-même, tout comme Smalltalk et Objective-C .

 x := Number between: 1 and: 5.

L'extrait de code ci-dessus renverra un objet booléen True .

Flux de contrôle

Tout comme Smalltalk, le flux de contrôle dans Citrine est mis en œuvre par une utilisation stratégique des messages. Par exemple, l'écriture d'une instruction conditionnelle nécessite l'envoi d'un bloc de code à un booléen.

(money > price) true: {  write: 'Yes, you can afford this'. }.

De même, une boucle for s'écrit :

{ :step  write: 'this is step:' + step. } * 10.


Pour sortir d'une boucle dans Citrine, il faut envoyer le message 'break' à un booléen, cela permet une rupture conditionnelle d'une boucle sans avoir à factoriser les conditions de rupture :

{ :i
  (i = 3) break.
   write: i.
} * 5.

Pipelines

Contrairement à Smalltalk, Citrine n'a pas de point-virgule pour envoyer un message au destinataire d'origine. Au lieu de cela, Citrine a un jeton de virgule ',' utilisé pour enchaîner les messages de mots-clés, ce qui permet d'écrire des pipelines de type Unix . Le code suivant utilise une syntaxe de type pipeline pour remplacer tous les caractères 'o' par des zéros, la chaîne résultante serait quelque chose comme : '1010101...'.

onesAndZeroes := '1o1o1o1o1o1' split: 'o', map: mapUp, join: '0'.

Prototype

La plus grande différence avec Smalltalk est l'utilisation de prototypes. Citrine n'a pas de concept de classe, elle ne connaît que les objets. Un objet est créé à l'aide du nouveau message :

cat := Object new.

Cet objet peut être amené à répondre aux messages en ordonnant à l'objet d'écouter les événements. C'est un peu similaire à l'ajout de méthodes dans des langages comme Java :

cat on: 'meow' do: { 
  Pen write: 'meow!'.
}.

Comme indiqué ci-dessus, l'héritage est basé sur des prototypes. Pour dériver un objet d'un autre objet, le nouveau message doit être envoyé à l'objet à étendre :

 Animal := Object new.
Animal on: 'makeSound' do: {
	 write: '?'.
}.
 Cat := Animal new.
Cat on: 'makeSound' do: {
	 write: 'meow!'.
}.
 Tom := Cat new.
Tom makeSound.

Unicode

Citrine utilise largement l'unicode UTF-8, les objets et les messages peuvent être constitués de symboles Unicode. Toutes les longueurs de chaîne sont calculées en utilisant UTF-8. Citrine distingue la longueur et la taille des chaînes en octets :

'text' length.

renvoie la longueur de la chaîne en points de code UTF-8, tandis que :

'text' bytes.

renvoie le nombre d'octets.

Portée

Citrine utilise une portée dynamique au lieu d' une portée lexicale . Ainsi, il n'y a pas besoin d' injection de dépendance ou de variables globales, mais il peut être plus difficile de raisonner que la portée lexicale. Ceci est similaire dans les langages de programmation comme Emacs Lisp et BASIC . Dans les blocs de code, le mot-clé var doit être utilisé pour déclarer une variable locale.

La démonstration suivante rend l'objet Mailer disponible dans le module :

Application := {
    mailer := Mailer new.
   module run.
}.

Voir également

Les références

Liens externes