엄격한 프로그래밍 언어

Strict programming language

엄격한 프로그래밍 언어는 엄격한 프로그래밍 패러다임채택한 프로그래밍 언어로서 사용자가 정의하기 전에 엄격한 기능(파라미터가 완전히 평가되어야 하는 기능)만 허용한다. 엄격하지 않은 프로그래밍 언어는 사용자가 엄격하지 않은 기능을 정의할 수 있도록 허용하며, 따라서 게으른 평가를 허용할 수 있다.[1]

오늘날 공통적으로 사용되는 거의 모든 프로그래밍 언어는 엄격하다. 예로는 C#, Java, Perl(모든 버전, 즉 버전 5와 버전 7까지, 전에는 Perl 6로 알려졌던 라쿠가 게으른 목록을[2] 가지고 있다), 루비, 커먼 리스프, ML 등이 있다. 엄격하지 않은 언어의 예로는 Haskell, Miranda, Clean 등이 있다.[3] 일반적인 기능이 엄격하지만 엄격하지 않은 기능을 구축하기 위한 매크로 시스템을 제공하는 언어로는 줄리아[4]체계가 있다.

설명

대부분의 비강제 언어에서 비강제성은 데이터 생성자로 확장된다. 이를 통해 개념적으로 무한 데이터 구조(모든 소수 목록 등)를 일반 유한 데이터 구조와 동일한 방식으로 조작할 수 있다. 또한 체스의 완전한 게임 트리 같은 매우 크지만 유한한 데이터 구조를 사용할 수 있게 해준다.

엄격하지 않은 것에는 널리 채택되는 것을 막는 몇 가지 단점이 있다.

  • 표현식의 평가 여부와 시기에 관한 불확실성 때문에, 일반적으로 비강제 언어는 유용하기 위해 순전히 기능적이어야 한다.
  • 공통적으로 사용되는 모든 하드웨어 아키텍처는 엄격한 언어에 최적화되어 있기 때문에 엄격한 언어를 사용하는 최선의 컴파일러는 엄격한 언어를 사용하는 최고의 컴파일러보다 느린 코드를 생성한다.
  • 엄격하지 않은 프로그램의 공간 복잡성은 이해하고 예측하기 어렵다.

엄격한 프로그래밍 언어는 열성적인 평가, 게으른 평가가 있는 엄격하지 않은 언어와 연관되는 경우가 많지만, 각각의 경우 다른 평가 전략이 가능하다. "eager programming language"와 "lazy programming language"라는 용어는 각각 "strong programming language"와 "non strong programming language"의 동의어로 사용되는 경우가 많다.

많은 엄격한 언어에서, 엄격하지 않은 기능의 몇몇 장점은 매크로툰크의 사용을 통해 얻을 수 있다.

인용구

  1. ^ 스콧 2006, 541페이지.
  2. ^ "Raku Programming/Lazy Lists and Feeds - Wikibooks, open books for an open world". en.wikibooks.org. Retrieved 2021-02-09.
  3. ^ Cluet & Hul 1998, 페이지 25-26.
  4. ^ Innes, Mike J. (2021-02-06), MikeInnes/Lazy.jl, retrieved 2021-02-09

참조