Cała prawda o C++ Dnia 1. stycznia 1998, Bjarne Stroustrup udzielił wywiadu magazynowi IEEE "Computer"... Naturalnie, wydawcy spodziewali się usłyszeć retrospektywną wizję siedmiu lat projektowania zorientowanego obiektowo z użyciem języka, który został przez niego stworzony. Pod koniec wywiadu, redaktor prowadzacy ten wywiad otrzymał wiecej, niz mogł utargować i, dodatkowo, wydawca zdecydował się jednak zatuszowac te slowa "dla dobra przemysłu", lecz cóż... przecieki to podstawa. --- Redaktor: A więc... to juz pare lat od kiedy zmienił Pan swiat projektowania oprogramowania, jak to wyglada teraz z perspektywy czasu ? Stroustrup: Aktualnie, myślalem o tych dniach, jeszcze zanim się z Panem widziałem. Pamięta Pan ? Każdy pisał 'C' i własnie w tym leżał problem, że oni byli w tym cholernie dość dobrzy... Uniwersytety były tez dość dobre w nauczaniu tego. Wypuszczali fachowych - podkreślam słowo 'fachowych' - absolwentów w fenomenalnym tempie. I to wlasnie stworzyło problem... R: Problem ? S: Tak, problem. Pan pamieta, jak każdy pisał w Cobolu ? R: Jasne, ja sam przeciez też.. S: No wlaśnie, na początku chlopaki byli jako pólbogowie. Mieli wysokie zarobki i byli traktowani po królewsku... R: Ech... to były czasy... S: Jasne. No i co się stalo ? IBM zbzikował i zainwestował miliony w szkolenie programistów, az zaczeli oni zarabiać grosze... R: I dlatego ja odszedlem. Zarobki spadly w ciągu roku do takiego poziomu, że początkujący żurnalista dostawał więcej... S: Dokładnie. No i to samo stało się z programistami 'C'. R: Zgoda, lecz w czym rzecz ? S: No cóż, pewnego dnia, siedząc w biurze, pomyślalem o malutkim spisku, mającym na celu male zrównoważenie. Myślałem 'Co by było, gdyby tak był język tak skomplikowany, tak trudny do nauczenia, że nikt nigdy nie mógłby zalać rynku programistami ?'. Konkrentnie wziąłem parę pomysłów z X10, wie Pan, systemu X windows. To było dziwadło wsród graficznych systemów, które to tylko chodziło na tych Sunach 3/60... Oni mieli wszystkie skladniki, jakich potrzebowałem. Naprawdę smiesznie pomieszana skladnia, niezrozumiałe funkcje oraz struktura pseudo-OO. Nawet przeciez teraz nikt nie pisze w surowym X-windows. Motif jest jedynym sposobem, jesli chce sie zachowac godnosc... R: Pan żartuje... ? S: Nie tak znowu. Faktycznie problem byl inny. Unix byl napisany w 'C', co oznacza, ze dowolny programista 'C' moze bardzo łatwo stać się programistą systemowym. Pamięta Pan, jakich systemów mainframe programista używa do zarabiania ? R: Moze się Pan zalozyc, że pamiętam, zreszta to był powód tego, co zrobiłem... S: Ok, no więc ten nowy jezyk musiał zerwać z Unixem przez ukrycie wszystkich wywołań systemowych, które tak miło wiązały te dwie sprawy. To mogło umożliwić gościom, którzy znali tylko DOS-a, zarabianie na przyzwoite życie... R: Nie wierzę, że Pan to powiedział... S: Cóż, już uplynęlo dość sporo czasu i wierzę, że większość ludzi już wyliczyla dla siebie, ze C++ jest tylko marnowaniem czasu, niemniej musze stwierdzić, ze zajęło to o wiele więcej czasu, niż sądzilem... R: Wiec jak Pan to zrobil ? S: To wyglądało tylko na żart, nigdy nie przypuszczałem, że ludzie wezmą te książki poważnie. Każdy, kto ma choć pół mózgu, zorientuje się, że programowanie obiektowe jest ilościowo-intuicyjne, nielogiczne i nieeleganckie. R: Co takiego ? S: I jeszcze z tym "powtórnie używaniem kodu" - czy kiedykolwiek Pan slyszał, żeby jakakolwiek firma używała powtórnie swojego kodu ? R: No cóż... szczerze mowiac, nie slyszałem, ale... S: No więc jesteśmy w domu. Niech Pan sobie wyobrazi - kilka prób na początku. To byla ta firma z Oregonu - Mentor Graphics, tak się chyba nazywała - dostała kubeł zimnej wody na głowe, jak próbowali przepisac wszystko na C++ - tak w okolicach '90 czy '91. Bylo mi z ich powodu bardzo przykro, niemniej myślę, że ludzie mogliby uczyć się na wlasnych błędach... R: Oczywiście, nie nauczyli się ? S: Nie, zlekceważyli to. Problem w tym, ze większość firm zatuszowala swoje kardynalne blędy, a wyjaśnianie wspólnikom straty 30 milionów dolarow byloby niezmiernie trudne... Przynajmniej dać im ich dolę, w końcu doprowadza to do użyteczności... R: I udało sie ? Wie Pan... to dowod na to, ze OO się sprawdza... S: Cóż, prawie. Binaria były tak wielkie, ze trzeba było pięciu minut, żeby się wczytały na stacji HP z 128MB RAMu. Lykalo się jak syrop. Na razie, myślę, że to by było największe potknięcie i przekonałem się o tym w ciągu tygodnia, lecz nikt na to nie zważał. Sun i HP byly tylko bardzo zadowolone sprzedając ogromne pudełka z wielkimi zasobami, żeby uruchamiać trywialne programy. Wie Pan, kiedy mieliśmy nasz pierwszy kompilator C++ w AT&T, skompilowałem 'Hello World' i nie mogłem uwierzyć, że rozmiar wykonywalnego był 2.1 MB. R: Co takiego ? No cóż, przecież kompilatory się bardzo rozwinęły od tego czasu... S: Czyżby ? Niech Pan spróbuje w ostatniej wersji g++ - nie otrzyma Pan wiekszej zmiany poniżej pół megabajta. Takoż, jest jeszcze sporo przykladów dla Pana z całego świata. British Telecom mial niezła klęskę, lecz - na szczęście - zdecydował się porzucić całość i zacząć od nowa. Wyszedł na tym lepiej, niz Australian Telecom. Teraz slyszę, że Siemens buduje dinozaura i coraz bardziej się martwi, ze sprzęt mu się rozrasta, żeby pomiescic binaria. Czy wielokrotne dziedziczenie nie jest wesołe ? R: Tak, ale C++ jest od początku głośnym językiem... S: Naprawdę Pan w to wierzy ? Czy siedział Pan kiedykolwiek nad projektem w C++ ? Oto, co się dzieje: Po pierwsze, założyłem troche pułapek dla upewnienia się, ze najbardziej trywialne projekty będą działac za pierwszym razem. Weźmy przeciążanie operatorów. Pod koniec projektu, prawie każdy moduł to ma zazwyczaj, bo goście czują, że rzeczywiscie powinni to robic, jak to mieli na kursie. Ten sam operator tedy znaczy cos zupelnie innego w kazdym module. Spróbuj Pan nad tym zapanować, kiedy ma Pan okolo setki modułów. Podobnie z ukrywaniem danych. Na Boga, nie potrafię opanować smiechu, jak slyszę o problemach firm, które robią moduły komunikujące sie ze soba. Mysle, ze słowo 'synergistic' było specjalnie pomyślane w celu wbicia noża w żebra menadżerów projektu... R: Musze powiedziec, że zaczynam się całkiem przekonywać do tego wszystkiego. I chce Pan powiedzieć, że to wszystko po to, żeby podwyższyć place programistów ? To niemoralne... S: Nieprawda. Każdy ma wybór. Nie oczekiwałem oczywiście, że sprawa sie az tak wymknie mi z rąk. Niemniej ogolnie mi sie udało. C++ aktualnie wymiera, ale programiści nadal zarabiają dobrze - szczególnie te marne diabełki, które mają podtrzymywać to szajstwo. Czy zdaje Pan sobie sprawę, że niemożliwe jest utrzymanie dużego modułu programowego C++, jeżeli aktualnie Pan tego nie pisal ? R: Jak to ? S: Pan nie kontaktuje ? Pamięta typedef ? R: Tak, owszem... S: Pamieta, jak dużo czasu zajmowało przegryzienie się przez pliki naglówkowe tylko po to, żeby znależź to, ze 'RoofRaised' to liczba podwójnej precyzji ? Cóż, niech Pan sobie wyobrazi, ile czasu zajmie znalezienie wszystkich jednoznacznych typedef'ow we wszystkich klasach w wielkim projekcie... R: Więc czemu Pan uważa, że osiągnął sukces ? S: Pamięta Pan długość srednio długiego projektu w C ? Ok. 6 miesiecy. Nie za wiele dla gościa z żoną i dziećmi, żeby zarobić na godziwe utrzymanie. Wez Pan ten sam projekt, zrób go w C++ i co Pan otrzymasz ? Powiem Panu. Rok do dwóch lat. Czy to nie wspaniałe ? Cała ta ochrona pracy, przez jedną pomyłkę sądu. I jeszcze jedno. Uniwersytety nie uczyły juz C na dluzszą metę, aktualnie brakuje przyzwoitych programistów C. W szczególnosci tych, ktorzy wiedzą coś o systemach Unix. Jak wielu gosci moze wiedziec, co zrobic z 'malloc', skoro uzyli 'new' cały czas - i nigdy nie obchodziła ich wartość zwracana. W praktyce, większosc programistów C++ wyrzuca wartosci zwracane. Co się stało ze starym dobrym '-1' ? Najwyżej jeśli się wiedziało, że był błąd, bez cackania sie zrzuca się całą obslugę w 'throw' 'catch' 'try'... R: No ale, z pewnoscią przecież, dziedziczenie oszczędza mnóstwo czasu ? S: Czyżby ? Zauważyl Pan kiedyś różnice pomiędzy planem projektu w C a planem projektu w C++ ? Planowanie stanowiska dla projektu w C++ zajmuje trzykrotna ilość czasu. W szczególności, co z czego powinno być dziedziczone, a co nie. Jest to wciąz nierozumiane. Slyszał Pan kiedy, żeby zbrakło pamięci w programie w C ? Teraz ze swiecą takich szukac. Wiekszosc firm poddaje się i wyrzuca produkt wiedząc, że to cieknie jak sito, po prostu pozbywają się wydatków na wycofanie tego. R: Są narzędzia... S: Większość których była napisana w C++... R: Jeśli to opublikujemy, prawodpodobnie zostanie pan zlinczowany, zdaje Pan sobie z tego sprawę ? S: Wątpie. Jak powiedziałem, C++ ma już za sobą czasy swietności i żadna firma przy zdrowych zmysłach nie zacznie projektu w C++ bez dokładnych badań pilotażowych. To ich powinno przekonać, że to droga do klęski. Jesli nie - spotka ich to, na co sobie zaslużyli... Wie Pan, że próbowałem przekonac Dennisa Ritchie do przepisania Unixa w C++ ? R: Na Boga... i co powiedział ? S: Szczęściem facet ma poczucie humoru. Myślę, że obaj z Brianem zorientowali się, co robię, i to bardzo szybko, ale nie dali. Powiedział, że pomoze mi napisac wersje C++ DOS-a, jesli jestem zainteresowany. R: Był Pan ? S: Wlaściwie to pisałem DOS-a w C++. Dam Panu demo, jak skończymy. Biegało sobie to na Sparc 20 w pomieszczeniu komputerowym. Chodzi jak rakieta na 4 CPU i zabiera tylko 70 mega dysku... R: Jak to by było na PC ? S: Zartowniś z Pana. Widział Pan kiedy Windows '95 ? Uważam to za swój największy sukces. Gra się zaczęla, zanim bylem gotów, chociaż... R: Wie Pan, ten pomysl o Unix++ dał mi trochę do myślenia. Gdzieś na zewnatrz są goście, ktorzy tego probują. S: Przejdzie im, jak przeczytaja ten wywiad. R: Przykro mi, ale nie widzę, żebyśmy mogli to opublikować. S: Ale to jest historia wieku. Chcę być tylko pamiętany przez moich towarzyszy programistów, dla których to zrobiłem. Wie Pan, ile moze gosciu C++ dostać na dzień dzisiejszy ? R: Ostatnio slyszałem, że taki "na topie" gościu wart jest 70-80 dolcow za godzinę... S: Widzi Pan ? I zaloże się, że to zarobi. Ciągnięcie dalej tego szajstwa w C++ to niełatwa robota. I jak powiedziałem wcześniej, każdy programista C++ czuje się związany jakaś mistyczną obietnicą używania każdego cholernego elementu języka w każdym projekcie. Wlaściwie naprawdę to mnie to czasem drażni, nawet biorąc pod uwagę to, że sluży moim pierwotnym zalozeniom. I prawie lubie ten język po tym czasie... R: Twierdzi Pan, że wcześniej nie ? S: Nienawidziłem go. Nawet wygląda niezgrabnie, nieprawdaż ? Ale kiedy wyszly te arystokratyczne książki... chyba Pan sobie wyobraża... R: Jeszcze chwila. Co z referencjami ? Musi Pan przyznać, że usprawnił Pan wskaźniki z C... S: Hmm... zawsze mnie to dziwilo. Pierwotnie myślałem, że tak. Potem dyskutowałem z gościem, który pisał w C++ od początku. Powiedział, że nigdy nie może spamiętać, czy jego zmienna byla referowana, czy dereferowana, wiec zawsze używał wskaźników. Powiedział, że ta mała gwiazdka zawsze mu przypominała... R: No tak, w tym momencie zwykle mowię 'Dziekuję bardzo', ale niespecjalnie mi się to zgadza z rzeczywistością. S: Niech mi Pan obieca, że to zostanie opublikowane. Niech chociaż czuje, że mam czyste sumienie. R: Powiadomię Pana, acz spodziewam się, co powie mój wydawca... S: W sumie... kto w to uwierzy ? Chociaz... moze mi Pan przesłac kopię tej tasmy ? R: Mogę...