Zastanawiam się nad napisaniem nowego oprogramowania. Wydajność będzie miała kluczowe znaczenie, więc uważam, by nie używać interpretowanego języka, języka lub warstwy emulacji (czytaj java).
Co prowadzi mnie do myślenia o użyciu C (lub C ++), jednak oba są dość długie w zębie. Dawno też nie korzystałem. Doszedłem do wniosku, że w ciągu ostatnich 20 lat ktoś prawdopodobnie stworzył coś, co jest dość popularne, miłe do kodowania i skompilowane.
Jakie są bardziej nowoczesne alternatywy dla C do pisania wysoce skompilowanego kodu?
Jeśli C ++ jest inną bestią niż 15 lat temu, zastanowiłbym się nad tym, myślę, że miałem założenie, że ma pewne nieodłączne problemy.
Równoległość byłaby ważna, ale prawdopodobnie nie na wielu komputerach.
programming-languages
performance
Jeremy French
źródło
źródło
Odpowiedzi:
Opracowywany jest język o nazwie The Rust Programming Language, który ma podobne cele jak C ++, w szczególności abstrakty o zerowym koszcie i doskonałą kontrolę nad zarządzaniem pamięcią. To powiedziawszy, jest to prawdopodobnie najbardziej znaczący nadchodzący kandydat, mimo że jest jeszcze bardzo młody.
Oprócz Rust naprawdę nie ma innych popularnych alternatyw, które kompilowałyby się do kodu natywnego. Oczywiście są też Delfy i D, ale nie są tak szybkie, popularne ani używane. Język Google Go może być kandydatem, ale wciąż jest bardzo młody i ma nieco inną domenę.
Należy jednak pamiętać, że C # (przy założeniu platformy Microsoft) i Java mogą nie być tak wolne, nawet jeśli działają na maszynie wirtualnej; kompilacja kodu just-in-time może dokonać optymalizacji, których tradycyjne kompilatory z wyprzedzeniem nie są w stanie zastosować z powodu braku informacji o stanie programu i środowisku.
Szczerze mówiąc, osobiście nie uważam C za kandydata, jeśli C ++ jest opcją, głównie dlatego, że współczesne C ++ jest bezpieczniejsze, działa na wyższym poziomie abstrakcji, jest bardziej ekspresyjne i praktycznie nie ma utraty wydajności w stosunku do C (w niektórych przypadkach C ++ jest znacznie szybszy). Krótko mówiąc, C ++ zapewnia wszystko, co zapewnia C i więcej. Większość funkcji C jest uważana za „przestarzałą”, a lepszą, bezpieczniejszą, szybszą i bardziej intuicyjną alternatywę zapewnia standardowa biblioteka C ++.
źródło
Istnieje również Ada , która kompiluje się do kodu natywnego i jest przenośna na różnych platformach w granicach standardowej biblioteki. Język żyje i ma się dobrze, a najnowsza standardowa aktualizacja języka jest obecnie w toku (znana jako Ada 2012).
Szybkie podsumowanie dla osób nieznających Ady:
źródło
15 lat temu nie było standardu C ++. Drugi został opublikowany w zeszłym roku. Najlepsze praktyki C ++ bardzo się zmieniły w ciągu 5 lat po opublikowaniu standardu 98 i zmieniają się ponownie wraz z opublikowaniem standardu 11.
źródło
Dlaczego ludzie zawsze nalegają na poszukiwanie nowych języków?
C ++:
Jedynym minusem C ++ jest to, że musisz się trochę nauczyć. to jest to!
Porównaj to z innymi językami, które są jednym lub więcej z:
IMHO, im mniej języków będziemy używać i wspierać, tym lepsza będzie sytuacja.
Powoduje to automatyczne ulepszenia ram dla języka, wsparcie, dokumentację, prace komitetów normalizacyjnych, lepsze książki, więcej wiedzy, łatwiejsze do obsługi oprogramowanie, lepsze wzorce, dłuższe cykle obsługi języka i bardziej wykwalifikowany kod napisany w języku.
Wiem, że ludzie będą głosować za tym, ale pomyśl o tym, naprawdę.
źródło
const
problemami z poprawnością i tym podobne. Każdy, kto przeczytał Effective C ++ (jak twierdzi Coder) i utrzymuje, że C ++ jest łatwy, ma rozłączność umysłową.C / C ++ jest dość długi w zębie ... to dobra rzecz . Oznacza to, że zostały zaprojektowane wystarczająco dobrze (ahem), że nadal są bardzo użyteczne, że wiele osób używa ich do codziennych zadań i że znajdziesz dużą grupę programistów, którzy są w nich ekspertami. Dojrzałość należy cenić.
Jeśli spędzasz cały swój czas na szukaniu czegoś nowego, tylko dlatego, że jest to coś nowego i uważasz, że to musi być jakoś lepsze, czeka Cię wiele rozczarowania. Dotyczy to języków oprogramowania, systemów GUI (uwaga, Microsoft i Gnome) oraz miłośników (uwaga, młode panie :))
Trzeba przyznać, że jeśli masz doświadczenie w posługiwaniu się C ++ w wieku 20 lat, kiedy kod C ++ był ogólnie kodowany podobnie jak C, to być może nadszedł czas, aby ponownie ocenić język, wszystkie funkcje, które były tam w ciągu dnia, które nigdy nie były w pełni używane, są używane o wiele więcej dzisiaj, a kilka wysiłków normalizacyjnych nieco rozszerzyło język, aby wyglądał znacznie inaczej niż te stare zmiany w stylu C. Nie to, że C też jest zły - jest to także idealny język dla wielu rodzajów zadań kodowania!
źródło
Obecny standard C ++ to C ++ 11 , który został opublikowany w 2011 roku. Więc nie jest to standard 20 lat. Między nimi było wiele standardów. Każdy z nich wprowadza liczne ulepszenia wydajności.
Kompilatory są również stale ulepszane. Są znacznie lepsi w optymalizacji, niż kiedyś.
Poprawiły się również formaty plików wykonywalnych, 20 lat temu miałeś a.out , teraz masz ELF .
Ogólnie rzecz biorąc, sugestia, że C ++ nie zmieniła się w ciągu 20 lat, nie może być dalsza od prawdy.
Pamiętaj też, że C i C ++ to bardzo różne języki.
źródło
Nie jestem wielkim ekspertem w tym języku, ale myślę, że OCaml może być interesującą opcją.
OCaml to skompilowany, funkcjonalny / obiektowy język. Dla porównania wydajności z C ++ zobacz C ++ vs OCaml: Porównanie ray tracera . Oczywiście jest to bardzo konkretny przykład i należy przeprowadzić bardziej szczegółowe testy, aby lepiej poczuć wydajność OCaml.
źródło
Zależy od tego, co zrobi Twój produkt. Jeśli wydajność jest naprawdę krytyczna, to najczęściej wybieranym językiem jest FORTRAN . Nie wykluczałbym również Javy - jest ona używana w wielu aplikacjach do handlu finansowego na dużą skalę. Erlang jest wart spojrzenia, jeśli twoja domena problemowa wymaga wysokiej współbieżności. Cel C jest fajny, chociaż nie wiem, jak dobrze jest obsługiwany poza ekosystemem Apple (poza kompilatorami i podstawowym środowiskiem uruchomieniowym). Słyszałem też dobre rzeczy na temat wydajności Haskella, ale nie jestem pewien, czy jest to wydajność absolutna, czy tylko wydajność w stosunku do innych języków funkcjonalnych.
źródło
Kiedy mówisz, że twój projekt jest wrażliwy na wydajność, masz na myśli każdą jego linię kodu? Lub, jak zwykle, czy jest mniejszy procent, który ma krytyczny wpływ na wydajność, podczas gdy reszta to zwykły kod biznesowy młyna?
Po udzieleniu odpowiedzi, jakie jest większe ryzyko dla Twojego projektu: że wynik końcowy jest zbyt wolny lub że nigdy go nie ukończysz?
Zakładając, że odpowiesz na drugie pytanie dla obu, powinieneś rozwijać się w języku wyższego poziomu, który obsługuje natywną interop (wszystkie mają Python, Ruby, .Net Family). Najpierw zakończ projekt. Następnie profiluj, optymalizuj, spłucz, powtórz. Dopiero po tym rozważ rozważ przepisanie segmentu wyboru aplikacji w kodzie natywnym i zintegrowanie tego kodu natywnego z gotowym produktem.
źródło
Vala jest podobny do Java i C #, kompiluje się do kodu natywnego (lub kodu źródłowego C, jeśli wolisz) i jest bardzo szybki . Wymaga GLib dla bitów obiektowych i jest napisany przez hakerów Linuksa dla hakerów Linuksa, więc jeśli twoją domeną jest Windows, może nie być zbyt dobry.
źródło
Objective-C to nowoczesna, skompilowana alternatywa dla prostych C i C ++. Ma zarówno zbieranie pamięci, jak i deterministyczne zarządzanie pamięcią, a środowisko wykonawcze OO z przekazywaniem wiadomości zostało zoptymalizowane pod kątem wydajności.
Jest dostępny przez GCC i CLang, a istnieją biblioteki aplikacji, takie jak GNUStep i Cocotron, które działają na różnych platformach.
Jeśli wykonujesz wysokowydajną pracę, zakładam, że jest to rodzaj pracy polegającej na łamaniu liczb lub innej pracy typu dziel i zwyciężaj zamiast interfejsu użytkownika, co oznacza, że możesz wykonać interfejs w dowolnym języku, który jest dla Ciebie najłatwiejszy, np. HTML przez mini serwer HTTP.
źródło
Nigdy go nie używałem, ale mój przyjaciel przysięga Cython, który pozwala używać prymitywów w stylu C w krytycznych pod względem wydajności częściach kodu, zachowując ogólną składnię Pythona i będąc w stanie w pełni wykorzystać konstrukcje wyższego poziomu w celu ograniczenia rozwoju czas wszędzie indziej.
źródło