"언어 지향 프로그래밍"은 실제 세계의 OOP/기능과 어떻게 비교됩니까?

StackOverflow https://stackoverflow.com/questions/1703869

  •  19-09-2019
  •  | 
  •  

문제

나는 최근 "실제 기능 프로그래밍"과 "Expert F#"에 대해 말하면서 F# 관련 문헌을 읽기 시작했습니다. 처음에는 Haskell에 배경이 있고 C#을 알고 있기 때문에 쉽습니다. 그러나 그것이 "언어 지향 프로그래밍"나는 단지 그것을 얻지 못한다. - 나는 몇 가지 설명을 읽고 모든 문장에서 더 추상적이고 이상한 학술 논문을 읽는 것과 같습니다.

그런 것들에 대한 쉬운 예제와 그것이 기존 패러다임과 어떻게 비교되는지에 대한 쉬운 예가 있습니까? 그것은 단지 학문적 판타지가 아닙니다. 그렇지 않습니까? ;)

감사합니다, 위시

도움이 되었습니까?

해결책

F#에는 "언어 지향"이라고 할 수있는 스타일로 프로그래밍을 수행하는 몇 가지 메커니즘이 있습니다.

첫째, 구문 결게 (함수 호출은 괄호가 필요하지 않으며, 자체 Infix 연산자를 정의 할 수 있습니다 ...) 많은 사용자 정의 라이브러리가 내장 DSL이 등장하도록합니다.

둘째, F# "따옴표"메커니즘을 사용하면 코드를 인용 한 다음 대체 시맨틱/평가 엔진으로 실행할 수 있습니다.

셋째, F# "계산 표현식"(일명 워크 플로우, 모나드, ...)은 특정 코드 블록에 대한 대체 의미를 제공하는 방법을 제공합니다.

이러한 모든 것은 EDSL 카테고리에 속합니다.

다른 팁

언어 지향 프로그램 (LOP)은 다음 중 하나를 설명하는 데 사용할 수 있습니다.

외부 언어 만들기 (DSL)

이것은 아마도 LOP의 가장 일반적인 사용이며, 경로를 통해 전송 유형을 통한 UPS 배송 패키지 등 특정 도메인이있는 곳입니다. 오히려 해당 도메인에 대한 별도의 프로그래밍 언어를 만듭니다. 따라서 문제를 별도의 외부 언어로 인코딩 할 수 있습니다.

내부 언어 생성

때로는 프로그램 코드가 '코드'처럼 보이고 문제 도메인에 더 가깝게 매핑되기를 원합니다. 즉, 코드가 '더 자연스럽게 읽으십시오'를하도록하십시오. 유창한 인터페이스는 다음의 예입니다. 유창한 인터페이스. 또한 F#에는이를 잘 지원하는 활성 패턴이 있습니다.

나는 썼다 블로그 게시물 LOP에서는 몇 가지 코드 예제를 제공하는 잠시 후에.

객체 지향 프로그래밍에서 객체를 사용하여 문제를 모델링하려고합니다. 그런 다음 해당 객체를 함께 연결하여 기능을 수행 할 수 있습니다. 결국 원래 문제를 해결하십시오.

언어 지향 프로그래밍에서 기존 객체 지향 또는 기능적 프로그래밍 언어를 사용하지 않고 문제를 효율적으로 해결하는 데 가장 적합한 새로운 도메인 특정 언어를 설계합니다.

언어 지향적 프로그래밍이라는 용어는 다른 사람들과 다른 의미를 가질 수 있다는 점에서 과부하 될 수 있습니다.

그러나 내가 어떻게 사용했는지에 따라 DSL을 생성한다는 의미입니다.http://en.wikipedia.org/wiki/domain_specific_language) 문제를 해결하기 전에.

DSL이 만들어지면 DSL 측면에서 프로그램을 작성합니다.

DSL이 범용 언어보다 문제를 표현하는 데 더 적합하다는 생각입니다.

몇 가지 예는 Make File Syntax 또는 Ruby on Rails Activerecord 클래스입니다.

나는하지 않았다 곧장 실제 언어 (실제 언어 생성)에서 중고 언어 지향 프로그래밍이지만 더 나은 도메인 중심 객체에 대해 생각하고 설계하는 것이 유용합니다.

어떤 의미에서, 어느 LISP 또는 계획의 실제 개발은 응용 프로그램의 "언어"를 개발하고 있으며 코드를 따라 추상적 인 트리를 개발하고 있기 때문에 "언어 지향"으로 간주 될 수 있습니다. 오이 내가 들었던 또 다른 실제 예입니다.

실제 개발 에서이 접근법 (및 도메인 중심 접근 방식)에는 몇 가지 문제가 있습니다. 내가 이전에 처리 한 주요 문제 중 하나는 도메인에서 의미가있는 논리와 소프트웨어에서 의미가있는 논리 사이의 불일치입니다. 도메인 (비즈니스) 논리는 극도로 복잡하고 무의미 할 수 있으며 도메인 모델이 분해됩니다.

도메인 별 언어의 쉬운 예 여기,, SQL입니다. 또한 : UNIX 쉘 스크립트.

물론, 당신이 많은 기본 OP를하고 있고 기본 언어와 많은 겹치는 경우, 아마도 과잉가일 일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top