OpenBSD zbudowane pod PCC działa
- Dodano: 31 grudnia 2009
- Wprowadził: blinkkin
- Komentarze: 101
Anders Magnusson doniósł, że możliwe jest zbudowanie jądra OpenBSD na platformie x86 za pomocą PCC.
Co najważniejsze takie jądro jest w pełni sprawne i bootowalne. Do tego celu użyto gałęzi -current OpenBSD i najnowszej wersji PCC dostępnej w repozytoriach.
Trwają prace nad wsparciem platformy amd64, efekty zapewne będzie można ocenić już niedługo.
Portable C Compiler to niewielki kompilator języka C, obsługujący głównie standard C99. Do głównych zalet należy zaliczyć szybkość kompilacji przy zachowaniu sensownej optymalizacji i dostępność kodu PCC na licencji BSD.
Zbudowanie działającego OpenBSD za pomocą PCC stało się możliwe głównie dzięki pracy Jonathana Gray’a, który znalazł wiele błędów związanych z generowaniem kodu jądra.
W osiągnięciu celu pomogły też nadesłane pieniądze. 750 dolarów to kwota, która w tym miesiącu wspomogła PCC. Oznacza to, że brakuje zaledwie 3000$ do opracowania podstawowych założeń uwzględnionych w budżecie projektu.
Więcej informacji: http://undeadly.org/cgi?action=article&s...1228231142
Znalazłeś literówkę? Zgłoś ją używając formularza!
Jeśli uważasz, że ten nius jest nieobiektywny, przedstawia nieprawdziwe wydarzenie, jest spamem lub nie spełnia standardów serwisu, napisz raport.
Niusy na podobny temat:
Komentarze są prywatnymi opiniami dodających je osób. Prosimy o zachowanie kultury wypowiedzi. Komentarze obraźliwe oraz obniżające poziom serwisu będą usuwane. Więcej w regulaminie komentowania.
101 komentarzy
Wszystkie autorskie niusy w serwisie publikowane są na licencji Creative Commons Uznanie autorstwa 2.5 Polska.


i taki rozwój mi się podoba nikt za frajer nie pracuje i może zająć się konkretnie jednym z projektów, a nie w wolnym czasie.
LLVM na x86 raczej nie dogonia, ale jesli mocno wciagna sie w PCC, to pewnie zrobia porty na architektury przez LLVM olewane – co jest bardzo fajne. Moze przy okazji pchneliby port na VAX-a troche do przodu, bo w stosunku do NetBSD maja tu spore tyly (brak ELF i zwiazany z tym brak bibliotek dzielonych).
Magnusson swego czasu pisał, że przeniesienie PCC na amd64 zajęło tydzień czasu (oczywiście wersja mocno niedopracowana). Było to możliwe ze względu na małą ilość kodu specyficznego dla danej platformy ok. 3 tysięcy lini – nazwa PCC nie wzięła się znikąd.
Historia powstania (rezurekcji?) też jest dosyć ciekawa. Magnusson chciał przenieść NetBSD na emulator PDP-11 i potrzebował kompilatora. PCC zapewne znajdzie zastosowanie na platformach, gdzie wsparcie GCC leży – wystarczy popatrzeć na porty NetBSD, gdzie część nadal korzysta nie tylko z wersji 3.* GCC, ale też starej serii 2.*.
PCC może też zdobyć popularność tam, gdzie agresywna optymalizacja jest zbędna np. kernel i podstawowy userland. Backend i frotnend PCC to zaledwie 12 tysięcy linii kodu, co w porównaniu z GCC czyni ten kompilator znacznie łatwiejszym do testowania etc.
Fajnie, że powoli monopol GCC kruszeje, a rozwój LLVM – Clang oraz PCC idzie do przodu. Za długo w tej sferze panowała hegemonia jednego kompilatora, co zapewne odbiło się na jego jakości.
Pojawia się zasadnicze pytanie: po co port na VAXa? z historycznego sentymentu (jedna z pierwszych platform BSD UNIXa) czy dla jakichś praktycznych korzyści? Bo nie wiadomo mi o żadnym nowym VAXowym sprzęcie
Wydawa mnie się, że praktycznie liczą się RISC i x86.
@maciek: Z przyczyn hobbystycznych.
Owszem, praktycznie licza sie x86/amd64, arm, mips, powerpc i moze jakas egzotyka w rodzaju arm32.
Bo się da? W przypadku NetBSD, jego twórcy wychodzą z założenia, że głównymi odbiorcami są oni sami. Pozostałe systemy BSD prezentują podobne podejście, prawdopodobnie na mniejszą skalę.
Wśród zespołu NetBSD szczególnie widać hobbistyczne podejście do systemu. Poniżej zamieszczam krótką historię PCC, bo namieszałem trochę z tym PDP-11 (po sprawdzeniu list mailowych wyszło trochę inaczej).
W 2002 roku kilka osób postanowiło przenieść NetBSD na platformę PDP-10, dokładniej na emulator KLH10 PDP-10. Miał to być swojego rodzaju test przenośności (nie podoba mi się to słowo) NetBSD, ponieważ architektura KLH10 była 36-bitowa, natomiast adresowanie było 30-bitowe.
Wśród tych osób był Magnusson. Początki były bardzo obiecujące. Jednak szybko okazało się, że to nie NetBSD jest głównym problemem, a GCC. Naprawienie jednego problemu w kompilatorze skutkowało znalezieniem następnego i tak dalej.
W ten sposób Anders w 2003 roku zainteresował się poprzednio używanym kompilatorem na 4.4BSD do roku 1994, zanim został wyparty przez GCC. Tym kompilatorem było PCC, resztę możecie dopisać sami.
Port PDP-10 obecnie nie jest rozwijany, ale jak widać praca nad nim nie poszła na marne. Wyciągnięto wnioski, których efektem jest aktywny rozwój PCC.
Podobnie wygląda sprawa z innymi platformami wspieranymi przez NetBSD. Osoby je utrzymujące nie są zainteresowane tzw. "podbojem świata", robią to z czysto hobbistycznych powodów. Dominujące platformy zapewne ich mało obchodzą.
Niektórych takie podejście może dziwić, ale owocami ograniczeń mało popularnych architektur są często bardzo ciekawe i niekonwencjonalne projekty.
Osobom odpowiedzialnym za NetBSD nie można odmówić zwariowania do pewnego stopnia. Idzie im jednak całkiem nieźle biorąc pod uwagę, że jest to prawdopodobnie system z najstarszą historią w repozytorium CVS.
Nie dziwi więc rozmiar takiego drzewa repozytorium, które jest kilkukrotnie większe od Linuksa (uściślam, że chodzi mi o kernel). Były nawet testy z gitem, ale okazało się, że ten RCS średnio radzi sobie z tak dużym repozytorium (git mocno zwalniał).
Problemy z PDP-10 w GCC sa tym dziwniejsze, ze RMS-owi ta architektura powinna byc blizsza niz jakakolwiek inna.
"Zwykłe" PDP-10 posiada 18-bitowe adresowanie, co wiąże się ze sporymi ograniczeniami dotyczącymi pamięci. GCC na takiej platformie z tego co wyczytałem działało dosyć przyzwoicie.
Natomiast ukierunkowanie na KLH10 sprawiało już problemy. 30-bitowe adresowanie pozwalało na użycie większej ilości pamięci, ale było na tyle nietypowe, że GCC odmawiało współpracy.
Archeologia komputerowa to jak zwiedzanie zupełnie innego świata przez co może być interesująca
BTW (do archeologów): a czy na VAXy jest chociaż utrzymywany VMS? bo HP reklamuje ten system jako jeden z "atutów" Itanium
@maciek: Ostatnia wersja OpenVMS-a na VAX-a to 7.3. Nie wiem, czy jeszcze jest supportowany, ale bardzo mozliwe.
Aktualne wersje OpenVMS-a sa dostepne na AXP (nadal) i Itanium.
Czyli mam rozumieć że to w efekcie przyśpieszy działanie OpenBSD ?
Raczej przyspieszy kompilację programów pod OpenBSD.
Ani jedno, ani drugie. PCC obecnie nie posiada frontendu pozwalającego na kompilację C++, a w przypadku C jest silnie nastawiony na standard C99 (to jak kompilacja programu za pomocą GCC z flagą "-std=c99"). Więc do kompilacji paczek/drzewa portów za bardzo się nie nadaje. Należy też pamiętać, że na chwilę obecną PCC nie oferuje praktycznie żadnej optymalizacji.
W przypadku OpenBSD, użycie PCC do kompilacji jądra ma po części podłoże polityczne. Theo de Raadt przez długi czas krytykował rozwój GCC, chociaż działającej alternatywy nie było. Po drugie stwierdzenie, że PCC jest stabilne i bezpieczne (na to jeszcze trzeba poczekać) jest znacznie łatwiejsze ze względu na znacznie mniejszą objętość kodu w porównaniu z GCC (kilkunastokrotna?).
W przypadku NetBSD użycie PCC ma sens ze względu na nietypowe platformy, które od dłuższego czasu nie są wspierane przez nowsze wersje GCC (o czym już wspominałem).
Dochodzi do tego sprawa licencji, PCC jest dostępne na licencji BSD. Natomiast GCC w wersji powyżej 4.* jest licencjonowane na GPL v3. Sporo w tym polityki jak widać.
Tylko po co im kompilator na bsd? Przecież gcc można używać także przy kompilacji zamkniętych projektów…
Kwestie techniczne to inna sprawa…
@Tor: Chociazby ze wzgledow prawnych.
Krotko po tym, jak Sun wypuscil OpenSolarisa jako Open Source, pare istotnych osob (iirc Alan Cox i Ulrich Drepper) od Linuksa twierdzilo, jakoby samo patrzenie na kod Solarisa bylo niebezpieczne – bo rzekomo mozna cos zapamietac, zrobic mentalne copy/paste, a licencja GPL zakazuje laczenia z kodem na CDDL. W przypadku GPL3 jest jeszcze gorzej, bo licencja jest bardziej restrykcyjna. I o ile zdanie Alana (ktory wslawil sie bardzo intensywnym sianiem FUD-u i zwyczajnym klamaniem w zywe oczy zarowno w kwestiach patentowo-licencyjnych, jak i technicznych) czy Dreppera mozna olac, o tyle opinii nie tak znowu malej czesci prawnikow – juz nie. W efekcie niektore firmy posuwaja sie wrecz do zakazywania pracownikom sciagania jakiegokolwiek kodu na GPLv3. Ma to sens, bo lepiej dmuchac na zimne.
Fragment przetłumaczonej wypowiedzi Theo:
I jeszcze wypowiedź Otto Moerbeeka:
Tak jak istnieje GNU userland, tak istnieje userland BSD. Do tej pory alternatywa w postaci BSD była niekompletna ze względu na brak kompilatora. Aplikacje BSD są zazwyczaj znacznie prostsze, nie każdy potrzebuje 28 opcji w poleceniu cat (to może zły przykład, bo wersja BSD posiada też ich sporo – kilkanaście?).
Co do monopolu wystarczy zrobić małe porównanie: gtk ma konkurencję w postaci Qt, emacs – vi i tak dalej. Natomiast, gdzie jest alternatywa dla GCC?
http://en.wikipedia.org/wiki/Intel_C%2B%2B_Compil…
Kiedys w Linux+ opisana byla kompilacja kernela linuxa intelowski mkompilatorem. Tak skompilowane jadro bylo szybsze
@blinkin: We FreeBSD cat(1) ma siedem opcji.
Ale tak, bloat jest kolejnym problemem. Chociaz w przypadku gcc bloat jest glownie wewnatrz, tam, gdzie developerzy systemu zwykle nie grzebia, bo nie maja po co.
@wort: Cena też jest przystępna: od 599 dolarów wzwyż
O ile pamiętam to z darmowych jest Clang i Sun Studio .
Sun nie udostępnia źródełek do swojego kompilatora, tylko wersje binarne na Linuksa x86 i OpenSolarisa x86/sparc, więc jego zastosowanie jest mocno ograniczone.
Clang natomiast to tylko jeden z fronendów wspominanego przez trasha LLVM w drugim poście. Najpopularniejszy, o wspierany przez Apple.
Owszem są tylko binarki co nie zmienia faktu że jest darmowy i można w nim zbudować opensolarisa .
A zespół OpenBSD zawsze był znany z nietypowej strategi , ciekawe czy w dłuższej perspektwie dla openbsd ukierunkowanie na PCC wyjdzie na dobre , miejmy nadzieje że tak .
I co w tym rozumowaniu jest nie tak? Jak już do drzwi zapukają prawnicy to możesz się tłumaczyć, że "ja tylko czytałem kod, zupełnie zapomniałem że tam też był taki algorytm"…
Pomyliłeś Coxa z takim jednym trollem o inicjałach E.T.N.
Linki – jakich opinii i jakich prawników?
@krzabr: OpenBSD jeszcze zapewne długo będzie korzystać z GCC. PCC jest w fazie rozwojowej, news dotyczy jednego z pierwszych kroków.
PCC kompiluje kod kilkukrotnie szybciej i kod jest lepszej jakości (czyt. czystszy), co przekłada się na łatwiejsze debugowanie. Ze znacznie większym prawdopodobieństwem można założyć, że niepoprawne działanie programu jest związane z samym kodem, a nie błędem w kompilatorze.
Gorzej sytuacja wygląda z oprogramowaniem zewnętrznym. Często korzysta ono z nieudokumentowanych "możliwości" GCC, które nie są zgodne z założeniami żadnego standardu języka programowania (dotyczy to zarówno Javy, C czy C++). Na tym polu GCC będzie prawdopodobnie królować jeszcze przez długie lata.
Prace nad PCC tak jak wspominałem zostały rozpoczęte głównie z powodu NetBSD. Niektóre platformy korzystają z kilkuletniej wersji GCC, bo deweloperzy GCC zarzucili wparcie dla mniej popularnych architektur i nie są zainteresowani ich wsparciem.
Jak mocno potrzebna jest alternatywa dla GCC, niech świadczy fundusz BSD, który od listopada 2008 roku uzbierał ponad 9,5 tysiąca dolarów na potrzeby rozwoju PCC.
Podobnie sytuacja ma się z LLVM. Apple początkowo inwestowało tylko w rozwój własnego frontendu – Clanga. Od 2007 roku twórca LLVM pracuje w Apple.
Dobre kompilatory jednak nie powstają z dnia na dzień i przyjdzie nam jeszcze trochę poczekać.
@Low Year: Nie tak w tym rozumowaniu jest to, ze jest to wyssana z palca bajeczka. Nie zapamietuje sie podswiadomie tak duzych ilosci kodu, ktore podpadalyby pod prawo autorskie (hint: kilka linijek kodu zasadniczo nie podpada).
Co do Alana Coxa – poczytaj sobie, co pisal na temat patentow odnosnie licencji CDDL. Trudno to podsumowac inaczej niz jako klamstwa i FUD. Na szczescie to problem wylacznie jego i uzytkownikow Linuksa, bo to oni nie maja zadnego wspolczesnego systemu plikow, ze snapshotami i innymi osiagnieciami pierwszej dekady XXI wieku.
A co do linkow – mozesz wierzyc lub nie, ale firmy, ktore placa kupe siana na ekspertyzy prawne, zwykle nie maja ochoty rozdawac wynikow ekspertyz konkurencji. Jesli wedlug ciebie cos, co nie jest dostepne za darmo w sieci nie istnieje – coz, twoj problem.
@blinkkin: Gwoli scislosci, Apple zatrudnia ponad tuzin developerow LLVM i clanga, ktorzy pracuja na etat miedzy innymi nad tym, zebym wygral zaklad z biesem.
Nie strzelałem, bo byłem pewien Lattnera, a reszty mi nie chciało się sprawdzić. Z ciekawości, można wiedzieć co to za zakład?
@blinkkin: W pazdzierniku albo listopadzie zalozylem sie, ze w ciagu roku clang bedzie potrafil skompilowac boosta.
Poprawka: ty nie zapamiętujesz. To jeszcze nie czyni tego niemożliwym dla ludzi z lepszą pamięcią.
Nie wiem jaka jest definicja tam gdzie mieszka Cox, ale jeśli te kilka linijek zawiera "przejaw działalności twórczej o indywidualnym charakterze" to w Polsce by podpadały.
Gorsze niż to co pisałeś o bezpieczeństwie lub serwerach, które głównie wysyłają? Wątpię.
Nie możesz udowodnić, że takowe ekspertyzy w ogóle istnieją – ba, że jest ich niemało – ale tak, są i w dodatku całkowicie potwierdzają twój pogląd, tylko nikt ich nie może zobaczyć. Nie no, Edek, jesteś lepszy niż Bobby Henderson. Wspominałeś coś o fudzie? ;>
@trasz:
Pytanie techniczne- czy ty nadal mówisz o kompilatorze? Bo jak dla mnie pierniczysz farmazony- produkt wykonany narzędziami GPL nie musi być na GPL. No chyba że się nie znam tak jak ty- skoro czytasz wewnętrzne, cholernie drogie analizy prawne dostępne tylko dla wybranych.
Patrz- a Novell nie. Nie korzysta z porad prawników, czy jego akurat się nie znają. Podaję przykład Novella tylko przez jego umowę z MS.
@Tomasz Woźniak: Przeczytaj jeszcze raz mojego posta. Oczywiscie, ze licencja kompilatora nie wplywa na kompilowany program – ale chodzi o ryzyko wynikajace z samej mozliwosci „kontaktu z kodem”. Osobiscie uwazam to za bzdure, ale pewna czesc prawnikow uwaza przeciwnie – a to ich branza, nie moja.
Analiz prawnych nie czytam, bo to jakis belkot. Znam jedynie efekt – zakaz pobierania w pracy, na sluzbowych maszynach, kodu na licencji GPLv3.
Novell nie jest dobrym przykladem, bo zyje z supportu, nie z pisania kodu. Musialbys zerknac na firmy, ktore inwestuja duze ilosci pieniedzy R&D, jak Oracle, Apple czy chociazby BlueCoat.
@Low Year: Jak juz wspomnialem, jesli wedlug ciebie fakt, ze cos nie jest dostepne za darmo w sieci oznacza, ze to cos nie istnieje, to trudno.
Dla mnie fakt, że nie możesz poprzeć argumentu dowodem oznacza, że waga takiego argumentu jest zerowa, a jego proponent najzwyczajniej fuduje.
@trasz: Strach przed GPLv3 spowodowany jest raczej przeniesieniem ochrony patentowej a nie samym kodem, bo za nic nie mogę zrozumieć czemu dla firm chętnie zamykających kod GPLv1/2 jest ok, a v3 nie.
@Tomasz Woźniak: Byc moze. Z drugiej strony CDDL daje odbiorcom kodu znacznie silniejsza ochrone, a o zakazie patrzenia na CDDL nie slyszalem.
"Aplikacje BSD są zazwyczaj znacznie prostsze, nie każdy potrzebuje 28 opcji w poleceniu cat (to może zły przykład, bo wersja BSD posiada też ich sporo – kilkanaście?)."
Niby tak ale jak siadam przy BSD to co rusz jakiś program nie ma mojej ulubionej opcji TM. Problem polega na tym że każdy potrzebuje tylko 5 opcji – tylko dla każdego jest to 5 innych opcji
Tylko w wielu przypadkach dodatkowe opcje służą tylko i wyłącznie do formatowania danych wyjściowych. Równie dobrze można wykorzystać potoki (pipes) wraz z poleceniami sort, uniq, grep, sed etc.
Ale widocznie im więcej opcji ma program, tym bardziej jest w modzie.
A ja w spokoju kibicuje OpenBSD. Uzywam co prawda glownie jako OS na routeryi teoretycznie zmiana kompilatora nie ma dla mnie znaczenia, ale. Jak ktos juz wyzej napisal moze sie to zwiazac (i napewno tak bedzie) z poprawa jakosci i generowanego kodu maszynowego, i kodu zrodlowego chociazby samego kernela i jego sterownikow (w wypadku tych drugich to super sprawa). Poza tym zapewne bedzie to wymagalo takze usprawnien w PF-ie co tez mnie cieszy, bo jest pare bledow, ktorych autorzy jakos nie specjalnie sie kwapia poprawiac, a to moze pomoc wlasnie w rozwiazaniu takich bugow (ktore czasem sie ujawniaja, a czasami nie, stad ciezko je wysledzic i naprawic).
Z tego co zrozumiałem PCC nie ma za dużo optymalizacji wiec na poprawe generowanego kodu trzeba poczekać.
Zgadza się, ale nawet w przypadku GCC zespół OpenBSD stosuje minimalną optymalizację jądra. Wystarczy przejrzeć stronę, żeby dowiedzieć się jakie są tego powody.
Agresywna optymalizacja przynosi spore korzyści w przypadku zewnętrznych aplikacji jak np. PostgreSQL. W przypadku jądra zyski nie są znaczne, a efektem ubocznym może być nieprzewidziane zachowanie w pewnych warunkach.
Tego zespół OpenBSD chce uniknąć i m.in. z tego powodu nie zaleca (wręcz odradza) własnoręcznej kompilacji kernela na maszynie produkcyjnej (inna sprawa to testowanie i śledzenie gałęzi -current).
Nie mogę się dogrzebać do tej (o uzasadnieniu używaniu minimalnej optymalizacji) informacji, mógłbyś? Osobiście, wraz z rozwojem gcc, przestaje mi się opłacać używanie czegoś innego niż -O3 (z dodatkowymi flagami).
Kolejny cytat Theo (bo cały czas mowa o OpenBSD), tłumacząc krótko i ordynarnie "nie ruszać, bo pierdzielenie po palcach".
GCC w OpenBSD jest mocno spatchowanie, nawet -O2 zachowuje się inaczej niż w zwykłym GCC – przejrzyj stronę man na temat "gcc.local" etc.
Wystarczy też poszukać informacji na temat mk.conf – w dokumentacji – zespół OpenBSD stwierdził, że grzebanie przy nim zazwyczaj prowadzi po problemów z drzewem portów etc.
Poszukaj teraz informacji na temat mk.conf w Gentoo i prawdopodobnie zrozumiesz, co miałem na myśli przez minimalistyczne podejście do optymalizacji.
Nie, nie będę szukał. Architektury poza x86_64/x86_32 mnie nie interesują. Ale rozumiem, że jakieś VAX czy Sparc mogą mieć problemy. Tylko jakoś takich architektur nie mam pod ręką (no ok, mam jedną Niagarę ale jest do migracji).
Mam tu na mysli cos innego niz poprawe generowanego kodu, poprzez jego lepsza optymalizacje i zwiekszona wydajnosc. Chodzi oto ze GCC np. moze przepuszczac jakies bledy, PCC ze wzgledu na to ze jest prostszy, mniej ich bedzie przepuszczal,w iec kod zyskac moze na jakosci. Czasami pewnie nie beda to bledy a jedynie jakies features (co moze nawet spowolnic dzialanie), ale i tak warto dla wyzszej jakosci kodu stracic troche na wydajnosci.
Teoretycznie prawdopodobne. Ale szansa na to, że pcc będzie bardziej restrykcyjny od gcc jest, moim zdaniem, przyzerowa.
Należy pamiętać, że C to język prosty do kompilacji. Z takim założeniem był tworzony, pamiętam wypowiedź Ritchiego, że kompilator C może być napisany na dowolną maszynę w asm przez zespół doświadczonych programistów w pół roku.
Poza tym nie warto rezygnować z wydajności (wiem, wiem niektórych bsdziarzy boli to, że najlepszy na świecie kompilator jest na GPLv3…) — wystarczy kompilować oboma kompilatorami.
Tak się często robi w przypadku C++ (język znacznie trudniejszy). Używa się g++ i np. Comeau C++ albo icc aby wyłapać błędy.
Mówisz tutaj o front-endach, a taki nawet w przypadku GCC jest dosyć prosty. To nigdy nie było głównym problemem.
Małe porównanie ilości SLOC (standardowe linie kodu) w back-endach danych projektów: PCC – 10 tysięcy, LLVM – około 40 tysięcy, natomiast GCC dawno przekroczył magiczną granicę miliona.
Stwierdziłeś, że stworzenie kompilatora C jest bardzo proste, więc się zapytam skąd tak dramatyczna różnica? Pytanie drugie, ile błędów może znajdować w kilkudziesięciu tysiącach linii, a ile w milionie?
Przeczytanie kodu PCC i LLVM z pewnością jest znacznie mniej pracochłonną pracą. Audyt w przypadku takich projektów nie jest zadaniem na lata.
Co do C++ to Magnusson przeprowadził początkowe testy i stwierdził, że napisanie front-endu C++ pod PCC nie powinno być tak problematyczne jak niektórzy twierdzili.
Plus za komentarz dotyczący Comeau, bo mnie lekko rozbawił. Comeau C/C++ jest jako takim front-endem i do działania wymaga drugiego kompilatora. Co w przypadku Linuksa/BSD oznacza zazwyczaj nie co innego jak back-end GCC.
Comeau C++ jest jedynym front-endem w pełni zgodnym z C++03 (hint: extern template) i jest bardzo dobrym narzędziem do sprawdzania składni C++ (o ile nie idziesz w C++0x). Ten front-end jest użyty np. w icc. A Magnussonowi życzę powodzenia, ale nie wierzę (zbyt wiele razy czytałem standard C++).
Binarkę i tak zawsze generuje g++.
Skąd różnica: z optymalizacji. Z resztą jak piszesz (Marcin pisał, ja pisałem) o wyłapywaniu błędów w kodzie to ważny jest front-end.
Debugowanie może odbywać się na 3 poziomach, sprawdzany może być: kod właściwy w danym języku np. C/C++ etc, kod pośredni (często nazywany kodem kompilatora) uzyskanym po przejściu przez front-end i kod maszynowy, który otrzymujemy po przejściu przez back-end.
Gdyby wszystkie błędy dałoby się wyłapać używając statycznych analizatorów kodu to zapewne zaawansowane narzędzia jak Valgrind nie byłyby potrzebne. Testy obciążeniowe (stress testing) nie byłyby tak rozlegle stosowane.
Prosty przykład, ktoś odnalazł wyciek pamięci dotyczący naszego programu. Powstaje pytanie jaki jest tego powód – błąd w naszym programie czy w kompilatorze? Logika podpowiada, że jeśli użyliśmy PCC to prawdopodobieństwo, że winny jest kompilator jest znacznie mniejsze niż w przypadku GCC.
g++ to nic innego jak parser (kilkustopniowy, bo najpierw jest tworzone drzewo AST itd.), który generuje kod pośredni zrozumiałby dla assemblera. Back-end (czyli wspomniany assembler) dla większości języków programowania jest praktycznie taki sam. Różnice są w funkcjach niskopoziomowych, zależne zarówno od użytej architektury jak i języka.
Oczywiście to nie jest koniec kompilacji, bo do uzyskania działającej binarki potrzebny jest jeszcze konsolidator (linker). Tutaj ciekawostka PCC pod OpenBSD używa "ld" na licencji GPL. Specjalnych krzyków na temat tego narzędzia nie słyszałem, bo sprawdza się bardzo dobrze.
@blinkkin: Ogolnie zgoda, ale Valgrind jest narzedziem nieporownywalnie prostszym od narzedzi do statycznej analizy kodu, jak Coverity.
A OpenBSD nadal uzywa GNU ld, bo nie ma zadnej alternatywy. Chociaz pewnie, jako ze coraz blizej zastapienia toolchainu GNU LLVM-em i infrastruktura okoloLLVM-owa, powstanie.
Bajanie (wybacz bezpośredniość). Sprawdzasz kod i w 99% przypadków masz błąd w kodzie. Jeśli nie to kompilujesz z innymi opcjami/innym kompilatorem — ale to margines. A używanie wewnętrznej repr. kompilatora to w ogóle bajki — normalnie ten zapis nie jest w kompilatorze dostępny.
Czasami zagląda się do asm (bo np. kompilator nie wyrównał danych dla SSE na mingw32 — rzeczywisty błąd gcc, poprawiony). Ale głównie ze względów wydajnościowych (co tu się dzieje, że jest tak wolno).
Jeśli masz wyciek to logika wskazuje na błąd w kodzie. Rozumiem, że można bajać straszliwie na OSNews ale liczba znanych regresji P1 w stabilnym gcc jest przyzerowa.
Aha, dziękuję — wiem jak działa g++. A na ld akurat narzekają (hint: Ian Lance Taylor i gold).
I jeszcze jedno szacujesz liczbę błędów w kompilatorze rozmiarem kodu. A pomijasz zupełnie liczbę użytkowników i testerów, pokrycie kodu testami i jeszcze wiele innych metryk.
Oczywiście to mocno uprościłem, bo po wygenerowaniu drzew AST można się sprzeczać, czy dalsza analiza i optymalizacja następuje we front-endzie czy back-endzie, a może to jest to middle-end?
Tym bardziej problematyczne do ustalenia ze względu na różnorodną konstrukcję kompilatorów. Jednak podstawy działania pozostają podobne.
This blog appears to recieve a great deal of visitors. How do you advertise it? It offers a nice unique spin on things. I guess having something real or substantial to post about is the most important factor.
This domain appears to recieve a great deal of visitors. How do you get traffic to it? It offers a nice unique spin on things. I guess having something real or substantial to post about is the most important factor.
Fantastic post but I was wanting to know if you could write a litte more on this topic? I’d be very grateful if you could elaborate a little bit more. Thanks!
Thanks for the post. Can you please email me few more links about this, I am really a fan of your website. Thanks, Pasadena Fire Departments
While I tend to agree with the post I sincerely believe that car insurance has become too complex for the average car insurance policy holder. Just like any serious purchase however you must perform due diligence and research the insurance companies before you buy.
Wonderful post, I just bookmarked your site and I’ll definitely be back in the future. -Type I Diabetes
Nice work!
Many thanks for posting this, It?s just what I used to be researching for on bing. I?d loads relatively hear opinions from an individual, barely than an organization web page, that?s why I like blogs so significantly. Many thanks!
My wife and i have been really ecstatic Emmanuel managed to complete his survey from the ideas he acquired when using the web pages. It is now and again perplexing just to always be giving away tips men and women may have been making money from. And we all acknowledge we need the writer to give thanks to for this. The entire illustrations you have made, the straightforward site navigation, the relationships you can give support to create – it is many astonishing, and it’s assisting our son in addition to our family do think the idea is pleasurable, which is certainly rather important. Thank you for everything!
You have some helpful ideas! Maybe I should consider doing this by myself.
Sweet blog! I found it while surfing around on Yahoo News. Do you have any suggestions on how to get listed in Yahoo News? I’ve been trying for a while but I never seem to get there! Many thanks
One thing I would like to say is that often before buying more laptop or computer memory, look into the machine in to which it could be installed. When the machine is actually running Windows XP, for instance, a memory limit is 3.25GB. Setting up in excess of this would just constitute a new waste. Make certain that one’s motherboard can handle an upgrade volume, as well. Interesting blog post.
The most comprehensive and very well thought out write up I have found on this subject on the net. Keep on writing, I will keep on coming by to read your new content. This is my fourth time coming by your blog.
This great site is awesome. We consistently noticed something mroe challenging & a variety of listed here. Be grateful for which facts.
I stumbled onto ones entryway useful would I’ve additional a real Trackback on it at excellent web page
……
This web site could be walk-through for the info you desired on this . and couldn’t are aware of who exactly to inquire. Peek below, and you will definitely without doubt obtain the idea.
Her Dad trains her to kill but she is surprised by a light switch? How can you send your daughter to kill in Morocco then meet you in Germany but never prepare her for the 21st century.
Regards for this purpose offer, gents, engage up the incredible operate…
All the best with this submitting, men, maintained the excellent operate…
Impartial rocks !. My partner and i endlessly find something totally new & completely different here. Thanks for this details.
I’ve just lately began a weblog, the data you provide on this website has helped me tremendously. Thanks for all your time & work.
If one after the other we counted people out For the least sin, it wouldn’t take us lengthy To get so we had nobody left to live with. For to be social is to be forgiving.
I precisely desired to appreciate you once more. I am not sure the things that I would have followed without the tricks discussed by you concerning such subject. It truly was a alarming condition for me personally, nevertheless noticing this expert fashion you solved the issue made me to cry over gladness. I am happy for this advice and in addition hope you are aware of a great job you have been undertaking teaching some other people thru your websites. I’m certain you haven’t encountered any of us.
Thanks for the article. Can you please send me few more posts about this, I am definitely a fan of your blog. Thanks, Clinton Crown
I’ve recently began a weblog, the knowledge you provide on this web site has helped me tremendously. Thank you for all of your time & work.
Cool
Great blog you have here. Lots of blogs like this cover subjects that can’t be found in print. I don’t know how we got on 10 years ago with just newspapers and magazines.
Check out your signal or something. There’s any browser incompatibility with your website.
It’s laborious to find educated people on this subject, but you sound like you realize what you’re talking about! Thanks
Didn’t know that the right would be that ridiculous but you know sometimes thats what happens and has to happen for you to know
Practical
you might have an important blog here! would you prefer to make some invite posts on my weblog?
First-class article indeed. Friend on mine has been searching for this info.
Do you have a spam issue on this site; I also am a blogger, and I was wanting to know your situation; we have created some nice practices and we are looking to swap techniques with other folks, why not shoot me an e-mail if interested.coach outlet
An insightful post there mate . Cheers for that .
Extremely cool, some great points! I appreciate you making this article available, the rest of your site is also well done. I hope you have a great day.
Have you any idea if will probably be worth buying a itemizing in a basic directory ? Will certainly this assist my blog ?
Cool
Great thanks
Thanks for taking the time to discuss this, I really feel strongly about it and love learning extra on this topic. If potential, as you acquire experience, would you thoughts updating your blog with further data? This can be very useful for me.
Great post! You see, I’m currently working on a blog post and, depending on where my writing takes me, I might just put a citation for this post in it. I hope you won’t mind if I do. Anyway, people all over are making their own takes on what makes for a great muscle building program/routine. The way I see it is that all the things that they are saying… nay, preaching can be rolled up into one thing and that is having the self-discipline to follow-through with whatever it is that you are doing. Personally, I strongly believe that following through is the singular most important ingredient in attaining success, not only in bodybuilding/building muscles but in life in general. Once again, wonderful post. Keep it up! I hope you won’t mind if I look around your blog a bit more.
Extremely rated post. I be taught something completely new on different blogs everyday. Deciding on one . stimulating to learn the paper content from other writers and study a little something from their website. I’d like to apply certain of this content material on my blog you’re mind. Natually I’ll give a hyperlink right here we are at your web-site. Appreciate your sharing.
I usually don’t leave blog comments but your writing forced me to, great work.
There are definitely a lot of particulars like that to take into consideration. That is a nice level to convey up. I provide the ideas above as common inspiration however clearly there are questions like the one you deliver up the place an important thing will likely be working in honest good faith. I don?t know if greatest practices have emerged around things like that, but I’m positive that your job is clearly identified as a fair game. Each girls and boys really feel the influence of just a moment’s pleasure, for the remainder of their lives.
Hi , I do believe this is an excellent blog. I stumbled upon it on Yahoo , i will come back once again. Money and freedom is the best way to change, may you be rich and help other people.
The original Sovereign coins consisted of twenty-three karat gold, which is 90 six percent pure, and contained 15. 6 grams of gold, or some sort of half-troy oz.
Extremely rated post. I be taught something completely new on completely different blogs everyday. Deciding on one . stimulating to learn the paper content material from different writers and study a bit of one thing from their website. I’d like to use sure of this content material on my weblog you’re mind. Natually I’ll give a hyperlink right here we’re at your web-site. Recognize your sharing.
My partner and I actually loved studying this weblog publish, I was just itching to know do you commerce featured posts? I am always trying to find somebody to make trades with and merely thought I might ask.
There are certainly a lot of details like that to take into consideration. That is a great point to bring up. I offer the thoughts above as general inspiration but clearly there are questions like the one you bring up where the most important thing will be working in honest good faith. I don?t know if best practices have emerged around things like that, but I am sure that your job is clearly identified as a fair game. Both boys and girls feel the impact of just a moment’s pleasure, for the rest of their lives.
Precisely what I was searching for, regards for putting up.