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

58
MILAN 21.11.2015 - Marco Arena Perché nel 2015 parliamo ancora di C++? Marco Arena - Webshell MILAN 21.11.2015 - Marco Arena

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

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

MILAN 21.11.2015 - Marco Arena

Perché nel 2015 parliamo ancora di C++?

Marco Arena - Webshell

MILAN 21.11.2015 - Marco Arena

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

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/

[email protected]

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

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 articoliwww.italiancpp.org

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

MILAN 21.11.2015 - Marco Arena

Perché nel 2015 parliamo ancora di C++?

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

MILAN 21.11.2015 - Marco Arena

Riassunto delle puntate precedenti

Anni ’70, Bell Labs: Nasce il C, l‘assembly portabile

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

MILAN 21.11.2015 - Marco Arena

Riassunto delle puntate precedenti

Anni ’80, Bell Labs: nasce il C++ e dominerà gli anni ‘90

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

MILAN 21.11.2015 - Marco Arena

Riassunto delle puntate precedenti

Anni 2000: il C++ non è la risposta allo sviluppo Web

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

MILAN 21.11.2015 - Marco Arena

Riassunto delle puntate precedenti

RETURN C++

A long time ago, on a

compiler far far away…

OF

THE

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

MILAN 21.11.2015 - Marco Arena

Riassunto delle puntate precedenti

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

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/Presentations/What's%20New%20In%20VS2015

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

MILAN 21.11.2015 - Marco Arena

Riassunto delle puntate precedenti

11

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

MILAN 21.11.2015 - Marco Arena

http://cpp-lang.io/30-years-of-cpp-bjarne-stroustrup/

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

MILAN 21.11.2015 - Marco Arena

Perché nel 2015 parliamo ancora di C++?

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

MILAN 21.11.2015 - Marco Arena

Segreto #0: È molto polare

Fon

te: ww

w.tio

be.co

m/in

dex.p

hp

/con

tent/p

aperin

fo/tp

ci/ind

ex.htm

l

Fonte: http://www.stroustrup.com/applications.html

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

MILAN 21.11.2015 - Marco Arena

Segreto #0: È molto popolare

Fonte: http://stackoverflow.com/research/developer-survey-2015

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

MILAN 21.11.2015 - Marco Arena

Segreto #1: È compatibile con il C

Rea

lizza

to t

ram

ite

htt

p:/

/jib

jab

.co

m

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

MILAN 21.11.2015 - Marco Arena

Segreto #2: Si preoccupa del passato

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

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

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

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

}

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

MILAN 21.11.2015 - Marco Arena

Segreto #3: Non è garbage collected

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

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

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

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();

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

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)

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

MILAN 21.11.2015 - Marco Arena

Segreto #3: Non è garbage collectedIn 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

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

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

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

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

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

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

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

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/

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

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/

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

MILAN 21.11.2015 - Marco Arena

// Go

func SomeFuntion()

{

defer func() {

Log("SomeFunction executed")

}

... Anything ...

}

Segreto #4: È indipendente dal paradigma – Go’s defer

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

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/

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

MILAN 21.11.2015 - Marco Arena

Segreto #5: È adatto alla Systems Programming

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

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

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

MILAN 21.11.2015 - Marco Arena

stackheapstackheap

ptrptrptr

stack heap

Fonte: http://channel9.msdn.com/Events/Build/2014/2-661

Segreto #5: È adatto alla Systems Programming - Contiguità

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

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

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

MILAN 21.11.2015 - Marco Arena

Cross-Platform: C++ come denominatore comune

• Riuso• Performance• Sicurezza

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

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"

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

MILAN 21.11.2015 - Marco Arena

Segreto #6: Sta crescendo in fretta

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

MILAN 21.11.2015 - Marco Arena

Segreto #6: Sta crescendo in fretta

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

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

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

MILAN 21.11.2015 - Marco Arena

Il C++ è complicato?

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

MILAN 21.11.2015 - Marco Arena

No.

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

MILAN 21.11.2015 - Marco Arena

Il C++ è molto complicato.

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

MILAN 21.11.2015 - Marco Arena

Il C++ è molto complicato

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

MILAN 21.11.2015 - Marco Arena

Troppo spesso viene "aperto il cofano" quando non serve

Il C++ è molto complicato

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

MILAN 21.11.2015 - Marco Arena

Non è un linguaggio che si impara su Stack Overflow

Il C++ è molto complicato

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

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

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

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

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

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?

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

MILAN 21.11.2015 - Marco Arena

Segreto #7: Ha un ecosistema straordinario

++it Meetup Bologna (Novembre 2014)

CppCon 2014 (Settembre 2014)

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

MILAN 21.11.2015 - Marco Arena

Segreto #7: Ha un ecosistema straordinario

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

MILAN 21.11.2015 - Marco Arena

Segreto #7: Ha un ecosistema straordinario

isocpp.orgcppcon.org

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

MILAN 21.11.2015 - Marco Arena

Quindi perché nel 2015 parliamo ancora di C++?

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

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

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

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 Stroustruphttp://www.stroustrup.com/bs_faq.html#what-is

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

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

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

MILAN 21.11.2015 - Marco Arena

Domande?

Scrivimi a [email protected]

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

MILAN 21.11.2015 - Marco Arena

Grazie!