Lista języków programowania według typu

To jest lista znanych języków programowania , pogrupowanych według typu.

Nie ma nadrzędnego schematu klasyfikacji języków programowania. Dlatego w wielu przypadkach język jest wymieniony pod wieloma nagłówkami (w tym zakresie patrz „ Języki wieloparadygmatyczne ” poniżej).

Języki tablicowe

programowania tablicowego (nazywane również wektorami lub wielowymiarowymi ) uogólniają operacje na skalarach, aby zastosować je w sposób przezroczysty do wektorów , macierzy i tablic wielowymiarowych .

języki montażowe

Języki asemblera bezpośrednio odpowiadają językowi maszynowemu (patrz poniżej ), więc instrukcje kodu maszynowego pojawiają się w formie zrozumiałej dla ludzi, chociaż może nie istnieć odwzorowanie jeden do jednego między pojedynczą instrukcją a indywidualną instrukcją. Języki asemblera pozwalają programistom używać adresów symbolicznych, które asembler konwertuje na adresy bezwzględne lub relokowalne . Większość asemblerów obsługuje również makra i stałe symboliczne .

Języki autorskie

Język autorski to język programowania przeznaczony do użytku przez osoby niebędące ekspertami komputerowymi w celu łatwego tworzenia samouczków, stron internetowych i innych interaktywnych programów komputerowych.

Konkatenatywne języki programowania

Konkatenatywny język programowania to bezpunktowy język programowania komputerowego , w którym wszystkie wyrażenia oznaczają funkcje , a zestawienie wyrażeń oznacza złożenie funkcji . Programowanie konkatenacyjne zastępuje aplikację funkcji , która jest powszechna w innych stylach programowania, z kompozycją funkcji jako domyślnym sposobem budowania podprogramów .

Języki programowania z ograniczeniami

Język programowania z ograniczeniami to deklaratywny język programowania , w którym relacje między zmiennymi są wyrażane jako ograniczenia . Wykonywanie przebiega poprzez próbę znalezienia wartości dla zmiennych, które spełniają wszystkie zadeklarowane ograniczenia.

Języki interfejsu wiersza poleceń

interfejsu wiersza poleceń (CLI) są również nazywane językami wsadowymi lub językami sterowania zadaniami. Przykłady:

Języki skompilowane

Są to języki zwykle przetwarzane przez kompilatory , chociaż teoretycznie każdy język może być kompilowany lub interpretowany.

Języki współbieżne

przekazywania komunikatów zapewniają konstrukcje językowe dla współbieżności . Dominującym paradygmatem współbieżności w głównych językach, takich jak Java , jest współbieżność pamięci współdzielonej . Języki współbieżne, które wykorzystują przekazywanie wiadomości, były generalnie inspirowane rachunkami procesowymi, takimi jak komunikowanie procesów sekwencyjnych (CSP) lub rachunek π .

Języki z nawiasami klamrowymi

z nawiasami klamrowymi lub nawiasami klamrowymi mają składnię, która definiuje bloki instrukcji przy użyciu nawiasów klamrowych lub znaków nawiasów klamrowych { i } . Ta składnia pochodzi z BCPL (1966) i została spopularyzowana przez C . Wiele języków z nawiasami klamrowymi wywodzi się z C lub jest pod silnym wpływem C. Przykłady języków z nawiasami klamrowymi obejmują:

Języki przepływu danych

programowania przepływu danych opierają się na (zwykle wizualnej) reprezentacji przepływu danych w celu określenia programu. Często używany do reagowania na zdarzenia dyskretne lub do przetwarzania strumieni danych. Przykłady języków przepływu danych obejmują:

Języki zorientowane na dane

Języki zorientowane na dane zapewniają potężne sposoby wyszukiwania i manipulowania relacjami, które zostały opisane jako tabele relacji encji, które odwzorowują jeden zestaw rzeczy na inne zestawy. [ potrzebne źródło ] Przykłady języków zorientowanych na dane obejmują:

Języki tabeli decyzyjnej

Tabele decyzyjne mogą być używane jako pomoc w wyjaśnieniu logiki przed napisaniem programu w dowolnym języku, ale w latach sześćdziesiątych XX wieku opracowano wiele języków, w których główna logika jest wyrażona bezpośrednio w formie tabeli decyzyjnej, w tym:

Języki deklaratywne

Języki deklaratywne wyrażają logikę obliczeń bez szczegółowego opisywania przepływu sterowania. Programowanie deklaratywne kontrastuje z programowaniem imperatywnym za pomocą imperatywnych języków programowania, w których przepływ sterowania jest określony przez rozkazy szeregowe (imperatywy). (Czyste) funkcjonalne i oparte na logice języki programowania są również deklaratywne i stanowią główne podkategorie kategorii deklaratywnej. W tej sekcji wymieniono dodatkowe przykłady, których nie ma w tych podkategoriach.

Języki do osadzenia

W kodzie źródłowym

Języki, które można osadzić w kodzie źródłowym, osadzają małe fragmenty kodu wykonywalnego w fragmencie dowolnego tekstu, często strony internetowej.

Języki osadzone po stronie klienta są ograniczone przez możliwości przeglądarki lub zamierzonego klienta. Ich celem jest zapewnienie dynamizmu stronom internetowym bez konieczności ponownego kontaktowania się z serwerem.

Języki osadzone po stronie serwera są znacznie bardziej elastyczne, ponieważ prawie każdy język może być wbudowany w serwer. Celem osadzania fragmentów kodu po stronie serwera na stronie internetowej jest dynamiczne generowanie dodatkowych znaczników; sam kod znika, gdy strona jest wyświetlana, i zostaje zastąpiony przez jego dane wyjściowe.

Po stronie serwera

  • PHP
  • VBScript
  • SMX – dedykowany do stron internetowych
  • Tcl – po stronie serwera w NaviServer i niezbędny komponent w systemach przemysłu elektronicznego
  • WebDNA – dedykowany serwisom bazodanowym

Powyższe przykłady są specjalnie dedykowane temu celowi. Wiele innych języków, takich jak Erlang , Scala , Perl , Ring i Ruby , można zaadaptować (na przykład poprzez przekształcenie ich w moduły Apache ).

Strona klienta

W kodzie wynikowym

Szeroka gama języków dynamicznych lub skryptowych może być osadzona w skompilowanym kodzie wykonywalnym. Zasadniczo kod obiektowy tłumacza języka musi być połączony z plikiem wykonywalnym. Fragmenty kodu źródłowego dla języka osadzonego można następnie przekazać do funkcji ewaluacyjnej jako ciągi znaków. Języki kontroli aplikacji można zaimplementować w ten sposób, jeśli kod źródłowy zostanie wprowadzony przez użytkownika. Preferowane są języki z małymi tłumaczami.

Edukacyjne języki programowania

Języki opracowane głównie w celu nauczania i uczenia się programowania.

Języki ezoteryczne

Ezoteryczny język programowania to język programowania zaprojektowany jako test granic projektowania języków programowania komputerów, jako dowód koncepcji lub jako żart.

Języki rozszerzeń

Języki programowania rozszerzeń to języki osadzone w innym programie i używane do wykorzystania jego funkcji w skryptach rozszerzeń.

Języki czwartej generacji

Języki programowania czwartej generacji to języki wysokiego poziomu zbudowane wokół systemów baz danych. Są one zwykle używane w środowiskach komercyjnych.

Języki funkcyjne

Funkcjonalne języki programowania definiują programy i podprogramy jako funkcje matematyczne i traktują je jako pierwszorzędne. Wiele tak zwanych języków funkcjonalnych jest „nieczystych” i zawiera cechy imperatywne. Wiele języków funkcjonalnych jest powiązanych z matematycznymi narzędziami obliczeniowymi. Języki funkcjonalne obejmują:

Czysty

Zanieczyszczony

Języki opisu sprzętu

W elektronice język opisu sprzętu (HDL) to wyspecjalizowany język komputerowy używany do opisywania struktury, projektu i działania obwodów elektronicznych, a najczęściej cyfrowych obwodów logicznych. Dwie najszerzej stosowane i najlepiej wspierane odmiany HDL stosowane w przemyśle to Verilog i VHDL . Języki opisu sprzętu obejmują:

HDL do projektowania obwodów analogowych

  • Verilog-AMS (Verilog dla sygnału analogowego i mieszanego)
  • VHDL-AMS (VHDL z rozszerzeniem sygnału analogowego/miksowanego)

HDL do projektowania obwodów cyfrowych

Języki imperatywne

Imperatywne języki programowania mogą być wieloparadygmatowe i występować w innych klasyfikacjach. Oto lista języków programowania zgodnych z imperatywnym paradygmatem :

Języki trybu interaktywnego

Języki w trybie interaktywnym działają jak rodzaj powłoki: wyrażenia lub instrukcje można wprowadzać pojedynczo, a wynik ich oceny jest widoczny natychmiast. Tryb interaktywny jest również określany jako pętla read-eval-print (REPL).

Języki interpretowane

Języki interpretowane to języki programowania, w których programy mogą być wykonywane z kodu źródłowego przez tłumacza. Teoretycznie każdy język może być kompilowany lub interpretowany, więc termin język interpretowany ogólnie odnosi się do języków, które są zwykle interpretowane, a nie kompilowane.

Języki iteracyjne

Języki iteracyjne są zbudowane wokół lub oferują generatory .

Języki według typu zarządzania pamięcią

Języki zebrane w śmieciach

Garbage Collection (GC) to forma automatycznego zarządzania pamięcią. Moduł wyrzucania elementów bezużytecznych próbuje odzyskać pamięć, która została przydzielona przez program, ale nie jest już używana.

Języki z ręcznym zarządzaniem pamięcią

Języki z opcjonalnym ręcznym zarządzaniem pamięcią

  • Ada nie muszą oferować wyrzucania elementów bezużytecznych, ale semantyka języka to obsługuje, a wiele implementacji to obejmuje.
  • D zapewnia programistom pełną kontrolę nad własnym modułem wyrzucania elementów bezużytecznych, w tym możliwość całkowitego wyłączenia go.
  • Nim jest zwykle domyślnie zbierany bezużytecznie lub liczony w referencjach, w zależności od jego konfiguracji, ale programista może użyć przełącznika --mm:none , aby ręcznie zwolnić pamięć.
  • Objective-C i Objective-C++ obsługują opcjonalne zliczanie odwołań i wyrzucanie elementów bezużytecznych jako alternatywę dla ręcznego zarządzania pamięcią (jednak firma Apple ogłosiła, że ​​moduł wyrzucania elementów bezużytecznych jest przestarzały).
  • Rust obsługuje opcjonalne liczenie referencji, ale preferowane jest ręczne zarządzanie pamięcią.
  • Vala domyślnie korzysta z liczenia referencji, ale użytkownik może ręcznie zarządzać pamięcią, jeśli sobie tego życzy.

Języki z deterministycznym zarządzaniem pamięcią

Języki z automatycznym liczeniem referencji (ARC)

Języki listowe – LISP

Języki oparte na listach to rodzaj języka o strukturze danych, który jest oparty na strukturze danych listy .

Małe języki

Małe języki służą wyspecjalizowanej domenie problemowej.

  • awk – używany do manipulacji plikami tekstowymi.
  • Comet – używany do rozwiązywania złożonych kombinatorycznych problemów optymalizacyjnych w obszarach takich jak alokacja zasobów i harmonogramowanie
  • sed – analizuje i przekształca tekst
  • SQL – ma tylko kilka słów kluczowych i nie wszystkie konstrukcje potrzebne do pełnego języka programowania – wiele systemów zarządzania bazami danych rozszerza SQL o dodatkowe konstrukcje jako język procedur składowanych

Języki oparte na logice

oparte na logice określają zestaw atrybutów, które musi posiadać rozwiązanie, a nie zestaw kroków prowadzących do uzyskania rozwiązania.

Godne uwagi języki zgodne z tym paradygmatem programowania obejmują:

Języki maszynowe

Języki maszynowe są bezpośrednio wykonywane przez procesor komputera. Są one zwykle formułowane jako wzorce bitowe, zwykle reprezentowane w systemie ósemkowym lub szesnastkowym . Każdy wzorzec bitowy powoduje, że obwody w CPU wykonują jedną z podstawowych operacji sprzętowych. Aktywacja określonych wejść elektrycznych (np. styków pakietu procesora dla mikroprocesorów) oraz logiczne ustawienia wartości stanu procesora sterują obliczeniami procesora. Poszczególne języki maszynowe są specyficzne dla rodziny procesorów; kod języka maszynowego dla jednej rodziny procesorów nie może działać bezpośrednio na procesorach z innej rodziny, chyba że dane procesory mają dodatkowy sprzęt do obsługi (na przykład procesory DEC VAX zawierały tryb zgodności PDP-11). Są (zasadniczo) zawsze definiowane przez programistę procesora, a nie przez osoby trzecie. Wersja symboliczna, procesora asembler , w większości przypadków jest również definiowany przez programistę. Niektóre powszechnie używane zestawy instrukcji kodu maszynowego to:

Języki makr

Języki makr zastępowania tekstu

makr przekształcają jeden plik kodu źródłowego w inny. „Makro” to zasadniczo krótki fragment tekstu, który rozwija się w dłuższy (nie mylić z makrami higienicznymi ), prawdopodobnie z podstawieniem parametrów. Są często używane do wstępnego przetwarzania kodu źródłowego. Preprocesory mogą również zapewniać takie udogodnienia, jak włączanie plików .

Języki makr mogą być ograniczone do działania na specjalnie oznakowanych regionach kodu ( w przypadku preprocesora C poprzedzonego znakiem # ). Alternatywnie, mogą nie, ale w tym przypadku nadal często niepożądane jest (na przykład) rozwijanie makra osadzonego w literale łańcuchowym , więc nadal potrzebują podstawowej świadomości składni. W takim przypadku często mają one zastosowanie do więcej niż jednego języka. Porównaj z językami, które można osadzić w kodzie źródłowym, takimi jak PHP , które są w pełni funkcjonalne.

  • cpp (preprocesor C)
  • m4 (oryginalnie z AT&T, w pakiecie z Unixem)
  • ML/I (procesor makr ogólnego przeznaczenia)

Języki makr aplikacji

Języki skryptowe, takie jak Tcl i ECMAScript ( ActionScript , ECMAScript for XML , JavaScript , JScript ) zostały osadzone w aplikacjach. Są one czasami nazywane „językami makr”, chociaż w nieco innym sensie niż makra zastępujące tekst, takie jak m4 .

Języki metaprogramowania

Metaprogramowanie to pisanie programów, które piszą lub manipulują innymi programami, w tym samymi sobą, jako ich dane lub które wykonują część pracy, która w innym przypadku jest wykonywana w czasie wykonywania w czasie kompilacji . W wielu przypadkach pozwala to programistom zrobić więcej w takim samym czasie, jaki zajęłoby ręczne napisanie całego kodu.

Języki wieloparadygmatowe

Języki wieloparadygmatowe obsługują więcej niż jeden paradygmat programowania . Pozwalają programowi używać więcej niż jednego stylu programowania . Celem jest umożliwienie programistom korzystania z najlepszego narzędzia do pracy, przyznając, że żaden paradygmat nie rozwiązuje wszystkich problemów w najłatwiejszy lub najbardziej efektywny sposób.

  • 1C: korporacyjny język programowania (ogólny, imperatywny, obiektowy, oparty na prototypach, funkcjonalny)
  • Ada ( współbieżne , rozproszone , ogólne ( metaprogramowanie szablonów ), imperatywne , obiektowe ( oparte na klasach ))
  • ALF ( funkcjonalny , logiczny )
  • Alma-0 (ograniczenie, imperatyw, logika)
  • APL (funkcjonalny, imperatywny, obiektowy (oparty na klasach))
  • BETA (funkcjonalne, imperatywne, obiektowe (oparte na klasach))
  • C++ (ogólny, imperatywny, obiektowy (oparty na klasach), funkcjonalny, metaprogramowanie)
  • C# (ogólny, imperatywny, obiektowy (oparty na klasach), funkcjonalny, deklaratywny)
  • Ceylon (ogólny, imperatywny, obiektowy (oparty na klasach), funkcjonalny, deklaratywny)
  • ChucK (imperatywny, zorientowany obiektowo, oparty na czasie, współbieżny, w locie)
  • Cobra (ogólny, imperatywny, obiektowy (oparty na klasach), funkcjonalny, umowny)
  • Common Lisp (funkcjonalny, imperatywny, obiektowy (oparty na klasach), zorientowany na aspekty (użytkownik może dodawać dalsze paradygmaty, np. logikę))
  • Curl (funkcjonalne, imperatywne, obiektowe (oparte na klasach), metaprogramowanie)
  • Curry (współbieżne, funkcjonalne, logiczne)
  • D (ogólne, imperatywne, funkcjonalne, obiektowe (oparte na klasach), metaprogramowanie)
  • Dart (ogólny, imperatywny, funkcjonalny, obiektowy (oparty na klasach))
  • Delphi Object Pascal (ogólny, imperatywny, obiektowy (oparty na klasach), metaprogramowanie)
  • Dylan (funkcjonalny, obiektowy (oparty na klasach))
  • eC (ogólny, imperatywny, obiektowy (oparty na klasach))
  • ECMAScript (funkcjonalny, imperatywny, obiektowy (oparty na prototypach))
  • Eiffel (imperatywny, obiektowy (oparty na klasach), ogólny, funkcjonalny (agenci), współbieżny (SCOOP))
  • F# (funkcjonalny, ogólny, zorientowany obiektowo (oparty na klasach), zorientowany na język)
  • Fantom (funkcjonalny, obiektowy (oparty na klasach))
  • Idź , Golang (imperatywny, proceduralny),
  • Groovy (funkcjonalny, obiektowy (oparty na klasach), imperatywny, proceduralny)
  • Port
  • Chmiel
  • J (funkcjonalny, imperatywny, obiektowy (oparty na klasach))
  • Julia (imperatywna, wielokrotna wysyłka („obiektowa”), funkcjonalna, metaprogramowanie)
  • LabVIEW ( wizualny , przepływ danych , współbieżny, modułowy, funkcjonalny, obiektowy, skryptowy)
  • Lava (zorientowana obiektowo (oparta na klasach), wizualna)
  • Lua (funkcjonalne, imperatywne, obiektowe ( oparte na prototypach ))
  • Mathematica ( język Wolframa )
  • Merkury (funkcjonalny, logiczny, obiektowy)
  • Protokoły metaobiektowe (zorientowane obiektowo (oparte na klasach, oparte na prototypach))
  • Nemerle (funkcjonalne, obiektowe (oparte na klasach), imperatywne, metaprogramowanie)
  • Objective-C (imperatywny, obiektowy (oparty na klasach), refleksyjny)
  • OCaml (funkcjonalny, imperatywny, obiektowy (oparty na klasach), modułowy)
  • Oz (funkcjonalny (ocena: chętny , leniwy ), logiczny, ograniczony , imperatywny, zorientowany obiektowo (oparty na klasach), współbieżny, rozproszony) i wieloplatformowy system programowania Mozarta Oz
  • Object Pascal (imperatywny, obiektowy (oparty na klasach))
  • Perl (imperatywny, funkcjonalny (nie może być czysto funkcjonalny), zorientowany obiektowo, zorientowany na klasy, zorientowany na aspekty (poprzez moduły))
  • PHP (imperatywne, obiektowe, funkcjonalne (nie może być czysto funkcjonalne))
  • Pike (interpretowany, ogólnego przeznaczenia, wieloplatformowy, dynamiczny język programowania wysokiego poziomu)
  • Prograph (przepływ danych, obiektowy (oparty na klasach), wizualny)
  • Python (funkcjonalny, kompilowany, interpretowany, obiektowy (oparty na klasach), imperatywny, metaprogramowanie, rozszerzenie, nieczysty, tryb interaktywny, iteracyjny, refleksyjny, skryptowy)
  • R (tablica, interpretacja, nieczystość, tryb interaktywny, oparty na listach, zorientowany obiektowo, oparty na prototypach, skrypty)
  • Racket (funkcjonalny, imperatywny, obiektowy (oparty na klasach) i może być rozszerzony przez użytkownika)
  • REBOL (funkcjonalne, imperatywne, obiektowe (oparte na prototypach), metaprogramowanie (dialektowane))
  • Czerwony (funkcjonalny, imperatywny, obiektowy (oparty na prototypach), metaprogramowanie (dialektowany))
  • ROOP (imperatywny, logiczny, obiektowy (oparty na klasach), oparty na regułach)
  • Pierścień (imperatywny, funkcjonalny, obiektowy (oparty na klasach), metaprogramowanie, deklaratywny, naturalny)
  • Ruby (imperatywny, funkcjonalny, obiektowy (oparty na klasach), metaprogramowanie)
  • Rust (współbieżny, funkcjonalny, imperatywny, obiektowy, ogólny, metaprogramowanie, skompilowany)
  • Scala (funkcjonalny, obiektowy)
  • Seed7 (imperatywny, obiektowy, ogólny)
  • SISAL (współbieżny, przepływ danych, funkcjonalny)
  • Arkusze kalkulacyjne (funkcjonalne, wizualne)
  • Swift (zorientowany na protokół, obiektowy, funkcjonalny, imperatywny, o strukturze blokowej)
  • Tcl (funkcjonalne, imperatywne, obiektowe (oparte na klasach))
    • Tea (funkcjonalne, imperatywne, obiektowe (oparte na klasach))
  • Windows PowerShell (funkcjonalny, imperatywny, potokowy, zorientowany obiektowo (oparty na klasach))

Analiza numeryczna

Kilka języków programowania ogólnego przeznaczenia, takich jak C i Python , jest również używanych do obliczeń technicznych, ta lista skupia się na językach używanych prawie wyłącznie do obliczeń technicznych.

Języki inne niż angielski

Zorientowane obiektowo języki klasowe

Obiektowe języki programowania oparte na klasach obsługują obiekty zdefiniowane przez ich klasę. Definicje klas zawierają dane składowe. Przekazywanie wiadomości jest kluczową koncepcją, jeśli nie główną koncepcją, w językach obiektowych.

Funkcje polimorficzne sparametryzowane przez klasę niektórych ich argumentów są zwykle nazywane metodami . W językach z pojedynczą wysyłką klasy zazwyczaj zawierają również definicje metod. W językach z wieloma wywołaniami metody są definiowane przez funkcje generyczne . Istnieją wyjątki, w których pojedyncze metody wysyłania są funkcjami ogólnymi (np. system obiektowy Bigloo ).

Wielokrotna wysyłka

Pojedyncza wysyłka

Zorientowane obiektowo języki oparte na prototypach

Języki oparte na prototypach to języki zorientowane obiektowo, w których usunięto rozróżnienie między klasami i instancjami:

Języki reguł off-side

reguł off-side oznaczają bloki kodu przez ich wcięcia .

Języki proceduralne

Proceduralne języki programowania opierają się na koncepcji jednostki i zakresu (zakresu przeglądania danych) wykonywalnej instrukcji kodu. Program proceduralny składa się z jednej lub więcej jednostek lub modułów, albo zakodowanych przez użytkownika, albo dostarczonych w bibliotece kodów; każdy moduł składa się z jednej lub więcej procedur, zwanych także funkcją, procedurą, podprogramem lub metodą, w zależności od języka. Przykłady języków proceduralnych obejmują:

Języki zapytań

Języki refleksyjne

refleksyjne pozwalają programom badać i ewentualnie modyfikować ich strukturę wysokiego poziomu w czasie wykonywania lub kompilacji. Jest to najczęściej spotykane w językach programowania maszyn wirtualnych wysokiego poziomu, takich jak Smalltalk , a rzadziej w językach programowania niższego poziomu, takich jak C. Języki i platformy wspierające refleksję:

Języki oparte na regułach

Języki oparte na regułach tworzą instancje reguł, gdy są aktywowane przez warunki w zbiorze danych. Spośród wszystkich możliwych aktywacji wybierany jest jakiś zestaw i wykonywane są instrukcje należące do tych reguł. Języki oparte na regułach obejmują: [ potrzebne źródło ]

Języki skryptowe

Język skryptowy ” ma dwa pozornie różne, ale w rzeczywistości podobne znaczenia. W tradycyjnym sensie języki skryptowe są przeznaczone do automatyzacji często używanych zadań, które zwykle obejmują wywoływanie lub przekazywanie poleceń programom zewnętrznym. Wiele złożonych aplikacji udostępnia wbudowane języki, które umożliwiają użytkownikom automatyzację zadań. Te, które są interpretacyjne , są często nazywane językami skryptowymi.

Ostatnio wiele aplikacji ma wbudowane tradycyjne języki skryptowe, takie jak Perl czy Visual Basic , ale wciąż jest w użyciu sporo rodzimych języków skryptowych. Wiele języków skryptowych jest kompilowanych do kodu bajtowego, a następnie ten (zwykle) niezależny od platformy kod bajtowy jest uruchamiany przez maszynę wirtualną (porównaj z wirtualną maszyną Java ).

Języki oparte na stosie

Języki oparte na stosie to rodzaj języka o strukturze danych, który jest oparty na strukturze danych stosu .

Języki synchroniczne

Języki programowania synchronicznego są zoptymalizowane pod kątem programowania systemów reaktywnych, czyli systemów, które często są przerywane i muszą szybko reagować. Wiele takich systemów jest również nazywanych systemami czasu rzeczywistego i są często używane w systemach wbudowanych .

Przykłady:

Języki cieniowania

Język cieniowania to graficzny język programowania przystosowany do programowania efektów cieniowania. Takie formy językowe zwykle składają się ze specjalnych typów danych, takich jak „kolor” i „normalny”. Ze względu na różnorodność rynków docelowych grafiki komputerowej 3D.

Renderowanie w czasie rzeczywistym

Zapewniają zarówno wyższą abstrakcję sprzętową, jak i bardziej elastyczny model programowania niż poprzednie paradygmaty, które zakodowały na stałe równania transformacji i cieniowania. Daje to programiście większą kontrolę nad procesem renderowania i zapewnia bogatszą zawartość przy niższych nakładach.

Renderowanie offline

Języki cieniowania używane w renderowaniu offline zapewniają najwyższą jakość obrazu. Przetwarzanie takich shaderów jest czasochłonne. Wymagana moc obliczeniowa może być kosztowna ze względu na ich zdolność do uzyskiwania fotorealistycznych wyników.

Języki obsługi składni

Języki te pomagają w generowaniu analizatorów leksykalnych i parserów dla gramatyk bezkontekstowych .

Języki systemowe

Języki programowania systemu są przeznaczone do zadań niskiego poziomu, takich jak zarządzanie pamięcią lub zarządzanie zadaniami. Język programowania systemu zwykle odnosi się do języka programowania używanego do programowania systemu; takie języki są przeznaczone do pisania oprogramowania systemowego, które zwykle wymaga innego podejścia programistycznego w porównaniu z oprogramowaniem aplikacyjnym.

Oprogramowanie systemowe to oprogramowanie komputerowe przeznaczone do obsługi i sterowania sprzętem komputerowym oraz do zapewniania platformy do uruchamiania aplikacji. Oprogramowanie systemowe obejmuje kategorie oprogramowania, takie jak systemy operacyjne, oprogramowanie narzędziowe, sterowniki urządzeń, kompilatory i konsolidatory. Przykłady języków systemowych obejmują:

Język Inicjator Po raz pierwszy pojawiły się Wpływem Używany do
ESPOL Firma Burroughs 1961 ALGOL 60 MPK
PL/I IBM , UDOSTĘPNIJ 1964 ALGOL 60, FORTRAN, trochę COBOL Multiki
PL360 Niklausa Wirtha 1968 ALGOL 60 ALGOL W
C Dennisa Ritchiego 1969 BCPL Większość jąder systemów operacyjnych , w tym Windows NT i większość systemów typu Unix
PL/S IBM 196x PL/I OS/360
ROZKOSZ Carnegie Mellon University 1970 ALGOL-PL/I VMS (porcje)
PL/8 IBM 197x PL/I AIX
PL/MP i PL/MI IBM 197x PL/I CPF , OS/400
PL-6 Honeywell, Inc. 197x PL/I KP-6
SYMPL CDC 197x JOWIALNY NOS , większość kompilatorów, edytor FSE
C++ Bjarne Stroustrup 1979 C , Symula Zobacz aplikacje C++
Ada Jean Ichbiah , S. Tucker Taft 1983 ALGOL 68 , Pascal , C++ , Java , Eiffel Systemy wbudowane, jądra systemów operacyjnych, kompilatory, gry, symulacje, CubeSat , kontrola ruchu lotniczego i awionika
D Cyfrowy Mars 2001 C++ Wiele domen
Nim Andreasa Rumpfa 2008 Ada , Modula-3 , Lisp , C++ , Object Pascal , Python , Oberon Jądra systemów operacyjnych, kompilatory, gry
Rdza Badania Mozilli 2010 C++ , Haskell , Erlang , Ruby Silnik układu serwo , Redox OS
Szybki Apple Inc. 2014 C , Obiekt-C , Rust macOS , tworzenie aplikacji na iOS
Zig Andrzej Kelly 2016 C , C++ , LLVM IR , Go , Rust , JavaScript Jako zamiennik C

Języki transformacji

Języki transformacji służą do przekształcania (tłumaczenia) kodu źródłowego określonego w określonym języku formalnym na określony kod formatu docelowego. Jest najczęściej używany w elementach pośrednich bardziej złożonych nadsystemów w celu przyjęcia wewnętrznych wyników do wprowadzenia do kolejnej procedury przetwarzania.

Języki wizualne

Wizualne języki programowania pozwalają użytkownikom określać programy w dwu (lub więcej) wymiarach, zamiast jednowymiarowych ciągów tekstowych, za pomocą różnego rodzaju układów graficznych. Niektóre programowania przepływu danych są również językami wizualnymi.

Języki Wirtha

Informatyk Niklaus Wirth zaprojektował i wdrożył kilka wpływowych języków.

Języki oparte na XML

XML lub działające na nim .

Zobacz też

Notatki