2012-02-13 7 views
10

Nominuję C po tym, jak go nie dotknąłem od 2000 roku. Od tego czasu pracuję w Ruby i odkryłem cały świat programowania idiomów, o których istnieniu nie wiedziałem.Relearning C: Nowe idiomy?

Jakie ważne techniki, książki, idiomy C pojawiły się w ostatnim dziesięcioleciu, jeśli takie istnieją? Wiem o standardach C99 i C11, ale gdzie jeszcze powinienem szukać? Czy styl C pozostał niezmienny, nawet gdy OOP i FP stały się normą?

+4

Czy pisałeś C89 lub C99? – Joe

+4

To trudne pytanie. Nie pamiętam, jakie było programowanie 10 lat temu! –

+2

Nie jestem pewien, czy to jest [konstruktywne] (http://stackoverflow.com/faq#dontask) ... Ciekawe pytanie jednak, więc nie zgłaszam. – cha0site

Odpowiedz

4

C nie obsługuje na poziomie języka nic więcej niż programowanie proceduralne - i to jest dokładny wybór, ponieważ narodził się głównie jako "przenośny zestaw" i jest używany do pracy tak blisko urządzenia, jak możliwe (bez uciekania się do montażu). Większość języków asemblerowych nie dostarcza znacznie więcej, jeśli chodzi o paradygmaty programowania, niż stos i wyrażenie funkcji (niektóre mikroskopy nawet tego nie robią) - i na tym właśnie wzorowano C.

Cóż, istnieje powód, dla którego narodziło się C++ i Cel C: C musi zachować filozofię projektowania i dodać bardziej abstrakcyjne rzeczy, które ludzie musieliby naprawdę rozwikłać.

W związku z tym nic nie powstrzyma cię przed napisaniem np. Kod OO w C - właściwie, wielu ludzi to robi (powiedziałbym, że jest to jeden z najbardziej rozpowszechnionych idiomów w C), ale nie musisz się spodziewać prawie żadnego cukru w ​​składzie: będziesz musiał użyć struct s dla danych, "normalne" funkcje do "emulowania" metod, skład dla dziedziczenia, tablice wskaźników dla polimorfizmu i tak dalej. Wciąż nie wiem, czy to się liczy jako idiom "ostatniej dekady", ale jest on używany znacznie dłużej.

+0

to właśnie czyni go doskonałym. nie zawiera żadnych anty-wzorów. lub wzorce. tylko narzędzie do samodzielnego stworzenia. –

+0

@JosephLeBrech: przełączanie między C++ i Python dla projektu, który sam zobaczyłem, że kiedy trzeba eksperymentować z szybszym językiem z jego wzorami i gotowymi elementami, jest to doskonały wybór, ale kiedy trzeba go uruchomić * szybko * i/lub zbuduj rozwiązanie idealnie dopasowane do twoich potrzeb, często jest to lepszy język, który daje ci narzędzia, nie zmuszając niczego. Jak zwykle wybór właściwego narzędzia zależy od tego, co próbujesz zrobić. –

+0

@Joseph: Brakuje jednak funkcjonalności takiej jak optymalizacja ogłaszania połączeń, która skutecznie uniemożliwia wdrożenie pewnych rodzajów wzorców. –

2

To różni się w zależności od kultury i naprawdę nie jest tak ewoluowane, jak inne języki, których używam. Widziałem:

  • więcej typ bezpieczeństwo
  • lepiej oprzyrządowania
  • 32/64 bitowy kod zgodny i trwałe rodzaje szerokości
  • bibliotek, zwłaszcza POSIX
  • bardziej zorientowane obiektowo

niezupełnie nowe idiomy dla każdego punktu - w odniesieniu do sposobu konstruowania i podejścia do programów, są to niektóre z bardziej zauważalnych zmian na poziomie źródłowym .