C jest jednym z najstarszych wciąż istniejących języków. Jego ABI jest prosty i napisano w nim praktycznie każdy wciąż używany system operacyjny . Podczas gdy niektóre z tych systemów operacyjnych mogły dodawać elementy, np. W C # / .NET lub cokolwiek na górze, poniżej są bardzo mocno zanurzone w C.
Oznacza to, że w celu wykorzystania możliwości oferowanych przez system operacyjny, praktycznie każdy język programowania tam potrzebne drogę do współpracy z bibliotekami C w każdym razie . Perl, Java, C ++, wszyscy natywnie zapewniają sposoby „mówienia w C”, ponieważ musieli, jeśli nie chcieli wymyślać każdego koła z osobna.
To sprawia, że C jest łaciną języków programowania. (Ile lat internetu przed tą metaforą musi być „angielski języków programowania”?)
Kiedy piszesz swoją bibliotekę w C, dostajesz interfejs kompatybilny z C za darmo (oczywiście). Jeśli piszesz biblioteki w C ++, to może dostać wiązań C, poprzez extern "C"
deklaracje jak wspomniano.
Jednakże , można dostać te wiązania tylko na funkcjonalność , która może być wyrażona w ° C .
Dlatego interfejs API Twojej biblioteki nie może korzystać z ...
- szablony,
- zajęcia,
- wyjątki,
- wszelkie funkcje przyjmujące lub zwracające przedmioty.
Jednym prostym przykładem byłoby zmuszenie eksportowanych funkcji do przyjmowania i zwracania tablic ( []
) zamiast std::vector
(lub std::string
w tym przypadku).
Zatem nie tylko nie byłbyś w stanie zapewnić żadnej z dobrych rzeczy, które C ++ ma do zaoferowania klientom biblioteki, ale musiałbyś również podjąć dodatkowe wysiłki, aby „przetłumaczyć” swój interfejs API biblioteki z C ++ na „kompatybilny z C” ( extern "C"
).
Dlatego można stwierdzić, że C jest lepszym wyborem do implementacji biblioteki. Osobiście uważam, że zalety C ++ wciąż przewyższają konieczny wysiłek związany z extern "C"
API, ale to tylko ja.