Programowanie systemowe
Programowanie systemowe jest rodzajem programowania systemów oprogramowania. Główną cechą odróżniającą programowanie systemowe od aplikacyjnego jest to iż programowanie aplikacyjne tworzy oprogramowanie które świadczy usługi dla użytkownika (np. edytor tekstu), natomiast programowanie systemowe służy stworzeniu oprogramowania które świadczy usługi sprzętowi komputerowemu (np. defragmentator dysku) co wymaga dużej znajomości sprzętu i wewnętrznej budowy systemu komputerowego. W szczególności
- programista przyjmuje założenia odnośnie do sprzętu i innych właściwości systemu na którym program jest uruchomiony, i często będzie aktywnie wykorzystywał te własności (na przykład przez zastosowanie algorytmu który jest efektywniejszy na specyficznym sprzęcie)
- używany jest język niskiego poziomu albo język który:
- potrafi działać w środowisku o limitowanych zasobach
- jest bardzo efektywny i ma małe narzuty uruchomieniowe
- ma małą bibliotekę uruchomieniową (albo wcale)
- pozwala na bezpośredni i surowy dostęp do pamięci i kontroli wykonania
- umożliwia programiście pisać części programu bezpośrednio w języku asemblera
- debugowanie może być utrudnione, albo niemożliwe z powodu ograniczonych zasobów w których program działa. Uruchomienie programu w środowisku symulowanym (emulacja, system wirtualny) jest sposobem przezwyciężenia tego problemu.
Programowanie systemowe jest tak różne od programowania aplikacyjnego iż programiści raczej specjalizują się w jednym bądź drugim.
W programowaniu systemowym istnieje spektrum sposobów rozwiązania tego samego problemu jest ograniczone w stosunku do programowania aplikacyjnego. Używanie automatycznego zarządzania pamięcią (przez garbage collector) jest rzadkie, a odpluskwianie czasami trudne do wykonania. Biblioteka uruchomieniowa (standardowa), jeśli w ogóle dostępna, zwykle ma mniejsze możliwości i większą podatność na błędy. Z powodu tych ograniczeń, monitorowanie i logowanie jest często używane. System operacyjny może być bardzo rozbudowany podsystem logowania.
Oryginalnie programiści systemowi pisali w języku asemblera. Eksperymenty z obsługą sprzętu w językach wysokiego poziomu spowodowało stworzenie w późnych latach 60. takich języków jak BLISS i BCPL, ale dopiero C, z pomocą zwiększonej popularności UNIX-a stał się standardem w latach 80. Ostatnio Embedded C++ jest czasami używany, na przykład w sterownikach I/O Kit systemu macOS.
Przykłady Implementacja wielu części systemu operacyjnego (jądra) czy też systemu sieciowego wymaga programowania systemowego. Najczęstszym przykładem są sterowniki urządzeń systemu operacyjnego.
- Britannica: technology/systems-programming
- SNL: systemprogrammering