언어 지향 프로그래밍이 실용적입니까?


12

언어 지향 프로그래밍에 대한 이 기사 를 읽었습니다 . 그는 프로그래밍에 대한 현대 절차 / OOP 접근 방식의 약점을 지적하고이를 해결하는 새로운 프로그래밍 패러다임을 제안합니다.

나는 작고 느슨하게 결합 된 프로그램 파트에 모두 적합하다. 몇 가지 큰 것보다 많은 작은 것을 배우는 것이 비트와 조각만을 사용하는 것이 훨씬 낫다.

기사를 읽으면서 저자가 두 가지 중 하나를 홍보하고 있다는 인상을 받았습니다.

  • 쉽게 생성 할 수있는 수많은 스크립팅 언어
  • 프로그래머의 요구를 충족시키기 위해 자체적으로 다시 작성할 수있는 쉽게 확장 가능한 단일 언어

그가 두 번째를 제안한다면, 나는 "이미 끝났습니다!"라고 대답 할 것입니다. Lisp를 예로 들어 보겠습니다. 폴 그래엄 (Paul Graham)이 제안한 바와 같이, 언어는 계속해서이를 향해 나아가고있는 것 같습니다 .

첫 번째에 관한 한, 나는 그것들을 모두 묶는 기본 언어가 있다면 이것이 좋은 생각이라고 생각합니다. 그것은 언어 사이의 의사 소통 인 약점으로 보입니다. 프로세스 간 통신을 상기시키는 절차 적 개념 또는 메시지 전달 인 호출을 사용 하시겠습니까? 소규모의 특정 언어를 동시에 사용하는 것이 쉬운 경우 소규모 도메인 관련 언어로 작업 할 수있는 기회를 환영합니다. 이 접근법 (LOP)이 실용적입니까?


확실히 큰 마음을 불어 넣을 수 있습니다.

2
이 패러다임이 어떤 문제를 해결하는지는 분명하지 않습니다. 그런데 LISP는 성공적인 언어의 예가 아닙니다.
mouviciel

7
@mouviciel 그것은 "성공"의 의미가 무엇인지에 따라 크게 좌우됩니다. 대부분의 프로그래머가 사용합니까? 아닙니다. 오랫동안 사용되어 왔습니까? 그렇습니다-50 년 세고. 대부분의 현대 언어는 유용한 기능을 많이 훔쳤습니까? 예. (캔 언어가 더욱 리스프 언어에서 훔쳐 네?!)
프랭크 Shearar

2
널리 사용되는 언어와 유용한 언어에는 차이가 있습니다. 새로운 영역을 탐색하는 언어는 일반적으로 사용되지 않지만 장기적으로 모든 언어에 영향을 줄 수 있습니다. 반면 Java는 테이블에 새로운 것을 가져 오지 않으므로 쓸모가 없습니다 (모든 계정에서 성공적인 언어 임에도 불구하고).
Matthieu M.

1
Cosp를 마스터하는 것보다 Lisp를 마스터하는 것이 더 유용 할 것입니다.
glenatron의

답변:


8

나는 DSL을 오랫동안 옹호 해 왔지만 좋은 아이디어가 밴드 왜건이 될 때 어떤 일이 일어날 지 걱정한다. 좋은 아이디어를 광고하는 제품이 만들어집니다. 좋은 아이디어를 얻으려면 하나만 있으면됩니다. 의미가 무엇인지에 대해 신중하게 생각할 필요없이 그룹 내에서 참여할 수 있습니다.

언어 란 무엇입니까? 의미를 전달할 수있는 어휘와 구문입니다. 변수를 선언하고 함수를 작성하고 클래스를 정의 할 때마다 기존 언어에 명사와 동사를 추가하여 새 언어를 작성합니다. 이제 전에는 할 수 없었던 것을 말할 수 있습니다.

도메인 특정 언어를 만드는 것은 의사 소통되고있는 정신 개념을 자연스럽게 표현하는 정도라고 생각하며, 그에 대한 간단한 척도가 있다고 생각합니다. 기본적으로, 프로그램에 포함되거나 포함되지 않을 수있는 간단한 독립형 독립형 요구 사항 X가있는 경우, 올바른 구현에는 코드 삽입, 삭제 및 교체 Y가 필요합니다. Y 전후 간단한 차이가 표시 될 수 있습니다. Y. 그러한 변화의 수 N은 언어가 도메인에 따라 어떻게되는지를 측정 한 것입니다. 일반적인 요구 사항의 경우 N이 작을수록 좋습니다.

반드시 멋진 구문, 제어 구조, 메시지 전달 또는 무엇에 의존하지는 않습니다. 그것이 의존하는 것은 요구 사항을 얼마나 간결하게 구현하는지입니다. 많은 도구가이를 주장하지만 실제로는 주장이 아닙니다. 진짜 여야 합니다 .

때때로 특이한 기술 필요합니다. 여기 제가 가장 좋아하는 예가 있습니다. 그렇다면 프로그래머가 이해하기 위해 노력해야 할 점을 보여줍니다. 따라서 도메인 특정 성 (및 유지 관리 성)은 가독성 과 전혀 다릅니다 .

그래서 저는 두 번째 접근법에 동의합니다. 좋은 언어는 필요한 언어를 쉽게 만들 수있는 언어입니다. (내가 Lisp에 대해 좋아했던 것이지만) 프로그래머 가 작업하는 도메인과 일치하는 언어를 작성 하는 방법알아야 하고 그러한 언어의 학습 곡선을 기꺼이 높이기 위해 노력해야하는 것이 더욱 중요하다 .

나는 그런 일이 실제로 보이지 않습니다. 대신 그들은 "프로그램 = 알고리즘 + 데이터 구조"에 빠지거나 "명사가 클래스가되고 동사가 방법이된다"턴-크랭크 사고 방식입니다. 그들은 생각 영역을 취하고 최대한의 결정을 내릴 수 있도록 언어를 다루는 방법으로 일하고 있지 않습니다.


"왜 뾰족한 머리의 상사는 어떤 언어로 작성되어야하는지 알고있다. [...] Java." 또 다른 문제는 Joel이 "아키텍처 우주 비행사"라는 용어입니다. 또한 DSL이 서로 다른 광고 infitium (sp?) 에 쌓이는 것을 볼 수 있습니다 . 프로그래머-> 소프트웨어 엔지니어-> 컴퓨터 과학자에게 달려 있습니다.
Michael K

이해하려는 노력이 필요하지 않으면 실제로 가치가 없습니다. :)
Michael K

4

그것은 꽤 루비 접근법입니다.

  • 핵심 언어를 단순하게 유지하고 보석을 통해 확장
  • 원숭이 패치를 통해 특정 도메인에 대해 Ruby의 방언을 만드십시오. ig Ruby on Rails.

이것이 더 좋은지 모르겠지만 매우 실용적이라고 생각합니다.


7
RoR은 Ruby의 방언이 아닙니다.
back2dos

4
@ back2dos : 메타 프로그래밍을 생각하고있었습니다. 물론 RoR은 다른 프로그래밍 언어 가 아닙니다 . 방언의 의미는 Rails 아래의 모든 것이 Ruby 인 경우에도 개발자의 관점에서 Ruby를보다 높은 수준의 추상화로 사용하고 있다는 것입니다. 도메인. 방언. 그는 뷰, 모델, 컨트롤러를 사용하며 다른 언어와 유사한 구문, 방언을 사용하여 프로그래밍합니다. 이것이 루비만큼 강력한 스크립트 언어의 아름다움입니다.
Nerian

차이를 실제로 보는 것이 중요하다고 생각합니다. AspectJ는 Java의 방언이며 AspectR은 Ruby 라이브러리 일뿐입니다. 차이점은 실제로 언어입니다. 루비는 유연성과 표현력을 제공하도록 설계되었지만 Java는 그렇지 않았습니다. 둘 다 범용 언어로 간주 될 수 있지만 차이점은 Ruby는 일반적으로 일반적인 DSL이 필요하지 않을 정도로 표현력이 충분하지만 Java는 그렇지 않습니다. 예를 들어 일반적으로 뷰, 모델 및 컨트롤러를 사용하더라도 마찬가지입니다.
back2dos 2019

1

LOP 방식은 매우 실용적입니다. 반드시 "스크립트 언어"를 구현할 필요는 없습니다.이 방법론은 eDSL에도 적용 할 수 있으며 일반적으로 효율적으로 컴파일됩니다. 말 그대로 모든 개발 작업에서이 방법을 사용하고 있습니다.


내 무지를 용서하십시오-eDSL은 다른 언어의 전처리 기가 될 수 있습니다.
Michael K

@Michael, 예. eDSL을 이런 식으로 구현할 수 있습니다. 예를 들어 CamlP4를 참조하십시오. 그러나 eDSL은 언어 자체 기능 (예 : Lisp 매크로, C ++ 템플릿 등)을 기반으로하는 경우가 많습니다.
SK-logic

1

우리는 앞으로 도메인 관련 언어에 대해 더 많이 보게 될 것입니다. 지금 말하고있는 사람들에 의해 판단됩니다-나는 Martin Fowler가 Lambda The Ultimate 를 통해 그들에 대해 많은 흥미로운 기사를 이야기하는 것을 보았습니다 . 무엇보다도.

이것은 프로그래밍 언어 설계 및 프로그래밍 플랫폼과 관련하여 바람이 불고있는 방향이라는 것을 나에게 제안합니다. 어떤면에서 이미 루비의 장점 중 하나는 이미 DSL을 쉽게 만들 수 있지만 실제로 우리가 이미 사용하고있는 응용 프로그램과 프로그래밍 라이브러리에 많은 것들이 있다는 것입니다.


Barrelfish 멀티 커널 용 드라이버 개발에 FoF를 추가 할 수 있습니다. DSL을 개발하는 언어 :)
Matthieu M.

0

솔로 프로그래밍 할 때마다 LOP를 사용하고 있습니다. 일부 프로젝트에서는 일정을 충족시킬 다른 방법이 없다는 것을 알았습니다. 간단한 우화로 LOP를 전동 공구에 사용하는 것과 동일 할 수 있습니다. 워크샵에서 혼자 일하는 경우 수동으로 작업을 수행하고 마감일을 맞출 수 없습니다. 다른 사람이 있다면 효율성과 안전을 위해 전동 공구를 사용하는 것이 필수적입니다.
팀 모드에서 LOP는 바벨탑 재해를 피하기 위해 조직적인 준비가 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.