Nell’iperspazio con Rocket: il Framework Web di Rust!
Fudcon D programming
1. D Programming
.
Jonathan MERCIER
Introduction
D Programming
Object
. In nutshell
Functional
Meta-programming
Parallelism
Ressource Management
Contract Jonathan MERCIER
System and Safe Code
Reference and pointer
Generics
Inference
Loops
Functions December 9, 2012
Debugs
Versions
Requirement
Editors
Basics
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
. 1/122
.
Let start it!
D Programming .
. . .
Forward
.
GTK D
2. D Programming
Jonathan MERCIER
Plan
..
1 Introduction
Introduction Object
Object Functional
Functional Meta-programming
Meta-programming
Parallelism
Parallelism
Ressource Management
Ressource Management
Contract
System and Safe Code
Contract
Reference and pointer
System and Safe Code
Generics
Reference and pointer
Inference
Generics
Loops
Inference
Functions
Loops Debugs
Functions Versions
Debugs Requirement
Versions Editors
Requirement .
2 Basics
Editors My first D program
Types
Basics Arrays
My first D program String and characters
Types Const and Immutable
Arrays Input/Output
String and characters Algorithm
Const and Immutable Structure and Class
Input/Output Template
Algorithm Miscellanous
Structure and Class
Let start it!
.
3 GTK D
Template
.
4 Thanks To
Miscellanous
.
.
. .
2/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
3. D Programming
Jonathan MERCIER
Before starting
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
Contract
System and Safe Code
Reference and pointer
Generics
Inference
Loops
Functions
Debugs
Versions
Requirement
Editors
Basics
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. .
3/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
4. D Programming
Jonathan MERCIER
Why a new language?
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management .
Contract Few significant dates
System and Safe Code .
Reference and pointer C++ 1983
Generics
Inference
Loops
Functions
Debugs
Versions
Requirement
Editors
Basics
My first D program .
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. .
4/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
5. D Programming
Jonathan MERCIER
Why a new language?
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management .
Contract Few significant dates
System and Safe Code .
Reference and pointer C++ 1983
Generics
Inference
Loops
Java 1990
Functions
Debugs
Versions
Requirement
Editors
Basics
My first D program .
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. .
4/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
6. D Programming
Jonathan MERCIER
Why a new language?
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management .
Contract Few significant dates
System and Safe Code .
Reference and pointer C++ 1983
Generics
Inference
Loops
Java 1990
Functions
Debugs
Python 1995
Versions
Requirement
Editors
Basics
My first D program .
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. .
4/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
7. D Programming
Jonathan MERCIER
Why a new language?
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management .
Contract Few significant dates
System and Safe Code .
Reference and pointer C++ 1983
Generics
Inference
Loops
Java 1990
Functions
Debugs
Python 1995
Versions
Requirement Ruby 1995
Editors
Basics
My first D program .
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. .
4/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
8. D Programming
Jonathan MERCIER
Why a new language?
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management .
Contract Few significant dates
System and Safe Code .
Reference and pointer C++ 1983
Generics
Inference
Loops
Java 1990
Functions
Debugs
Python 1995
Versions
Requirement Ruby 1995
And now?
Editors
Basics
My first D program .
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. .
4/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
9. D Programming
Jonathan MERCIER
What is D programming?
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
Contract
System and Safe Code
D is a modern language programming inspired by:
Reference and pointer
Generics
C++
Inference
Loops Java
Functions
Debugs Haskell
Versions
Requirement Python
Editors
Basics Ruby
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. .
5/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
10. D Programming
Jonathan MERCIER
Why a new language?
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
Contract
System and Safe Code .
Reference and pointer D Combines
Generics .
Inference Modeling Power
Loops
Functions
Debugs
Versions
.
Requirement
Editors
Basics
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
.
. .
6/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
11. D Programming
Jonathan MERCIER
Why a new language?
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
Contract
System and Safe Code .
Reference and pointer D Combines
Generics .
Inference Modeling Power
Loops
Functions
Debugs
Modern Convenience
Versions
.
Requirement
Editors
Basics
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
.
. .
6/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
12. D Programming
Jonathan MERCIER
Why a new language?
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
Contract
System and Safe Code .
Reference and pointer D Combines
Generics .
Inference Modeling Power
Loops
Functions
Debugs
Modern Convenience
Versions
Native Efficiency
.
Requirement
Editors
Basics
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
.
. .
6/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
13. D Programming
Jonathan MERCIER
Plan
..
1 Introduction
Introduction Object
Object Functional
Functional Meta-programming
Meta-programming
Parallelism
Parallelism
Ressource Management
Ressource Management
Contract
System and Safe Code
Contract
Reference and pointer
System and Safe Code
Generics
Reference and pointer
Inference
Generics
Loops
Inference
Functions
Loops Debugs
Functions Versions
Debugs Requirement
Versions Editors
Requirement .
2 Basics
Editors My first D program
Types
Basics Arrays
My first D program String and characters
Types Const and Immutable
Arrays Input/Output
String and characters Algorithm
Const and Immutable Structure and Class
Input/Output Template
Algorithm Miscellanous
Structure and Class
Let start it!
.
3 GTK D
Template
.
4 Thanks To
Miscellanous
.
.
. . .
7/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
14. D Programming
Jonathan MERCIER
Object
Introduction
Object
Functional
Meta-programming .
Parallelism
Ressource Management
Interface
Contract 1 interface foo { …}
System and Safe Code .
Reference and pointer
Generics
Inference
Loops
Functions
Debugs
Versions
Requirement
Editors
Basics
My first D program
Types
Arrays
String and characters .
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . .
8/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
15. D Programming
Jonathan MERCIER
Object
Introduction
Object
Functional
Meta-programming .
Parallelism
Ressource Management
Interface
Contract 1 interface foo { …}
System and Safe Code .
Reference and pointer
Generics class
Inference
Loops
1 class bar { …}
Functions .
Debugs
Versions
Requirement
Editors
Basics
My first D program
Types
Arrays
String and characters .
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . .
8/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
16. D Programming
Jonathan MERCIER
Object
Introduction
Object
Functional
Meta-programming .
Parallelism
Ressource Management
Interface
Contract 1 interface foo { …}
System and Safe Code .
Reference and pointer
Generics class
Inference
Loops
1 class bar { …}
Functions .
Debugs
Versions inheritance
Requirement
1 class bar: foo { …}
Editors
.
Basics
My first D program
Types
Arrays
String and characters .
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . .
8/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
17. D Programming
Jonathan MERCIER
Object
Introduction
Object
Functional
Meta-programming .
Parallelism
Ressource Management
Interface
Contract 1 interface foo { …}
System and Safe Code .
Reference and pointer
Generics class
Inference
Loops
1 class bar { …}
Functions .
Debugs
Versions inheritance
Requirement
1 class bar: foo { …}
Editors
.
Basics
My first D program multi class inheritance not allowed, instead used
Types
Arrays interface.
String and characters .
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . .
8/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
18. D Programming
Jonathan MERCIER
Plan
..
1 Introduction
Introduction Object
Object Functional
Functional Meta-programming
Meta-programming
Parallelism
Parallelism
Ressource Management
Ressource Management
Contract
System and Safe Code
Contract
Reference and pointer
System and Safe Code
Generics
Reference and pointer
Inference
Generics
Loops
Inference
Functions
Loops Debugs
Functions Versions
Debugs Requirement
Versions Editors
Requirement .
2 Basics
Editors My first D program
Types
Basics Arrays
My first D program String and characters
Types Const and Immutable
Arrays Input/Output
String and characters Algorithm
Const and Immutable Structure and Class
Input/Output Template
Algorithm Miscellanous
Structure and Class
Let start it!
.
3 GTK D
Template
.
4 Thanks To
Miscellanous
.
.
. . .
9/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
19. D Programming
Jonathan MERCIER
Functional
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
.
Contract Data immutability
System and Safe Code
Reference and pointer
1 immutable int[] a = [ 4, 6, 1, 2];
Generics .
Inference
Loops
Functions
Debugs
Versions
Requirement
Editors
Basics
My first D program
Types
.
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . .
10/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
20. D Programming
Jonathan MERCIER
Functional
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
.
Contract Data immutability
System and Safe Code
Reference and pointer
1 immutable int[] a = [ 4, 6, 1, 2];
Generics .
Inference
Loops Pure functions
Functions
1 pure int square(int x) { return x * x; }
Debugs
Versions
.
Requirement
Editors
Basics
My first D program
Types
.
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . .
10/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
21. D Programming
Jonathan MERCIER
Functional
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
.
Contract Data immutability
System and Safe Code
Reference and pointer
1 immutable int[] a = [ 4, 6, 1, 2];
Generics .
Inference
Loops Pure functions
Functions
1 pure int square(int x) { return x * x; }
Debugs
Versions
.
Requirement
Editors Lambda functions
1 a.sort!( (x,y) => x < y ); // [ 1, 2, 4, 6 ]
Basics
.
My first D program
Types
.
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . .
10/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
22. D Programming
Jonathan MERCIER
Plan
..
1 Introduction
Introduction Object
Object Functional
Functional Meta-programming
Meta-programming
Parallelism
Parallelism
Ressource Management
Ressource Management
Contract
System and Safe Code
Contract
Reference and pointer
System and Safe Code
Generics
Reference and pointer
Inference
Generics
Loops
Inference
Functions
Loops Debugs
Functions Versions
Debugs Requirement
Versions Editors
Requirement .
2 Basics
Editors My first D program
Types
Basics Arrays
My first D program String and characters
Types Const and Immutable
Arrays Input/Output
String and characters Algorithm
Const and Immutable Structure and Class
Input/Output Template
Algorithm Miscellanous
Structure and Class
Let start it!
.
3 GTK D
Template
.
4 Thanks To
Miscellanous
.
.
. . . .
11/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
23. D Programming
Jonathan MERCIER
Meta-programming
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
Contract .
System and Safe Code Combination of
Reference and pointer .
Generics templates
Inference
Loops
Functions
Debugs
Versions
Requirement
Editors
Basics
.
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . . .
12/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
24. D Programming
Jonathan MERCIER
Meta-programming
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
Contract .
System and Safe Code Combination of
Reference and pointer .
Generics templates
Inference
Loops
Functions
compile time function execution
Debugs
Versions
Requirement
Editors
Basics
.
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . . .
12/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
25. D Programming
Jonathan MERCIER
Meta-programming
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
Contract .
System and Safe Code Combination of
Reference and pointer .
Generics templates
Inference
Loops
Functions
compile time function execution
Debugs
Versions
tuples
Requirement
Editors
Basics
.
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . . .
12/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
26. D Programming
Jonathan MERCIER
Meta-programming
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
Contract .
System and Safe Code Combination of
Reference and pointer .
Generics templates
Inference
Loops
Functions
compile time function execution
Debugs
Versions
tuples
Requirement
Editors string mixins
Basics
.
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . . .
12/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
27. D Programming
Jonathan MERCIER
Meta-programming
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
Contract
System and Safe Code
Reference and pointer Code 1: Example
Generics
1 template Factorial(ulong n){
Inference 2 static if(n < 2)
Loops 3 const Factorial = 1;
Functions 4 else
Debugs 5 const Factorial = n * Factorial!(n − 1);
Versions 6 }
Requirement 7 const ulong var = Factorial!( 8 ); // compute at compile−time
Editors .
Basics
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . . .
13/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
28. D Programming
Jonathan MERCIER
Plan
..
1 Introduction
Introduction Object
Object Functional
Functional Meta-programming
Meta-programming
Parallelism
Parallelism
Ressource Management
Ressource Management
Contract
System and Safe Code
Contract
Reference and pointer
System and Safe Code
Generics
Reference and pointer
Inference
Generics
Loops
Inference
Functions
Loops Debugs
Functions Versions
Debugs Requirement
Versions Editors
Requirement .
2 Basics
Editors My first D program
Types
Basics Arrays
My first D program String and characters
Types Const and Immutable
Arrays Input/Output
String and characters Algorithm
Const and Immutable Structure and Class
Input/Output Template
Algorithm Miscellanous
Structure and Class
Let start it!
.
3 GTK D
Template
.
4 Thanks To
Miscellanous
.
.
. . . .
14/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
29. D Programming
Jonathan MERCIER
Parallelism
Introduction
Object
Functional
Meta-programming .
Parallelism
Ressource Management
module to use
Contract 1 import std.parallelism;
System and Safe Code .
Reference and pointer
Generics
Inference
Loops
Functions
Debugs
Versions
Requirement
Editors
Basics
My first D program
Types
Arrays
String and characters .
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. .. .
15/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
30. D Programming
Jonathan MERCIER
Parallelism
Introduction
Object
Functional
Meta-programming .
Parallelism
Ressource Management
module to use
Contract 1 import std.parallelism;
System and Safe Code .
Reference and pointer
Generics parallel loop
Inference
Loops 1 foreach( i; parallel( list ) ){ …}
Functions .
Debugs
Versions
Requirement
Editors
Basics
My first D program
Types
Arrays
String and characters .
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. .. .
15/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
31. D Programming
Jonathan MERCIER
Parallelism
Introduction
Object
Functional
Meta-programming .
Parallelism
Ressource Management
module to use
Contract 1 import std.parallelism;
System and Safe Code .
Reference and pointer
Generics parallel loop
Inference
Loops 1 foreach( i; parallel( list ) ){ …}
Functions .
Debugs
Versions
Requirement
Pool thread
Editors
1 void myfunction( int param1, int param 2 ){ …}
2 auto myTask = task!myfunction( param1, param2 );
Basics 3 taskPool.put( myTask );
My first D program 4 doSomething(); // another work in parallel
Types 5 taskPool.finish( true ); // wait alls jobs ending
Arrays .
String and characters .
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. .. .
15/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
32. D Programming
Jonathan MERCIER
Plan
..
1 Introduction
Introduction Object
Object Functional
Functional Meta-programming
Meta-programming
Parallelism
Parallelism
Ressource Management
Ressource Management
Contract
System and Safe Code
Contract
Reference and pointer
System and Safe Code
Generics
Reference and pointer
Inference
Generics
Loops
Inference
Functions
Loops Debugs
Functions Versions
Debugs Requirement
Versions Editors
Requirement .
2 Basics
Editors My first D program
Types
Basics Arrays
My first D program String and characters
Types Const and Immutable
Arrays Input/Output
String and characters Algorithm
Const and Immutable Structure and Class
Input/Output Template
Algorithm Miscellanous
Structure and Class
Let start it!
.
3 GTK D
Template
.
4 Thanks To
Miscellanous
.
.
. .
. . .
16/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
33. D Programming
Jonathan MERCIER
Ressource Management
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
Contract
System and Safe Code
Reference and pointer Code 2: Example
Generics
Inference
1 File f = File( ”myfile.txt”, ”r”);
Loops
2 scope(exit) f.close();
3 lockFile( f );
Functions
4 doFoo( f );
Debugs
5 scope(success) doBar( f );
Versions
6 scope(failure) unlock( f );
Requirement
Editors
.
Basics
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . . . .
17/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
34. D Programming
Jonathan MERCIER
Plan
..
1 Introduction
Introduction Object
Object Functional
Functional Meta-programming
Meta-programming
Parallelism
Parallelism
Ressource Management
Ressource Management
Contract
System and Safe Code
Contract
Reference and pointer
System and Safe Code
Generics
Reference and pointer
Inference
Generics
Loops
Inference
Functions
Loops Debugs
Functions Versions
Debugs Requirement
Versions Editors
Requirement .
2 Basics
Editors My first D program
Types
Basics Arrays
My first D program String and characters
Types Const and Immutable
Arrays Input/Output
String and characters Algorithm
Const and Immutable Structure and Class
Input/Output Template
Algorithm Miscellanous
Structure and Class
Let start it!
.
3 GTK D
Template
.
4 Thanks To
Miscellanous
.
.
. . . . .
18/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
35. D Programming
Jonathan MERCIER
Contract
Introduction
Object .
Functional check a statement
Meta-programming
1 assert( var != null );
Parallelism
Ressource Management
.
Contract
System and Safe Code
Reference and pointer
Generics
Inference
Loops
Functions
Debugs
Versions
Requirement
Editors
Basics
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
.
Template
Miscellanous
.
.
. . . . .
19/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
36. D Programming
Jonathan MERCIER
Contract
Introduction
Object .
Functional check a statement
Meta-programming
1 assert( var != null );
Parallelism
Ressource Management
.
Contract
System and Safe Code check before entering into a function
Reference and pointer
1 double foo ( int a )
Generics
2 in{ assert( a > 0 ); }
Inference
3 body { return a − 2; }
Loops
Functions
.
Debugs
Versions
Requirement
Editors
Basics
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
.
Template
Miscellanous
.
.
. . . . .
19/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
37. D Programming
Jonathan MERCIER
Contract
Introduction
Object .
Functional check a statement
Meta-programming
1 assert( var != null );
Parallelism
Ressource Management
.
Contract
System and Safe Code check before entering into a function
Reference and pointer
1 double foo ( int a )
Generics
2 in{ assert( a > 0 ); }
Inference
3 body { return a − 2; }
Loops
Functions
.
Debugs
Versions check at function exit
Requirement 1 int foo ( int a )
Editors 2 out{ assert( a > 0 ); }
3 body { return a − 2; }
Basics
My first D program
.
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
.
Template
Miscellanous
.
.
. . . . .
19/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
38. D Programming
Jonathan MERCIER
Contract
Introduction
Object .
Functional check a statement
Meta-programming
1 assert( var != null );
Parallelism
Ressource Management
.
Contract
System and Safe Code check before entering into a function
Reference and pointer
1 double foo ( int a )
Generics
2 in{ assert( a > 0 ); }
Inference
3 body { return a − 2; }
Loops
Functions
.
Debugs
Versions check at function exit
Requirement 1 int foo ( int a )
Editors 2 out{ assert( a > 0 ); }
3 body { return a − 2; }
Basics
My first D program
.
-release flag will not compute contract
Types
Arrays
String and characters
Const and Immutable $ ldc2 -release foo.d
Input/Output
.
Algorithm
Structure and Class
.
Template
Miscellanous
.
.
. . . . .
19/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
39. D Programming
Jonathan MERCIER
Plan
..
1 Introduction
Introduction Object
Object Functional
Functional Meta-programming
Meta-programming
Parallelism
Parallelism
Ressource Management
Ressource Management
Contract
System and Safe Code
Contract
Reference and pointer
System and Safe Code
Generics
Reference and pointer
Inference
Generics
Loops
Inference
Functions
Loops Debugs
Functions Versions
Debugs Requirement
Versions Editors
Requirement .
2 Basics
Editors My first D program
Types
Basics Arrays
My first D program String and characters
Types Const and Immutable
Arrays Input/Output
String and characters Algorithm
Const and Immutable Structure and Class
Input/Output Template
Algorithm Miscellanous
Structure and Class
Let start it!
.
3 GTK D
Template
.
4 Thanks To
Miscellanous
.
.
. . . . .
20/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
40. D Programming
Jonathan MERCIER
System and Safe Code
Introduction
Object
Functional .
Meta-programming
System and Safe Code
Parallelism
.
Ressource Management
Contract
Safe functions are functions that are statically checked
System and Safe Code
Reference and pointer
to have no possibility of undefined behavior.
Generics
Inference
Loops
Functions
Debugs Undefined behavior is often used as a vector for
Versions
Requirement malicious attacks.
Editors
Basics
My first D program
Types
Arrays Functions are marked with attributes: @safe,
String and characters
Const and Immutable
@system, @trusted
.
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . . . . .
21/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
41. D Programming
Jonathan MERCIER
Plan
..
1 Introduction
Introduction Object
Object Functional
Functional Meta-programming
Meta-programming
Parallelism
Parallelism
Ressource Management
Ressource Management
Contract
System and Safe Code
Contract
Reference and pointer
System and Safe Code
Generics
Reference and pointer
Inference
Generics
Loops
Inference
Functions
Loops Debugs
Functions Versions
Debugs Requirement
Versions Editors
Requirement .
2 Basics
Editors My first D program
Types
Basics Arrays
My first D program String and characters
Types Const and Immutable
Arrays Input/Output
String and characters Algorithm
Const and Immutable Structure and Class
Input/Output Template
Algorithm Miscellanous
Structure and Class
Let start it!
.
3 GTK D
Template
.
4 Thanks To
Miscellanous
.
.
. . . . . .
22/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
42. D Programming
Jonathan MERCIER
Reference and pointer
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
.
Contract Pointers exist only to create C interface code
System and Safe Code
1 int* a = cFunction( param );
Reference and pointer
Generics
.
Inference
Loops
Functions
Debugs
Versions
Requirement
Editors
Basics
My first D program
Types
.
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . . . . .
23/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
43. D Programming
Jonathan MERCIER
Reference and pointer
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
.
Contract Pointers exist only to create C interface code
System and Safe Code
1 int* a = cFunction( param );
Reference and pointer
Generics
.
Inference
Loops ref into function
Functions
1 void foo( ref int[] param ) { …}
Debugs
Versions
.
Requirement
Editors
Basics
My first D program
Types
.
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . . . . .
23/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
44. D Programming
Jonathan MERCIER
Reference and pointer
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
.
Contract Pointers exist only to create C interface code
System and Safe Code
1 int* a = cFunction( param );
Reference and pointer
Generics
.
Inference
Loops ref into function
Functions
1 void foo( ref int[] param ) { …}
Debugs
Versions
.
Requirement
Editors
ref into a loop
Basics 1 foreach( ref item ; list ){ …}
.
My first D program
Types
.
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . . . . .
23/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
45. D Programming
Jonathan MERCIER
Plan
..
1 Introduction
Introduction Object
Object Functional
Functional Meta-programming
Meta-programming
Parallelism
Parallelism
Ressource Management
Ressource Management
Contract
System and Safe Code
Contract
Reference and pointer
System and Safe Code
Generics
Reference and pointer
Inference
Generics
Loops
Inference
Functions
Loops Debugs
Functions Versions
Debugs Requirement
Versions Editors
Requirement .
2 Basics
Editors My first D program
Types
Basics Arrays
My first D program String and characters
Types Const and Immutable
Arrays Input/Output
String and characters Algorithm
Const and Immutable Structure and Class
Input/Output Template
Algorithm Miscellanous
Structure and Class
Let start it!
.
3 GTK D
Template
.
4 Thanks To
Miscellanous
.
.
. . . . . .
24/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
46. D Programming
Jonathan MERCIER .
Generic
Introduction
.
Object
class
Functional 1 class Foo( T ){ …}
Meta-programming 2 Foo!int instance = new Foo!(int)( param );
Parallelism .
Ressource Management
Contract
System and Safe Code
Reference and pointer
Generics
Inference
Loops
Functions
Debugs
Versions
Requirement
Editors
Basics
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
.
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . .. . .
25/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
47. D Programming
Jonathan MERCIER .
Generic
Introduction
.
Object
class
Functional 1 class Foo( T ){ …}
Meta-programming 2 Foo!int instance = new Foo!(int)( param );
Parallelism .
Ressource Management
Contract
System and Safe Code
structure
Reference and pointer 1 struct Foo( T ){ …}
Generics
2 Foo!int instance = Foo!int( param );
Inference .
Loops
Functions
Debugs
Versions
Requirement
Editors
Basics
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
.
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . .. . .
25/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
48. D Programming
Jonathan MERCIER .
Generic
Introduction
.
Object
class
Functional 1 class Foo( T ){ …}
Meta-programming 2 Foo!int instance = new Foo!(int)( param );
Parallelism .
Ressource Management
Contract
System and Safe Code
structure
Reference and pointer 1 struct Foo( T ){ …}
Generics
2 Foo!int instance = Foo!int( param );
Inference .
Loops
Functions function
Debugs
1 T foo( T )(T param){ …}
Versions
2 int var = foo!int( param );
Requirement
Editors
.
Basics
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
.
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . .. . .
25/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
49. D Programming
Jonathan MERCIER .
Generic
Introduction
.
Object
class
Functional 1 class Foo( T ){ …}
Meta-programming 2 Foo!int instance = new Foo!(int)( param );
Parallelism .
Ressource Management
Contract
System and Safe Code
structure
Reference and pointer 1 struct Foo( T ){ …}
Generics
2 Foo!int instance = Foo!int( param );
Inference .
Loops
Functions function
Debugs
1 T foo( T )(T param){ …}
Versions
2 int var = foo!int( param );
Requirement
Editors
.
Basics macro
My first D program
1 template TFoo( T )( T param ){ immutable T f = param + 3;
Types
}
Arrays
2 int a = TFoo!int( 4 ) ; // return 7 at compile time
String and characters
.
Const and Immutable
Input/Output
.
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . .. . .
25/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
50. D Programming
Jonathan MERCIER
Plan
..
1 Introduction
Introduction Object
Object Functional
Functional Meta-programming
Meta-programming
Parallelism
Parallelism
Ressource Management
Ressource Management
Contract
System and Safe Code
Contract
Reference and pointer
System and Safe Code
Generics
Reference and pointer
Inference
Generics
Loops
Inference
Functions
Loops Debugs
Functions Versions
Debugs Requirement
Versions Editors
Requirement .
2 Basics
Editors My first D program
Types
Basics Arrays
My first D program String and characters
Types Const and Immutable
Arrays Input/Output
String and characters Algorithm
Const and Immutable Structure and Class
Input/Output Template
Algorithm Miscellanous
Structure and Class
Let start it!
.
3 GTK D
Template
.
4 Thanks To
Miscellanous
.
.
. . .. . . .
26/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D
51. D Programming
Jonathan MERCIER
Inference
Introduction
Object
Functional
Meta-programming
Parallelism
Ressource Management
Contract .
System and Safe Code
Reference and pointer
auto for variable
Generics 1 size_t[] list = [ 0, 1, 2, 3, 4];
Inference 2 auto item = list[1]; // item type is size_t
Loops .
Functions
Debugs
Versions
Requirement
Editors
.
Basics
My first D program
Types
Arrays
String and characters
Const and Immutable
Input/Output
Algorithm
Structure and Class
Template
Miscellanous
.
.
. . . . . . .
27/122
.
Let start it!
D Programming . . . .
Back
.
.
. . .
Forward
.
GTK D