미니멀리스트 개발 방식을 따르는 프로그래밍 언어가 있습니까?


26

언어가 상용 소프트웨어와 동일한 것으로 간주 될 때 새로운 릴리스를 정당화하기 위해 항상 새로운 기능을 추가해야 할 필요성이 있습니다.

버전 1.0이 최종 버전 인 언어가 있습니까? 물론 버그 수정은 이것에서 제외되지만 기능 세트는 항상 동일하게 유지됩니까?

이런 식으로 언어의 모든 기능이 잘 어울리 며 이전 버전과의 호환성으로 인해 더 이상 사용되지 않는 기능이 사용 된 후에는 고정 된 것처럼 보이지 않습니다.

나는 몇몇 학문적 언어가 이러하다고 가정합니까? 그러나이 아이디어를 따르는 상업적으로 성공적인 언어가 있습니까? 함께 제공되는 라이브러리도 새로운 기능을 자유롭게 사용할 수 있지만 언어는 항상 일정합니다.

내가 줄 수있는 한 가지 예는 내가 가장 좋아하는 언어 중 하나 인 C #인데, 자주 사용하는 언어로, 릴리스마다 점점 더 많은 기능이 추가되고 있습니다. 이러한 이점을 활용하려면 실제 작업을 수행하고 사소한 개념을 선택하고보다 복잡한 문제를 쉽게 해결하기 위해 직접 결합하는 대신 이러한 작업을 배우는 데 상당한 시간을 소비해야합니다.

그래서 나는 모든 것이 일관되고 의미가 있으며 가능한 한 직교하는 미니멀리스트 접근법을 찾고 있다고 생각합니다.


7
대부분의 개발자 작업 분야는 효과적인 방법으로 문제를 해결하는 것입니다. 효과를 위해서는 끊임없이 새로운 것을 배우십시오. 새로운 언어 기능, 새로운 프레임 워크, 새로운 도구가보다 효과적으로 개발되었습니다. 그것들을 배우면 실제로 일에 집중하게됩니다.
Arseni Mourzenko

4
프로그램을하는 모든 사람이 반드시 풀 타임 프로그래머는 아닙니다. 다른 많은 직업을위한 또 다른 도구 일뿐입니다.
Joan Venge

4
그런 다음, 아무도 당신에게 아무것도 배우도록 강요하지 않습니다. C # 1.0이 요구 사항을 해결하면 필요없는 것을 배우는 데 시간을 낭비하지 마십시오.
Arseni Mourzenko

11
나는 문제가 합법적이라고 생각한다. 왜 우리는 KISS와 YAGNI 원칙을 소프트웨어 아티팩트에는 적용해야하지만 프로그래밍 언어에는 적용하지 않아야 하는가? 언어에 충분한 핵심 기능이있는 경우 주로 마케팅 (다른 언어와의 경쟁으로 인해 회사가 고객을 유지하기위한 기능으로 언어를 작성해야 함)으로 인해 추가 개발 (IMHO)이 발생합니다.
조르지오

2
@MainMa : "효과는 지속적으로 새로운 것을 배우는 것을 요구합니다.": 너무 많은 기능이 포함 된 복잡한 프로그래밍 언어는 효율성을 높이는 대신 효과를 떨어 뜨릴 수 있습니다. 예를 들어 팀에서 다른 언어 하위 집합을 사용하여 개발자가 코드 검토, 버그 수정 및 유지 관리 효율성을 떨어 뜨릴 수 있습니다.
Giorgio

답변:


32

리스프, 스몰 토크. 우연히도, 그것들은 전체에서 가장 좋은 언어입니다.

리스프와 스몰 토크는 모두 강력한 통일 은유를 바탕으로 구축 된 언어입니다. Lisp의 은유는 "모든 것이 목록입니다.이 목록은 데이터와 코드를 모두 함수로 나타냅니다". 스몰 토크의 은유는 "모든 것이 객체이다. 행동을 불러오는 유일한 방법은 메시지를 객체에 전달하는 것"이다. 이러한 은유는 언어가 안정적이고, 최소이며, 강력 할 수 있도록합니다. 나머지는 도서관에 있습니다.

최소가 아닌 모든 언어에서 "제어 구조"라고하는 것은 여기에 라이브러리의 일부입니다 (예 : condlisp의 함수; ifTrue:/ ifFalse:Smalltalk의 메시지 패밀리는 모두 조건부, 다른 언어에 if키워드 가있는 경우).

Lisp / Smalltalk는 패러다임의 거의 최소한의 실시 예일 뿐이며 그 외에는 아무것도 없다 (Lisp : 기능적 프로그래밍; Smalltalk : 객체 지향 프로그래밍).


4
좋은 Lisp 구현은 C와 경쟁 할 수 있고, 좋은 Smalltalk 구현은 C ++와 경쟁 할 수 있습니다. 지구상에서 가장 빠른 VM 인 Oracle의 HotSopt JVM 스몰 토크 VM이며 최적화를 위해 정적 유형 정보를 사용하지 않습니다.
Jörg W Mittag


9
이 답변은 너무 작아 건설적입니다. 세부 사항이나 근거가 부족합니다.
Jimmy Hoffa

2
-1 리스프? LISP ? 진심이야? 1970 년대의 LISP 전쟁 후, 반복 된 시도는 LISP Unity, 그리고 마지막으로 Common Lisp? 아니요. LISP조차도 1.0에서 "완료"하지 않았습니다.
로스 패터슨

1
나는 당신이 매우 중요한 아이디어를 지적했다고 생각합니다. 언어는 하나의 (또는 몇 개의) 강력하고 통일 된 은유를 중심으로 만들어야한다는 것입니다. 즉, 프로그래밍 언어는 생각을 정리할 수있는 방법을 제공해야합니다. 일부 언어의 복잡성은 부분적으로 그러한 은유가 없기 때문이라고 생각합니다. 이러한 언어는 기본 통일 견해가 없기 때문에 새로운 기능을 통합하여 계속 성장하고 있습니다.
조르지오

6

조판 시스템 인 TeX 는 버전 3부터 매우 안정적입니다.

버전 3부터 TeX는 고유 한 버전 번호 시스템을 사용했으며, 소수점 끝 부분에 추가 숫자를 추가하여 업데이트가 표시되어 버전 번호가 π에 거의 도달하도록했습니다. 이것은 TeX가 현재 매우 안정적이며 사소한 업데이트 만 예상된다는 사실을 반영한 것입니다. TeX의 현재 버전은 3.1415926입니다. 디자인은 버전 3.0 이후에 정지되었으며 새로운 기능이나 기본 변경 사항이 추가되지 않으므로 모든 최신 버전에는 버그 수정 만 포함됩니다. 도널드 크 누스 (Donald Knuth) 자신도 TeX가 개선 될 수있는 몇 가지 영역을 제안했지만, 현재와 미래에 동일한 출력을 생성하는 변경되지 않은 시스템을 갖는 것이 새로운 기능을 도입하는 것보다 더 중요하다고 굳게 믿고있다. 이러한 이유로 그는 "

나는 그것이 "모든 것이 일관되고, 합리적이고, 가능한 직교하는 미니멀리스트 접근법을 찾고 있다고 생각한다"고 주장하지는 않을 것이다. 성명서, 그러나 그것은 당신의 다른 기준의 대부분을 충족시킵니다.


6

C와 포트란은 떠오르는 언어입니다. 그것들은 매우 안정적이며 그들의 구문은 마음에 쉽게 포함됩니다. 잘못된 코드를 직접 작성하는 것 외에 이러한 언어를 사용할 때 예상되는 것은 거의 없습니다. 그러나 빠른 응용 프로그램 개발을 위해 훌륭한 언어로 사용하지는 않을 것입니다.

언어에 약간의 시간을 투자하면 표현력을 유지하면서 작업이 훨씬 쉬워지고 코드가 덜 복잡 해지는 기능을 갖춘 언어의 빠른 발전을 선호합니다.


1
C의 최소한의 디자인에 동의합니다. 몇 년 동안 언어가 업데이트 되었어도 언어의 기본 디자인 및 프로그래밍 모델을 여전히 인식 할 수 있습니다 (다른 언어는 5-10 년마다 혁명을 겪습니다). 물론 C는 특정 응용 프로그램 도메인 (데스크톱 응용 프로그램, 웹 응용 프로그램 등)의 다른 언어로 대체 되었기 때문에 예전의 범용 언어가 아닙니다.
Giorgio

@Giorgio : 전부는 아닙니다. 최소한 내가 언급 한 것과 같은 것은 아닙니다. Squeak이 가져온 스몰 토크 구문 (중괄호 계산 배열)을 제외하고 스몰 토크 구문은 처음부터 변경되지 않았습니다. 라이브러리는 핵심 ( BehaviorCollection계층) 에서도 매우 안정적 입니다. C는 C89, C99 및 그 밖의 모든 것에서 훨씬 덜 안정적 인 것으로 보입니다.
herby

1
@herby : 스몰 토크와 같은 다른 언어는 C보다 안정적 일 것입니다. 그러나 C의 기본 프로그래밍 모델은 20 년 전과 동일합니다. 다른 언어들도 큰 변화를 겪었습니다. 다시 말하지만 C가 가장 안정적인 언어라고 주장하지는 않지만 IMO는 다른 많은 주류 언어보다 훨씬 안정적입니다.
조르지오

6

다른 사람들은 이미 Lisp를 말 했으므로 Forth를 불러야 합니다. 구현하기가 매우 쉽고 언어 규칙은 간단합니다.

"단어"사전이있는 스택 기반 언어입니다. 일부 상속 기능을 사용하여 언어를 쉽게 확장 할 수 있습니다.

거북이 그래픽의 아주 간결한 예 :

\ 8.8 fixed point sine table lookup
-2 var n F9F2 , E9DD , CEBD , AA95 , 7F67 , 4E34 , 1A c,
: s abs 3C mod dup 1D > if 3C swap - then dup E > if
  -1 1E rot - else 1 swap then n + c@ 1+ * ;

0 var x 0 var y 0 var a
0 var q 0 var w 
: c 9380 C80 0 fill ; \ clear screen
: k >r 50 + 8 << r> ! ;
: m dup q @ * x +! w @ * y +! ; \ move n-pixels (without drawing)
: g y k x k ; \ go to x,y coord
: h dup a ! dup s w ! 2D + s q ! ; \ heading
: f >r q @ x @ y @ w @ r 0 do >r r + >r over + \ forward n-pixels
  dup 8 >> r 8 >> plot r> r> loop o y ! x ! o r> o ;
: e key 0 vmode cls ; \ end
: b 1 vmode 1 pen c 0 0 g 0 h ; \ begin
: t a @ + h ; \ turn n-degrees

그런 다음 실행하면 다음을 : squiral -50 50 g 20 0 do 100 f 21 t loop ;얻을 수 있습니다.

나선

이 Microsoft 직원의 블로그 에 대한 크레딧 .


1
이 문제는 어떻게 다시 제기 되었습니까? 넷째는 좋은 후보 일지 모르지만 주어진 예제는 실행 가능한 라인 노이즈보다 훨씬 좋지 않습니다. 왜 PLT의 간결함에 대한 집착이 전문가가 실제로 필요한지에 반하는 이유의 주요 예입니다.
Telastyn

4
@Telastyn 그의 질문이 아니 었습니다.
Austin Henley

4

Lisp가 언급되었지만 내가 아는 가장 최소한의 언어는 scheme 입니다. 나는 대학 과정에서 그것을 이해하는 데 어려움을 겪었습니다. 그러나 그것은 프로그래밍에 대한 나의 생각을 바꾸었고 매우 적습니다. 전체 구문은 최소한 괄호 ()와 공백입니다.

언어에서 유일하게 변경된 것은 +, define(및 다른 것)과 같은 프리미티브 를 내장 으로 변환하기로 한 결정이었습니다 . 시작시 사용 가능하지만 런타임 중에 다시 정의 할 수 있음을 의미합니다.


2

처음에는 미니멀 한 디자인의 Tcl

http://www.tcl.tk/about/features.html 페이지 에 대한 기능 중 하나는 배우기가 매우 쉽고 캐주얼 프로그래머 또는 비 프로그래머가 사용할 수 있다는 것입니다.


3
이것은 나에게 정확한 것처럼 들리지만 지원 정보 나 세부 정보가없는 한 줄 답변은 품질이 너무 낮아서 누구에게도 도움이되지 않습니다. 좋은 세부 정보를 추가하십시오 (요약이없는 링크뿐만 아니라). 그리고 나에게서 투표를받을 것입니다.
Jimmy Hoffa

알았어, 질문이 문을 닫아서 할 수있는 일이 얼마나 많은 노력인지 몰라
Egryan

1
운이 좋으면 투표에서 다시 열립니다. 좋은 질문입니다. 커뮤니티에서 곧 다시 열지 않으면 메타에 게시하여 다시 열 수 있습니다.
Jimmy Hoffa

동의하고 일을
마치면

"TCL 언어에 대한 사례 연구", "Tcl : 포함 가능한 명령 언어"및 tcl.tk/about/history.html 에 대해 Google을 검색 하면 몇 가지 핵심 사항이 있습니다. 그러나 나는 그들이 OP의 욕망을 뒷받침 할 지 확신하지 못한다. TCL이 원래 1.0에서 확장 된 것으로 보인다 ( wiki.tcl.tk/1721 참조 )

2

의 자신의 처음의 외부에 있기 때문에 상대적으로 변하지 남아있는 몇 가지 언어가 있습니다 밀교 원하는 무엇 될 가능성이 언어 오프 한 (I은 의미있는 뭔가 작성하려고하기 싫어 비 펀지를 그것도 1.0 원래부터 수정되었습니다 불구하고 ( 해제)).

새로운 것을 배울 필요가없는 욕구를 가장 잘 채우는 언어는 다른 프로그램 간의 '접착제'를 전문으로하는 언어입니다. 같은 언어 JCL , 배쉬, 등이있다. 간단한 스크립트 언어 또한이 빠질 수 - AWK는 지도자 중 하나 인.

일단이 영역을 벗어나면 개발이 이루어집니다. 언어 또는 프레임 워크입니다. 어떤 상황에서는 빠르게 개정되는 일부 프레임 워크를 얻지 않고 언어를 코딩하기가 '어려워'집니다.

많은 언어가 어느 정도 이전 버전과 호환됩니다. 아마도 권장하지는 않지만 오늘날 Java 1.4를 작성할 수 있습니다. 사람들이 작성하는 프레임 워크는 언어보다 빠르게 변경됩니다. 20 년 또는 40 년 동안 바뀌지 않은 언어 사양에 대해서는 여전히 f77 및 f90 컴파일러를 찾을 수 있습니다. C, Objective C, C ++는 여전히 언어의 이전 사양으로 코딩 될 수 있습니다. 새로운 사양이 출시되었거나 새로운 프레임 워크가 있기 때문에 코드를 계속 업데이트 할 필요가 없습니다.

언어 자체는 자신이 원하는 것을 할 수있을만큼 강력하기 때문에 일부 언어는 역사가 오래되지 않습니다. Lisp가이 분야의 주요 후보입니다. Forth는 또한 "많은 변화가 없었습니다"영역에 속합니다.

보다 전통적인 스크립팅 언어를 살펴보면 TCL, Perl 및 Python을 살펴보십시오. 현재 'fad'영역에있는 어떤 이유나 다른 이유로 인기가 급증하는 것을 피하십시오 (ruby and javascript, I 'm looking at you). TCL은 수년에 걸쳐 변경 의 목표 중 하나는 디자인의 일관성을 유지하는 것입니다 불구하고. 현대의 Perl과 Python은 디자인의 일관성이 있지만 새로운 기능은 사용 하지 않아도 될 수 있습니다.


2

저는 파이썬이 디자인 목표 중 하나로 미니멀리즘을 가진 언어에 대한 합리적인 후보라고 생각합니다. 상대적으로 적은 수의 핵심 개념을 기반으로하며 버전 3은 무엇보다도 일부 기능 을 제거 하여 언어를 단순화 하려고 시도했습니다 .

(이것은 버전 1과 동일한 기능 세트와 동일하지는 않지만 언어 작성자가 원할 때마다 버전 1을 호출 할 수 있기 때문에 언어를 평가하는 상당히 임의의 방법이라고 생각합니다.)


2012 년 12 월 답변 날짜는 무료 패스를 제공합니다. 그 이후로 우리는 Python 3으로 알려진 괴물이 있기 때문에 C ++이 부스러기 더미를 추가하고 실제로 단순성을 제거하려는 C ++과 경쟁합니다. 이제는 컴퓨팅에서 가장 외래가 많은 애드온이 사용되는 언어 중 하나입니다.
토마스 브라운

-1

나는 "미니멀리스트"디자인 접근법이 Tcl에 의해 예시 될 것이라고 생각한다. 예를 들어, {return -code n} 값과 함께 {catch} 명령을 사용하여 상상력이 상상할 수있는 제어 구조를 구현할 수 있습니다. Perl은 (공식적으로) {switch}를 얻기 위해 10 년간 기다려야했습니다. 이제까지 필요했습니다). 또한 Dodekalogue http://wiki.tcl.tk/10259 는 Tcl의 문법을 완벽하게 다루고 있습니다. 나머지 프로그래밍 패러다임은이 문법으로 표현할 수 있습니다.


이것은 단지 2 년 전에 게시 된 답변 에서 언급되고 설명 된 내용을 반복합니다
gnat

원래 게시물을 참조하면 직교성 = 역사 (C 언어 계열)와 최근의 언어 간 동화 만 말할 수 있다고 생각합니다. OS 언어 전체에서 MVC 웹 프레임 워크, 코 루틴 및 일반화에 대한 모든 언어 접근 방식을 보았습니다. 이러한 추세를 벗어나면 C11과 곧 출시 될 Java 람다 (OS "스크립트"랭귀지에서 개발이 반영됨)에 클로저가 추가 된 것을 알 수 있습니다.
user132043
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.