UFO ET IT

프로그래밍 언어를 언급 할 때 "표현 적"이란 무엇을 의미합니까?

ufoet 2020. 11. 11. 21:01
반응형

프로그래밍 언어를 언급 할 때 "표현 적"이란 무엇을 의미합니까?


나는이 단어를 "자바 스크립트는 매우 표현적인 언어이다"와 같은 문장에서 많이 듣습니다. 규칙이 많지 않다는 뜻입니까, 아니면 "표현 적"이 더 구체적인 의미를 가지고 있다는 뜻입니까?


'표현 적'이란 컴파일러와 독자 모두를 위해 이해하기 쉬운 코드를 작성하는 것이 쉽다는 것을 의미합니다.

표현력을 만드는 두 가지 요소 :

  • 직관적으로 읽을 수있는 구조
  • 상용구 코드 부족

이 표현적인 Groovy를 덜 표현적인 Java와 비교해보십시오.

3.times {
   println 'Hip hip hooray'
}

vs

for(int i=0; i<3; i++) {
    System.out.println("Hip hip hooray");
}

때로는 표현력을 위해 정밀도를 바꾸는 경우가 있습니다. Groovy 예제는 Java가 명시 적으로 지정하도록하는 항목을 가정하기 때문에 작동합니다.


읽기 쉽고 간결한 방식으로 아이디어 / 알고리즘 / 작업 표현할 수 있음을 의미합니다 .

항상 그런 것은 아니지만 일반적으로 표현력이있는 언어를 구문 적 설탕과 연관시킵니다. 표현적인 C #의 예는 다음과 같습니다.

  • foreach (반복을 명시 적으로 작성하는 대신)
  • using문 (대신 명시 적으로 마지막으로 /를 시도 작성)
  • 쿼리 식 (LINQ 쿼리 작성을위한 더 간단한 구문)
  • 확장 메서드 (주로 LINQ에 대한 메서드 호출 체인 허용)
  • 익명 메서드 및 람다 식 (더 쉬운 대리자 및 식 트리 생성 가능)

다른 예는 제네릭이 될 것입니다. C #이 제네릭을 얻기 전에는 ArrayList코드에서 "문자열 만 포함하는 "개념을 표현할 수 없었습니다 . (물론이를 문서화하거나 자신 만의 StringList유형을 작성할 수 있지만 이는 완전히 동일하지 않습니다.)


Neal Grafter에는 주제에 대한 좋은 인용문 이있는 블로그 가 있습니다.

제 생각에, 언어 구조는 구조 없이는 작성 (사용) 할 수없는 API를 작성 (사용) 할 수 있다면 표현 적입니다.

당신의 생각을 코드로 더 자연스럽게 표현할 수 있다는 의미라고 말하고 싶습니다.


그것은 힘든 일입니다.

나에게 그것은 당신이 당신의 의도를 쉽게 표현할 수 있다는 것과 관련이 있습니다. 이것은 언어마다 다르며 수행하려는 작업에 따라 크게 달라 지므로 일반화가 일반적인 영역입니다. 물론 주관적이고 개인적입니다.

더 높은 수준의 언어가 항상 표현력이 더 많다고 생각하기는 쉽지만 사실이라고 생각하지 않습니다. 표현하려는 내용, 즉 문제 영역에 따라 다릅니다.

예를 들어 이진 패턴을 가진 부동 소수점 숫자를 인쇄하려면 0xdeadbeefBash보다 C에서 수행하는 것이 훨씬 쉽습니다. 그러나 Bash는 C에 비해 초고 수준 언어입니다. 반면에 프로그램을 실행하고 출력을 텍스트 파일로 수집하려면 Bash에서는 거의 보이지 않지만 C로 된 코드 페이지 (POSIX 환경 가정)가 필요합니다.


http://en.wikipedia.org/wiki/Expressive_power


여기에 매우 논란이 많은 비교가 있습니다.

http://redmonk.com/dberkholz/2013/03/25/programming-languages-ranked-by-expressiveness/

그렇다면 이러한 측정 항목에서 가장 좋은 언어는 무엇일까요?

중앙값과 IQR에 따라 순위를 기준으로 상위 10 개를 선택한 다음 교차점을 취하면 다음과 같습니다. 중앙값과 IQR은 이름 바로 뒤에 나열됩니다.

Augeas (48, 28) : 구성 파일을위한 도메인 별 언어

Puppet (52, 65) : 구성을위한 또 다른 DSL REBOL (57, 47) : 분산 컴퓨팅을 위해 설계된 언어

eC (75, 75) : Ecere C, 객체 방향의 C 파생

CoffeeScript (100, 23) : JavaScript로 트랜스 컴파일하는 고급 언어

Clojure (101,51) : 기능적 동시 프로그래밍을위한 Lisp 방언

Vala (123, 61) : 그놈에서 사용하는 객체 지향 언어

Haskell (127, 71) : 강력한 정적 유형을 사용하는 순전히 기능적이고 컴파일 된 언어


아마도이 사이트 http://gafter.blogspot.com/2007/03/on-expressive-power-of-programming.html 이 도움이 될 수 있습니다.

In short he says: In my mind, a language construct is expressive if it enables you to write (and use) an API that can't be written (and used) without the construct. In the context of the Closures for Java proposed language extension, control abstraction APIs are the kind of thing that don't seem to be supported by the competing proposals.

참고URL : https://stackoverflow.com/questions/638881/what-does-expressive-mean-when-referring-to-programming-languages

반응형