+ All Categories
Home > Documents > The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries...

The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries...

Date post: 29-Sep-2020
Category:
Upload: others
View: 3 times
Download: 0 times
Share this document with a friend
180
Transcript
Page 1: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

The D Programming Language

The D2azel Team

EPITA

July, 15�th 2007

The D2azel Team The D Programming Language 1 / 113

Page 2: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Licence

This work is licenced under the Creative Commons Attribution-Share Alike 3.0 License.

The D2azel Team The D Programming Language 2 / 113

Page 3: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Version history

Version history

1.1 - Jérémie Roquet (July 15th 2007)

1.0 - The D2azel team (July 12th 2007)

0.2 - Jérémie Roquet (July 10th 2007)

0.1 - Paul Baudron (June 28th 2007)

The D2azel Team The D Programming Language 3 / 113

Page 4: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Introduction

Subject

The D programming language

The tools

The libraries

Presentation

A short introduction to basic concepts

To make you discover a cool language

Not a coding demonstration

The D2azel Team The D Programming Language 4 / 113

Page 5: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Outline

Presentation

The language

The tools

Language

Basic features

Comparison with other languages

Libraries

What already exists

What is comming

The D2azel Team The D Programming Language 5 / 113

Page 6: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Presentation Garbage Collection Compilation Developement

Part I

Presentation

The D2azel Team The D Programming Language 6 / 113

Page 7: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Presentation Garbage Collection Compilation Developement

Presentation

Introduction

History

by Walter Bright of Digital Mars

Appeared in 1999

A stable version, 1.0, was released on January 2, 2007

Licence

Proprietary

Open source

The D2azel Team The D Programming Language 7 / 113

Page 8: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Presentation Garbage Collection Compilation Developement

Presentation

Features

Features

Compiled

Imperative

object-oriented

Metaprogramming

Garbage collector

In�uenced by C (1972), C++ (1985), C# (2001), Java (1995),Ei�el (1986)

The D2azel Team The D Programming Language 8 / 113

Page 9: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Presentation Garbage Collection Compilation Developement

Presentation

Why D?

Why D?

To combine the power and high performance of C and C++with the programmer productivity

Needs of quality assurance, documentation, management,portability and reliability.

The D2azel Team The D Programming Language 9 / 113

Page 10: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Presentation Garbage Collection Compilation Developement

Garbage Collection

Garbage Collection

Methods for allocating memory in D

Static data, allocated in the default data segment

Stack data, allocated on the CPU program stack

Garbage collected data, allocated dynamically on the garbagecollection heap

The D2azel Team The D Programming Language 10 / 113

Page 11: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Presentation Garbage Collection Compilation Developement

Garbage Collection

Garbage Collection

Garbage collected programs can be faster

Most destructors are empty (so they are not executed)

No special mechanism to establish if an exception happens

Less code necessary to manage memory (smaller programs)

When memory is not tight, the program runs at full speed

Modern garbage collectors do heap compaction

The D2azel Team The D Programming Language 11 / 113

Page 12: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Presentation Garbage Collection Compilation Developement

Garbage Collection

Garbage Collection

Other advantages

No memory leaks

Few hard-to-�nd pointer bugs

Faster to develop and debug

The D2azel Team The D Programming Language 12 / 113

Page 13: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Presentation Garbage Collection Compilation Developement

Garbage Collection

Garbage Collection

Downsides

The program can arbitrarily pause

The time it takes for a collection to run is not bounded

Programs must carry around with them the garbage collectionimplementation

The D2azel Team The D Programming Language 13 / 113

Page 14: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Presentation Garbage Collection Compilation Developement

Garbage Collection

Garbage Collection

Where/When is it run?

In a special thread

How it works?

Looking for all pointers �roots�

Recursively scanning all allocated memory

Freeing all memory that has no active pointers to it

Possibly compacting the remaining used memory

The D2azel Team The D Programming Language 14 / 113

Page 15: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Presentation Garbage Collection Compilation Developement

Compilation

Compilers

Two implementations

Digital Mars DMD (Win32 and x86 Linux)

GCC D Compiler (Windows, MAC OS X and Linux)

The D2azel Team The D Programming Language 15 / 113

Page 16: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Presentation Garbage Collection Compilation Developement

Compilation

Linkage

Programs:

Are linked with gcc

Can be linked with C libraries...

The D2azel Team The D Programming Language 16 / 113

Page 17: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Presentation Garbage Collection Compilation Developement

Compilation

dsss

Build system

Package management

Dependance management

The D2azel Team The D Programming Language 17 / 113

Page 18: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Presentation Garbage Collection Compilation Developement

Developement

Editors

Editors

Emacs

Eclipse

...

The D2azel Team The D Programming Language 18 / 113

Page 19: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Part II

Language

The D2azel Team The D Programming Language 19 / 113

Page 20: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Hello world

The code

import s t d . s t d i o ;

void main ( char [ ] [ ] a r g s ){

w r i t e f l n ( " He l l o World ! " ) ;}

Some explanations

Import the write�n function

Implement the program main function

Write "Hello World !" to standard output

The D2azel Team The D Programming Language 20 / 113

Page 21: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Comments

Single line comments

// This i s a comment

Multi line comments

/∗ This i s amu l t i l i n e comment ∗/

Multi line nested comments

/+ This i s a mu l t i l i n e/+ Nested +/comment +/

The D2azel Team The D Programming Language 21 / 113

Page 22: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Documentation

Single line documentation

/// This i s a documentat ion

Multi line documentation

/∗∗ This i s amu l t i l i n e documentat ion ∗/

Multi line nested documentation

/++ This i s a mu l t i l i n e/+ Nested +/documentat ion +/

The D2azel Team The D Programming Language 22 / 113

Page 23: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Documentation

Standard sections

Generate standard documentation

Authors, bugs, date, deprecated, history, license, version

Code examples

Return value, exceptions

The D2azel Team The D Programming Language 22 / 113

Page 24: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Modules

Module declaration

Declaration

module moduleName ;module packageName . moduleName ;

Implicit scope

Compiled only once

May contain any type of code

The D2azel Team The D Programming Language 23 / 113

Page 25: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Import

Import

Simple module importation

import moduleName ;import module1 ,

module2 ,module3 ;

No �le inclusion

No header parsing

Load symbols from binary or look in memory

The D2azel Team The D Programming Language 24 / 113

Page 26: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Import

Import

Public module importation

pub l i c import moduleName ;

Transfer symbols

The D2azel Team The D Programming Language 24 / 113

Page 27: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Import

Import

Static module importation

s t a t i c import moduleName ;

Force full namespace quali�cation

Prevent name collisions

Access to current module

. myFunction ( ) ;

The D2azel Team The D Programming Language 24 / 113

Page 28: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Import

Import

Module importation & renaming

import moduleName = newName ;

Prevent name collisions

Ease dependancies change

The D2azel Team The D Programming Language 24 / 113

Page 29: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Import

Import

Selective module importation

import moduleName : elementName ;

Prevent name collisions

Selective module importation & renaming

import moduleName : elementName = newElementName ;

The D2azel Team The D Programming Language 24 / 113

Page 30: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Mixin

Mixin

Simple module mix

mixin (moduleName ) ;

Code factorisation

No �le inclusion

No header parsing

Load symbols from binary or look in memory

The D2azel Team The D Programming Language 25 / 113

Page 31: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Simplest types

Simplest types

Void

Means no type

Bool

Always initialized to false

The D2azel Team The D Programming Language 26 / 113

Page 32: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Integers

Integers

Declaration

i n t i = 42 ; // Decimali n t j = 0b101010 ; // B ina ryi n t k = 052 ; // Octa li n t l = 0x2A ; // Hexadec imal

With underscores

i n t i = 65_535 ; // 65535i n t j = 0x34_32 ; // [ 0 , 0 , ' 4 ' , ' 2 ' ]

The D2azel Team The D Programming Language 27 / 113

Page 33: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Integers

Integers

And also

byte, ubyte

short, ushort

int, uint

long, ulong

cent, ucent

Always initialized to 0

The D2azel Team The D Programming Language 27 / 113

Page 34: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Floating point numbers

Floating point numbers

Di�erent types

�oat

double

real

Always initialized to NaN

The D2azel Team The D Programming Language 28 / 113

Page 35: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Floating point numbers

Floating point numbers

Decimal exponential notation

f l o a t f = 1 .0 e3 ; // f = 1000f l o a t g = 1 .0 e+3; // g = 1000f l o a t h = 1 .0 e−3; // h = 0.001

Hexadecimal exponential notation

f l o a t f = 0x1 . Ap3 ; // f = 13f l o a t g = 0x1 . Ap+3; // g = 13f l o a t h = 0x1 . Ap−3; // h = 13/64

The D2azel Team The D Programming Language 28 / 113

Page 36: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Imaginary numbers

Imaginary numbers

Di�erent types

i�oat

idouble

ireal

Always initialized to NaN * 1.0i

The D2azel Team The D Programming Language 29 / 113

Page 37: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Complex numbers

Complex numbers

Di�erent types

c�oat

cdouble

creal

Always initialized to NaN * (1.0 + 1.0i)

The D2azel Team The D Programming Language 30 / 113

Page 38: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Characters

Characters

Di�erent types

char

wchar

dchar

char initialized to 0xFF

wchar initialized to 0xFFFF

dchar initialized to 0x0000FFFF

The D2azel Team The D Programming Language 31 / 113

Page 39: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Pointers

Pointers

Declaration

i n t i = 42 ;i n t ∗ p i ; // i n t p o i n t e rp i = &i ; // p i p o i n t s to ii n t j = ∗ p i ; // j = 42

Multiple variable de�nition

i n t i , j ; // I n t e g e r si n t i , ∗ j ; // Er ro r , not the same typei n t ∗ i , j ; // Po i n t e r s to i n t e g e r

Always initialized to NULL

The D2azel Team The D Programming Language 32 / 113

Page 40: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Arrays

Arrays

Static array

i n t [ 4 2 ] tab ; // Array o f 42 e l ement si n t tab [ 4 2 ] ; // Works a l s o

Fields initialized to the default type value

Limited to 16Mib

Dynamic array

i n t [ ] tab ; // Empty dynamic a r r a yi n t tab [ ] ; // Works a l s o

Initialized with length of 0

The D2azel Team The D Programming Language 33 / 113

Page 41: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Arrays

Arrays

Jagged array

i n t [ ] [ ] tab ; // Empty mat r i x

Rows can be of di�erent lengths

Multidimensional array

i n t [ 3 ] [ 3 ] tab ; // F i xed s i z e mat r i xi n t [ 3 , 3 ] tab ; // Work a l s o

Contiguous in memory

The D2azel Team The D Programming Language 33 / 113

Page 42: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Arrays

Arrays

Properties

i n t [ 4 2 ] tab ;i n t l = tab . l e n gh t ; // G i v e s the a r r a y l e n g t h

The D2azel Team The D Programming Language 33 / 113

Page 43: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Complex constructions

Complex constructions

C++

// Array o f 42 p o i n t e r s to a r r a y s o f p o i n t e r s to i n ti n t ∗ (∗ i [ 4 2 ] ) [ ] ;

D

// Array o f 42 p o i n t e r s to a r r a y s o f p o i n t e r s to i n ti n t ∗ [ ] ∗ [ 4 2 ] i ;i n t ∗ (∗ i [ 4 2 ] ) [ ] ; // Works a l s o

The D2azel Team The D Programming Language 34 / 113

Page 44: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Strings

Strings

Strings ?

There is no string in D

We use characters arrays instead

Declaration

char [ ] s t r = " to to " ; // This i s a UTF−8 s t r i n gwchar [ ] s t r 2 = " h e l l o "w; // This i s a UTF−16 s t r i n gdchar [ ] s t r 3 = "42"d ; // This i s a UTF−32 s t r i n gchar [ ] s t r x = x"FFAA" ; // This i s a hexadec ima l l i t e r a l

The D2azel Team The D Programming Language 35 / 113

Page 45: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Strings

Strings

Multiple lines strings

char [ ] lo remIpsum = "Lorem ipsum do l o r s i t amet ,c o n s e t e t u r s a d i p s c i n g e l i t r .Sed diam nonumy ei rmod tempor i n v i d u n t utl a b o r e e t d o l o r e magna a l iquyam e r a t .Sed diam vo l up tua . At ve ro eos e t accusam etj u s t o duo d o l o r e s e t ea rebum .S t e t c l i t a kasd gubergren , no sea s anc t u s e s t . " ;

The D2azel Team The D Programming Language 35 / 113

Page 46: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Strings

Strings

Special characters in C++

char h e l l o [ ] = " He l l o wor ld !\ n" ;char r egexp [ ] = " \" [^\\\\ ]∗ (\\\\ . [^\\\\ ]∗ )∗\" " ;

Special characters in D

char [ ] h e l l o = " He l l o wor ld ! " \n ;char [ ] r egexp = \" r " [ ^ \ \ ] ∗ ( \ \ . [ ^ \ \ ] ∗ ) ∗ " \" ;cha r [ ] r egexp = \" ` [ ^ \ \ ] ∗ ( \ \ . [ ^ \ \ ] ∗ ) ∗ ` \" ;

The D2azel Team The D Programming Language 35 / 113

Page 47: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Associative arrays

Associative arrays

Declaration

// I n t e g e r a s s o c i a t i v e a r r a y i ndexed by s t r i n g sf l o a t [ char [ ] ] p r i c e ;// Add an e x p e n s i v e f r u i t to the a r r a yp r i c e [ " app l e " ] = 2 . 4 0 ;p r i c e . remove ( " app l e " ) ; // Remove i t

The D2azel Team The D Programming Language 36 / 113

Page 48: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Functions & delegates

Functions & delegates

Functions

// Funct i on t a k i n g an a r r a y and r e t u r n i n g an i n t e g e ri n t funct ion ( i n t [ ] ) myFunction ;// Dummy f u n c t i o ni n t t o t o ( i n t [ ] t i t i ){ return t i t i [ l e n g t h − 1 ] }myFunction = &to to ; // r e f e r s to t o t oi n t i = myFunction ( [ 4 2 ] ) ; // i = 42// The C f u n c t i o n p o i n t e r s yn tax works a l s oi n t (∗ ano the rFunc t i on ) ( i n t [ ] ) ;

Delegates

Works also for nested functions or non-static methods

The D2azel Team The D Programming Language 37 / 113

Page 49: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Functions & delegates

Functions & delegates

Declaration

// Funct i on t a k i n g an a r r a y and r e t u r n i n g an i n t e g e ri n t delegate ( i n t [ ] ) myFunction ;void ou t e rFunc t i o n{

// Dummy i n n e r f u n c t i o ni n t t o t o ( i n t [ ] t i t i ){ return t i t i [ 0 ] }myFunction = &to to ; // r e f e r s to t o t oi n t i = myFunction ( [ 4 2 ] ) ; // i = 42

}

The D2azel Team The D Programming Language 37 / 113

Page 50: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Arrays manipulation

Arrays manipulation

Initialization

i n t [ 4 2 ] four tyTwos ; // Array o f 42 i n t e g e r sfour tyTwos [ ] = 42 ; // Set a l l f i e l d s to 42four tyTwos [ 2 1 . . 4 2 ] = 0 ; // Set f i e l d s 21 to 42 to 0four tyTwos [ 3 0 . . $ ] = 21 ; // Set l a s t f i e l d s to 21

Array assignement

// tab [ 2 1 ] = 42 , tab [ 2 2 ] = 21i n t [ 4 2 ] tab = [ 2 1 : 4 2 , 2 1 ] ;

The D2azel Team The D Programming Language 38 / 113

Page 51: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Arrays manipulation

Arrays manipulation

Copy

i n t [ 4 2 ] f i r s t ;i n t [ 4 2 ] second ;f i r s t = second ; // f i r s t and second a r e the samef i r s t [ ] = second [ ] // copy second i n t o f i r s tf i r s t [ 0 . . 2 ] = second [ 2 . . 4 ] // copy two f i e l d s

Slicing

i n t [ 4 2 ] f i r s t ;i n t [ ] second ;// second has the 21 f i r s t e l ement s o f f i r s tsecond = f i r s t [ 0 . . 2 1 ] ;

The D2azel Team The D Programming Language 38 / 113

Page 52: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Arrays manipulation

Arrays manipulation

Concatenation

i n t [ ] f i r s t ;i n t [ ] second ;i n t [ ] t h i r d ;t h i r d = f i r s t ~ second ;f i r s t ~= second ;

The D2azel Team The D Programming Language 38 / 113

Page 53: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Arrays manipulation

Arrays manipulation

Properties

i n t [ ] tab ;tab . s o r t ( ) ;tab . r e v e r s e ( ) ;tab . dup ( ) ;++tab . l e n g t h ;

The D2azel Team The D Programming Language 38 / 113

Page 54: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Arrays manipulation

Arrays manipulation

Functions taking arrays

i n t [ ] s t a c k ;void push ( i n t [ ] tab , i n t e l t ){

++tab . l e n g t h ;tab [ l e n g t h − 1 ] = e l t ;

}tab . push ( 4 2 ) ;

The D2azel Team The D Programming Language 38 / 113

Page 55: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

opNeg

opNeg

Usage

−myVar ;

The D2azel Team The D Programming Language 39 / 113

Page 56: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Binary operators

Binary operators

Usage

a + b ; a − b ;a ∗ b ; a / b ;a % b ;a & b ; a | b ;a ~ b ;a << b ;a >> b ; a >>> b ;

opAdd, opSub, opMul, opDiv, opMod

opAnd, opOr, opXor

opCat

opShl, opShr, opUShr

The D2azel Team The D Programming Language 40 / 113

Page 57: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Comparison operators

Comparison operators

Usage

a == b ;a != b ;a < b ;a > b ;a <= b ;a >= b ;

opEquals

opComp

The D2azel Team The D Programming Language 41 / 113

Page 58: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Reverse binary operators

Reverse binary operators

Usage

a + b ; a − b ;a ∗ b ; a / b ;a % b ;a & b ; a | b ;a ~ b ;a << b ;a >> b ; a >>> b ;

opAdd_r, opSub_r, opMul_r, opDiv_r, opMod_r

opAnd_r, opOr_r, opXor_r

opCat_r

opShl_r, opShr_r, opUShr_r

The D2azel Team The D Programming Language 42 / 113

Page 59: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Floating point operators

Floating point operators

Usage

a == b ;a != b ;a !< b ;a !> b ;a !<= b ;a !>= b ;a != b ;a <> b ;a !<> b ;a <>= b ;a !<>= b ;

Builtin NaN handling

The D2azel Team The D Programming Language 43 / 113

Page 60: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

opAssign

opAssign

Usage

a = b ;a += b ; // ++a −= b ; // −−a ∗= b ; a /= b ;a %= b ;a &= b ; a |= b ;a ~= b ;a <<= b ;a >>= b ; a >>>= b ;

Any operator, su�xed by "Assign"

Example : opAddAssign

The D2azel Team The D Programming Language 44 / 113

Page 61: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

opCast

opCast

Usage

c l a s s MyClass{

MyType opCast ( ){

return myValue ;}

}cast (MyType) myVar ;

Allow complex conversions

Almost transparent to the user

The D2azel Team The D Programming Language 45 / 113

Page 62: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

opCall

opCall

Usage

MyClass f ;f (myArg ) ;

Allow function objects (functors)

The D2azel Team The D Programming Language 46 / 113

Page 63: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

opIndex, opIndexAssign

opIndex, opIndexAssign

opIndex

c l a s s MyClass{

MyType op Index (MyType index1 , MyType i ndex2 ){

return myValue ;}

}myVar [ i , j ] ;

The D2azel Team The D Programming Language 47 / 113

Page 64: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

opIndex, opIndexAssign

opIndex, opIndexAssign

opIndexAssign

c l a s s MyClass{

MyType op IndexAs s i gn (MyType va lue ,MyType index1 , MyType index2 )

{}

}myVar [ i , j ] = myValue ;

The D2azel Team The D Programming Language 47 / 113

Page 65: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

opSlice, opSliceAssign

opSlice, opSliceAssign

opSlice

c l a s s MyClass{

MyType o pS l i c e (MyType s t a r t , MyType end ){

return mySub ;}

}myVar [ i . . j ] ;

The D2azel Team The D Programming Language 48 / 113

Page 66: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

opSlice, opSliceAssign

opSlice, opSliceAssign

opSliceAssign

c l a s s MyClass{

MyType o pS l i c eA s s i g n (MyType va lue ,MyType s t a r t , MyType end )

{}

}myVar [ i . . j ] = myValue ;

The D2azel Team The D Programming Language 48 / 113

Page 67: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

opIn, opIn_r

opIn, opIn_r

Usage

a i n b ;// Not ye t implementeda ! i n b ;

determine if an object is in an array

may be rede�ned

The D2azel Team The D Programming Language 49 / 113

Page 68: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

is operator

is operator

Usage

a i s b ;a ! i s b ;

determine if a reference is null

determine if two references are equals

cannot be rede�ned

The D2azel Team The D Programming Language 50 / 113

Page 69: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

is operator

is operator

is type

s t a t i c i f ( i s (T [ ] ) )// Something

type category

The D2azel Team The D Programming Language 50 / 113

Page 70: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

is operator

is operator

is type specialisation

s t a t i c i f ( i s (T: BaseType ) )// Something

type hierarchy

The D2azel Team The D Programming Language 50 / 113

Page 71: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

is operator

is operator

is type identity

s t a t i c i f ( i s (T == MyType ) ) // . . .s t a t i c i f ( i s (T == super ) ) // . . .s t a t i c i f ( i s (T == c l a s s ) ) // . . .s t a t i c i f ( i s (T == funct ion ) ) // . . .s t a t i c i f ( i s (T == return ) ) // . . .

type hierarchy

The D2azel Team The D Programming Language 50 / 113

Page 72: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Goto

Goto

Usage

myLabel :// Many u s e f u l t h i n g sgoto myLabel ;

Quick and easy

Dirty

The D2azel Team The D Programming Language 51 / 113

Page 73: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

If else

If else

Usage

i f ( c o n d i t i o n ){

// Something}e l s e

{// Something e l s e

}

'condition' must be a boolean

The D2azel Team The D Programming Language 52 / 113

Page 74: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Switch

Switch

Usage

switch ( token ){

case " i f " :p a r s e I f ( ) ;goto case " e l s e " ;

case " e l s e " :p a r s e E l s e ( ) ;break ;

defau l t :throw new EUnknownToken ( ) ;

}

Works also on arrays

The D2azel Team The D Programming Language 53 / 113

Page 75: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

While loop

While loop

Usage

whi le ( c o n d i t i o n ){

break ;continue ;

}

Do ... while

do

{break ;continue ;

} whi le ( c o n d i t i o n )

The D2azel Team The D Programming Language 54 / 113

Page 76: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

For loop

For loop

Usage

f o r ( i n i t i a l i z a t i o n ; c o n d i t i o n ; mo d i f i c a t i o n ){

break ;continue ;

}

The D2azel Team The D Programming Language 55 / 113

Page 77: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Foreach loop

Foreach loop

Usage

char [ ] s t r = " bon jou r " ;foreach ( char c ; s t r ){

w r i t e f l n ( "%c" , c ) ;}

foreach_reverse

The same, but in reverse order

The D2azel Team The D Programming Language 56 / 113

Page 78: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Foreach loop

Foreach loop

With additional parameter

char [ ] s t r = " bon jou r " ;foreach ( u int i , char c ; s t r ){

w r i t e f l n ( "%u i −> %c" , i , c ) ;}

The D2azel Team The D Programming Language 56 / 113

Page 79: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Foreach loop

Foreach loop

On associative arrays

f l o a t [ char [ ] ] p r i c e s ;p r i c e s [ " app l e " ] = 2 . 4 0 ;foreach ( char [ ] i tem , f l o a t p r i c e ; p r i c e s ){

w r i t e f l n ( "%s −> %f " , item , p r i c e ) ;}

The D2azel Team The D Programming Language 56 / 113

Page 80: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Foreach loop

Foreach loop

On objects

c l a s s myObject{

i n t opApply ( i n t delegate ( r e f i n t ) myFunc ){

// App l i e s myFunc to each e lement}

}foreach ( i n t e l t , myObject o ){

// Do someth ing wi th e l t}

The D2azel Team The D Programming Language 56 / 113

Page 81: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Foreach loop

Foreach loop

On delegates

void app l y ( void delegate ( i n t ) func ){

func ( 4 2 ) ;func ( 2 1 ) ;

}foreach ( i n t e l t , app l y ( void delegate ( i n t ) ) ){

w r i t e f l n ( "%i " , e l t ) ;}

The D2azel Team The D Programming Language 56 / 113

Page 82: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Named loops

Named loops

Named while with named break

oute rLoop : whi le ( c o n d i t i o n ){

inne rLoop : f o r ( u int i = 0 ; i < 42 ; ++i )break oute rLoop ;

}

Named for with named continue

oute rLoop : f o r ( u int i = 0 ; i < 42 ; ++i ){

inne rLoop : whi le ( c o n d i t i o n )continue oute rLoop ;

}

The D2azel Team The D Programming Language 57 / 113

Page 83: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Static scopes

Static scopes

Using static if

s t a t i c i f ( c o n d i t i o n )i n t myVar ;

e l s e

f l o a t myVar ;

Evaluated at compile time (like # if in C++)

Has access to D values (templates. . . )

The D2azel Team The D Programming Language 58 / 113

Page 84: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Virtual functions

Virtual functions

Declaration of a virtual function in C++

v i r t u a l myMethod ( ) ;

Non virtual by default

Declaration of a �nal function in D

f i n a l myMethod ( ){

// Cannot be o v e r r i d e n u n l e s s p r i v a t e}

Virtual by default

The D2azel Team The D Programming Language 59 / 113

Page 85: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Arguments policies

Default policies

Scalars, unions, pointers and structs

Value types

Passed as copy by default

Arrays and objects

Reference types

Passed as reference by default

The D2azel Team The D Programming Language 60 / 113

Page 86: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Arguments policies

Explicit policies

in, out policies

MyType myFunction ( i n MyType myIn , out MyType myOut){}

Safer argument policy

Force references

The D2azel Team The D Programming Language 61 / 113

Page 87: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Arguments policies

Explicit policies

ref, inout policies

MyType myFunction ( r e f MyType myRef ,inout MyType myInOut )

{}

Force reference

ref is deprecated

The D2azel Team The D Programming Language 61 / 113

Page 88: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Arguments policies

Explicit policies

lazy policy

MyType myFunction ( l azy myArg ){}myFunction (myVar++);

Evaluated if necessary

Optimized

Safe

The D2azel Team The D Programming Language 61 / 113

Page 89: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Forward references

Forward references

No need to declare before use

void f i r s t ( ){

second ( ) ;}void second ( ){}

The D2azel Team The D Programming Language 62 / 113

Page 90: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Function literals

Function literals

No need to declare before use

void myFunction ( void delegate ( i n t ) d ){

i n t a = d ( 4 2 ) ;}myFunction ( delegate ( i n t i ) { return i + 1 } ) ;

The D2azel Team The D Programming Language 63 / 113

Page 91: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Nested functions

Nested functions

Usage

MyType myOuterFunct ion ( ){

MyType myVar ;MyType myInne rFunct ion ( ){}

}

Access to outer function scope

The D2azel Team The D Programming Language 64 / 113

Page 92: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Variadic functions

Variadic functions

Usage

MyType myFunction ( . . . ){}MyType myFunction ( i n t [ ] myArg . . . ){}

Variable arguments count

The D2azel Team The D Programming Language 65 / 113

Page 93: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Extern functions

Extern functions

Usage

extern (C) p r i n t f ( ) ;extern (D) w r i t e f l n ( ) ;// Not ye t implementedextern (C++) makeCoffee ( ) ;

C and D are supported

C++ is in progress

Pascal should be supported on Windows

The D2azel Team The D Programming Language 66 / 113

Page 94: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Type alias

Type alias

Declaration

a l i a s u int s c o r e ;s c o r e myScore = 42 ;u int u i n t S c o r e = myScore ;

a l i a s s t d . c . s t r i n g c s t r ;a l i a s myVar . myFie ld [ myIndex ] myAl ias ;

Compatible with the original type

Work also for variables, modules or any symbol

The D2azel Team The D Programming Language 67 / 113

Page 95: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Type de�nition

Type de�nition

Declaration

typedef u int s c o r e = 42 ;i n t t oU in t ( s c o r e s ){

return cast ( u int ) s ;}

Strong type identity

Custom initializer

The D2azel Team The D Programming Language 68 / 113

Page 96: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Enumerations

Enumerations

Declaration

enum MyEnum : MyType{

MY_FIRST_VALUE,MY_SECOND_VALUE = myValue , // ' , ' i s a l l owed

} // ' ; ' i s f o r b i d d e n

Default type is int

Default initializer is the �rst value

The D2azel Team The D Programming Language 69 / 113

Page 97: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Unions

Unions

Declaration

union MyUnion{

myType1 myFie ld1 ;myType2 myFie ld2 ; // ' ; ' i s a l l owed

} // ' ; ' i s f o r b i d d e n

Value type

P.O.D. (No identity)

No inheritance

The D2azel Team The D Programming Language 70 / 113

Page 98: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Unions

Unions

Usage

MyUnion myVar ={

myFie ld = myValue} ;

The D2azel Team The D Programming Language 70 / 113

Page 99: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Structs

Structs

Declaration

s t ruc t MyStruct{

myType1 myFie ld1 = myValue ;myType2 myFie ld2 ;

} // ' ; ' i s f o r b i d d e n

Value type

P.O.D. (No identity)

No inheritance

The D2azel Team The D Programming Language 71 / 113

Page 100: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Structs

Structs

Usage

MyStruct myVar ={

myValue1 ,myValue2

} ;

Struct literal

myFunction ( MyStruct (myValue1 , myValue2 ) ) ;

The D2azel Team The D Programming Language 71 / 113

Page 101: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Structs

Structs

Explicit �elds initialization

MyStruct myVar ={

myFie ld2 : myValue1 ,myFie ld1 : myValue2

} ;

The D2azel Team The D Programming Language 71 / 113

Page 102: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Structs

Structs

Struct initializer

s t ruc t MyStruct{

MyType myFie ld ;s t a t i c MyStruct opCa l l (MyType myValue ){

MyStruct myVar ;myVar . myFie ld = myValue ;return myVar ;

}}

The D2azel Team The D Programming Language 71 / 113

Page 103: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Structs

Structs

Fields alignment

s t ruc t MyStruct{

a l i gn (32) MyType myFie ld1 ;a l i gn (32) MyType myFie ld1 ;

}

The D2azel Team The D Programming Language 71 / 113

Page 104: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Interfaces

Interfaces

Declaration

i n t e r f a ce MyIn t e r f a c e{

MyType1 myMethod1 (MyType2 myArg1 ) ;MyType3 myMethod2 (MyType4 myArg2 ) ;

} // ' ; ' i s f o r b i d d e n

Reference type

Only methods

No implementation

Inheritance

The D2azel Team The D Programming Language 72 / 113

Page 105: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Declaration

c l a s s MyClass : MyParentClass My In t e r f a c e{

MyType myMethod (MyType myArg ){}MyType myMember1 = myValue ;MyType myMember2 ;

} // ' ; ' i s f o r b i d d e n

Reference type

Object identity

Inheritance

Interface implementation

The D2azel Team The D Programming Language 73 / 113

Page 106: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Usage

MyClass myVar ;MyClass . myStat icMethod ( ) ;

The D2azel Team The D Programming Language 73 / 113

Page 107: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Protection attributes

private

package

protected

public

export

The D2azel Team The D Programming Language 73 / 113

Page 108: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Constructors

c l a s s MyClass{

t h i s ( ){}t h i s (MyType myArg ){}

} // ' ; ' i s f o r b i d d e n

The D2azel Team The D Programming Language 73 / 113

Page 109: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Destructor

c l a s s MyClass{

~ t h i s ( ){}

} // ' ; ' i s f o r b i d d e n

Always virtual

Called on delete or by the garbage collector

The D2azel Team The D Programming Language 73 / 113

Page 110: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Allocators

c l a s s MyClass{

new( u int s i z e , MyType myArg ){}

} // ' ; ' i s f o r b i d d e nnew( myValue ) MyClass ( ) ;

Always virtual

Called on deletion or by the garbage collector

The D2azel Team The D Programming Language 73 / 113

Page 111: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Access to parent class in C++

MyBaseClass ( ) ;MyBaseClass : : myMethod ( ) ;

Access to parent class in C#

base ( ) ;base . myMethod ( ) ;

Access to parent class in Java or D

super ( ) ;super . myMethod ( ) ;

The D2azel Team The D Programming Language 73 / 113

Page 112: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Sealed class in C#

sea led c l a s s MyClass{}

Final class in D

f i n a l c l a s s MyClass{}

The D2azel Team The D Programming Language 73 / 113

Page 113: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Method overriding

c l a s s MyClass : MyBaseClass{

over r ide MyType myOverr idenMethod ( ){}

} // ' ; ' i s f o r b i d d e n

More explicit

Allow easier error detection

The D2azel Team The D Programming Language 73 / 113

Page 114: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Block overriding

c l a s s MyClass : MyBaseClass{

over r ide

{MyType myOverr idenMethod ( ){}

}} // ' ; ' i s f o r b i d d e n

Allow multiple overriding

The D2azel Team The D Programming Language 73 / 113

Page 115: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Covariant method return type

c l a s s MyClass : MyBaseClass{

over r ide typeof ( t h i s ) myOverr idenMethod ( ){}

} // ' ; ' i s f o r b i d d e n

Also possible in C++

Not possible in C#

The D2azel Team The D Programming Language 73 / 113

Page 116: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Abstract classes

abstract c l a s s MyClass{

MyType myMethod (MyType myArg ){}MyType myMember = myValue ;

}

Cannot be instanciated

Provide base functionalities

The D2azel Team The D Programming Language 73 / 113

Page 117: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Abstract methods

c l a s s MyClass{

abstract MyType myMethod (MyType myArg ){}MyType myMember = myValue ;

}

Make the enclosing class abstract

Provide base functionalities

The D2azel Team The D Programming Language 73 / 113

Page 118: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Multiple astract methods

c l a s s MyClass{

abstract

{MyType myMethod (MyType myArg ){}

}}

Make the enclosing class abstract

Provide base functionalities

The D2azel Team The D Programming Language 73 / 113

Page 119: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Nested classes

c l a s s MyClass1{

MyType myVar ;c l a s s MyClass2{}

}

Access to outer classes members

The D2azel Team The D Programming Language 73 / 113

Page 120: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Functions classes

MyType myFunction{

MyType myVar ;c l a s s MyClass{}

}

Also possible in C++

Not possible in C#

The D2azel Team The D Programming Language 73 / 113

Page 121: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Access to outer classes

doSomethingWith ( t h i s . o u t e r ) ;

The D2azel Team The D Programming Language 73 / 113

Page 122: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Anonymous classes

auto MyVar = new c l a s s MyParentClass My In t e r f a c e{

// C l a s s con t en t} ;

The D2azel Team The D Programming Language 73 / 113

Page 123: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Properties (setter)

c l a s s MyClass{

pub l i c :MyType myProperty (MyType va l u e ){

return _myAttr ibute = va l u e ;}

pr i va te :MyType _myAttr ibute ;

}

Transparent for the user

The D2azel Team The D Programming Language 73 / 113

Page 124: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Properties (getter)

c l a s s MyClass{

pub l i c :MyType myProperty ( ){

return _myAttr ibute ;}

pr i va te :MyType _myAttr ibute ;

}

Transparent for the user

The D2azel Team The D Programming Language 73 / 113

Page 125: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Classes

Classes

Properties usage

MyClass myVar ;myVar . myProperty = myValue ;doSomethingWith (myVar . myProperty ) ;// And soon . . .myVar . myProperty += myValue ;

Will be lvalue in next version

The D2azel Team The D Programming Language 73 / 113

Page 126: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Types modi�ers

Types modi�ers

Invariants

i n va r i an t i n t my Inva r i a n t = 42 ;

Value never changes

Can be stored in ROM

Cannot be referenced

The D2azel Team The D Programming Language 74 / 113

Page 127: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Types modi�ers

Types modi�ers

Constants

i n t myVar = 42 ;const ( i n t ∗) myConstPtr ;myConstPtr = &myVar ;

Value cannot change through const variables

Value can change elsewhere in the program

Cannot be stored in ROM

May be "const" referenced

The D2azel Team The D Programming Language 74 / 113

Page 128: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Types modi�ers

Types modi�ers

Finals

f i n a l i n t myFina l ;myFina l = 42 ;

Value cannot be changed after the �rst assignment

The D2azel Team The D Programming Language 74 / 113

Page 129: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Types modi�ers

Types modi�ers

Multiple modi�er in C++

const i n t ∗ const∗ myVar ;i n t const∗ const∗ myVar ;

Value cannot be changed after the �rst assignment

Multiple modi�er in D

const ( i n t ∗)∗ myVar ;

Value cannot be changed after the �rst assignment

The D2azel Team The D Programming Language 74 / 113

Page 130: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Types modi�ers

Types modi�ers

Invariant methods

c l a s s MyClass : MyParentClass My In t e r f a c e{

i n va r i an t MyType myMethod (MyType myArg ){}

}

Ensure that nothing referenced bt this can change

The D2azel Team The D Programming Language 74 / 113

Page 131: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Simple template declaration

Simple template declaration

In C++

template<typename T>T myFunction (T myArg ) ;

In D

T myFunction (T) (T myArg ){}

The D2azel Team The D Programming Language 75 / 113

Page 132: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Simple template declaration

Simple template declaration

Caracteristics

Non ambiguous

Not limited to integral values and types

Flexible (see further)

Need to be correct, even if not used

Importable

The D2azel Team The D Programming Language 75 / 113

Page 133: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Simple template declaration

Simple template declaration

Class or struct template

c l a s s MyClass (T){}s t ruc t MyStruct (T){}

The D2azel Team The D Programming Language 75 / 113

Page 134: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Simple template usage

Simple template usage

In C++

myFunction<MyType>(myArg ) ;

In D

myFunction ! (MyType ) (myArg ) ;

The D2azel Team The D Programming Language 76 / 113

Page 135: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Simple template usage

Simple template usage

... Or even simpler, in C++

myFunction (myArg ) ;

... Or in D

myFunction (myArg ) ;

The D2azel Team The D Programming Language 76 / 113

Page 136: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Multiple templates

Multiple templates

In C++

template<typename T> T myFunction (T myArg ) ;template<typename T> T myVar ;

template MyTemplate (T){

T myFunction (T myArg ){}T myVar ;

}

The D2azel Team The D Programming Language 77 / 113

Page 137: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Multiple templates

Multiple templates

Usage

MyTemplate ! (MyType ) . myFunction (myArg ) ;MyTemplate ! (MyType ) . myVar ;

The D2azel Team The D Programming Language 77 / 113

Page 138: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Complex template declaration

Complex template declaration

template MyTemplate (T: T∗){}template MyTemplate (T: T[U] , U){}

The D2azel Team The D Programming Language 78 / 113

Page 139: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Complex template declaration

Complex template declaration

Caracteristics

Allow complex template patterns

Compatible with inheritance

The D2azel Team The D Programming Language 78 / 113

Page 140: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Complex template declaration

Complex template declaration

Default parameters

template MyTemplate (T: T[U] , U = i n t ){}template MyTemplate (T, U = T∗){}

The D2azel Team The D Programming Language 78 / 113

Page 141: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Flexible templates

Flexible templates

template MyTemplate ( a l i a s T){}

Allows complex template patterns

Compatible with inheritance

The D2azel Team The D Programming Language 79 / 113

Page 142: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Tuple parametrized templates

Tuple parametrized templates

template myTemplate (T . . . ){

void myFunction (T myTuple ){}

}

Allow complex template patterns

Allow factorization of tuple functions

The D2azel Team The D Programming Language 80 / 113

Page 143: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Using templates and delegates for curry�cation

Using templates and delegates for curry�cation

See http://www.digitalmars.com/d/template.html

Allow partial application of functions

The D2azel Team The D Programming Language 81 / 113

Page 144: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Metaprogrammation

Metaprogrammation

u int f a c t ( i n t n ){

i f ( n == 1)return 1 ;

e l s e

return n ∗ f a c t ( n − 1 ) ;}

No need to use templates in D

Also no need to use inline functions

The D2azel Team The D Programming Language 82 / 113

Page 145: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Exception creation

Exception creation

Usage

throw new Excep t i on ;

Throw an exception

The D2azel Team The D Programming Language 83 / 113

Page 146: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Exception handling

Exception handling

Usage

t ry

{}catch ( MyExceptionType myExcept ion ){}

Catch an exception

The D2azel Team The D Programming Language 84 / 113

Page 147: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Finally clause

Finally clause

Usage

t ry

{}f i n a l l y

{}

Executed wherever the �ow is directed to

The D2azel Team The D Programming Language 85 / 113

Page 148: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

With

With

Usage

with ( myObject ){

f i e l d 1 = va l u e1 ;f i e l d 2 = va l u e2 ;

}

The D2azel Team The D Programming Language 86 / 113

Page 149: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Deprecated

Deprecated

Deprecated code

deprecated

{void dep r e c a t edFunc t i on ( ){}

}

Generates warnings

May generate errors

The D2azel Team The D Programming Language 87 / 113

Page 150: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Volatile

Volatile

Volatile statement

v o l a t i l e

{a = ∗ sharedMemory ;

}

Safe variables access

Concurrent threads

The D2azel Team The D Programming Language 88 / 113

Page 151: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Synchronized

Synchronized

Synchronized statement

synchronized

{i f ( a c t i o n = Act ion .ADD)

c r e d i t += va l u e ;e l s e

c r e d i t −= va l u e ;}

One execution at a time

Concurrent threads

The D2azel Team The D Programming Language 89 / 113

Page 152: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Scope

Scope

In scope variable

whi le ( c o n d i t i o n ){

scope MyType myVar ;// Something u s e f u l

} // myVar i s d e s t r o y ed he r e

Control over garbage collection

The variable in destroyed out of scope

The D2azel Team The D Programming Language 90 / 113

Page 153: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Special scopes

Special scopes

Success scope

doSomething ( ){

scope ( s u c c e s s ){}

}

Run at successful exit

Called before the destructor

The D2azel Team The D Programming Language 91 / 113

Page 154: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Special scopes

Special scopes

Failure scope

doSomething ( ){

scope ( f a i l u r e ){}

}

Run at forced exit

Called before the destructor

The D2azel Team The D Programming Language 91 / 113

Page 155: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Special scopes

Special scopes

Exit scope

doSomething ( ){

scope ( e x i t ){}

}

Run after any exit

Called after the destructor

The D2azel Team The D Programming Language 91 / 113

Page 156: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

ASM scopes

ASM scopes

Usage

i n t myAdd( i n t x ){

asm

{mov EAX, x [EBP ] ;

}}

Full control over the machine

Fully integrated in D language

The D2azel Team The D Programming Language 92 / 113

Page 157: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Assert

Assert

Usage

as se r t ( p r e d i c a t e ) ;

Throw an exception

The D2azel Team The D Programming Language 93 / 113

Page 158: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Input contracts

Input contracts

Usage

MyType myFunction (MyType myArg )i n

{}body

{}

Throw an exception

Not in release version

Evaluated before the function is called

Not inherited

The D2azel Team The D Programming Language 94 / 113

Page 159: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Output contracts

Output contracts

Usage

MyType myFunction (MyType myArg )out ( r e s u l t ){}body

{}

Throw an exception

Not in release version

Evaluated after the function has returned

Inherited

The D2azel Team The D Programming Language 95 / 113

Page 160: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Class invariants

Class invariants

Usage

c l a s s MyClass{

MyType myAt t r i bu te ;i n va r i an t ( ){

as se r t ( somePred i ca te ) ;}

}

Predicates than never change

The D2azel Team The D Programming Language 96 / 113

Page 161: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Unit tests

Unit tests

Usage

c l a s s MyClass{

MyType myAt t r i bu te ;un i t t e s t

{as se r t ( somePred i ca te ) ;

}}

Executed when compiling with -unittest switch

The D2azel Team The D Programming Language 97 / 113

Page 162: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Static if

Static if

Usage

c l a s s MyClass (T){

s t a t i c i f ( i s (T [ ] ) )MyType myMethod ( ){}

}

The D2azel Team The D Programming Language 98 / 113

Page 163: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Static assert

Static assert

Usage

s t a t i c_ a s s e r t ( myPred icate ) ;

The D2azel Team The D Programming Language 99 / 113

Page 164: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Version

Version

Usage

vers ion (Win64 ){}vers ion (X86_64){}

The D2azel Team The D Programming Language 100 / 113

Page 165: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Debug

Debug

Usage

debug ( debugLeve l ){}debug ( debugId ){}

The D2azel Team The D Programming Language 101 / 113

Page 166: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Pragma

Pragma

Usage

pragma ( ExtensionName ){}

Add features to the compiler

Proprietary extensions

Example

pragma (msg , " He l l o wor ld ! " ) ;

The D2azel Team The D Programming Language 102 / 113

Page 167: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Code organisation Base types Operators Flow control Functions Custom types Templates Exceptions Scopes Contracts Compilation inline ASM

Fully functional inline asm

Fully functional inline asm

Labelized asm

Easy acces to member of aggregate

Easy acces to stack variables (cdecl convetion)

The D2azel Team The D Programming Language 103 / 113

Page 168: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Phobos Tango Arclib dSource.org

Part III

Libraries

The D2azel Team The D Programming Language 104 / 113

Page 169: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Phobos Tango Arclib dSource.org

Phobos - Aim

Phobos - Aim

Provide a standard library to handle common task.

std.conv : equivalent for atoi(), atol(). . . with error handling(over�ow, whitespaces...)

std.ctype : ASCII character classi�cation functions such asislower(dchar c), isspace(dchar c). . .

std.�le : File handling. Common functions like read(constchar[] name) and other features such as listdir(<...>),copy(<...>). . .

std.stdio : Common function such as writef(...),readln(_iobuf* fp = stdin)

std.stream : Stream handling, with read(out byte x),readLine(), writeLine(const(char)[] s). . .

std.c.* : libc

The D2azel Team The D Programming Language 105 / 113

Page 170: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Phobos Tango Arclib dSource.org

Extra Features of Phobos

Extra Features of Phobos

Some features that can help to make co�e.

std.boxer : Put heap and value type in box type. (allow to putdi�erent objects in the same list of box)

std.cpuid : Give information such as vendor, if mmx ispresent. . . on CPU at runtime (only for x86)

std.uni : Like std.ctype but for Unicode character

std.gc : Advanced garbage collector operation. Allow to runfull collection, enable or disable GC, and a lot more.

std.traits : Template to got information on type during compiltime

std.zip / std.zlib : Compression handling

http://digitalmars.com/d/phobos/phobos.html

The D2azel Team The D Programming Language 106 / 113

Page 171: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Phobos Tango Arclib dSource.org

Extra Features of Phobos

Extra Features of Phobos

Some features that can help to make co�e.

std.boxer : Put heap and value type in box type. (allow to putdi�erent objects in the same list of box)

std.cpuid : Give information such as vendor, if mmx ispresent. . . on CPU at runtime (only for x86)

std.uni : Like std.ctype but for Unicode character

std.gc : Advanced garbage collector operation. Allow to runfull collection, enable or disable GC, and a lot more.

std.traits : Template to got information on type during compiltime

std.zip / std.zlib : Compression handling

http://digitalmars.com/d/phobos/phobos.html

The D2azel Team The D Programming Language 106 / 113

Page 172: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Phobos Tango Arclib dSource.org

Tango - Features

Tango - Features

Provide another standard library with new functionalities.

Like in Phobos

tango.core.Memory : Garbage collector operation

tango.core.Traits : Type information during compil time

tango.stdc.* : libc

Not in Phobos

tango.core.Variant : Variant like in Boost (union with dynamictype checking)

tango.net.* : Class handling a lot of protocol such as ftp withtango.net.ftp.FtpClient, http with tango.net.http.HttpClient. . .

tango.io.digest.* : Digest algorithm like md5, sha1, crc32. . .

http://dsource.org/projects/tango/docs/current/The D2azel Team The D Programming Language 107 / 113

Page 173: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Phobos Tango Arclib dSource.org

Tango - Features

Tango - Features

Provide another standard library with new functionalities.

Like in Phobos

tango.core.Memory : Garbage collector operation

tango.core.Traits : Type information during compil time

tango.stdc.* : libc

Not in Phobos

tango.core.Variant : Variant like in Boost (union with dynamictype checking)

tango.net.* : Class handling a lot of protocol such as ftp withtango.net.ftp.FtpClient, http with tango.net.http.HttpClient. . .

tango.io.digest.* : Digest algorithm like md5, sha1, crc32. . .

http://dsource.org/projects/tango/docs/current/The D2azel Team The D Programming Language 107 / 113

Page 174: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Phobos Tango Arclib dSource.org

Arclib is Based on

Arclib is Based on

Based on

OpenGL

OpenAL

SDL

SDL_image

FreeType

The D2azel Team The D Programming Language 108 / 113

Page 175: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Phobos Tango Arclib dSource.org

Arclib Features

Arclib Features

Features

Font Rendering

2D Physics Engine

Easy access to input

Easy GUI system

DOM XML parser

Loading png/jpg/tga/bmp/gif/pcx/lbm/xpm/pnm graphics�les

Font Rendering

http://dsource.org/projects/arclib#[email protected]

The D2azel Team The D Programming Language 109 / 113

Page 176: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Phobos Tango Arclib dSource.org

Arclib Features

Arclib Features

Features

Font Rendering

2D Physics Engine

Easy access to input

Easy GUI system

DOM XML parser

Loading png/jpg/tga/bmp/gif/pcx/lbm/xpm/pnm graphics�les

Font Rendering

http://dsource.org/projects/arclib#[email protected]

The D2azel Team The D Programming Language 109 / 113

Page 177: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Phobos Tango Arclib dSource.org

Must See

Must See

See : http://dsource.org/projects/

The D2azel Team The D Programming Language 110 / 113

Page 178: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Phobos Tango Arclib dSource.org

Must See

Conclusion

To remember

A cool language with advanced features

A cool community

A cool presentation

To go further

Ask us

Read the language reference

Join the forums

Try it by yourself

The D2azel Team The D Programming Language 111 / 113

Page 179: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Phobos Tango Arclib dSource.org

Must See

Questions

Any question ?

The D2azel Team The D Programming Language 112 / 113

Page 180: The D Programming Language - Jérémie Roquet · The D programming language The tools The libraries Presentation A short introduction to basic concepts oT make you discover a cool

Phobos Tango Arclib dSource.org

Must See

Bibliography

Useful links

http://www.digitalmars.com/d/ � The o�cial D reference

The D2azel Team The D Programming Language 113 / 113


Recommended