SlideShare a Scribd company logo
1 of 26
Download to read offline
Prehistory
● A hypothetical successor to C named “D” was
talked about on Usenet back in the 80's.
● Nothing much ever came of it
History
● Work began on D in late 1999
● D's first slashdot appearance
● http://developers.slashdot.org/story/01/08/15/23422
3/the-d-programming-language
● D1 released Jan 2007
● First D Conference 2007
D Today
● Rapid and dramatic development since D1
● International, worldwide development
community
● We're doing the impossible - developing a
major new language from grassroots support
● And what amazing grassroots support it is ...
Major Sponsors
● Facebook
● Sociomantic
● Remedy Games
● Andrew Edwards
Today
● Copy And Move Semantics
● Ali Çehreli
● Distributed Caching Compiler for D
● Robert Schadek
● Inside Regular Expressions
● Dmitry Olshansky
● Using D Alongside a Game Engine
● Manu Evans
● Concurrent Garbage Collection
● Leandro Lucarella
Tomorrow
● GDC
● Ian Buclaw
● Shared Libraries
● Martin Nowak
● C# to D
● Adam Wilson
● Web Development in D
● Vladimir Panteleev
● A Precise Garbage Collector for D
● Rainer Schütze
● Higgs, an Experimental JIT Compiler in D
● Maxime Chevalier-Boisvert
● Falling Down: the birth of kerönÅ
● Andrew Edwards
Friday
● Metaprogramming in the Real World
● Don Clugston
● Code Analysis for D with AnalyzeD
● Stefan Rohe
● D-Specific Design Patterns
● David Simcha
● LDC
● David Nadlinger
● Effective SIMD for modern architectures
● Manu Evans
● Writing Testable Code
● Ben Gertzfield
● Quo Vadis?
● Andrei Alexandrescu
Vision
● Easy to read & understand code
● Provably correct
● Industrial Quality
Easy To Read & Understand
● code that looks right is right
● minimal boilerplate
● code looks like the problem being solved
Code That Looks Right Is Right
● and code that looks wrong is wrong
void[] read(string name) {
DWORD numread;
auto namez = toMBSz(name);
auto h=CreateFileA(namez,GENERIC_READ,FILE_SHARE_READ,null, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,cast(HANDLE)null);
if (h == INVALID_HANDLE_VALUE) goto err1;
auto size = GetFileSize(h, null);
if (size == INVALID_FILE_SIZE) goto err2;
auto buf = std.gc.malloc(size);
if (buf) std.gc.hasNoPointers(buf.ptr);
if (ReadFile(h,buf.ptr,size,&numread,null) != 1) goto err2;
if (numread != size) goto err2;
if (!CloseHandle(h)) goto err;
return buf[0 .. size];
err2:
CloseHandle(h);
err:
delete buf;
err1:
throw new FileException(name, GetLastError());
}
Pre-Scope Version of file.read()
Using Scope – No Goto's
void[] read(in char[] name, size_t upTo = size_t.max) {
alias TypeTuple!(GENERIC_READ,
FILE_SHARE_READ, (SECURITY_ATTRIBUTES*).init, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,
HANDLE.init)
defaults;
auto h = CreateFileA(toMBSz(name), defaults);
cenforce(h != INVALID_HANDLE_VALUE, name);
scope(exit) cenforce(CloseHandle(h), name);
auto size = GetFileSize(h, null);
cenforce(size != INVALID_FILE_SIZE, name);
size = min(upTo, size);
auto buf = GC.malloc(size, GC.BlkAttr.NO_SCAN)[0 .. size];
scope(failure) delete buf;
DWORD numread = void;
cenforce(ReadFile(h,buf.ptr, size, &numread, null) == 1
&& numread == size, name);
return buf[0 .. size];
}
Minimal Boilerplate
“The IDE is great. With one key, I can add 100
lines of boilerplate!”
Looks Like the Problem Being
Solved
import std.stdio;
import std.array;
import std.algorithm;
void main() {
stdin.byLine(KeepTerminator.yes)
map!(a => a.idup).
array.
sort.
copy(
stdout.lockingTextWriter());
}
Provably Correct
● Provable memory safety
● Provable purity and immutability
● Contract programming
– No 'faith based' programming
Provable Memory Safety
● Memory safety means “no memory corruption”
● enabled with @safe attribute
● works by disallowing things like pointer arithmetic
● safety is transitive
● turtles all the way down
Provable Purity and Immutability
● solid foundation for functional programming
● FP has excellent track record of producing
robust, reliable programs
● major aid to understanding code
Toi Mine
Contract Programming
● some things can only be checked at runtime
● contracts are used to validate that assertions
about data are true
● (contracts are NOT for validating user input)
● can also be used by advanced optimizer to
generate better code
Industrial Quality
● No-compromise performance
● Scales to enormous programs
● Management tools
LTHS Industrial Tech Dept
No Compromise Performance
● Semantics that map directly onto
hardware
● basic types are typical native
machine types
● even SIMD types
● Uses modern optimizing back ends
● LLVM, GCC, Digital Mars
● Semantics amenable to powerful
optimization
Scales to Enormous Programs
● Separate compilation
● Strong encapsulation semantics
● no global namespace
● anti-hijacking
● voldemort types
● High speed compilation
Management Tools
● Documentation generation
● Unit test
● Coverage analysis
Conclusion
● D has fantastic support from the community
● Very strong technical content for this
conference
● D will be the premier language for high
performance high productivity computing

More Related Content

What's hot

The D Programming Language - Why I love it!
The D Programming Language - Why I love it!The D Programming Language - Why I love it!
The D Programming Language - Why I love it!
ryutenchi
 
Binary art - funky PoCs & visual docs
Binary art - funky PoCs & visual docsBinary art - funky PoCs & visual docs
Binary art - funky PoCs & visual docs
Ange Albertini
 

What's hot (10)

D programming language
D programming languageD programming language
D programming language
 
The D Programming Language - Why I love it!
The D Programming Language - Why I love it!The D Programming Language - Why I love it!
The D Programming Language - Why I love it!
 
Rust Programming Language
Rust Programming LanguageRust Programming Language
Rust Programming Language
 
Introduction to D programming language at Weka.IO
Introduction to D programming language at Weka.IOIntroduction to D programming language at Weka.IO
Introduction to D programming language at Weka.IO
 
Advanced Linux Game Programming
Advanced Linux Game ProgrammingAdvanced Linux Game Programming
Advanced Linux Game Programming
 
FregeDay: Design and Implementation of the language (Ingo Wechsung)
FregeDay: Design and Implementation of the language (Ingo Wechsung)FregeDay: Design and Implementation of the language (Ingo Wechsung)
FregeDay: Design and Implementation of the language (Ingo Wechsung)
 
Class[2][29th may] [javascript]
Class[2][29th may] [javascript]Class[2][29th may] [javascript]
Class[2][29th may] [javascript]
 
Natural Language to Visualization by Neural Machine Translation
Natural Language to Visualization by Neural Machine TranslationNatural Language to Visualization by Neural Machine Translation
Natural Language to Visualization by Neural Machine Translation
 
Binary art - funky PoCs & visual docs
Binary art - funky PoCs & visual docsBinary art - funky PoCs & visual docs
Binary art - funky PoCs & visual docs
 
FregeDay: Roadmap for resolving differences between Haskell and Frege (Ingo W...
FregeDay: Roadmap for resolving differences between Haskell and Frege (Ingo W...FregeDay: Roadmap for resolving differences between Haskell and Frege (Ingo W...
FregeDay: Roadmap for resolving differences between Haskell and Frege (Ingo W...
 

Similar to DConf 2013 Opening Keynote by Walter Bright

BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)
BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)
BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)
Ron Munitz
 
Programming for non tech entrepreneurs
Programming for non tech entrepreneursProgramming for non tech entrepreneurs
Programming for non tech entrepreneurs
Rodrigo Gil
 

Similar to DConf 2013 Opening Keynote by Walter Bright (20)

Tooling Matters - Development tools
Tooling Matters - Development toolsTooling Matters - Development tools
Tooling Matters - Development tools
 
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
 
Glimworm 21 11-13 (1)
Glimworm 21 11-13 (1)Glimworm 21 11-13 (1)
Glimworm 21 11-13 (1)
 
BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)
BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)
BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)
 
Flutter - Pixel by Pixel
Flutter - Pixel by PixelFlutter - Pixel by Pixel
Flutter - Pixel by Pixel
 
Glimworm 21-11-2013
Glimworm 21-11-2013Glimworm 21-11-2013
Glimworm 21-11-2013
 
Programming for non tech entrepreneurs
Programming for non tech entrepreneursProgramming for non tech entrepreneurs
Programming for non tech entrepreneurs
 
The Professional Programmer
The Professional ProgrammerThe Professional Programmer
The Professional Programmer
 
Full stack development
Full stack developmentFull stack development
Full stack development
 
Mob modcon 2015-android rom cooking tutorial
Mob modcon 2015-android rom cooking tutorialMob modcon 2015-android rom cooking tutorial
Mob modcon 2015-android rom cooking tutorial
 
Transitioning to Native
Transitioning to NativeTransitioning to Native
Transitioning to Native
 
Open Source Hardware (OSHW)...What About The Tools?
Open Source Hardware (OSHW)...What About The Tools?Open Source Hardware (OSHW)...What About The Tools?
Open Source Hardware (OSHW)...What About The Tools?
 
Go programming language
Go programming languageGo programming language
Go programming language
 
Pen Testing Development
Pen Testing DevelopmentPen Testing Development
Pen Testing Development
 
Computer Programming Overview
Computer Programming OverviewComputer Programming Overview
Computer Programming Overview
 
Reverse Engineering and It’s Basic by Prasenjit Kanti Paul.pptx
Reverse Engineering and It’s Basic by Prasenjit Kanti Paul.pptxReverse Engineering and It’s Basic by Prasenjit Kanti Paul.pptx
Reverse Engineering and It’s Basic by Prasenjit Kanti Paul.pptx
 
What is version control software and why do you need it?
What is version control software and why do you need it?What is version control software and why do you need it?
What is version control software and why do you need it?
 
Bridging the gap in enterprise AI
Bridging the gap in enterprise AIBridging the gap in enterprise AI
Bridging the gap in enterprise AI
 
Technology Trends, Disruptions and Opportunities
Technology Trends, Disruptions and OpportunitiesTechnology Trends, Disruptions and Opportunities
Technology Trends, Disruptions and Opportunities
 
Demystifying software development
Demystifying software developmentDemystifying software development
Demystifying software development
 

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 

DConf 2013 Opening Keynote by Walter Bright

  • 1.
  • 2. Prehistory ● A hypothetical successor to C named “D” was talked about on Usenet back in the 80's. ● Nothing much ever came of it
  • 3. History ● Work began on D in late 1999 ● D's first slashdot appearance ● http://developers.slashdot.org/story/01/08/15/23422 3/the-d-programming-language ● D1 released Jan 2007 ● First D Conference 2007
  • 4.
  • 5. D Today ● Rapid and dramatic development since D1 ● International, worldwide development community ● We're doing the impossible - developing a major new language from grassroots support ● And what amazing grassroots support it is ...
  • 6.
  • 7. Major Sponsors ● Facebook ● Sociomantic ● Remedy Games ● Andrew Edwards
  • 8. Today ● Copy And Move Semantics ● Ali Çehreli ● Distributed Caching Compiler for D ● Robert Schadek ● Inside Regular Expressions ● Dmitry Olshansky ● Using D Alongside a Game Engine ● Manu Evans ● Concurrent Garbage Collection ● Leandro Lucarella
  • 9. Tomorrow ● GDC ● Ian Buclaw ● Shared Libraries ● Martin Nowak ● C# to D ● Adam Wilson ● Web Development in D ● Vladimir Panteleev ● A Precise Garbage Collector for D ● Rainer Schütze ● Higgs, an Experimental JIT Compiler in D ● Maxime Chevalier-Boisvert ● Falling Down: the birth of kerönÅ ● Andrew Edwards
  • 10. Friday ● Metaprogramming in the Real World ● Don Clugston ● Code Analysis for D with AnalyzeD ● Stefan Rohe ● D-Specific Design Patterns ● David Simcha ● LDC ● David Nadlinger ● Effective SIMD for modern architectures ● Manu Evans ● Writing Testable Code ● Ben Gertzfield ● Quo Vadis? ● Andrei Alexandrescu
  • 11. Vision ● Easy to read & understand code ● Provably correct ● Industrial Quality
  • 12. Easy To Read & Understand ● code that looks right is right ● minimal boilerplate ● code looks like the problem being solved
  • 13. Code That Looks Right Is Right ● and code that looks wrong is wrong
  • 14. void[] read(string name) { DWORD numread; auto namez = toMBSz(name); auto h=CreateFileA(namez,GENERIC_READ,FILE_SHARE_READ,null, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,cast(HANDLE)null); if (h == INVALID_HANDLE_VALUE) goto err1; auto size = GetFileSize(h, null); if (size == INVALID_FILE_SIZE) goto err2; auto buf = std.gc.malloc(size); if (buf) std.gc.hasNoPointers(buf.ptr); if (ReadFile(h,buf.ptr,size,&numread,null) != 1) goto err2; if (numread != size) goto err2; if (!CloseHandle(h)) goto err; return buf[0 .. size]; err2: CloseHandle(h); err: delete buf; err1: throw new FileException(name, GetLastError()); } Pre-Scope Version of file.read()
  • 15. Using Scope – No Goto's void[] read(in char[] name, size_t upTo = size_t.max) { alias TypeTuple!(GENERIC_READ, FILE_SHARE_READ, (SECURITY_ATTRIBUTES*).init, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, HANDLE.init) defaults; auto h = CreateFileA(toMBSz(name), defaults); cenforce(h != INVALID_HANDLE_VALUE, name); scope(exit) cenforce(CloseHandle(h), name); auto size = GetFileSize(h, null); cenforce(size != INVALID_FILE_SIZE, name); size = min(upTo, size); auto buf = GC.malloc(size, GC.BlkAttr.NO_SCAN)[0 .. size]; scope(failure) delete buf; DWORD numread = void; cenforce(ReadFile(h,buf.ptr, size, &numread, null) == 1 && numread == size, name); return buf[0 .. size]; }
  • 16. Minimal Boilerplate “The IDE is great. With one key, I can add 100 lines of boilerplate!”
  • 17. Looks Like the Problem Being Solved import std.stdio; import std.array; import std.algorithm; void main() { stdin.byLine(KeepTerminator.yes) map!(a => a.idup). array. sort. copy( stdout.lockingTextWriter()); }
  • 18. Provably Correct ● Provable memory safety ● Provable purity and immutability ● Contract programming – No 'faith based' programming
  • 19. Provable Memory Safety ● Memory safety means “no memory corruption” ● enabled with @safe attribute ● works by disallowing things like pointer arithmetic ● safety is transitive ● turtles all the way down
  • 20. Provable Purity and Immutability ● solid foundation for functional programming ● FP has excellent track record of producing robust, reliable programs ● major aid to understanding code Toi Mine
  • 21. Contract Programming ● some things can only be checked at runtime ● contracts are used to validate that assertions about data are true ● (contracts are NOT for validating user input) ● can also be used by advanced optimizer to generate better code
  • 22. Industrial Quality ● No-compromise performance ● Scales to enormous programs ● Management tools LTHS Industrial Tech Dept
  • 23. No Compromise Performance ● Semantics that map directly onto hardware ● basic types are typical native machine types ● even SIMD types ● Uses modern optimizing back ends ● LLVM, GCC, Digital Mars ● Semantics amenable to powerful optimization
  • 24. Scales to Enormous Programs ● Separate compilation ● Strong encapsulation semantics ● no global namespace ● anti-hijacking ● voldemort types ● High speed compilation
  • 25. Management Tools ● Documentation generation ● Unit test ● Coverage analysis
  • 26. Conclusion ● D has fantastic support from the community ● Very strong technical content for this conference ● D will be the premier language for high performance high productivity computing