Do tej pory nie znam KLUCZOWYCH różnic między tymi trzema. Gdy ktoś mnie o to pyta, mówię tylko, że C # to język programowania, HTML i XML to Języki znaczników, a JavaScript i VBScript to języki skryptowe. Ale jakie są kluczowe różnice, które je odróżniają?
38
Odpowiedzi:
Pozwól mi spróbować znaleźć linię podziału między tymi trzema rodzajami języka. Oczywiście będzie wiele wyjątków i kontrprzykładów, ponieważ to tylko moja opinia.
Język znaczników służy do kontrolowania prezentacji danych, na przykład „reprezentuj te nazwy użytkowników jako listę punktowaną lub jako tabelę”.
Język skryptowy służy do pośredniczenia między programami w celu generowania danych. Jest to szczególnie prawdziwe w przypadku języków skryptowych powłoki, takich jak bash, ale jeśli się nad tym zastanowić, również Python lub Perl wynikają z potrzeby wykonywania zadań w systemie UNIX bez pisania programu w C. Program, który kontrolujesz przez większość czasu w tych językach jest tłumaczem samego języka , który wykonuje dla ciebie ogólne zadania. Inne typowe programy, z którymi współpracujesz, to serwery baz danych lub serwery WWW.
Wracając do metafory listy użytkowników, w języku skryptowym pytasz bazę danych „podaj mi wszystkie nazwy użytkowników”, a następnie zapytaj serwer WWW „wyślij tę listę użytkowników do tego requestera”.
Do transformacji danych używany jest język programowania . Robi to poprzez tworzenie instrukcji CPU, które przepisują dane wejściowe na dane wyjściowe; mam nadzieję, że pożądana wydajność. Przykładami transformacji danych jest obliczenie sumy z szeregu dodatków lub rozwiązanie układu równań różniczkowych ze zbioru warunków lub zapis i odczyt ze struktury drzewiastej w spójny sposób, biorąc pod uwagę sekwencję możliwie równoczesnych zapytań .
Wracając do metafory listy użytkowników, w języku programowania piszesz, jak przejść przez tabelę rekordów, wyodrębnić z każdego rekordu pole „nazwa” i zwrócić je wszystkie żądającemu.
Zauważ, że języki skryptowe są podzbiorem języków programowania, tzn. Językiem może być zarówno „skryptowanie”, jak i „programowanie”: Python jest regularnie używany do „pośredniczenia między programami”, a także do „przekształcania danych”. Istnieją inne języki, takie jak Java, które rzadko są używane do „pośredniczenia między programami”, nie dlatego, że jest to niemożliwe, ale dlatego, że nie zostały zaprojektowane w celu ułatwienia tego. Kluczową cechą języka skryptowego jest to, że może on koordynować inne programy, podobnie jak skrypt daje aktorowi wskazówkę, aby zaczął swoją rolę.
źródło
Język znaczników to język używany do reprezentowania danych strukturalnych. Na przykład HTML umożliwia określenie, że pewna część dokumentu to tytuł lub inna część to lista, w porównaniu do płaskiego dokumentu tekstowego.
Języki znaczników nie są uważane za języki programowania¹.
Różnica w językach programowania nie zawsze jest oczywista. Na przykład XSLT jest kompletnym językiem Turinga², ale opiera się na XML, który jest językiem znaczników.
Sama Wikipedia dokłada wszelkich starań, aby uniknąć zakwalifikowania XSLT jako języka programowania lub języka znaczników. Mówi tylko, że jest to język deklaratywny i że używa „technik optymalizacji dostępnych w funkcjonalnych językach programowania i językach zapytań do baz danych”.
Język skryptowy jest językiem programowania, który jest interpretowany, a nie kompilowany, co oznacza, że języki skryptowe stanowią podzbiór wszystkich języków programowania.
Nie zawsze jest oczywiste, czy język programowania jest językiem skryptowym, podobnie jak nie zawsze jest oczywiste, czy język jest kompilowany czy interpretowany. Na przykład, PHP może zostać skompilowany do pośredniego kodu bajtowego³, a następnie zmieniony w kod maszynowy za pomocą kompilatora JIT, choć nadal jest uważany za język skryptowy⁴.
Zobacz także: Podział meta-włosów autorstwa Stevena Lotta.
¹ „XML nie jest językiem programowania”. Zobacz XML w 10 punktach .
² „XSLT to kompletny język Turinga” Patrz XSLT na Wikipedii
³ „HHVM kompiluje Hack i PHP do pośredniego kodu bajtowego. Ten kod bajtowy jest następnie dynamicznie tłumaczony na kod maszynowy x64 w czasie wykonywania przez kompilator just-in-time (JIT). ”Patrz HHVM .
Languages Języki skryptowe na liście języków programowania według typów na Wikipedii.
źródło
TypeError
! Każdy język może być implementowany przez tłumacza, każdy język może być implementowany przez kompilator.Aby stworzyć jakąkolwiek taksonomię, musisz najpierw zadać sobie kilka pytań:
Zazwyczaj, gdy słyszy się pytanie takie jak zadane, oczekiwana odpowiedź zawiera kilka założeń. Na przykład naturalne jest założenie, że ponieważ wszystkie są językami, muszą one tworzyć hierarchię na podstawie bardziej ogólnej koncepcji języka, lub że dzielą przestrzeń między wszystkimi językami lub że są one podzbiorami.
Języki programowania
Niestety żadne z powyższych nie wydaje się prawdą. Być może tylko języki programowania mają definicję, która jest najbardziej zgodna. Języki programowania to języki, które kodują programy. Kodowanie oznacza, że słowo w języku może być interpretowane jako program (sekwencja działań). Języki programowania komputerowego są ich podzbiorem. Przykłady nie-komputerowych języków programowania: lista zakupów, interpretowana jako wskazówki dla kupującego w supermarkecie, DNA interpretowane przez transkrypcję peptydów, analogowa płyta muzyczna służąca jako program do magnetofonu.
Języki programowania komputerowego są zatem tymi, które programują komputery.
Języki skryptowe
Nie są dobrze zdefiniowane. Można interpretować, co oznacza ten termin. Historycznie wydaje się, że tak nazywano języki programowania, które nie miały kompilatora do tworzenia kodu maszynowego. Według dzisiejszych standardów umieściłby w tej kategorii każdy popularny język programowania bez asemblerów. Nawet tak zwane języki niskiego poziomu, takie jak C, wymagają środowiska wykonawczego z wcześniej istniejącymi procedurami, dlatego pliki binarne uzyskane przez kompilację programu C nie są całkowicie kodem maszynowym, ale także od czasu do czasu wywołują środowisko uruchomieniowe.
Języki znaczników
Nie są dobrze zdefiniowane. Ilekroć używa się tego terminu, wydaje się, że intencją jest opisanie języka programowania z bardzo ograniczonym leksykonem, używanego głównie do generowania obrazu wizualnego lub dźwiękowego. XML może być trudne do programowania, ale jeśli spojrzysz na znaczniki Man lub TexInfo, zobaczysz, że „znaki specjalne” są w rzeczywistości instrukcjami interpretera.
Można również podać interpretację „programowania” dla języka XML, co może wyglądać następująco:
Podsumowując: ten podział na dzień dzisiejszy nie wydaje się bardzo znaczący, może jedynie dać ci intuicję co do tego, z jakim językiem masz do czynienia, ale nie zapewni ci ścisłej definicji.
źródło
Wszystkie trzy pojęcia w pewnym stopniu się pokrywają, więc możesz uzyskać niekończące się argumenty, czy XSLT jest językiem programowania, czy Python jest językiem skryptowym, czy nie.
Język znaczników jest język, który reprezentują strukturę danych w formacie tekstowym , HTML jest najbardziej znany, ale istnieją liczne formaty dla różnych celów, takich jak SVG grafiki, WSDL do opisu interfejsów usług internetowych, RESX plików Resouce się. netto i tak dalej. Ogólna zasada jest taka, że język znaczników nie opisuje procesu ani algorytmu (tak jak język programowania), ale jest czystymi danymi. Ale jest też podstawowym CS wgląd że tam jestbrak zasadniczej różnicy między kodem a danymi. Niektóre języki znaczników, takie jak XSLT, mają pętle i warunki warunkowe, takie jak „prawdziwy” język programowania, a niektóre języki programowania, takie jak Prolog, są prawie czystymi danymi bez określonego procesu w kodzie. A Lisp zaciera linię tak bardzo, że traktuje swój kod jako ustrukturyzowany format danych.
Jeśli chodzi o rozróżnienie między językiem programowania a językiem skryptowym , jest to rozróżnienie historyczne, które jest dziś prawie przestarzałe. W dawnych czasach kompilowaliśmy samodzielne programy napisane w powiedzmy C, a następnie mieliśmy języki skryptowe, takie jak powiedzmy skrypty powłoki lub Word Basic, które zostały zinterpretowane i zaprojektowane do manipulowania innymi programami i narzędziami. Dzisiaj linia jest dość niewyraźna z dużą ilością środkowego podłoża, ponieważ mamy różne poziomy kompilacji i interpretacji (kompilacja kodu bajtowego, kompilacja JIT itp.) Oraz różne API niezależne od języka. Tak więc rozróżnienie nie jest aż tak przydatne.
źródło
Język znaczników jest używany do opisywania danych, a nie logiki. Typowym ich zastosowaniem jest opisywanie formatowania dokumentów, na przykład HTML jest do tego przeznaczony. Ale czasami są one również używane jako ogólne formaty danych, XML to język znaczników, który jest często używany do opisywania danych.
Różnica między językami programowania i skryptów jest bardzo rozmyta, oba wydają się być kompletne, ponieważ można rozwiązać z nimi wszelkie problemy obliczeniowe. Istnieje kilka ogólnych „wskazówek”, które możesz sprawdzić, aby sprawdzić, czy język jest językiem programowania, czy nie.
Ale ostatecznie, jeśli język jest językiem skryptowym lub językiem programowania, jest bardziej kwestią konwencji niż jakichkolwiek ścisłych kryteriów. Nawet powyższe wskazówki to tylko trendy, znajdziesz języki programowania, które spełniają wszystkie kryteria dla języka skryptowego, ale nadal są uważane za języki programowania.
źródło
TypeError
! Każdy język może być implementowany przez tłumacza, każdy język może być implementowany przez kompilator. Możliwe jest nawet automatyczne generowanie kompilatora z interpretera i odwrotnie.