SlideShare a Scribd company logo
MILAN 21.11.2015 - Marco Arena
Perché nel 2015 parliamo ancora di C++?
Marco Arena - Webshell
MILAN 21.11.2015 - Marco Arena
MILAN 21.11.2015 - Marco Arena
Chi sono
• 28 anni, romano, laureato in Ingegneria Informatica
• Da 4+ anni sviluppo software per una Scuderia di F1 italiana
• Nel 2013 ho fondato ++it, la comunità italiana dedicata al C++
https://marcoarena.wordpress.com/
marco@italiancpp.org
MILAN 21.11.2015 - Marco Arena
++it -> Italian C++ Community
Social e Gruppi di
Discussione
Spazio per i
principianti
Risorse Consigliate
News e
Newsletter Mensile
Offerte di Lavoro
Meetup, Eventi e
Partecipazioni
Piattaforma per
pubblicare articoli
www.italiancpp.org
MILAN 21.11.2015 - Marco Arena
Perché nel 2015 parliamo ancora di C++?
MILAN 21.11.2015 - Marco Arena
Riassunto delle puntate precedenti
Anni ’70, Bell Labs: Nasce il C, l‘assembly portabile
MILAN 21.11.2015 - Marco Arena
Riassunto delle puntate precedenti
Anni ’80, Bell Labs: nasce il C++ e dominerà gli anni ‘90
MILAN 21.11.2015 - Marco Arena
Riassunto delle puntate precedenti
Anni 2000: il C++ non è la risposta allo sviluppo Web
MILAN 21.11.2015 - Marco Arena
Riassunto delle puntate precedenti
RETURN C++
A long time ago, on a
compiler far far away…
OF
THE
MILAN 21.11.2015 - Marco Arena
Riassunto delle puntate precedenti
MILAN 21.11.2015 - Marco Arena
Top 100 Android Playstore Apps (U.S.)
Non posso pubblicare questi dati!
Puoi trovarli presso la fonte ufficiale (slide 15):
https://github.com/CppCon/CppCon2015/tree/master/Present
ations/What's%20New%20In%20VS2015
MILAN 21.11.2015 - Marco Arena
Riassunto delle puntate precedenti
11
MILAN 21.11.2015 - Marco Arena
http://cpp-lang.io/30-years-of-cpp-bjarne-stroustrup/
MILAN 21.11.2015 - Marco Arena
Perché nel 2015 parliamo ancora di C++?
MILAN 21.11.2015 - Marco Arena
Segreto #0: È molto polare
Fonte:www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Fonte: http://www.stroustrup.com/applications.html
MILAN 21.11.2015 - Marco Arena
Segreto #0: È molto popolare
Fonte: http://stackoverflow.com/research/developer-survey-2015
MILAN 21.11.2015 - Marco Arena
Segreto #1: È compatibile con il C
Realizzatotramitehttp://jibjab.com
MILAN 21.11.2015 - Marco Arena
Segreto #2: Si preoccupa del passato
MILAN 21.11.2015 - Marco Arena
“So just as C++ ‘won’ in the 90s because of its own
strengths plus its C compatibility, C++11 is being adopted
because of its own strengths plus its C++98 compatibility.”
Herb Sutter
Segreto #2: Si preoccupa del passato
MILAN 21.11.2015 - Marco Arena
Segreto #2: Si preoccupa del passato
"Semplificazione tramite aggiunta di complessità"
vector<Foo> v;
for(vector<Foo>::iterator it = v.begin(); it != v.end(); ++it) { // C++98
// use *it
}
for (auto it = begin(v); it != end(v); ++it) { // C++11
// use *it
}
for(const auto& i : v) { // Modern C++
// use i
}
MILAN 21.11.2015 - Marco Arena
Segreto #3: Non è garbage collected
MILAN 21.11.2015 - Marco Arena
Segreto #3: Non è garbage collected
• Di default il lifetime di oggetti/variabili è scoped ((de)allocazione automatica)
• ~distruttore() = meccanismo di UNDO general-purpose
(e.g. acquisizione/rilascio di risorse – RAII)
{
ifstream file{"hello.txt"};
// ...
} // file.close(); automatico
MILAN 21.11.2015 - Marco Arena
Segreto #3: Non è garbage collected
• Di default il lifetime di oggetti/variabili è scoped ((de)allocazione automatica)
• ~distruttore() = meccanismo di UNDO general-purpose
(e.g. acquisizione/rilascio di risorse – RAII)
class widget {
gadget g;
};
void do_work() {
auto x = …;
auto y = …;
}
Finalizzazione Deterministica:
• A prova di eccezione
• Generazione automatica (member-wise)
• In ordine (inverso a quello di definizione)
// fatto in automatico
~widget() {
g.~gadget();
}~y();
~x();
MILAN 21.11.2015 - Marco Arena
Segreto #3: Non è garbage collected
• Di default il lifetime di oggetti/variabili è scoped ((de)allocazione automatica)
• ~distruttore() = meccanismo di UNDO general-purpose
(e.g. acquisizione/rilascio di risorse – RAII)
class widget {
gadget g;
};
void do_work() {
auto x = …;
auto y = …;
}
Finalizzazione Deterministica:
• A prova di eccezione
• Generazione automatica (member-wise)
• In ordine (inverso a quello di definizione)
MILAN 21.11.2015 - Marco Arena
Segreto #3: Non è garbage collected
In alcuni casi il Garbage Collector può complicarti la vita, esempi:
• Sistemi latency-critical (e.g. non vuoi che il GC salti fuori senza controllo)
• Il rilascio di risorse dev’essere deterministico (e.g. files & threads)
http://samsaffron.com/archive/2011/10/28/in-
managed-code-we-trust-our-recent-battles-with-
the-net-garbage-collector
Una storia vera:
Stack Overflow vs .NET Garbage Collector
MILAN 21.11.2015 - Marco Arena
Segreto #4: È indipendente dal paradigma
Il miglior combattente non è un pugile, un
karateka o un judoka. Il miglior combattente è
qualcuno che si può adattare a qualsiasi stile
di combattimento.
Bruce Lee
MILAN 21.11.2015 - Marco Arena
void rotate_and_draw(vector<Shape*>& vs, int r)
{
for_each(vs.begin(), vs.end(), [](Shape* p) {
p->rotate(r);
});
for (Shape* p : vs)
p->draw();
}
Segreto #4: È indipendente dal paradigma
MILAN 21.11.2015 - Marco Arena
void rotate_and_draw(vector<Shape*>& vs, int r)
{
for_each(vs.begin(), vs.end(), [](Shape* p) {
p->rotate(r);
});
for (Shape* p : vs)
p->draw();
}
Segreto #4: È indipendente dal paradigma
Object-Oriented
Generic Funzionale
(una specie )
Procedurale
MILAN 21.11.2015 - Marco Arena
Segreto #4: È indipendente dal paradigma
int sum = accumulate(
ints(1)
| transform([](int i){ return i*i; })
| take(10)
, 0);
Fonte (range V3 di Eric Niebler): https://ericniebler.github.io/range-v3/
MILAN 21.11.2015 - Marco Arena
Fonte: http://www.agileday.it/front/sessioni-2014/#iop_vs_oop
public void CatchExceptions_IF()
{
var promocode = new PromocodeStatusIF();
try
{
promocode.Apply("g128g7d2g");
}
catch (AlreadyUsedPromocodeException)
{
Assert.Pass("Already used");
}
catch (ExpiredPromocodeException)
{
Assert.Pass("Expired");
}
catch (NotValidPromocodeException)
{
Assert.Pass("Not valid");
}
Assert.Fail("no exception");
}
public void RemoveCatchExceptionsAndUseMessages_NOIF()
{
var promocode = new PromocodeStatus();
promocode
.AlreadyUsed(() = > Assert.Pass("Already used"))
.Expired(() = > Assert.Pass("Expired"))
.NotValid(() = > Assert.Pass("Not valid"))
.Apply("g128g7d2g");
Assert.Fail("cannot handle this promocode");
}
int main()
{
PromocodeStatus{}
.AlreadyUsed([] { Assert::Pass("Already used"); })
.Expired([] { Assert::Pass("Expired"); })
.NotValid([] {Assert::Pass("NotValid"); })
.Apply("g128g7d2g");
Assert::Fail("cannot handle this promocode");
}
Bonus: Anti-IF in C#
Fonte: http://www.italiancpp.org/2014/11/23/anti-if-idioms-in-cpp/
MILAN 21.11.2015 - Marco Arena
// Go
func SomeFuntion()
{
defer func() {
Log("SomeFunction executed")
}
... Anything ...
}
Segreto #4: È indipendente dal paradigma – Go’s defer
MILAN 21.11.2015 - Marco Arena
// C++
void SomeFuntion()
{
defer d { [] {
Log("SomeFunction executed");
}};
... Anything ...
}
Segreto #4: È indipendente dal paradigma – Go’s defer
Implementazione: http://www.italiancpp.org/2013/07/16/defer-con-raii-lambda/
MILAN 21.11.2015 - Marco Arena
Segreto #5: È adatto alla Systems Programming
MILAN 21.11.2015 - Marco Arena
Segreto #5: È adatto alla Systems Programming
Di default:
• Buone/ottime prestazioni ("You don’t pay, at runtime, for what you don’t use" - 0-overhead principle)
• Allocazione su stack & move semantics
• Finalizzazione deterministica
• Contiguità
• Cross-platform
MILAN 21.11.2015 - Marco Arena
stackheapstackheap
ptr
ptr
ptr
stack heap
Fonte: http://channel9.msdn.com/Events/Build/2014/2-661
Segreto #5: È adatto alla Systems Programming - Contiguità
MILAN 21.11.2015 - Marco Arena
Segreto #5: È adatto alla Systems Programming
Di default:
• Buone/ottime prestazioni ("You don’t pay, at runtime, for what you don’t use" - 0-overhead principle)
• Allocazione su stack & move semantics
• Finalizzazione deterministica
• Contiguità
• Cross-platform
MILAN 21.11.2015 - Marco Arena
Cross-Platform: C++ come denominatore comune
• Riuso
• Performance
• Sicurezza
MILAN 21.11.2015 - Marco Arena
Segreto #5: È adatto alla Systems Programming
Di default:
• Buone/ottime prestazioni ("You don’t pay, at runtime, for what you don’t use" - 0-overhead principle)
• Allocazione su stack & move semantics
• Finalizzazione deterministica
• Contiguità
• Cross-platform
Se serve, controllo efficiente e completo di:
• Lifetime dei tuoi oggetti (copy, move, …)
• Hardware e risorse del SO (non sempre portabile)
• Data Layout (PODs, …)
• Program size
• In generale: "Fine tuning"
MILAN 21.11.2015 - Marco Arena
Segreto #6: Sta crescendo in fretta
MILAN 21.11.2015 - Marco Arena
Segreto #6: Sta crescendo in fretta
MILAN 21.11.2015 - Marco Arena
L’evoluzione non si ferma al linguaggio:
•Compilatori (VC++, Clang, GCC, …)
•Tools (VAssistX, Clang Refactoring, …)
•Librerie (boost, POCO, Qt, …)
•Risorse (Stroustrup, Meyers, …)
•…
Segreto #6: Sta crescendo in fretta
MILAN 21.11.2015 - Marco Arena
Il C++ è complicato?
MILAN 21.11.2015 - Marco Arena
No.
MILAN 21.11.2015 - Marco Arena
Il C++ è molto complicato.
MILAN 21.11.2015 - Marco Arena
Il C++ è molto complicato
MILAN 21.11.2015 - Marco Arena
Troppo spesso viene "aperto il cofano" quando non serve
Il C++ è molto complicato
MILAN 21.11.2015 - Marco Arena
Non è un linguaggio che si impara su Stack Overflow
Il C++ è molto complicato
MILAN 21.11.2015 - Marco Arena
Il C++ è molto complicato
C++11
language
C# 3.0 (2008)
Java 7 (2011)
C++11
library
Fonte: http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/C-11-VC-11-and-Beyond
MILAN 21.11.2015 - Marco Arena
WG21
Fonte: http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/C-11-VC-11-and-Beyond
Il C++ è molto complicato
MILAN 21.11.2015 - Marco Arena
Standardizzare tutto quello che il C++ si è perso negli ultimi 10 anni
(Concorrenza, Parallelismo, Networking, Reflection, …)
Migliorare/arricchire/uniformare aspetti e strumenti propri del linguaggio
(Concepts, Moduli, Ranges, …)
Promuovere e «formalizzare»la diffusione di Guidelines sul «buon» C++
(https://github.com/isocpp/CppCoreGuidelines)
Cosa ci riserva il futuro?
MILAN 21.11.2015 - Marco Arena
Segreto #7: Ha un ecosistema straordinario
++it Meetup Bologna (Novembre 2014)
CppCon 2014 (Settembre 2014)
MILAN 21.11.2015 - Marco Arena
Segreto #7: Ha un ecosistema straordinario
MILAN 21.11.2015 - Marco Arena
Segreto #7: Ha un ecosistema straordinario
isocpp.org
cppcon.org
MILAN 21.11.2015 - Marco Arena
Quindi perché nel 2015 parliamo ancora di C++?
MILAN 21.11.2015 - Marco Arena
Perché nel 2015 parliamo ancora di C++?
È molto popolare
È compatibile con il C
Si preoccupa del passato
Non è garbage collected
È indipendente dal paradigma
È adatto alla Systems Programming
Sta crescendo in fretta
Ha un ecosistema straordinario
MILAN 21.11.2015 - Marco Arena
A general-purpose programming language with a bias towards
systems programming that is:
• a better C
• supports data abstraction
• supports object-oriented programming
• supports generic programming
It is defined by an ISO standard, offers stability over decades, and has a
large and lively user community.
Bonus: Cos’è il C++?
Bjarne Stroustrup
http://www.stroustrup.com/bs_faq.html#what-is
MILAN 21.11.2015 - Marco Arena
Leave your feedback on Joind.in!
https://m.joind.in/event/codemotion-milan-2015
MILAN 21.11.2015 - Marco Arena
MILAN 21.11.2015 - Marco Arena
Domande?
Scrivimi a marco@italiancpp.org
MILAN 21.11.2015 - Marco Arena
Grazie!

More Related Content

Similar to Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015

KDE Plasma widgets
KDE Plasma widgetsKDE Plasma widgets
KDE Plasma widgets
Pietro Lerro
 
Modernize Legacy Systems with Kubernetes
Modernize Legacy Systems with KubernetesModernize Legacy Systems with Kubernetes
Modernize Legacy Systems with Kubernetes
Giulio Roggero
 
La sicurezza applicativa ai tempi dell’ASAP
La sicurezza applicativa ai tempi dell’ASAPLa sicurezza applicativa ai tempi dell’ASAP
La sicurezza applicativa ai tempi dell’ASAP
festival ICT 2016
 
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
kino2k
 
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Idriss Riouak
 
Effective Code Transformations in C++
Effective Code Transformations in C++Effective Code Transformations in C++
Effective Code Transformations in C++
Marco Arena
 
Java&Solidarieta
Java&SolidarietaJava&Solidarieta
Java&Solidarieta
Andrea Del Bene
 
Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devops
Igor Antonacci
 
Nord-Est Italy Seminars 2012
Nord-Est Italy Seminars 2012Nord-Est Italy Seminars 2012
Nord-Est Italy Seminars 2012alexzio
 
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
AndreaStagi3
 
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
Emerasoft, solutions to collaborate
 
d4r^7 - docker alla settima
d4r^7 - docker alla settimad4r^7 - docker alla settima
d4r^7 - docker alla settima
Gianni Bombelli
 
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Alberto Pasca
 
Liferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioLiferay - Quick Start 1° Episodio
Liferay - Quick Start 1° Episodio
Antonio Musarra
 
#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)
Dominopoint - Italian Lotus User Group
 
PyPaPi Qt Java Framework
PyPaPi Qt Java FrameworkPyPaPi Qt Java Framework
PyPaPi Qt Java Framework
Tiziano Lattisi
 
GITT (part 1 of 2)
GITT (part 1 of 2)GITT (part 1 of 2)
GITT (part 1 of 2)
Ali Servet Donmez
 
Milano Meetups XIII - Official.pdf
Milano Meetups XIII - Official.pdfMilano Meetups XIII - Official.pdf
Milano Meetups XIII - Official.pdf
Florence Consulting
 
Enabling DevOps for Machine Learning with Azure Pipelines
Enabling DevOps for Machine Learning with Azure PipelinesEnabling DevOps for Machine Learning with Azure Pipelines
Enabling DevOps for Machine Learning with Azure Pipelines
Luca Milan
 

Similar to Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015 (20)

KDE Plasma widgets
KDE Plasma widgetsKDE Plasma widgets
KDE Plasma widgets
 
Modernize Legacy Systems with Kubernetes
Modernize Legacy Systems with KubernetesModernize Legacy Systems with Kubernetes
Modernize Legacy Systems with Kubernetes
 
La sicurezza applicativa ai tempi dell’ASAP
La sicurezza applicativa ai tempi dell’ASAPLa sicurezza applicativa ai tempi dell’ASAP
La sicurezza applicativa ai tempi dell’ASAP
 
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
 
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
 
Effective Code Transformations in C++
Effective Code Transformations in C++Effective Code Transformations in C++
Effective Code Transformations in C++
 
Java&Solidarieta
Java&SolidarietaJava&Solidarieta
Java&Solidarieta
 
Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devops
 
Nord-Est Italy Seminars 2012
Nord-Est Italy Seminars 2012Nord-Est Italy Seminars 2012
Nord-Est Italy Seminars 2012
 
Mobile e Smart Client
Mobile e Smart ClientMobile e Smart Client
Mobile e Smart Client
 
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
 
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
 
d4r^7 - docker alla settima
d4r^7 - docker alla settimad4r^7 - docker alla settima
d4r^7 - docker alla settima
 
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
 
Liferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioLiferay - Quick Start 1° Episodio
Liferay - Quick Start 1° Episodio
 
#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)
 
PyPaPi Qt Java Framework
PyPaPi Qt Java FrameworkPyPaPi Qt Java Framework
PyPaPi Qt Java Framework
 
GITT (part 1 of 2)
GITT (part 1 of 2)GITT (part 1 of 2)
GITT (part 1 of 2)
 
Milano Meetups XIII - Official.pdf
Milano Meetups XIII - Official.pdfMilano Meetups XIII - Official.pdf
Milano Meetups XIII - Official.pdf
 
Enabling DevOps for Machine Learning with Azure Pipelines
Enabling DevOps for Machine Learning with Azure PipelinesEnabling DevOps for Machine Learning with Azure Pipelines
Enabling DevOps for Machine Learning with Azure Pipelines
 

More from Codemotion

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Codemotion
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
Codemotion
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
Codemotion
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
Codemotion
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Codemotion
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Codemotion
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Codemotion
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Codemotion
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Codemotion
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Codemotion
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Codemotion
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Codemotion
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Codemotion
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Codemotion
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Codemotion
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
Codemotion
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Codemotion
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Codemotion
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Codemotion
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Codemotion
 

More from Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015

  • 1. MILAN 21.11.2015 - Marco Arena Perché nel 2015 parliamo ancora di C++? Marco Arena - Webshell MILAN 21.11.2015 - Marco Arena
  • 2. MILAN 21.11.2015 - Marco Arena Chi sono • 28 anni, romano, laureato in Ingegneria Informatica • Da 4+ anni sviluppo software per una Scuderia di F1 italiana • Nel 2013 ho fondato ++it, la comunità italiana dedicata al C++ https://marcoarena.wordpress.com/ marco@italiancpp.org
  • 3. MILAN 21.11.2015 - Marco Arena ++it -> Italian C++ Community Social e Gruppi di Discussione Spazio per i principianti Risorse Consigliate News e Newsletter Mensile Offerte di Lavoro Meetup, Eventi e Partecipazioni Piattaforma per pubblicare articoli www.italiancpp.org
  • 4. MILAN 21.11.2015 - Marco Arena Perché nel 2015 parliamo ancora di C++?
  • 5. MILAN 21.11.2015 - Marco Arena Riassunto delle puntate precedenti Anni ’70, Bell Labs: Nasce il C, l‘assembly portabile
  • 6. MILAN 21.11.2015 - Marco Arena Riassunto delle puntate precedenti Anni ’80, Bell Labs: nasce il C++ e dominerà gli anni ‘90
  • 7. MILAN 21.11.2015 - Marco Arena Riassunto delle puntate precedenti Anni 2000: il C++ non è la risposta allo sviluppo Web
  • 8. MILAN 21.11.2015 - Marco Arena Riassunto delle puntate precedenti RETURN C++ A long time ago, on a compiler far far away… OF THE
  • 9. MILAN 21.11.2015 - Marco Arena Riassunto delle puntate precedenti
  • 10. MILAN 21.11.2015 - Marco Arena Top 100 Android Playstore Apps (U.S.) Non posso pubblicare questi dati! Puoi trovarli presso la fonte ufficiale (slide 15): https://github.com/CppCon/CppCon2015/tree/master/Present ations/What's%20New%20In%20VS2015
  • 11. MILAN 21.11.2015 - Marco Arena Riassunto delle puntate precedenti 11
  • 12. MILAN 21.11.2015 - Marco Arena http://cpp-lang.io/30-years-of-cpp-bjarne-stroustrup/
  • 13. MILAN 21.11.2015 - Marco Arena Perché nel 2015 parliamo ancora di C++?
  • 14. MILAN 21.11.2015 - Marco Arena Segreto #0: È molto polare Fonte:www.tiobe.com/index.php/content/paperinfo/tpci/index.html Fonte: http://www.stroustrup.com/applications.html
  • 15. MILAN 21.11.2015 - Marco Arena Segreto #0: È molto popolare Fonte: http://stackoverflow.com/research/developer-survey-2015
  • 16. MILAN 21.11.2015 - Marco Arena Segreto #1: È compatibile con il C Realizzatotramitehttp://jibjab.com
  • 17. MILAN 21.11.2015 - Marco Arena Segreto #2: Si preoccupa del passato
  • 18. MILAN 21.11.2015 - Marco Arena “So just as C++ ‘won’ in the 90s because of its own strengths plus its C compatibility, C++11 is being adopted because of its own strengths plus its C++98 compatibility.” Herb Sutter Segreto #2: Si preoccupa del passato
  • 19. MILAN 21.11.2015 - Marco Arena Segreto #2: Si preoccupa del passato "Semplificazione tramite aggiunta di complessità" vector<Foo> v; for(vector<Foo>::iterator it = v.begin(); it != v.end(); ++it) { // C++98 // use *it } for (auto it = begin(v); it != end(v); ++it) { // C++11 // use *it } for(const auto& i : v) { // Modern C++ // use i }
  • 20. MILAN 21.11.2015 - Marco Arena Segreto #3: Non è garbage collected
  • 21. MILAN 21.11.2015 - Marco Arena Segreto #3: Non è garbage collected • Di default il lifetime di oggetti/variabili è scoped ((de)allocazione automatica) • ~distruttore() = meccanismo di UNDO general-purpose (e.g. acquisizione/rilascio di risorse – RAII) { ifstream file{"hello.txt"}; // ... } // file.close(); automatico
  • 22. MILAN 21.11.2015 - Marco Arena Segreto #3: Non è garbage collected • Di default il lifetime di oggetti/variabili è scoped ((de)allocazione automatica) • ~distruttore() = meccanismo di UNDO general-purpose (e.g. acquisizione/rilascio di risorse – RAII) class widget { gadget g; }; void do_work() { auto x = …; auto y = …; } Finalizzazione Deterministica: • A prova di eccezione • Generazione automatica (member-wise) • In ordine (inverso a quello di definizione) // fatto in automatico ~widget() { g.~gadget(); }~y(); ~x();
  • 23. MILAN 21.11.2015 - Marco Arena Segreto #3: Non è garbage collected • Di default il lifetime di oggetti/variabili è scoped ((de)allocazione automatica) • ~distruttore() = meccanismo di UNDO general-purpose (e.g. acquisizione/rilascio di risorse – RAII) class widget { gadget g; }; void do_work() { auto x = …; auto y = …; } Finalizzazione Deterministica: • A prova di eccezione • Generazione automatica (member-wise) • In ordine (inverso a quello di definizione)
  • 24. MILAN 21.11.2015 - Marco Arena Segreto #3: Non è garbage collected In alcuni casi il Garbage Collector può complicarti la vita, esempi: • Sistemi latency-critical (e.g. non vuoi che il GC salti fuori senza controllo) • Il rilascio di risorse dev’essere deterministico (e.g. files & threads) http://samsaffron.com/archive/2011/10/28/in- managed-code-we-trust-our-recent-battles-with- the-net-garbage-collector Una storia vera: Stack Overflow vs .NET Garbage Collector
  • 25. MILAN 21.11.2015 - Marco Arena Segreto #4: È indipendente dal paradigma Il miglior combattente non è un pugile, un karateka o un judoka. Il miglior combattente è qualcuno che si può adattare a qualsiasi stile di combattimento. Bruce Lee
  • 26. MILAN 21.11.2015 - Marco Arena void rotate_and_draw(vector<Shape*>& vs, int r) { for_each(vs.begin(), vs.end(), [](Shape* p) { p->rotate(r); }); for (Shape* p : vs) p->draw(); } Segreto #4: È indipendente dal paradigma
  • 27. MILAN 21.11.2015 - Marco Arena void rotate_and_draw(vector<Shape*>& vs, int r) { for_each(vs.begin(), vs.end(), [](Shape* p) { p->rotate(r); }); for (Shape* p : vs) p->draw(); } Segreto #4: È indipendente dal paradigma Object-Oriented Generic Funzionale (una specie ) Procedurale
  • 28. MILAN 21.11.2015 - Marco Arena Segreto #4: È indipendente dal paradigma int sum = accumulate( ints(1) | transform([](int i){ return i*i; }) | take(10) , 0); Fonte (range V3 di Eric Niebler): https://ericniebler.github.io/range-v3/
  • 29. MILAN 21.11.2015 - Marco Arena Fonte: http://www.agileday.it/front/sessioni-2014/#iop_vs_oop public void CatchExceptions_IF() { var promocode = new PromocodeStatusIF(); try { promocode.Apply("g128g7d2g"); } catch (AlreadyUsedPromocodeException) { Assert.Pass("Already used"); } catch (ExpiredPromocodeException) { Assert.Pass("Expired"); } catch (NotValidPromocodeException) { Assert.Pass("Not valid"); } Assert.Fail("no exception"); } public void RemoveCatchExceptionsAndUseMessages_NOIF() { var promocode = new PromocodeStatus(); promocode .AlreadyUsed(() = > Assert.Pass("Already used")) .Expired(() = > Assert.Pass("Expired")) .NotValid(() = > Assert.Pass("Not valid")) .Apply("g128g7d2g"); Assert.Fail("cannot handle this promocode"); } int main() { PromocodeStatus{} .AlreadyUsed([] { Assert::Pass("Already used"); }) .Expired([] { Assert::Pass("Expired"); }) .NotValid([] {Assert::Pass("NotValid"); }) .Apply("g128g7d2g"); Assert::Fail("cannot handle this promocode"); } Bonus: Anti-IF in C# Fonte: http://www.italiancpp.org/2014/11/23/anti-if-idioms-in-cpp/
  • 30. MILAN 21.11.2015 - Marco Arena // Go func SomeFuntion() { defer func() { Log("SomeFunction executed") } ... Anything ... } Segreto #4: È indipendente dal paradigma – Go’s defer
  • 31. MILAN 21.11.2015 - Marco Arena // C++ void SomeFuntion() { defer d { [] { Log("SomeFunction executed"); }}; ... Anything ... } Segreto #4: È indipendente dal paradigma – Go’s defer Implementazione: http://www.italiancpp.org/2013/07/16/defer-con-raii-lambda/
  • 32. MILAN 21.11.2015 - Marco Arena Segreto #5: È adatto alla Systems Programming
  • 33. MILAN 21.11.2015 - Marco Arena Segreto #5: È adatto alla Systems Programming Di default: • Buone/ottime prestazioni ("You don’t pay, at runtime, for what you don’t use" - 0-overhead principle) • Allocazione su stack & move semantics • Finalizzazione deterministica • Contiguità • Cross-platform
  • 34. MILAN 21.11.2015 - Marco Arena stackheapstackheap ptr ptr ptr stack heap Fonte: http://channel9.msdn.com/Events/Build/2014/2-661 Segreto #5: È adatto alla Systems Programming - Contiguità
  • 35. MILAN 21.11.2015 - Marco Arena Segreto #5: È adatto alla Systems Programming Di default: • Buone/ottime prestazioni ("You don’t pay, at runtime, for what you don’t use" - 0-overhead principle) • Allocazione su stack & move semantics • Finalizzazione deterministica • Contiguità • Cross-platform
  • 36. MILAN 21.11.2015 - Marco Arena Cross-Platform: C++ come denominatore comune • Riuso • Performance • Sicurezza
  • 37. MILAN 21.11.2015 - Marco Arena Segreto #5: È adatto alla Systems Programming Di default: • Buone/ottime prestazioni ("You don’t pay, at runtime, for what you don’t use" - 0-overhead principle) • Allocazione su stack & move semantics • Finalizzazione deterministica • Contiguità • Cross-platform Se serve, controllo efficiente e completo di: • Lifetime dei tuoi oggetti (copy, move, …) • Hardware e risorse del SO (non sempre portabile) • Data Layout (PODs, …) • Program size • In generale: "Fine tuning"
  • 38. MILAN 21.11.2015 - Marco Arena Segreto #6: Sta crescendo in fretta
  • 39. MILAN 21.11.2015 - Marco Arena Segreto #6: Sta crescendo in fretta
  • 40. MILAN 21.11.2015 - Marco Arena L’evoluzione non si ferma al linguaggio: •Compilatori (VC++, Clang, GCC, …) •Tools (VAssistX, Clang Refactoring, …) •Librerie (boost, POCO, Qt, …) •Risorse (Stroustrup, Meyers, …) •… Segreto #6: Sta crescendo in fretta
  • 41. MILAN 21.11.2015 - Marco Arena Il C++ è complicato?
  • 42. MILAN 21.11.2015 - Marco Arena No.
  • 43. MILAN 21.11.2015 - Marco Arena Il C++ è molto complicato.
  • 44. MILAN 21.11.2015 - Marco Arena Il C++ è molto complicato
  • 45. MILAN 21.11.2015 - Marco Arena Troppo spesso viene "aperto il cofano" quando non serve Il C++ è molto complicato
  • 46. MILAN 21.11.2015 - Marco Arena Non è un linguaggio che si impara su Stack Overflow Il C++ è molto complicato
  • 47. MILAN 21.11.2015 - Marco Arena Il C++ è molto complicato C++11 language C# 3.0 (2008) Java 7 (2011) C++11 library Fonte: http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/C-11-VC-11-and-Beyond
  • 48. MILAN 21.11.2015 - Marco Arena WG21 Fonte: http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/C-11-VC-11-and-Beyond Il C++ è molto complicato
  • 49. MILAN 21.11.2015 - Marco Arena Standardizzare tutto quello che il C++ si è perso negli ultimi 10 anni (Concorrenza, Parallelismo, Networking, Reflection, …) Migliorare/arricchire/uniformare aspetti e strumenti propri del linguaggio (Concepts, Moduli, Ranges, …) Promuovere e «formalizzare»la diffusione di Guidelines sul «buon» C++ (https://github.com/isocpp/CppCoreGuidelines) Cosa ci riserva il futuro?
  • 50. MILAN 21.11.2015 - Marco Arena Segreto #7: Ha un ecosistema straordinario ++it Meetup Bologna (Novembre 2014) CppCon 2014 (Settembre 2014)
  • 51. MILAN 21.11.2015 - Marco Arena Segreto #7: Ha un ecosistema straordinario
  • 52. MILAN 21.11.2015 - Marco Arena Segreto #7: Ha un ecosistema straordinario isocpp.org cppcon.org
  • 53. MILAN 21.11.2015 - Marco Arena Quindi perché nel 2015 parliamo ancora di C++?
  • 54. MILAN 21.11.2015 - Marco Arena Perché nel 2015 parliamo ancora di C++? È molto popolare È compatibile con il C Si preoccupa del passato Non è garbage collected È indipendente dal paradigma È adatto alla Systems Programming Sta crescendo in fretta Ha un ecosistema straordinario
  • 55. MILAN 21.11.2015 - Marco Arena A general-purpose programming language with a bias towards systems programming that is: • a better C • supports data abstraction • supports object-oriented programming • supports generic programming It is defined by an ISO standard, offers stability over decades, and has a large and lively user community. Bonus: Cos’è il C++? Bjarne Stroustrup http://www.stroustrup.com/bs_faq.html#what-is
  • 56. MILAN 21.11.2015 - Marco Arena Leave your feedback on Joind.in! https://m.joind.in/event/codemotion-milan-2015 MILAN 21.11.2015 - Marco Arena
  • 57. MILAN 21.11.2015 - Marco Arena Domande? Scrivimi a marco@italiancpp.org
  • 58. MILAN 21.11.2015 - Marco Arena Grazie!