Ruby로 C 코드 작성과 언어 프로그래밍 *


10

당신이가는 요리 코드를해야 그 코드 완전한 상태 코드를 반대로 언어 그것을. 그 말은

귀하의 언어가 자동으로 지원하는 개념으로 만 프로그래밍 사고를 제한하지 마십시오. 최고의 프로그래머는 자신이하고 싶은 일을 생각한 다음 자신의 처분에 따라 프로그래밍 도구를 사용하여 목표를 달성하는 방법을 평가합니다. (34.4 장)

이것이 언어의 특정 강점과 약점에 관계없이 모든 언어에서 하나의 프로그래밍 스타일을 사용하도록 유도하지 않습니까?

또는 질문에보다 대답하기 쉬운 형식으로 넣으려면

언어의 특정 내용으로 가능한 한 자신의 문제를 깔끔하게 인코딩하려고 시도하거나 기본적으로 존재하지 않는 어색한 구성을 구현 해야하는 경우에도 가장 우아한 솔루션을 전체적으로 검색해야한다고 제안 하시겠습니까? 자신의 언어로?


5
+1 좋은 질문입니다. 이 시점에서 저는 십여 가지 언어로 펄로 글을 쓸 수 있습니다.
Dan Ray

@ Dan Ray-이상하다! 나는 항상 C를 Perl로 씁니다.
James Anderson

답변:


7

더 나은 접근 방법이 있습니다 : 당신의 한심한 고정 프로그래밍 언어를 잊어 버리십시오. 관련 문제 도메인의 용어에서 파생 된 방금 개발 한 언어로 문제를 인코딩하고 가능한 한 자연스럽게 인코딩 한 다음이 새로운 프로그래밍 언어를 구현하거나 코드를 기존 언어.

이 방법을 언어 지향 프로그래밍 이라고 합니다 . 도메인 특정 언어를 효율적 으로 구현하는 많은 기술이 있으며 이는 Ruby 커뮤니티에게 특히 인기있는 주제입니다.


1
Haskell 커뮤니티는 또한 도메인 특정 언어를 수용하며 Haskell 프로그래밍 언어는 특히 해당 언어를 구현하는 데 적합합니다.
tdammers

Lua 또는 Tkl과 같은 임베디드 언어를 기반으로 한 맞춤형 스크립팅 시스템을 구현하는 것이 DSL 작성으로 간주됩니까? 그렇다면 Lua의 결함을 어떻게 처리합니까?
bastibe

@Paperflyer, 어떤 경우에는 Lua와 같은 언어 (특히 Metalua 인 경우) 위에 언어를 구현하는 것이 합리적이지만 대부분의 일반적인 DSL에 적합한 컴파일러를 작성하는 것이 더 쉽습니다.
SK-logic

@tdammers, 예, Haskell과 Scala는 DSL에 관한 것입니다. 그러나 저는 포스의 어두운면에서 왔습니다. 제가 선호하는 접근법은 메타 프로그래밍입니다. 나는 임시 통역사가 거의 항상 컴파일러보다 열등하다고 생각합니다.
SK-logic

2
고차 함수 위에 구현 된 DSL 인 @tdammers는 사실상 임시 통역사입니다. Lisp와 같이 Haskell 구문을 확장 할 수 없습니다. 템플릿 Haskell에서도 마찬가지입니다. DSL을 구현하는 방법은 완전히 다릅니다 (제한적으로 제한적입니다). 많은 경우에 괜찮지 만, 실제로 복잡한 것은 완전히 읽을 수없는 구현으로 이어지지 만, 다단계 메타 프로그래밍은 DSL의 규모와 규모에 관계없이 사소한 것입니다.
SK-logic

2

나는 정답을 믿으며이 책의 의도는 다음과 같습니다.

언어의 특성에 따라 문제를 최대한 깔끔하게 인코딩해야합니다

언어로 프로그래밍함으로써, 나는 그것이 일반적인 스타일의 언어 이외의 기술을 사용하는 것이 항상 도움이 될 것이라고 가정했다 . 이것은 모든 언어에서 한 스타일로 작성하는 것과의 주요 차이점입니다.

예를 들어, Haskell을 배우면 고차 함수를 사용하는 기술이 크게 향상되었습니다. 이제 C #으로 프로그래밍 할 때 for 루프에서 쓰는 것보다 코드를 깨끗하게 만들 수 있으므로 다양한 IEnumerable방법을 Select더 자주 사용합니다. 또한 Func<int, int>내 haskell 경험으로 인해 전달 및 사용 함수 (예 :)를 더 자주 사용하는 경향이 있습니다. 이로 인해 상속 사용이 줄었고 대부분의 경우 결과는 더 간단한 코드입니다.

그러나 c #에서는 모나드 또는 대수 데이터 형식과 같은 개념을 사용하지 않습니다. 이것은 C #에서 명확하게 표현할 수 없으며 많은 모호함과 교환하면 거의 이점이 없기 때문입니다.

그래서 저는 언어 도구를 사용하여 내가 가장 효과적으로 사용하는 기술을 사용합니다. 나는 그것이 언어로 프로그래밍되고 있다고 생각합니다.


0

언어의 특정 내용으로 가능한 한 자신의 문제를 깔끔하게 인코딩하려고 시도하거나 기본적으로 존재하지 않는 어색한 구성을 구현 해야하는 경우에도 가장 우아한 솔루션을 전체적으로 검색해야한다고 제안 하시겠습니까? 자신의 언어로?

요점은 좋은 프로그래머가 없다는 것입니다 언어를. 이 책에서 인용 한 내용은 "프로그래밍 툴을 마음대로 사용할 수있다"는 것이다. 즉, 펄과 자바를 알고 있다면 빠른 문자열 조작을 위해 펄을 사용해야한다. 프로그래밍 언어는 우리를 제한하는 것이 아니라 문제를 해결하는 데 사용하는 도구입니다. 이것이 Code Complete가 얻는 것입니다. 프로그래밍 언어 / 환경 상자에 코드를 작성하지 말고 최상의 솔루션을 자신, 문제 및 솔루션에 가장 적합한 프로그래밍 언어 / 환경에 넣으십시오.

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