Jak nauczyliśmy maszyny liczyć i myśleć za nas? Część 17: Gwiazda wśród narzędzi programowania – język C

Język programowania, który współcześnie nadal jest bardzo popularny i zdominował wszystkie wcześniej napisane, powstał w 1972 r. w wyniku pracy jednego człowieka: Dennisa MacAlistaira Ritchiego.

Publikacja: 27.01.2022 17:35

Udoskonaloną wersję języka C, czyli tzw. C++, stworzył Bjarne Stroustrup w 1998 r.

Udoskonaloną wersję języka C, czyli tzw. C++, stworzył Bjarne Stroustrup w 1998 r.

Foto: shutterstock

We wcześniejszych felietonach należących do tego cyklu opisałem dawne języki programowania, które w historii informatyki odegrały bardzo znaczącą rolę. Pokazałem, jak powstał FORTRAN, ALGOL i jego następca PASCAL, wykorzystywany w ekonomii COBOL i lubiany przez początkujących BASIC. Opisałem też przygodę z językiem, który miał zastąpić wszystkie języki, to znaczy z ogromnym PL/1. To były w drugiej połowie XX wieku główne filary, na których opierał się rozwój oprogramowania będący warunkiem rozpowszechnienia się zastosowań informatyki. Obok tych wielkich narzędzi powstawały w latach 70. liczne inne propozycje języków programowania. Sam miałem w tym pewien (nieznaczny) udział, bo opracowałem i implementowałem dwa języki, które oczywiście nie przyjęły się i poszły w zapomnienie. Ale byłem w dobrym towarzystwie.

FORTH i Clipper

W 1970 r. Charles Moore lansował język FORTH. Nazwa wskazywała, że miał to być „język czwartej generacji". Mimo mocnej akcji promocyjnej się nie przyjął. Bardzo ograniczone znaczenie miał język Clipper – przeznaczony do operowania na bazach danych i oferowany (od 1985 r.) przez firmę Ashton-Tate wraz z produkowanymi przez nią systemami baz danych o nazwie dBase. Nazwa nawiązywała do legendarnie szybkich żaglowców przewożących w XIX wieku towary (zwłaszcza herbatę) z Azji do Europy, zaletą Clippera miała więc być szybkość działania przy wyszukiwaniu danych. Język ten bardzo intensywnie ewoluował, jego kolejne nowe wersje pojawiały się najpierw co roku, a potem nawet co kilka miesięcy. Jednak postęp w dziedzinie baz danych był tak szybki, że w połowie lat 90. Clipper „osiadł na mieliźnie", ostatnią jego wersję opublikowano w 1997 r., a potem przestano się nim zajmować.

Powstanie języka C

Języki programowania powstawały zwykle w następstwie pracy dużych zespołów ludzi zatrudnianych przez duże firmy lub instytucje: FORTRAN i PL/1 lansowała firma IBM, Pascal (będący następcą ALGOL-u) rozwijała firma Borland, COBOL wspierał Departament Obrony USA, BASIC był oczkiem w głowie firmy Microsoft. Tymczasem język, który współcześnie nadal jest bardzo popularny i zdominował wszystkie wcześniej wymienione języki, powstał w wyniku pracy jednego człowieka, który w dodatku wcale nie koncentrował się na stworzeniu nowego języka, tylko zmajstrował go sobie w tym celu, żeby stworzyć system operacyjny Unix. O tym systemie (i ogólnie o systemach operacyjnych) napiszę oddzielny felieton, teraz natomiast zajmę się samym językiem.

Stworzył go w 1972 r. Dennis MacAlistair Ritchie, pracownik Bell Telephone Laboratories. Nadał temu językowi nazwę C. Dlaczego taka nazwa? Bo język C powstał w wyniku udoskonalenia języka B, stworzonego przez innego pracownika Bell Telephone Laboratories – Kena Thompsona. Logiczne było, że język następujący po B powinien się nazywać C. Zabawne jest także pochodzenie nazwy języka B. Wywodziła się ona od nazwy języka, na którym z kolei wzorował się Thompson. Ten język nazywał się... No, zgadniecie Państwo, jak się nazywał?

Nie, język będący praźródłem języków B i C nie nazywał się A, tylko BCPL (Basic Combined Programming Language). Opracował go w 1966 r. Martin Richards na Uniwersytecie w Cambridge z takim przeznaczeniem, żeby był to język do pisania translatorów. W końcu translator to też program i trzeba go napisać w jakimś języku. Tym językiem miał być BCPL.

Ken Thompson, budując w 1970 r. swój język, wzorował się na BCPL, ale przejął tylko niektóre elementy tego bogatego języka, dlatego także z jego nazwy wziął jedynie pierwszą literę – B. No, a potem Dennis Ritchie stworzył następcę języka B i nazwał go C. I ta nazwa obowiązuje do dziś (wymawiana oczywiście jako „si"). Dlaczego nagle zajmuję się wymową tej właśnie nazwy?

Bo z językiem C związany jest żart fonetyczny. Otóż w jednym z podręczników języka C Dennis Ritchie zwrócił się do informatyków z pytaniem:

„To C, or not to C?".

Jest to oczywiste nawiązanie do najbardziej znanej kwestii ze słynnego monologu Hamleta:

„To be, or not to be?".

Żart ten staje się czytelny dopiero wtedy, gdy się prawidłowo wymawia obie wymienione kwestie, stąd uwaga na temat fonetyki nazwy języka C.

Obserwując, co się działo z językiem C na przestrzeni wielu lat jego rozwoju, można stanowczo stwierdzić, że na postawione pytanie międzynarodowa społeczność informatyków odpowiedziała dobitnie i zdecydowanie: „To C!".

Ewolucja języka C

Jak wspomniałem wyżej, czołowy do niedawna w informatyce język C urodził się niejako przy okazji. Dennis Ritchie wcale nie dążył do tego, żeby stworzyć nowy uniwersalny język programowania. On miał inne zadanie: musiał zbudować jądro systemu Unix. Zbudował go i system zachwycił użytkowników! Duże powodzenie systemu Unix sprzyjało również popularyzacji języka C jako narzędzia użytego do jego tworzenia – i w konsekwencji także jego elementu składowego. Ale sukces wcale nie przyszedł szybko i łatwo.

Za datę powstania języka przyjmuje się rok 1972, chociaż wiadomo, że pracowano nad nim w latach 1969–1973. W 1973 r. udała się implementacja jądra systemu Unix, Dennis Ritchie uważał więc, że stworzone przez niego narzędzie spełniło swoje zadanie i nie ma potrzeby dalej nim się zajmować.

Do zmiany zdania zachęcił go prawdopodobnie inny pracownik laboratorium Bella, Brian W. Kernighan, który w 1978 r. namówił Ritchiego, żeby wspólnie z nim opublikował książkę „The C Programming Language" (polska edycja drugiego wydania ukazała się w roku 1994 nakładem Wydawnictwa Naukowo-Technicznego jako „Język ANSI C" w tłumaczeniu Danuty i Marka Kruszewskich). Książka odniosła sukces i językiem C zaczęło się interesować coraz więcej informatyków, zwłaszcza tych, którzy musieli pisać trudne programy, na przykład systemy operacyjne. Wszystko to odbywało się bardzo spontanicznie, dopóki nie wmieszała się w to amerykańska instytucja normalizacyjna, mająca wielki wpływ na procesy toczące się w całej informatyce światowej: ANSI (American National Standards Institute).

W 1983 r. ANSI powołała specjalny komitet, X3J11, który miał opracować standard języka C. Komitet ten nie spieszył się jednak nadmiernie, bo odpowiednią normę (oznaczoną ANSI X5.159-1989) wydano dopiero w 1989 r. Rok później europejska instytucja normalizacyjna ISO wydała analogiczną normę obowiązującą na naszym kontynencie (ISO/IEC 9899:1990).

Język C zaistniał wtedy oficjalnie i – dosłownie z tygodnia na tydzień – zyskiwał coraz więcej zwolenników. Jest to język zdecydowanie trudniejszy od np. Pascala, ale pozwala pisać niesłychanie zwarte (krótkie), a zarazem wydajne programy. W dodatku powstały jego udoskonalone wersje – głównie wersja C++ zaprojektowana przez Bjarne'a Stroustrupa.

Następny po C

Z nazwą C++ znowu wiąże się pewien żart. Otóż w języku C funkcjonuje tzw. operator inkrementacji, zapisywany właśnie jako ++. Użycie tych dwóch plusów oznacza, że chcemy wziąć następny element z pewnego zbioru. Na przykład może to być następny element w tablicy. No więc zapis C++ można czytać: „następny po języku C".

C++ okazał się bardzo udany. Standard tego języka powstał w 1998 r. (norma ISO/IEC 14882-1998). Także zyskał dużą popularność, głównie ze względu na dostosowanie struktury tego ulepszonego języka do wymogów programowania obiektowego (o czym napiszę w osobnym felietonie), które na przełomie XX i XXI wieku stało się ważnym paradygmatem programowania i myślenia o informatyce.

Inną udoskonaloną wersją języka C jest C# (odczytywany jako „C-sharp"). Zespół pod kierunkiem Andersa Hejlsberga opracował go dla firmy Microsoft w 2001 r. Jest to także wersja języka nastawiona na wykorzystanie metodyki programowania obiektowego, dostępna w połączeniu ze specjalnym środowiskiem uruchomieniowym, na przykład .NET Framework firmy Microsoft. Nazwa znowu ma swoją symbolikę: znak # można odczytywać jako cztery plusy (jest więc to język „następny w stosunku do C++"). W muzyce znak # oznacza podwyższenie wysokości dźwięku, znowu więc mamy do czynienia z symbolicznym zapisem tego, że C# jest czymś „wyższym" od C.

Język C odegrał w historii informatyki znaczącą rolę, co uzasadnia jego dość obszerne omówienie w tym felietonie. Ale chcąc doprowadzić ten zarys historii do dnia dzisiejszego, muszę odwołać się do rankingu języków programowania (opartego na częstości ich stosowania). Ranking taki można znaleźć w opracowaniu TIOBE – instytucji, która sama siebie określa jako The Software Quality Company i która publikuje m.in. indeksy popularności języków programowania. Otóż na najnowszej (w momencie pisania tego tekstu) liście TIOBE pięć pierwszych miejsc zajmują następujące języki: Java, C, Python, C++, Visual Basic. Jak widać język C (oraz C++) musiały już ustąpić miejsca nowym językom, o których opowiem w następnym felietonie.

Autor jest profesorem AGH w Krakowie

We wcześniejszych felietonach należących do tego cyklu opisałem dawne języki programowania, które w historii informatyki odegrały bardzo znaczącą rolę. Pokazałem, jak powstał FORTRAN, ALGOL i jego następca PASCAL, wykorzystywany w ekonomii COBOL i lubiany przez początkujących BASIC. Opisałem też przygodę z językiem, który miał zastąpić wszystkie języki, to znaczy z ogromnym PL/1. To były w drugiej połowie XX wieku główne filary, na których opierał się rozwój oprogramowania będący warunkiem rozpowszechnienia się zastosowań informatyki. Obok tych wielkich narzędzi powstawały w latach 70. liczne inne propozycje języków programowania. Sam miałem w tym pewien (nieznaczny) udział, bo opracowałem i implementowałem dwa języki, które oczywiście nie przyjęły się i poszły w zapomnienie. Ale byłem w dobrym towarzystwie.

Pozostało 90% artykułu
2 / 3
artykułów
Czytaj dalej. Subskrybuj
Historia
Pomogliśmy im odejść z honorem. Powstanie w getcie warszawskim
Materiał Promocyjny
Wykup samochodu z leasingu – co warto wiedzieć?
Historia
Jan Karski: nietypowy polski bohater
Historia
Yasukuni: świątynia sprawców i ofiar
Historia
„Paszporty życia”. Dyplomatyczna szansa na przetrwanie Holokaustu
Materiał Promocyjny
Jak kupić oszczędnościowe obligacje skarbowe? Sposobów jest kilka
Historia
Naruszony spokój faraonów. Jak plądrowano grobowce w Egipcie