Pytania nt. kompilatora Borlanda


(Draygon123) #1

Tak więc spodobał mi się kompilator Borland ze względu na jego szybkość i niewielki rozmiar . Wcześniej używałem mingw ale jest powolny i programy z niego są duże . Chodzi mi głównie o aplikacje konsolowe . Ale mankament kompilatora borlanda (wer. 5.5.1) polega na tym że nie cin.clear i cin.sync nie zapobiegają się zapętlaniu programu . Czy jest jakiś sposób zapobiegnięciu temu ? Drugie pytanie mam takie skąd pobrać wersje 5.82 bo jest z 2005 roku więc 5 lat nowsza , więc może się coś zmieniło . I jeszcze jedno pytanie btw. Co potrzebne aby włączyć program pochądzący z kompilatora od visual c++ z flagą /clr ? Nie kminie do końca tej flagi ale wiem że zmniejsza rozmiar programu o 100 kb około . A może polecacie jakiś inny kompilator ? Nie musi pasować do niczego . Kompiluje przez wiersz poleceń .

EDIT : Znalazłem wersje 5.82 i działa zapobieganiu zapętlania albo swap który nie działał wcześniej :smiley: Ale pozostałe pytania nadal aktualne .


(Pablo_Wawa) #2

http://www.dobreprogramy.pl/Lazarus,Program,Windows,12653.html


(Razi) #3

@Pablo: Lazarus jest środowiskiem dla Pascala

Czy rozmiar binarki w dzisiejszych czasach ma znaczenie? Włącz flagę -Os, będziesz miał optymalizację pod rozmiar, ale czy nie lepiej użyć -O2, albo -O3? “Nakład” MinGWa jest niewielki. Szybkość? Nie zauważyłem nigdy żeby mi to przeszkadzało, co ty kompilujesz w takim razie, że ci czas kompilacji przeszkadza?

Clang jest w dużym stopniu zgodny z GCC (nawet na poziomie większości rozszerzeń GCC) i kompiluje znacznie szybciej, nawet do 3 razy przy kompilacji jak testowałem, a wynikowy kod jest równie szybki (ze względnie sporymi wariacjami w obie strony, zależy od kodu). Testy dotyczyły całych projektów, nie pojedynczych plików. Oczywiście w środowisku Linuksowym, na Windowsie może to się nieco różnić.

Problem z C, a zwłaszcza C++ jest taki, że ciężko zapędzić czasami do działania bibliotekę skompilowaną innym kompilatorem. Borlanda nie wspominam dobrze, nigdy nie podobały mu się moje zewnętrzne biblioteki (Allegro, SDL), a sam język, standard i ostrzeżenia przy kompilacji… no cóż, reszta z dzielenia liczb rzeczywistych mówi sama za siebie.

Flaga /clr jak wyczytałem dodaje metadane i pozwala m.in. użyć tej biblioteki w .NETcie potem, nie wyczytałem żeby zmniejszała rozmiar (raczej zwiększa).


(Draygon123) #4

@ Pablo . Mi nie chodzi o IDE , a jak już coś to to nie jest IDe do c++ . Ja pisze w sublime i kompiluje z wiersza poleceń , jest mi wygodnie i szybciej . No i brak zbędnych , niepotrzebnych mi śmieci .

@Razi , tak /clr zmniejsza rozmiar. Co do migwa to prosty program zajmuje z flagą /s (ktory ucina string,albo cos. i i zmniejsza średnio rozmiar o pol mb) zajmuje ok. pół mb . Programy z borlanda i visual średnio 130 kb . Tak więc różnica b. duża . Podjołem decyzję że na czas pisania będe kompilował w borland bo szybciej kompiluje a gotowy produkt w visual , bo niestety programy z borlanda są o wiele wolniejsze. Co do czasu kompilacji to dlatego tak szukam najlepszego rozwiązania bo jestem amatorem i co chwilę kompiluję xD No i tak już mam : D Chcę wiedzieć poprostu co jest najlepsze . A i jeszcze zauważyłem że MinGW z odp. flagą prześciga visual’a w szybkości kodu .


(Razi) #5

ŻE CO!?! Binarki z MinGWa po kilka MiB? Mógłbyś zarzucić jakiś kod? Moje binarki z MinGWa mają min. 96KiB, może używasz jakiejś archaicznej wersji, że aż tyle zajmują… A jak dodam flagę -s, to 12KiB mi Hello World zajmuje… Tyle że bez wymaganej DLLki (lub poprzez kompilację statyczną: -static), która pół mega zajmuje i pewnie o to ci chodzi, ale to “koszt jednorazowy” i nie rośnie wraz z przyrostem kodu, nie ma co się tym przejmować, może na początku ci ten rozmiar przeszkadza, ale uwierz mi że w dzisiejszych czasach to bez znaczenia, przy większych programach to się po prostu straci.

Samą DLLkę można wrzucić do folderu system32, czy gdzie to się tam teraz trzyma DLLki “globalne”, wtedy nie trzeba sobie kompilować statycznie, ani trzymać DLLki obok Exeka. W przypadku Visual C++ też instaluje się coś takiego jak redist, to też DLLka dla danego kompilatora, w przypadku Borlanda też tam coś dodatkowo jest, tyle że też się automatycznie do folderu systemowego kopiuje, dlatego uruchamia ci to bez problemu.

Niedawno napisałem artykuł porównujący kilka otwartych kompilatorów: http://osworld.pl/benchmark-kompilatoro … malizacji/ . Nie należy tego benchmarku brać za bardzo na serio, bo on sam pokazuje że te testy są bardzo niemiarodajne i nie ma “najlepszego” (jedynie clang wygrywa wszystkie testy prędkości kompilacji, niestety już nie wykonania), kompilatory mają różne algorytmy optymalizacji i żaden nie jest najlepszy w każdych warunkach. Osobiście używam GCC i clang.


(linux_to_syf_^^) #6

Wystarczy kilkanaście tysięcy linii kodu + sporo templatek i GCC naprawdę zaczyna to trochę mielić ;).

Jeśli kompilujesz Hello World (i to pod C++98).

Sporo się różni :).


(Draygon123) #7

12 Kb hello world ? Oo Niemożliwe . Wiem że rozmiar nie rośnie z kodem Ale w mniejszych programach to gorsze rozwiązanie . Co zrobić żeby program zajmował 12 kb ? ;_;


(Razi) #8
  1. po to projekt dzieli się na pliki, żeby nie kompilować godzinami tysięcy linii co zmianę

  2. kernela Linuksa już kompiluje, więc źle nie ma

  3. możliwe, moim środowiskiem domyślnym jest Linux :slight_smile: Buildy pod windowsa prowadzę pod Wine


(linux_to_syf_^^) #9

To wprowadź zmiany w pliku nagłówkowym dołączanym w połowie projektu. Albo korzystaj z boosta i jego szablonów. Albo z C++11 i szablonów ze zmienną liczbą parametrów. GCC nie jest szybkim kompilatorem.

Kernel Linuksa to C. Pisz w C++11 i zobacz jak kompatybilne jest gcc z clangiem.

Kompilacja skrośna jest bardzo wygodna. Tutaj muszę się w 100% zgodzić.


(Razi) #10
  1. Pliki nagłówkowe, oto czemu nie lubię C++… Dlatego w nagłówkach często pisze się tylko prototypy, czy jak to się nazywało (np. class Klasa;), zamiast includować pozostałe nagłówki.

  2. C++11 to jeszcze chaos, brak zgodności między GCC 4.6.x, a 4.7, jeszcze tak długo będzie

Skompilowałem poprzez “i686-w64-mingw32-g++ test.cpp -O2 -s”, najzwyklejszy Hello World, uruchamia się normalnie w Wine. Rozmiar rośnie z kodem, ale ta bibliteka przy -static includowana jest tylko raz.