SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Who Needs C++ When
                             You Have D and Go?

                                    Russel Winder
                                  email: russel@winder.org.uk
                                 xmpp: russel@winder.org.uk
                                    twitter: @russel_winder
                                 Web: http://www.russel.org.uk




Copyright © 2013 Russel Winder                                   1
controversy
           noun
              dispute, argument, or debate, especially one
              concerning a matter about which there is
              strong disagreement




Copyright © 2013 Russel Winder                               2
Calculate the sum of the squares of the
           numbers between 0 and 100 that are
                       divisible by 7.




Copyright © 2013 Russel Winder                      3
int sequential_iterative() {
                                   auto sum = 0;
                                   foreach (i; 0 .. 100) {
                                     if (i % 7 == 0) {
                                       sum += i * i;
                                     }
                                   }
                                   return sum;
                                 }




Copyright © 2013 Russel Winder                                  4
func sequential_iterative() (sum int) {
                                    for i := 0; i < 100; i++ {
                                       if (i % 7 == 0) {
                                           sum += i * i
                                       }
                                    }
                                    return
                                 }




Copyright © 2013 Russel Winder                                             5
int sequential_iterative() {
                                   auto sum = 0;
                                   for (auto i = 0; i < 100; ++i) {
                                     if (i % 7 == 0) {
                                       sum += i * i;
                                     }
                                   }
                                   return sum;
                                 }




Copyright © 2013 Russel Winder                                        6
So all native code programming
                            languages are the same?




Copyright © 2013 Russel Winder                           7
We are, of course, expected
                   to be more declarative these days…




Copyright © 2013 Russel Winder                          8
Possibly even functional…




Copyright © 2013 Russel Winder                               9
reduce!"a + b"(map!"a * a"(filter!"a % 7 == 0"(iota(100))))




Copyright © 2013 Russel Winder                                      10
functools.Inject(func (a, b int) int { return a + b },
           functools.Collect(func (i int) int { return i * i },
              functools.Filter(func (i int) bool { return i % 7 == 0 },
                  make([]int, 100))))




Copyright © 2013 Russel Winder                                            11
int sequential_declarative() {
   std::vector<int> numbers (100);
   std::iota(numbers.begin(), numbers.end(), 1);
   std::list<int> filtered;
   std::copy_if(numbers.begin(), numbers.end(),
     std::back_insert_iterator<std::list<int>>(filtered), [=] (int i) { return i % 7 == 0; });
   std::vector<int> squares (filtered.size());
   std::transform(filtered.begin(), filtered.end(),
     std::back_insert_iterator<std::vector<int>>(squares), [=] (int i) { return i * i;});
   return std::accumulate(squares.begin(), squares.end(), 0, [=] (int i, int j) { return i + j;});
 }




Copyright © 2013 Russel Winder                                                                   12
What about being fluent…




Copyright © 2013 Russel Winder                              13
iota(100).filter!"a % 7 == 0"().map!"a * a"().reduce!"a + b"()




Copyright © 2013 Russel Winder                                      14
functools.IntSlice(make([]int, 100)).
                 Filter(func (i int) bool { return i % 7 == 0 }).
                     Collect(func (i int) int { return i * i }).
                        Inject(func (a, b int) int { return a + b })




Copyright © 2013 Russel Winder                                         15
?


Copyright © 2013 Russel Winder       16
Execute it!




Copyright © 2013 Russel Winder                 17
Use D
                                     Use Go

                                   Use Python

                                 Anything but C++

Copyright © 2013 Russel Winder                      18
http://www.dlang.org


                                 http://www.go-lang.org




Copyright © 2013 Russel Winder                            19
Who Needs C++ When
                             You Have D and Go?

                                    Russel Winder
                                  email: russel@winder.org.uk
                                 xmpp: russel@winder.org.uk
                                    twitter: @russel_winder
                                 Web: http://www.russel.org.uk




Copyright © 2013 Russel Winder                                   20

Contenu connexe

Plus de Russel Winder

Plus de Russel Winder (20)

Java is Dead, Long Live Ceylon, Kotlin, etc
Java is Dead,  Long Live Ceylon, Kotlin, etcJava is Dead,  Long Live Ceylon, Kotlin, etc
Java is Dead, Long Live Ceylon, Kotlin, etc
 
GPars Remoting
GPars RemotingGPars Remoting
GPars Remoting
 
Java is dead, long live Scala, Kotlin, Ceylon, etc.
Java is dead, long live Scala, Kotlin, Ceylon, etc.Java is dead, long live Scala, Kotlin, Ceylon, etc.
Java is dead, long live Scala, Kotlin, Ceylon, etc.
 
GPars 2014
GPars 2014GPars 2014
GPars 2014
 
Spocktacular testing
Spocktacular testingSpocktacular testing
Spocktacular testing
 
Spocktacular Testing
Spocktacular TestingSpocktacular Testing
Spocktacular Testing
 
Is Groovy static or dynamic
Is Groovy static or dynamicIs Groovy static or dynamic
Is Groovy static or dynamic
 
Java is dead, long live Scala Kotlin Ceylon etc.
Java is dead, long live Scala Kotlin Ceylon etc.Java is dead, long live Scala Kotlin Ceylon etc.
Java is dead, long live Scala Kotlin Ceylon etc.
 
Dataflow: the concurrency/parallelism architecture you need
Dataflow: the concurrency/parallelism architecture you needDataflow: the concurrency/parallelism architecture you need
Dataflow: the concurrency/parallelism architecture you need
 
Are Go and D threats to Python
Are Go and D threats to PythonAre Go and D threats to Python
Are Go and D threats to Python
 
Is Groovy as fast as Java
Is Groovy as fast as JavaIs Groovy as fast as Java
Is Groovy as fast as Java
 
Java 8: a New Beginning
Java 8: a New BeginningJava 8: a New Beginning
Java 8: a New Beginning
 
GPars: Groovy Parallelism for Java
GPars: Groovy Parallelism for JavaGPars: Groovy Parallelism for Java
GPars: Groovy Parallelism for Java
 
GroovyFX: or how to program JavaFX easily
GroovyFX: or how to program JavaFX easily GroovyFX: or how to program JavaFX easily
GroovyFX: or how to program JavaFX easily
 
Switch to Python 3…now…immediately
Switch to Python 3…now…immediatelySwitch to Python 3…now…immediately
Switch to Python 3…now…immediately
 
GPars Workshop
GPars WorkshopGPars Workshop
GPars Workshop
 
Given Groovy Who Needs Java
Given Groovy Who Needs JavaGiven Groovy Who Needs Java
Given Groovy Who Needs Java
 
Testing: Python, Java, Groovy, etc.
Testing: Python, Java, Groovy, etc.Testing: Python, Java, Groovy, etc.
Testing: Python, Java, Groovy, etc.
 
Why Groovy When Java 8 or Scala, or…
Why Groovy When Java 8 or Scala, or…Why Groovy When Java 8 or Scala, or…
Why Groovy When Java 8 or Scala, or…
 
Closures: The Next "Big Thing" In Java
Closures: The Next "Big Thing" In JavaClosures: The Next "Big Thing" In Java
Closures: The Next "Big Thing" In Java
 

Dernier

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Dernier (20)

Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 

Who needs C++ when you have D and Go

  • 1. Who Needs C++ When You Have D and Go? Russel Winder email: russel@winder.org.uk xmpp: russel@winder.org.uk twitter: @russel_winder Web: http://www.russel.org.uk Copyright © 2013 Russel Winder 1
  • 2. controversy noun dispute, argument, or debate, especially one concerning a matter about which there is strong disagreement Copyright © 2013 Russel Winder 2
  • 3. Calculate the sum of the squares of the numbers between 0 and 100 that are divisible by 7. Copyright © 2013 Russel Winder 3
  • 4. int sequential_iterative() { auto sum = 0; foreach (i; 0 .. 100) { if (i % 7 == 0) { sum += i * i; } } return sum; } Copyright © 2013 Russel Winder 4
  • 5. func sequential_iterative() (sum int) { for i := 0; i < 100; i++ { if (i % 7 == 0) { sum += i * i } } return } Copyright © 2013 Russel Winder 5
  • 6. int sequential_iterative() { auto sum = 0; for (auto i = 0; i < 100; ++i) { if (i % 7 == 0) { sum += i * i; } } return sum; } Copyright © 2013 Russel Winder 6
  • 7. So all native code programming languages are the same? Copyright © 2013 Russel Winder 7
  • 8. We are, of course, expected to be more declarative these days… Copyright © 2013 Russel Winder 8
  • 9. Possibly even functional… Copyright © 2013 Russel Winder 9
  • 10. reduce!"a + b"(map!"a * a"(filter!"a % 7 == 0"(iota(100)))) Copyright © 2013 Russel Winder 10
  • 11. functools.Inject(func (a, b int) int { return a + b }, functools.Collect(func (i int) int { return i * i }, functools.Filter(func (i int) bool { return i % 7 == 0 }, make([]int, 100)))) Copyright © 2013 Russel Winder 11
  • 12. int sequential_declarative() { std::vector<int> numbers (100); std::iota(numbers.begin(), numbers.end(), 1); std::list<int> filtered; std::copy_if(numbers.begin(), numbers.end(), std::back_insert_iterator<std::list<int>>(filtered), [=] (int i) { return i % 7 == 0; }); std::vector<int> squares (filtered.size()); std::transform(filtered.begin(), filtered.end(), std::back_insert_iterator<std::vector<int>>(squares), [=] (int i) { return i * i;}); return std::accumulate(squares.begin(), squares.end(), 0, [=] (int i, int j) { return i + j;}); } Copyright © 2013 Russel Winder 12
  • 13. What about being fluent… Copyright © 2013 Russel Winder 13
  • 14. iota(100).filter!"a % 7 == 0"().map!"a * a"().reduce!"a + b"() Copyright © 2013 Russel Winder 14
  • 15. functools.IntSlice(make([]int, 100)). Filter(func (i int) bool { return i % 7 == 0 }). Collect(func (i int) int { return i * i }). Inject(func (a, b int) int { return a + b }) Copyright © 2013 Russel Winder 15
  • 16. ? Copyright © 2013 Russel Winder 16
  • 17. Execute it! Copyright © 2013 Russel Winder 17
  • 18. Use D Use Go Use Python Anything but C++ Copyright © 2013 Russel Winder 18
  • 19. http://www.dlang.org http://www.go-lang.org Copyright © 2013 Russel Winder 19
  • 20. Who Needs C++ When You Have D and Go? Russel Winder email: russel@winder.org.uk xmpp: russel@winder.org.uk twitter: @russel_winder Web: http://www.russel.org.uk Copyright © 2013 Russel Winder 20