Cours langage D

Cours Complet du langage de Programmation D en PDF


Télécharger Cours Complet du langage de Programmation D en PDF

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Cours Complet du langage de Programmation D

...

Qu'est ce que D?

Language Langage multi-paradigme

n Programmation orientée objet

n Programmation générique (via des modèles)

o Compilé

n code natif

Pas de VM, pas d'Iterpreters

o Typiquement

o Ordures collectées

Based Basé sur Unicode

o binaire compatible avec C

o Ressemble et se sent très bien comme C / C ++

Exemple de code: Hello World

importer std.cstream;

int main (char [] [] args)

{

dout.writefln («Bonjour, le monde!»);

retourne 0;

}

Exemple de code: Classes

interface Animal {

char [] parle ();

}

classe Chien: Animal {

char [] speak () {return woof‖; }

}

classe Cat: Animal {

char [] speak () {return ―meow‖; }

}

Exemple de code: Classes

int main()

{

Animaux [] animaux;

animaux ~ = nouveau chien ();

animaux ~ = nouveau chat ();

foreach (Animal a; animaux)

dout.writeLine (a.speak ());

retourne 0;

}

Classe

o Encapsulation

n public, protégé, privé

o Héritage

n héritage unique

o Interfaces multiples

o Mix-in

n «objet de classe» à la racine de la hiérarchie

Un peu comme Java & C #! (sauf les mix-ins)

Classe

o Propriété (comme C #)

n Setter / Getter comme s'il s'agissait d'un champ

Over Surcharge des opérateurs (comme C ++, C #)

A + b è a.opAdd (b)

Exemple de code: modèles

classe Stack (T)

{

données T [] privées;

push public vide (T e) {

données ~ = e;

}

public T pop () {

T e = data [$ - 1];

data.length = data.length-1;

renvoyer e;

}

}

Exemple de code: modèles

int main()

{

Stack! (Int) s = new Stack! (Int) ();

pousse (100);

pousse (200);

dout.writefln (s.pop ()); // 200

dout.writefln (s.pop ()); // 100

retourne 0;

}

Modèles

o Modèles

n Ensemble de déclarations paramétrées

o classe

o fonction

o variable

o typedef ...

Similaire aux modèles C ++ (plus puissant)

Qu'est ce que D?

o Réingénierie de C / C ++

Comp Compilateur Naitive-code

n binaire compatible avec C

n Apparence familiale

o intégrant de nombreuses caractéristiques de la modernité

langues: Java, C #, ...

n GC

n Modules

n OO basé sur un héritage unique

o ... Et plus encore!

Quand est né D?

Quand est né D?

o 1999 déc

Conçu par Walter Bright

Aug 2001 août

n Projet de spécifications de langue publié

o 2001 déc

n Première version alpha du compilateur D (DMD)

o 2004 mars

n GDC - D Front End pour GCC

Constamment développé

0.000

0,020

0,040



0,060

0,080

0,100

0,120

0,140

Rendez-vous amoureux

Version

pour chaque

déléguer,

fonction littérale

Surcharge d'opérateur

modèle

mixin

statique si

ddoc

Toujours en version bêta, toujours en légère évolution

Qui a créé D?

Qui a créé D?

Bright Walter Bright

L'auteur de ...

Software Northwest Software C

o Datalight C

o Zorland C

Ort Zortech C ++ (le premier compilateur C ++ natif)

o Symantec C ++

o Symantec Visual Cafe pour Java

o Digital Mars C ++

n Véritable hacker du compilateur!

Qui a créé D?

Bright Walter Bright - Hacker du compilateur

n souligne la «facilité du compilateur»

Implémentation ”du langage D,

qui conduit à...

o temps de compilation ultra-rapide

o Facilité de mise en œuvre d'autres outils

n Syntaxe Hilighting

Compl Achèvement du code

n Outils de refactoring

Pourquoi D?

Pourquoi D?

Qu'est-ce qui diffère de C / C ++ / Java / C #?

n Puissants tableaux et chaînes intégrés

n Numéros complexes intégrés

n déclaration «avec»

n Fonctions imbriquées et délégués

n Mix-in

RAII, Programmation à contrat, Unittest

Array Slice, Concat, ...

char [] s = "Bonjour";

char [] t = s [1..3]; // el‖

char [] u = s ~ t; // «Bonjour»

u [4 .. $] = ‗_ ‘; // -Enfer___‖

Changer de chaîne

int main (char [] [] args)

{

foreach (char [] arg; args)

commutateur (arg)

{

cas -h‖:

cas —help‖: ... pause;

cas -i‖: ... pause;

défaut: ... break;

}

}

Tableaux associatifs intégrés

long [char []] pfx;

pfx [―Kilo‖] = 1_000;

pfx [―Mega‖] = 1_000_000;

pfx [―Giga‖] = 1_000_000_000;

pfx [―Tera‖] = 1_000_000_000_000;

si (! (- Peta‖ dans pfx))

pfx [―Peta‖] = pfx [―Tera‖] * 1000;

Déclaration «avec»

avec (dout)

{

écrirefln («Bonjour»);

writefln («Monde»);

}

Fonction imbriquée

void f ()

{

int x = 0;

void g () {++ x; }

g(); g(); g();

}

Les délégués

OutputStream delegate (...) p =

& dout.writefln;

p («Bonjour»);

p (100);

p (-5,3 + 4i);

Délégués Anonymes

boucle void (int n, void delegate () s)

{

pour (int i = 0; i <n; ++ i)

s ();

}

boucle (10,

delegate {dout.writefln (―Hi! ‖);});

Délégués Anonymes

boucle vide (int n,

délégué vide (int i) s)

{

pour (int i = 0; i <n; ++ i)

si);

}

int x = 0;

boucle (10, délégué (int i) {x + = i;});

Mix-in

modèle Debug () {

void whoAmI () {



TypeInfo t = typeid (typeof (this));

dout.writefln (t, - - -, this);

}

}

classe Dog {

mixin Debug! ();

char [] toString () {...}

}

Chien d = nouveau chien (ochPochi‖);

d.whoAmI (); // Chien - Pochi

Programmation à contrat

double sqrt (double x)

dans

{affirmer (x> = 0); }

out (r)

{affirmer (abs (r * r-x) <0,0001); }

corps

{

...

}

Unittests intégré

char toUpper (char c) {

retourne a ‘<= c && c <= z‘

? c-«a» + «A»: c;

}

Test de l'unité {

assert (toUpper (‗a ‘) == ‗A‘)

assert (toUpper (‗T ‘) == ‗T‘)

}

Où est utilisé D?

Où est utilisé D?

o Systèmes pris en charge

n DMD - Compilateur numérique Mars D

Windows, Linux sur x86

n GDC - Compilateur GNU D

Linux, FreeBSD, MacOSX, Cygwin, AIX, ...

Où est utilisé D?

Applications écrites en D

n Jeux!

n Démos!

o SDL (Simple DirectMedia Layer)

Où est utilisé D?

o Autres applications écrites en D

n akIDE

Un objectif de l'IDE D et écrit en D

n attoHttpd

o Serveur HTTP simple

n delmail

K Spam-mail killer

n Diki

Engine moteur wiki simple

n DMDScript

Inte interpréteur ECMAScript

… … …

Les blocs de construction des programmes D (et des bibliothèques) sont des modules.

Les modules D sont basés sur un concept simple: chaque fichier source est un module. En conséquence, les fichiers uniques dans lesquels nous écrivons nos programmes ont tous été des modules individuels. Par défaut, le nom d'un module est identique à son nom de fichier sans l'extension .d. Lorsqu'il est explicitement spécifié, le nom du module est défini par le mot clé module, qui doit apparaître comme la première ligne sans commentaire du fichier source.

Par exemple, en supposant que le nom du fichier source soit "cat.d", le nom du module serait spécifié par le mot clé module:

module chat;

classe Cat {

// ...

}

La ligne de module est facultative si le module ne fait partie d'aucun package (voir ci-dessous). Lorsqu'il n'est pas spécifié, il correspond au nom du fichier sans l'extension .d

static this () et static ~ this ()

static this () et static ~ this () à la portée du module sont similaires à leurs

contreparties struct et class:

module chat;

static this () {

// ... les opérations initiales du module ...

}

static ~ this () {

// ... les opérations finales du module ...

}

Le code qui se trouve dans ces étendues est exécuté une fois pour chaque thread. (Notez que la plupart des programmes sont constitués d’un seul thread qui commence à exécuter la fonction main ().) Le code qui ne doit être exécuté qu’une seule fois pour l’ensemble du programme (par exemple, l’initialisation de variables partagées et immuables) doit être défini dans un paramètre static this () et partagé. des blocs static ~ this (), qui seront décrits dans le chapitre Concurrence sur le partage de données (page 675).

Noms de fichiers et de modules pris en charge par D

Unicode en code source et noms de modules. Cependant, le support Unicode des systèmes de fichiers varie. Par exemple, bien que la plupart des systèmes de fichiers Linux prennent en charge le format Unicode, les noms de fichiers des systèmes de fichiers Windows peuvent ne pas faire la distinction entre les lettres majuscules et minuscules. En outre, la plupart des systèmes de fichiers limitent le nombre de caractères pouvant être utilisés dans les noms de fichiers et de répertoires. Pour des raisons de portabilité, il est recommandé d'utiliser uniquement des lettres ASCII minuscules dans les noms de fichiers. Par exemple, "resume.d" serait un nom de fichier approprié pour une classe nommée Résumé



66