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:

Autopromocja
Wyjątkowa okazja

Roczny dostęp do treści rp.pl za pół ceny

KUP TERAZ

„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