Moi znajomi od programowania zawsze mówią mi, że HTML to język znaczników, a C ++ to język programowania. Kiedy pytam, jaka jest różnica, nigdy nie dają mi rozsądnej odpowiedzi.
Co może sprawić, że można wywołać C ++ jako język programowania, a HTML nie?
programming-languages
terminology
markup
Lucas - Better Coding Academy
źródło
źródło
Odpowiedzi:
Język programowania to zapis przeznaczony do przekazywania instrukcji do maszyny. Zgodnie z tą definicją zarówno C ++, jak i HTML są językami programowania, podobnie jak zapis Joseph Marie Jacquard użył w 1801 roku do programowania swoich krosien .
Jednak wraz z rozprzestrzenianiem się języków, które są wykorzystywane do strukturyzacji i / lub opisu danych, definicja języka programowania została zmieniona tak, aby obejmowała tylko języki zdolne do wyrażania algorytmów. Jest to dziś bardziej powszechna definicja i wyklucza języki takie jak HTML lub XML.
Istotą obecnej definicji jest koncepcja kompletności Turinga . Większość języków programowania jest kompletna Turinga, a kompletność Turinga jest często cytowana jako jedna z kluczowych cech oddzielających język programowania od dowolnego innego języka komputerowego. Jest to wystarczająca ogólna zasada, ale nie do końca dokładne:
W zależności od kontekstu możesz wybrać dowolną definicję.
Edytować:
Niech będzie dalej wiadomo, że implementacja języka nie nadaje właściwości samemu językowi, na przykład: specyfikacja języka może definiować kompletny język Turinga, ktoś mógłby wprowadzić go przypadkowo, nie dopuszczając kompletności. Ta implementacja jako niekompletna nie oznacza jednak, że sam język nie jest kompletny (raczej oznacza to, że implementacja jest niezgodna). Szczegóły języka i szczegóły konkretnej implementacji języka należy rozpoznać jako osobne rzeczy, dlatego niedopuszczalne jest nazywanie języka interpretowanego lub kompilowanego itp.
źródło
- „Wiem, kiedy to widzę” artykuł w Wikipedii
Podobnie jak wulgaryzmy, myślę, że wszyscy znamy język programowania, kiedy go widzimy. Najwyraźniej OP to robi, ponieważ już oceniłeś C ++ jako język programowania, a HTML nie.
Więc jaki jest dokładnie cel formalnej definicji? Yannis wyjaśnił już, dlaczego najpopularniejsza definicja, kompletność Turinga, jest wadliwa: prowadzi do kategoryzacji, która sprzeciwia się testowi „wiem, kiedy go widzę”.
Daję wam do zrozumienia, że każda definicja, którą możecie wymyślić, doprowadzi do niektórych języków, które według nas nie są językami „programowania”, będą tak sklasyfikowane; lub niektórych językach, które wszyscy czujemy są „programowanie” języki zostaną zakwalifikowane jako nie jest tak.
Dlaczego nie pójdziesz z jelitami? Używam prostej heurystyki: język programowania to język, którego głównym celem, moim zdaniem i zgodnie z moimi spostrzeżeniami, jest pisanie programów. Nie oznaczać treści. Nie przekształcać XML. Pisać programy ogólnego przeznaczenia. Wolę po prostu to wiedzieć, kiedy to widzę, niż próbować doprecyzować formalną definicję i nie widzę żadnej prawdziwej wartości, która mogłaby pochodzić z próby takiej definicji.
źródło
Języki znaczników zajmują się głównie sposobem wyświetlania informacji i na ogół brakuje im infrastruktury programowania zmiennych, matematyki, porównania, podejmowania decyzji (jeśli ... to), pętli (for, while) itp.
HTML sam w sobie jest statyczny; to znaczy, podobnie jak edytor tekstu, ma na celu prezentowanie informacji takimi, jakie są. Tylko po dodaniu pewnego rodzaju języków programowania (zwykle języków skryptowych, takich jak JavaScript, PHP itp.) Strony HTML mogą mieć „zmieniającą się” treść. Języki skryptowe zapewniają możliwości „programowania” ze zmiennymi, matematyką, porównaniami, podejmowaniem decyzji, pętlami itp.
źródło
HTML jest językiem deklaratywnym. Sam w sobie niewiele robi, po prostu opisuje dokument i jego zawartość (używając znaczników o znaczeniu semantycznym).
Z drugiej strony C ++ coś robi. Definiuje funkcje i klasy, ale opisuje również, w jaki sposób te funkcje powinny ze sobą współpracować, w jaki sposób ich wejścia i wyjścia są powiązane w znaczący sposób oraz w jaki sposób aplikacja powinna działać jako całość.
źródło