Geneza powstania j˛ezyka C++

Transkrypt

Geneza powstania j˛ezyka C++
Geneza powstania jezyka
˛
C++
Bogdan Kreczmer
ZPCiR IIAiR PWr
pokój 307 budynek C3
[email protected]
c 2005–2008 Bogdan Kreczmer?
Copyright ? Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostepniony
˛
pod
˛
w całości, razem z
warunkiem wykorzystania wyłacznie
˛
do własnych prywatnych potrzeb i może on być kopiowany wyłacznie
niniejsza˛ strona˛ tytułowa.
˛
1
Historia narodzin
Tło akcji:
Bezpośrednim przyczynkiem do powstania koncepcji jezyka
˛
C++ były prace
Stroustrupa w Cambridge nad doktoratem. W trakcie swoich prac miał zbadać
różne organizacje systemowego oprogramowania w systemach rozproszonych.
Geneza powstania jezyka
˛
C++
1
Historia narodzin
Tło akcji:
Bezpośrednim przyczynkiem do powstania koncepcji jezyka
˛
C++ były prace
Stroustrupa w Cambridge nad doktoratem. W trakcie swoich prac miał zbadać
różne organizacje systemowego oprogramowania w systemach rozproszonych.
Zdarzenia:
• Udana (w sensie konstrukcji aplikacji) realizacja symulatora systemu rozproszonego z wykorzystaniem Simuli. Pojecie
˛
klasy w Simuli było bardzo pomocne na etapie projektu i implementacji.
• Poważne problemy zwiazane
˛
z wydajnościa˛ programów napisanego w Simuli
zmusza do poszukiwania bardziej wydajnego narz˛edzia.
• Traumatycznie bolesne doświadczenia zwiazane
˛
z koniecznościa˛ implementacji symulatora w oparciu o jezyk
˛
BCPL. Osiagni
˛ eta
˛ została bardzo dobra
wydajność kosztem wielu problemów przy realizacji implementacji.
Geneza powstania jezyka
˛
C++
1
Historia narodzin
Tło akcji:
Bezpośrednim przyczynkiem do powstania koncepcji jezyka
˛
C++ były prace
Stroustrupa w Cambridge nad doktoratem. W trakcie swoich prac miał zbadać
różne organizacje systemowego oprogramowania w systemach rozproszonych.
Zdarzenia:
• Udana (w sensie konstrukcji aplikacji) realizacja symulatora systemu rozproszonego z wykorzystaniem Simuli. Pojecie
˛
klasy w Simuli było bardzo pomocne na etapie projektu i implementacji.
• Poważne problemy zwiazane
˛
z wydajnościa˛ programów napisanego w Simuli
zmusza do poszukiwania bardziej wydajnego narz˛edzia.
• Traumatycznie bolesne doświadczenia zwiazane
˛
z koniecznościa˛ implementacji symulatora w oparciu o jezyk
˛
BCPL. Osiagni
˛ eta
˛ została bardzo dobra
wydajność kosztem wielu problemów przy realizacji implementacji.
Epilog:
Po zakończeniu prac nad doktoratem Stroustrup postanawia stworzyć jezyk
˛
programowania, który łaczyłby
˛
koncepcje klas z Simuli oraz elastyczność tego je˛
zyka z efektywnościa˛ kodu jezyka
˛
BCPL.
Geneza powstania jezyka
˛
C++
2
Niektóre spostrzeżenia
• Kompilator Simuli dobrze wychwytywał błedy
˛ typu. Błedy
˛ te przeważnie były albo
wynikiem “głupich” pomyłek w trakcie programowania albo też potknieć
˛ koncepcyjnych.
Ten drugi rodzaj błedów
˛
ma wrecz
˛ fundamentalne znaczenie dla procesu projektowania i pisania oprogramowania (autor kursu pozwolił sobie te˛ uwage˛ wzmocnić).
Geneza powstania jezyka
˛
C++
2
Niektóre spostrzeżenia
• Kompilator Simuli dobrze wychwytywał błedy
˛ typu. Błedy
˛ te przeważnie były albo
wynikiem “głupich” pomyłek w trakcie programowania albo też potknieć
˛ koncepcyjnych.
Ten drugi rodzaj błedów
˛
ma wrecz
˛ fundamentalne znaczenie dla procesu projektowania i pisania oprogramowania (autor kursu pozwolił sobie te˛ uwage˛ wzmocnić).
• Żaden inny prosty system sprawdzania ścisłej zgodności typów nie dostarczył
tego rodzaju wsparcia.
Przykładem może być system Pascala. Sprawiał on wiecej
˛
kłopotów niż pozwalał
ich uniknać.
˛ Zmuszał do modyfikacji projektu, aby dostosować go do warunków
narzuconych przez implementacje˛ (co nie zmienia faktu, że jest to bardzo dobry jezyk
˛
dla poczatko˛
wego kursu nauki informatyki - uwaga autora kursu).
Geneza powstania jezyka
˛
C++
2
Niektóre spostrzeżenia
• Kompilator Simuli dobrze wychwytywał błedy
˛ typu. Błedy
˛ te przeważnie były albo
wynikiem “głupich” pomyłek w trakcie programowania albo też potknieć
˛ koncepcyjnych.
Ten drugi rodzaj błedów
˛
ma wrecz
˛ fundamentalne znaczenie dla procesu projektowania i pisania oprogramowania (autor kursu pozwolił sobie te˛ uwage˛ wzmocnić).
• Żaden inny prosty system sprawdzania ścisłej zgodności typów nie dostarczył
tego rodzaju wsparcia.
Przykładem może być system Pascala. Sprawiał on wiecej
˛
kłopotów niż pozwalał
ich uniknać.
˛ Zmuszał do modyfikacji projektu, aby dostosować go do warunków
narzuconych przez implementacje˛ (co nie zmienia faktu, że jest to bardzo dobry jezyk
˛
dla poczatko˛
wego kursu nauki informatyki - uwaga autora kursu).
• Pojecie
˛
klasy było zasadniczym elementem różniacym
˛
“sztywny” Pascal od “elastycznej” Simuli.
Geneza powstania jezyka
˛
C++
2
Niektóre spostrzeżenia
• Kompilator Simuli dobrze wychwytywał błedy
˛ typu. Błedy
˛ te przeważnie były albo
wynikiem “głupich” pomyłek w trakcie programowania albo też potknieć
˛ koncepcyjnych.
Ten drugi rodzaj błedów
˛
ma wrecz
˛ fundamentalne znaczenie dla procesu projektowania i pisania oprogramowania (autor kursu pozwolił sobie te˛ uwage˛ wzmocnić).
• Żaden inny prosty system sprawdzania ścisłej zgodności typów nie dostarczył
tego rodzaju wsparcia.
Przykładem może być system Pascala. Sprawiał on wiecej
˛
kłopotów niż pozwalał
ich uniknać.
˛ Zmuszał do modyfikacji projektu, aby dostosować go do warunków
narzuconych przez implementacje˛ (co nie zmienia faktu, że jest to bardzo dobry jezyk
˛
dla poczatko˛
wego kursu nauki informatyki - uwaga autora kursu).
• Pojecie
˛
klasy było zasadniczym elementem różniacym
˛
“sztywny” Pascal od “elastycznej” Simuli.
• Wyczerpujace
˛ sprawdzanie zgodności typów w Simuli sprawiało, że liczba problemów i błedów
˛
nie wzrastała szybciej niż liniowo wraz ze wzrostem programu.
Geneza powstania jezyka
˛
C++
3
Ważniejsze daty
1979 – (Maj) Poczatek
˛
prac na C z Klasami. (Październik) Oddanie do użytku pierwszej
implementacji tego jezyka.
˛
1983 – (Sierpień) Oddanie do użytku pierwszej implementacji jezyka
˛
C++. (Grudzień) Powstanie nazwy C++.
˛
1985 – (Luty) Powstanie pierwszej wersji jezyka
˛
C++ (wersja E) do użytku zewnetrznego.
˛
C++”.
(Październik) Ukazanie sie˛ pierwszego wydania ksiażki
˛ “Jezyk
1987 – (Grudzień) Ukazanie sie˛ kompilatora GNU C++.
1989 – (Grudzień) Powstanie zespołu ANSI X3J16 do spraw normalizacji jezyka
˛
C++.
1990 – (Maj) Powstanie w firmie Borland pierwszej implementacji jezyka
˛
C++. (Lipiec)
Przyjecie
˛
koncepcji wzorców. (Listopad) Przyjecie
˛
koncepcji wyjatków.
˛
1992 – (Luty) Powstanie pierwszej implementacji jezyka
˛
C++ (zawierajacej
˛ wzorce i wyjatki)
˛
w firmie DEC. (Marzec) Powstanie pierwszej implementacji jezyka
˛
C++ w firmie
Microsoft. (Maj) Powstanie pierwszej implementacji jezyka
˛
C++ w firmie IBM.
1993 – (Marzec) Przyjecie
˛
koncepcji identyfikowania typu podczas wykonywania programu.
(Lipiec) Przyjecie
˛
koncepcji przestrzeni nazw.
1994 – (Wrzesień) Przyjecie
˛
standardu ANSI/ISO jezyka
˛
C++.
Geneza powstania jezyka
˛
C++
4
Genealogia
Geneza powstania jezyka
˛
C++
5
Jezyk
˛
C z Klasami
Nowe elementy w stosunku do jezyka
˛
C:
• klasy,
• klasy pochodne (bez funkcji wirtualnych),
• sterowanie dostepem
˛
do obiektów publicznych i prywatnych,
• konstruktory i destruktory,
• funkcje wywołania i powrotu (później usuniete),
˛
• klasy zaprzyjaźnione,
• sprawdzanie typów i przekształcanie argumentów funkcji.
Geneza powstania jezyka
˛
C++
5
Jezyk
˛
C z Klasami
Nowe elementy w stosunku do jezyka
˛
C:
• klasy,
• klasy pochodne (bez funkcji wirtualnych),
• sterowanie dostepem
˛
do obiektów publicznych i prywatnych,
• konstruktory i destruktory,
• funkcje wywołania i powrotu (później usuniete),
˛
• klasy zaprzyjaźnione,
• sprawdzanie typów i przekształcanie argumentów funkcji.
Nowe własności dodane w 1981:
• funkcje rozwijane (ang. inline),
• argumenty domyślne,
• przeciażenia
˛
operatora przypisania.
Geneza powstania jezyka
˛
C++
5
Jezyk
˛
C z Klasami
Nowe elementy w stosunku do jezyka
˛
C:
• klasy,
• klasy pochodne (bez funkcji wirtualnych),
• sterowanie dostepem
˛
do obiektów publicznych i prywatnych,
• konstruktory i destruktory,
• funkcje wywołania i powrotu (później usuniete),
˛
• klasy zaprzyjaźnione,
• sprawdzanie typów i przekształcanie argumentów funkcji.
Nowe własności dodane w 1981:
• funkcje rozwijane (ang. inline),
• argumenty domyślne,
• przeciażenia
˛
operatora przypisania.
Kilka faktów:
• Słowo kluczowe class pochodzi z Simuli (podobnie jak notacja wskaźnika this).
• Zapis funkcja(void) w ANSI C pochodzi z jezyka
˛
C z Klasami.
Geneza powstania jezyka
˛
C++
6
Dlaczego C
• C jest jezykiem
˛
elastycznym – nie ma wewnetrznych
˛
ograniczeń wykluczajacych
˛
możliwość napisania jakiegoś rodzaju programu, tzn. można
korzystać w nim z wiekszości
˛
technik programowania.
Geneza powstania jezyka
˛
C++
6
Dlaczego C
• C jest jezykiem
˛
elastycznym – nie ma wewnetrznych
˛
ograniczeń wykluczajacych
˛
możliwość napisania jakiegoś rodzaju programu, tzn. można
korzystać w nim z wiekszości
˛
technik programowania.
• C jest jezykiem
˛
wydajnym – semantyka jezyka
˛
znajduje sie˛ na “niskim poziomie”, tzn. podstawowe pojecia
˛
jezyka
˛
odzwierciedlaja˛ podstawowe pojecia
˛
tradycyjnego komputera.
Geneza powstania jezyka
˛
C++
6
Dlaczego C
• C jest jezykiem
˛
elastycznym – nie ma wewnetrznych
˛
ograniczeń wykluczajacych
˛
możliwość napisania jakiegoś rodzaju programu, tzn. można
korzystać w nim z wiekszości
˛
technik programowania.
• C jest jezykiem
˛
wydajnym – semantyka jezyka
˛
znajduje sie˛ na “niskim poziomie”, tzn. podstawowe pojecia
˛
jezyka
˛
odzwierciedlaja˛ podstawowe pojecia
˛
tradycyjnego komputera.
• C jest jezykiem
˛
szeroko dostepnym
˛
– implementacje tego jezyka
˛
istnieja˛
zarówno dla mikrokomputerów jak też dla dużych superkomputerów.
Geneza powstania jezyka
˛
C++
6
Dlaczego C
• C jest jezykiem
˛
elastycznym – nie ma wewnetrznych
˛
ograniczeń wykluczajacych
˛
możliwość napisania jakiegoś rodzaju programu, tzn. można
korzystać w nim z wiekszości
˛
technik programowania.
• C jest jezykiem
˛
wydajnym – semantyka jezyka
˛
znajduje sie˛ na “niskim poziomie”, tzn. podstawowe pojecia
˛
jezyka
˛
odzwierciedlaja˛ podstawowe pojecia
˛
tradycyjnego komputera.
• C jest jezykiem
˛
szeroko dostepnym
˛
– implementacje tego jezyka
˛
istnieja˛
zarówno dla mikrokomputerów jak też dla dużych superkomputerów.
• C jest jezykiem
˛
przenośnym – programy napisane w C zazwyczaj nie
można automatycznie przenosić z jednego systemu operacyjnego do drugiego. Jednak przenośność z uwzglednieniem
˛
odpowiednich uwarunkowań jest możliwa.
Geneza powstania jezyka
˛
C++

Podobne dokumenty