Lata mijają, a język C nadal rządzi informatycznym światem .

Powstały na początku lat 70-tych język C jest dziś podstawą działania milionów programów i urządzeń. Krótka historia języka C, czy warto uczyć się C i jaka czeka go przyszłość?
- #
- #
- #
- #
- #
- #
- 230
- Odpowiedz







Komentarze (230)
najlepsze
C to się sprawdza tam gdzie jest potrzebna niezawodność, precyzja, optymalizacja, wydajność. W tym się pisze silniki, sterowniki, itd itp.
Jest
źródło: comment_0eM51BYbyYpDrtqgawLOJL4Du9FUc7lW.jpg
PobierzZ praktycznego punktu widzenia C jest ze dwa kroki wyżej od assemblera, którego pewnie też dobrze znać ale biorąc pod uwagę nadmiar mocy i pamięci jaki obecnie mamy - taki poziom optymalizacji nie jest z reguły konieczny (chociaż Linus Torvalds już by po mnie jechał jak po łysej dz*wce za to stwierdzenie).
Dla początkującego lub przeciętnego programisty każdy z nowszych odłamów C będzie zarówno dużo prostszy do nauki, użytkowania jak i załapania pracy w tym segmencie.
Jak
@slums: i słusznie :D
Wiesz, nie mówię o jakichś rażących błędach, ale im niżej w języku są problemy z optymalizacją, tym bardziej się te problemy potęgują w górę. Każda funkcja która korzysta z jakiejś instrukcji w C odpalana tysiące i setki tysięcy razy, raz za razem, powoduje że opóźnienia brak optymalizacji jest odczuwalny. Teraz niech ktoś na odwal się napisze instrukcję korzystającą z tej instrkucji, potem ktoś inny napisze kod bazujący na poprzednim poziomie. Nagle okazuje się że funkcja mogłaby się wykonywać tysiąc razy szybciej, gdyby nie niedbalstwo programistów.
Pomyśl że przerwa techniczna w banku trwa 3 dni, a nie 4 godziny w co drugi weekend. Albo że Far Cry w full HD na Twoim sprzęcie "śmiga" 6 fps, a nie 120. Pomyśl że wyszukiwanie użytkownika w bazie 100mln userów trwa 5 minut, a
Nie zawiodłem sie!
W kontekście konteneryzacji, gdzie mamy wiele replik tego samego serwisu, dość szybko pojawia się różnica, choćby w memory footprint'cie, gdzie prosty serwis w Go zje 20-30MB RAMu, a serwis w Javie na start sobie zje 200-300MB.
Ale użycie tych bibliotek w go jest straszne właśnie przez brak generyków. Ja też nie lubię jak jest miliard interfejsów i klasy w klasach i zależności pomiędzy wszystkim ale proste generyki to jest według mnie konieczność w nowoczesnym języku. Zwłaszcza do zastosowań typu backendy gdzie się przetwarza tabele danych na różne sposoby.
From(cars).Where(func(c interface{}) bool {return c.(Car).year
Z drugiej strony takie zmiany potrafią być irytujące, już sama zmiana języka np. u mnie zamiana java -> ruby sprawiła, że nauczyłem się TDD bo inaczej nawet głupia literówka w zmiennej mogła wysypać program na produkcji, a z kolei zamiana ruby -> swift ułatwiła życie silnym typowaniem na etapie kompilacji, ale powrót
@QBA__: Napiszesz coś w skrócie o tym lub podasz źródło?
https://radek.io/2012/11/10/magical-container_of-macro/
https://linux-concepts.blogspot.com/2018/01/understanding-containerof-macro-in.html?m=1
W skrócie - to jest takie macro, które pozwala wyciągnąć ze struktury wymagany przez nas typ nie znając jej wewnętrznej budowy