2010-12-03 20 views

Odpowiedz

16

Kilka czynników należy w moim opinon się pod uwagę

  1. w języku programowania, system musi być w stanie dotrzeć do niskiego poziomu rzeczy, zbliżają się do realnego świata sprzętowej. W języku aplikacji zamiast tego istnieje pewien rodzaj "wirtualnego świata" (mam nadzieję, że jest on przyjemniejszy i łatwiejszy w interakcji), który został zaprojektowany z użyciem tego języka i wystarczy, aby sobie z nim poradzić.

  2. W języku programowania systemowego nie powinno być żadnych ustępstw pod względem wydajności. Trzeba umieć pisać kod, który wyciska wszystkie soki ze sprzętu.Nie jest to największym problemem w języku programowania aplikacji, gdzie zamiast tego większą rolę odgrywa czas potrzebny do napisania programu.

  3. Z powodu 2 języków programowania systemowego można założyć, że programista nie pomyli się, a więc nie będzie żadnych osłon "błędu wykonania". Na przykład indeksowanie z tablicy będzie oznaczało koniec świata, chyba że sprzęt daje te kontrole za darmo (ale w takim przypadku prawdopodobnie można wybrać zamiast niego tańszy lub szybszy sprzęt). Chodzi o to, że jeśli założysz, że kod jest poprawny, nie ma sensu płacić nawet małej ceny za sprawdzenie niemożliwego. Również język programowania systemu nie powinien przeszkadzać w próbie zabrania programistowi robienia czegoś, co chce robić intencjonalnie ... zakłada się, że on/ona wie, że jest to właściwe. W języku programowania aplikacji jest on uważany za dobry, pomagając programistom w sprawdzaniu kodu, a także próbując zmusić kod do używania pewnych schematów filozoficznych. W językach programowania aplikacji można poświęcić rzeczy takie jak prędkość wykonywania, czas pisania i rozmiar kodu, starając się pomóc programistom unikać samemu fotografowania.

  4. Z powodu 3 języków programowania systemowego będzie trudniej nauczyć się przez eksperymentowanie. W pewnym sensie są one potężnymi, ale niebezpiecznymi narzędziami, których należy używać ostrożnie myśląc przy każdym stwierdzeniu iz tego samego powodu są językami, w których debugowanie jest znacznie trudniejsze. W językach programowania aplikacji podejście "try-and-see" może być rozsądne (jeśli abstrakcja świata wirtualnego nie wycieka zbyt mocno) i pozwalanie na błędy w późniejszym ich usuwaniu jest uważane za realną opcję.

9

Podobnie jak wiele innych rzeczy w IT, linia jest rozmazana. Na przykład C rozpoczął swoją działalność jako język programowania systemowego (i był używany do implementacji systemu Unix), ale był i jest używany również do programowania aplikacji.

Oczywiście, niektóre języki są lepiej przystosowane do programowania systemów niż inne (np. C/C++ są lepiej dostosowane do programowania systemów niż COBOL/FORTRAN). Podobnie są języki, które lepiej nadają się do tworzenia aplikacji, a nie do programowania systemów, np. VB.NET.

Cechy językowe, które wyróżniają się z powyższych przykładów, to niski poziom cech języków programowania systemów takich jak C/C++ (np. Wskaźniki, operatory manipulacji bitami itp.). Jest oczywiście stary dowcip, że C jest językiem "morskim" (siedzi gdzieś pomiędzy poziomem zespołu a poziomem "wysokim").

Ostrzeżenie: Nadchodzę do programowania systemów z perspektywy programisty narzędzi systemu operacyjnego/OS.

Myślę, że można powiedzieć, że niezależnie od projektów dotyczących rozwoju systemów operacyjnych z Javą (choć uważam, że są to głównie kompilacje natywne, a nie kod bajtowy i JIT/interpretowane), to języki programowania systemów są kierowane na natywny kod maszynowy ich docelowych platform. W związku z tym języki, które przede wszystkim są kierowane na kod zarządzany/interpretowany, są rzadziej używane do programowania systemów.

każdym razie, że jest na tyle pewnie, aby poruszyć kilka uwag zarówno na poparcie iw opozycji :)

+0

C powinien był pozostać w programowaniu "systemów" ;-) –

+1

C może nie być najlepszym wyborem dla wielu aplikacji, ale wciąż jest wystarczająco dużo aplikacji, w których C jest dobrym wyborem. C jest także odnawiany jako podstawa dla równoległych języków programowania (np. CUDA, OpenCL). Nie można zaprzeczyć jego popularności (nie zważając na wpływ wsparcia ze strony starszych użytkowników) (np. Www.tiobe.com Indeks języków programowania). Rozwijam się w wielu językach, ale zawsze będę miał słabość do C, nazwij mnie masochistyczną; Uwielbiam także język asemblerowy ;-) –

+0

* "... Wierzę, że są to głównie kompilacje natywne, a nie kod bajtowy i JIT/interpretowane" *. W przypadku JNode podstawowy system i wtyczki rdzenia są kompilowane natywnie, reszta jest kompilowana JIT (bez żadnej interpretacji). –

5

Są nie dokładne koncepcje, ale w istocie, systemy języków programowania nadają się do pisania systemów operacyjnych (tak mają koncepcje niskiego poziomu, takie jak wskaźniki, integracja z asemblerem, typy danych odpowiadające organizacji pamięci i rejestru), podczas gdy języki programowania aplikacji są bardziej odpowiednie do pisania aplikacji, więc generalnie używają koncepcji wyższego poziomu do reprezentowania obliczeń (takich jak OOP , zamknięcia, wbudowane złożone typy danych itd.).

2

Ogólnie rzecz biorąc język programowania systemów jest niższy niż języki programowania aplikacji. Jednak sam język nie ma z tym nic wspólnego. Bardziej szczegółowe informacje na temat implementacji języka.

Na przykład Pascal zaczął żyć jako język nauczania i był dość ściśle aplikacjami. Jednak ewoluował w język systemu i był używany do tworzenia wczesnych wersji MacOS i Windows.

C# nie jest, zazwyczaj językiem systemowym, ponieważ nie może wykonywać niskopoziomowych prac, chociaż nawet ta linia jest zamazana, ponieważ powstają zarządzane systemy operacyjne.

2

Nie sądzę, że istnieje tutaj ostateczna odpowiedź.

Perl i Python domyślnie pochodzić z niemal każdego distro linux ... oba mogą inline C ... oba mogą zrobić kontrolę pracy i innych zadań „niskiego poziomu” ... gwintowanie itp

dowolny język z dobry zestaw powiązań wywołań systemowych i/lub FFI powinien być tak samo świadomy systemu, jak C lub C++.

jedynymi językami chciałbym zniżki, ponieważ będąc językami systemy są te, które specjalnie zająć inną platformę (JVM, CLR) i aktywnie dążyć do zapobiegania rodzimych interakcji

Powiązane problemy