프로그래밍 언어 vs 마크 업 언어 vs 스크립팅 언어


38

지금까지 나는 이 세 가지 의 주요 차이점을 모릅니다 . 누군가 나에게 이것에 대해 물으면 C #은 프로그래밍 언어이고 HTML 및 XML은 마크 업 언어이며 JavaScript 및 VBScript는 스크립팅 언어라고 말합니다. 그러나 서로 구별되는 주요 차이점은 무엇입니까?


언어 쿼리를 잊지 마십시오!
Kyle Delaney

답변:


38

이 세 가지 언어 유형 사이에 구분선을 찾으려고 노력하겠습니다. 물론 이것은 나의 의견 일 뿐이므로 수많은 예외와 반례가있을 것입니다.

  • 마크 업 언어는 "이러한 사용자 이름을 글 머리표 목록 또는 테이블로 표시"와 같이 데이터 표시 를 제어하는 ​​데 사용됩니다 .

  • 스크립팅 언어는 데이터를 생성하기 위해 프로그램간에 중재하는 데 사용됩니다 . 이것은 특히 bash와 같은 쉘 스크립팅 언어의 경우에 해당하지만, 생각해 보면 Python 또는 Perl은 C로 프로그램을 작성하지 않고 UNIX에서 작업을 수행해야한다는 필요성에서 비롯되었습니다. 는 언어 자체의 통역사로서 일반적인 작업을 수행합니다. 상호 작용하는 다른 일반적인 프로그램은 데이터베이스 서버 또는 웹 서버입니다.

    사용자 목록 은유로 돌아가서 스크립팅 언어로 데이터베이스에 "모든 사용자 이름을 지정하십시오"라고 요청한 다음 웹 서버에 "이 사용자 목록을이 요청자에게 보내십시오"라고 요청하십시오.

  • 프로그래밍 언어는 데이터변환하는 데 사용됩니다 . 입력 데이터를 출력에 다시 쓰는 CPU 명령어를 작성하여이를 수행합니다. 바라건대, 원하는 출력. 데이터 변환의 예는 여러 추가 항목에서 합계를 계산하거나 일련의 조건에서 미분 방정식 시스템을 해결하거나 가능한 동시 쿼리 시퀀스가 ​​주어지면 일관된 방식으로 트리와 같은 구조에서 쓰기 및 읽기입니다. .

    프로그래밍 언어로 사용자 목록 은유로 돌아가서 레코드 테이블을 탐색하고 각 레코드에서 "이름"필드를 추출하여 요청자에게 모두 리턴하는 방법을 작성합니다.

스크립팅 언어는 프로그래밍 언어의 하위 집합입니다. 즉 언어는 "스크립팅"및 "프로그래밍"둘 다일 수 있습니다. Python은 정기적으로 "프로그램 간"및 "데이터 변환"에 사용됩니다. "프로그램 간 중재"에 사용되는 경우가 거의없는 Java와 같은 다른 언어도 있습니다. 이것이 불가능하기 때문이 아니라 쉽게 만들 수 있도록 설계되지 않았기 때문입니다. 스크립트 언어의 주요 특징은 스크립트가 액터에게 자신의 역할을 시작하도록 신호를주는 것처럼 다른 프로그램을 조정할 수 있다는 것입니다.


7
스크립팅 언어는 공식적으로 프로그래밍 언어의 하위 클래스입니다. (또한 C 및 Java와 같은 언어가 REPL로 완전히 해석되는 것을 보았습니다. 장벽은 양방향으로 누출됩니다…)
Donal Fellows

1
@DonalFellows : 당신 말이 맞아요. 나는 그 점을 염두에두고 대답했지만 "하나는 다른 것의 부분 집합"이라는 표현을 명시 적으로 사용하지 않았습니다. 또한 나는 한 범주가 해석되고 다른 범주는 해석되지 않는다는 것을 암시하지 않았습니다.
logc

1
@ DonalFellows : 나는 하나가 다른 것의 부분 집합이라는 것을 분명히 언급하기 위해 대답을 편집했습니다.
logc

1
나는 마크 업 언어가 데이터 구조를 설명하는 언어라고 주장하는 유일한 사람이기 때문에이 답변을 지원합니다.
Idan Arye

3
@ JörgWMittag : 예외가 있음을 알고 있었기 때문에 "많은 예외가 있습니다"로 시작했습니다. :) 그렇지 않으면 스크립트 언어가 컴파일 되지 않았다는 것을 암시 합니까? 나는 그 함정을 피하기 위해 언어 의 목적 에 정확하게 집중하려고 노력했다 ...
logc

11

마크 업 언어 는 구조화 된 데이터를 나타내는 데 사용되는 언어입니다. 예를 들어 HTML을 사용하면 일반 텍스트 문서와 비교하여 문서의 일부가 제목이거나 다른 일부가 목록임을 지정할 수 있습니다.

마크 업 언어는 프로그래밍 언어 ¹로 간주되지 않습니다.

프로그래밍 언어와의 차이점이 항상 명확한 것은 아닙니다. 예를 들어 XSLT는 Turing-complete language²이지만 마크 업 언어 인 XML을 기반으로합니다.

Wikipedia 자체는 XSLT를 프로그래밍 언어 또는 마크 업 언어로 사용하지 않도록 중요한 노력을 기울입니다. 선언적 언어이며 "기능적 프로그래밍 언어 및 데이터베이스 쿼리 언어에서 찾은 최적화 기술"을 사용한다고 말합니다.

스크립팅 언어 는 컴파일되지 않고 해석되는 프로그래밍 언어입니다. 즉, 스크립팅 언어는 모든 프로그래밍 언어의 하위 집합을 나타냅니다.

프로그래밍 언어가 스크립팅 언어인지 항상 명확하지는 않습니다. 언어가 컴파일 또는 해석되는지 항상 명확하지는 않습니다. 예를 들어, PHP 중간 바이트 코드 ³로 컴파일 된 다음 JIT 컴파일러에 의해 머신 코드로 랜 슬링 될 수 있지만 여전히 스크립팅 언어로 간주됩니다.

참조 : Steven Lott의 메타 헤어 분할 .


¹“XML은 프로그래밍 언어가 아닙니다”. 10 포인트의 XML을 참조하십시오 .

²“XSLT는 튜링 완료 언어입니다” 위키 백과의 XSLT 참조

³“HHVM은 Hack과 PHP를 중간 바이트 코드로 컴파일합니다. 그런 다음이 바이트 코드는 JIT (Just-In-Time) 컴파일러에 의해 런타임에 x64 머신 코드로 동적으로 변환됩니다.” HHVM을 참조하십시오 .

스크립트 언어 Wikipedia에서 유형별 프로그래밍 언어 목록.


16
언어는 절대 컴파일되거나 해석되지 않습니다. 언어 입니다. 컴파일 및 해석은 언어를 구현하는 데 사용되는 컴파일러 또는 해석기 (duh!)의 특성입니다. "컴파일 된 언어"또는 "통역 된 언어"라는 용어는 의미가 없으며, 다른 추상화 수준에 속합니다. Englisch가 유형 언어 인 경우 "컴파일 언어"는 TypeError! 모든 언어는 인터프리터에 의해 구현 될 수 있으며, 모든 언어는 컴파일러에 의해 구현 될 수 있습니다.
Jörg W Mittag

@ JörgWMittag "모든 언어는 인터프리터에 의해 구현 될 수 있고, 모든 언어는 컴파일러에 의해 구현 될 수 있습니다"-100 % 맞습니까?
스파르타쿠스

@spartacus 나는 주저 "아니오"라고 부릅니다. 또한 해석 될 수 컴파일 할 수있는 모든 언어가 (그냥 저장하는 대신 명령을 실행) 생각하지만, 나는 들었습니다 homoiconicity이 심각하게 편집의 가능성을 제한
Izkata

@Izkata 나는 호모 닉 자체가 컴파일의 가능성을 바꾸지 않는다고 말하지는 않지만 메타 프로그래밍을 허용하면 많은 컴파일이 런타임으로 연기되어야한다는 것을 의미합니다.
Mark Hurd

1
"Jörg W Mittag"가 이미 지적했듯이 "스크립트 언어"부분은 완전히 잘못되었습니다. 그리고 "프로그래밍 언어"에 대한 설명은 없습니다.
David Raab

2

모든 종류의 분류법을 생성하려면 먼저 몇 가지 질문을해야합니다.

  • 관계를 올바르게 정의하려고하는 객체가 있습니까?
  • 그렇다면 실제로 존재합니까?
  • 객체간에 특정 종류의 관계만으로 제한합니까, 아니면 시스템이 합법적 인 관계 만 사용해야하는 요구 사항이 있습니까?

일반적으로 질문과 같은 질문을들을 때 예상되는 답변은 몇 가지 가정을합니다. 예를 들어, 이러한 언어는 모두 언어이기 때문에보다 일반적인 언어 개념 하에서 계층 구조를 형성하거나 모든 언어의 공간을 분할하거나 서로의 하위 세트라고 가정하는 것이 당연합니다.

프로그래밍 언어들

불행히도, 위의 어느 것도 사실이 아닌 것 같습니다. 아마도 프로그래밍 언어 만 가장 동의하는 정의를 가지고있을 것입니다. 프로그래밍 언어는 프로그램을 인코딩하는 언어입니다. 인코딩은 언어의 단어가 프로그램 (일련의 동작)으로 해석 될 수 있음을 의미합니다. 컴퓨터 프로그래밍 언어는 이들 중 일부입니다. 비 컴퓨터 프로그래밍 언어의 예 : 슈퍼마켓에서 구매자를위한 지시 사항으로 해석되는 식료품 목록, 전사 펩타이드로 해석되는 DNA, 테이프 레코더의 프로그램으로 사용되는 아날로그 음악 레코드.

따라서 컴퓨터 프로그래밍 언어는 컴퓨터를 프로그래밍하는 언어입니다.

스크립팅 언어

잘 정의되지 않았습니다. 이 용어의 의미를 해석하는 것은 개방적입니다. 역사적으로, 머신 코드를 생성하기위한 컴파일러가없는 프로그래밍 언어는 이런 방식으로 호출 된 것으로 보입니다. 오늘날의 표준에 따르면 모든 인기있는 프로그래밍 언어는 어셈블러를이 범주에 포함시킵니다. C와 같은 소위 저수준 언어조차도 기존 프로 시저가있는 런타임을 필요로하므로 C 프로그램을 컴파일하여 얻은 바이너리는 완전히 기계 코드는 아니지만 가끔씩 런타임을 호출합니다.

마크 업 언어

잘 정의되지 않았습니다. 이 용어가 사용될 때마다, 주로 시각적 또는 청각 적 이미지를 생성하는 데 사용되는 매우 제한된 어휘로 프로그래밍 언어를 설명하는 것 같습니다. XML을 프로그래밍으로 보는 것은 어려울 수 있지만 Man 또는 TexInfo 마크 업을 보면 "특수"문자가 실제로 인터프리터의 명령이라는 것을 알 수 있습니다.

다음과 같은 XML 언어에 대한 "프로그래밍"해석을 제공 할 수도 있습니다.

< := put interpreter in the reading node mode
! := if reading node, start CData/Comment mode
     else if not in read text mode, signal error
-- := if in start CData/Comment mode, start comment
      else if in comment, put in end comment mode
      else if in end comment mode, signal error
...

결론 : 오늘날 의이 부서는별로 의미가 없어 보이지만 어떤 언어에 직면했는지에 대한 직관을 제공 할 수는 있지만 엄격한 정의를 제공하지는 않습니다.


1

세 가지 개념이 모두 겹치므로 XSLT가 프로그래밍 언어인지 또는 Python이 스크립팅 언어인지에 대한 끝없는 논쟁을 얻을 수 있습니다.

마크 업 언어 표현한다 언어입니다 텍스트 형식으로 데이터를 구성 , HTML은 가장 잘 알려진이지만, SVG와 같은 그래픽의 다양한 목적을 위해 여러 형식에 Resouce의 파일을 웹 서비스 인터페이스, RESX를 설명하는 WSDL이있다. 그물 등등. 일반적으로 마크 업 언어는 프로세스 나 알고리즘을 설명하지 않지만 (프로그래밍 언어와 마찬가지로) 순수한 데이터입니다. 그러나이 있다는 근본적인 CS 통찰력도 됩니다코드와 데이터의 근본적인 차이가 없습니다. XSLT와 같은 일부 마크 업 언어에는 "실제"프로그래밍 언어와 같은 루프 및 조건이 있으며 Prolog와 같은 일부 프로그래밍 언어는 코드에 지정된 프로세스가없는 거의 순수한 데이터입니다. 그리고 Lisp는 자체 코드를 구조화 된 데이터 형식으로 취급하기 때문에 그 선을 흐리게합니다.

사이의 구별에 관해서는 프로그래밍 언어스크립트 언어 , 이것은 오늘날 거의 사용되지 않습니다 역사의 구별이다. 예전에는 C로 작성된 독립형 프로그램을 컴파일 한 다음 다른 프로그램과 도구를 조작하도록 해석되고 설계된 쉘 스크립트 나 Word Basic과 같은 스크립팅 언어를 사용했습니다. 오늘날 우리는 다양한 수준의 컴파일 및 해석 (바이트 코드 컴파일, JIT 컴파일 등)과 다양한 언어 독립적 API를 가지고 있기 때문에 중간 정도의 경계로 상당히 흐리게 보입니다. 따라서 구별은 그렇게 유용하지 않습니다.


0

마크 업 언어는 논리가 아닌 데이터를 설명하는 데 사용됩니다. 그것들의 전형적인 사용은 문서 형식화를 설명하기위한 것이며, HTML은이를 위해 설계되었습니다. 그러나 때로는 일반 데이터 형식으로도 사용되며 XML은 종종 데이터를 설명하는 데 사용되는 마크 업 언어입니다.

프로그래밍 언어와 스크립팅 언어의 차이는 매우 모호합니다. 두 언어 모두 계산 가능한 문제를 해결할 수 있다는 점에서 혼란 스럽습니다. 언어가 프로그래밍 언어인지 확인할 수있는 일반적인 '힌트'가 있습니다.

  • 스크립팅 언어는 종종 컴파일되지 않고 해석되거나 최소한 해석 옵션을 제공합니다.
  • 스크립팅 언어는 종종 빠른 실행보다는 빠른 작업을 위해 만들어졌습니다.
  • 스크립팅 언어는 매우 광범위한 표준 라이브러리와 함께 제공되는 경향이 있습니다. 많은 프로그래밍 언어도 사용되지만 더 선택적입니다.

그러나 결국 언어가 스크립팅 언어이거나 프로그래밍 언어 인 경우 엄격한 기준이 아니라 관습의 문제입니다. 위의 힌트조차도 추세 일 뿐이므로 스크립팅 언어에 대한 모든 기준을 충족하면서도 여전히 프로그래밍 언어로 간주되는 프로그래밍 언어를 찾을 수 있습니다.


4
언어는 절대 컴파일되거나 해석되지 않습니다. 언어 입니다. 컴파일 및 해석은 언어를 구현하는 데 사용되는 컴파일러 또는 해석기 (duh!)의 특성입니다. "컴파일 된 언어"또는 "통역 된 언어"라는 용어는 의미가 없으며, 다른 추상화 수준에 속합니다. Englisch가 유형 언어 인 경우 "컴파일 언어"는 TypeError! 모든 언어는 인터프리터에 의해 구현 될 수 있으며, 모든 언어는 컴파일러에 의해 구현 될 수 있습니다. 인터프리터에서 컴파일러를 자동으로 생성하거나 그 반대로도 가능합니다.
Jörg W Mittag

@ JörgWMittag 언어가 본질적으로 컴파일되거나 해석되지 않는다는 것은 사실입니다. 그러나 일반적으로 일반적으로 실행되는 방법에 대한 규칙이 있습니다. 주로 여기에서 언급합니다.
Pierre Andersson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.