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++