메타 프로그래밍을위한 Python 대 Ruby [닫기]


90

저는 현재 주로 D 프로그래머이며 D 와 같이 정적으로 컴파일 된 언어로는 수행 할 수없는 메타 프로그래밍 해킹을 지원하는 다른 언어를 내 도구 상자에 추가하려고합니다.

나는 Lisp에 대해 조금 읽었고 Lisp가하는 멋진 것들을 허용하지만 Lisp의 이상한 구문 등이없는 언어를 찾고 싶습니다. 나는 언어 전쟁을 시작하고 싶지 않으며 Ruby와 Python 모두 장단점이 있다고 확신하므로 개인적으로 중요한 것이 무엇인지 나열하겠습니다. Ruby, Python 또는 다른 언어가 나에게 가장 적합한 지 알려주세요.

중대한:

  1. 좋은 메타 프로그래밍. 런타임에 클래스, 메서드, 함수 등을 생성하는 기능. 가급적이면 코드와 데이터 사이의 최소한의 구분, Lisp 스타일.
  2. 훌륭하고 깔끔하며 건전한 구문과 일관되고 직관적 인 의미 체계. 기본적으로 신중하고 사용하기 쉽고 현대적인 언어입니다.
  3. 다중 패러다임. 모든 프로젝트에 적합한 패러다임은 없으며 프로젝트 내의 모든 작은 하위 문제까지도 적합하지 않습니다.
  4. 프로그래밍에 대해 생각하는 방식에 실제로 영향을 미치는 흥미로운 언어입니다.

다소 중요 :

  1. 공연. 성능이 괜찮 으면 좋겠지 만 성능이 진짜 우선이라면 D를 대신 사용하겠습니다.
  2. 잘 기록 된.

중요하지 않음 :

  1. 커뮤니티 규모, 라이브러리 가용성 등. 이들 중 어느 것도 언어 자체의 특성이 아니며 모두 매우 빠르게 변경 될 수 있습니다.
  2. 직업 가용성. 나는 풀 타임 전문 프로그래머가 아닙니다. 나는 대학원생이고 프로그래밍은 내 연구와 밀접한 관련이 있습니다.
  3. 백만 명의 코드 원숭이를 염두에두고 작업 한 대규모 프로젝트로 주로 설계된 모든 기능.

1
+1 일반적으로 잘 묻는 질문입니다.
Triptych

슬프게도 높은 등급의 답변은 모두 기본적으로 "그것에 따라 다릅니다"라고 말하고 낮은 답변은 기본적으로 Python 대 Ruby 화염 전쟁입니다.
Dan Burton

Clojure를 고려해 보셨습니까?
Mark Thomas

대답은 Julia입니다 ! 당시에는 존재하지 않았습니다. bit.ly/julia_meta ... 기뻐하세요! Julia는 @dsimcha가 나열한 모든 중요 사항과 성능 및 기타 모든 사항이 Julia가 계속 성숙함 에 따라 사실이되고 있음을 다룹니다 .
SalchiPapa 2015

답변:


15

적어도 이데올로기 적 수준에서 파이썬과 루비 사이에는 큰 차이가 없습니다. 대부분의 경우, 그들은 같은 것의 다른 맛일뿐입니다. 따라서 어떤 것이 귀하의 프로그래밍 스타일과 더 일치하는지 확인하는 것이 좋습니다.


30
가장 확실히 거기 되지 같은 일이. 표면적으로는 비슷하지만 Ruby의 가장 강력한 기능을 사용하는 것은 Python이 일치하지 않는다는 것을 이해합니다. 예를 들어 Ruby로 DSL을 작성하는 대신 Python을 작성하거나 런타임에 함수, 메서드, 클래스 등을 작성해보십시오. Ruby에서는 훨씬 더 간단합니다.
FelipeC 2010

14
메타 프로그래밍을해야하는 것은 드문 일이 아닙니다. 가장 사소한 프로그램을 제외한 모든 프로그램은 일반적인 리팩토링 도구에 속하지 않지만 메타 프로그래밍에 의해 쉽게 제거 될 수있는 반복 패턴을 가지고 있습니다.
Wayne Conrad

10
Ruby와 Python은 디자인을 지배하는 아이디어에서도 크게 다릅니다. 파이썬 그들은 일을하는 하나의 명백한 방법을 원합니다. 일반적으로 언어는 Ruby만큼 표현 적이 지 않지만 일관성이 있습니다. Ruby는 여러 가지 방법이있는 Perl 방식에서 조금 더 나옵니다. 또한 Ruby는 몇 가지를 매우 쉽게 만들고 실제로 비공개 회원의 아이디어를 포함합니다. 반면에 파이썬은 기껏해야 할 일을 더 어렵게 만들기 때문에 더 명시 적이어야합니다 (클래스에 동작을 추가하거나 재정의하는 것과 같이).
Sean Copenhaver

5
두 가지 모두에서 단기 집중 과정을 수행해야하지만 쉬운 메타 프로그래밍을 위해서는 Ruby가 더 적합한 것으로 보입니다. 그래도 경험이 많지 않으니 소금과 함께 가져 가세요.
Sean Copenhaver

7
루비와 파이썬은 단지 그들이 "아름다운 코드를"설교는 사실에서 유사. 그들은 단지 (IMO 좋다) 그 아름다움의 일에 완전히 다른 견해를 가지고
가비 Purcaru

69

나는 Lisp에 대해 조금 읽었고 Lisp가하는 멋진 것들을 허용하지만 Lisp의 이상한 구문 등이없는 언어를 찾고 싶습니다.

우리 모두는 아닐까요.

코드와 데이터의 최소한의 차이, Lisp 스타일

안타깝게도 코드와 데이터 사이의 최소한의 차이와 "이상한"구문은 서로의 결과입니다.

읽기 쉬운 구문을 원한다면 Python이 있습니다. 그러나 코드는 일반적으로 사용되는 내장 데이터 구조로 표시 되지 않습니다 . 대부분의 언어가 그렇듯이 '중요'목록의 항목 # 1에서 실패합니다. 따라서 유용한 도움을 제공하기가 어렵습니다.

모든 것을 가질 수는 없습니다. 이 생각을 한 사람은 당신이 처음이 아닙니다. 당신의 이상적인 언어와 같은 것이 존재한다면 우리는 모두 그것을 사용하고있을 것입니다. 현실 세계는 당신의 이상에 미치지 못하기 때문에 위시리스트의 우선 순위를 다시 지정해야합니다. "중요"섹션은 당신에게 정말로 중요한 것이 무엇인지 식별하기 위해 다시 정렬 되어야합니다.


3
많은 언어가 Lispy가 아닌 구문으로 Lisp와 유사한 매크로를 구현한다는 것을 알게되었고 결국에는 매크로를 작성하는 것이 매우 어렵습니다. 코드가 표현되는 데이터 구조를 자연스럽게 알지 못하기 때문에 매크로 작성이 너무 어려워지기 때문입니다. 아무도하지 않습니다.
pupeno

11
사람들은 구문에 익숙하지 않기 때문에 Lisp를 읽기가 어렵습니다. Lisp는 C #보다 읽기가 훨씬 쉽다는 것을 알았습니다 (그러나 Python보다는 어렵습니다).
Jules

1
나는 그 요점에 크게 동의하지만 Ruby와 Lisp에 대한 나의 경험은 전자가 괄호 없이 얻는 것만 큼 메타 프로그래밍에 좋다는 것을 보여줍니다 . 가까이 다가오는 다른 대안은 TCL 및 JavaScript 일 수 있지만 다른 이유로 선호하지 않습니다.
inger

길고 긴 아기에는 딜란이라는 언어가있었습니다.
Friedrich

17

솔직히, 메타 프로그래밍 기능에 관한 한 Ruby와 Python은 일부 지지자들이 인정하는 것보다 훨씬 더 유사합니다. 두 언어에 대한이 리뷰는 꽤 좋은 비교 / 리뷰를 제공합니다.

따라서 몇 가지 기준에 따라 하나를 선택하십시오. Rails를 좋아하고 그 코드를 공부하고 싶을 수도 있습니다. 아마도 SciPy가 당신의 것입니다. 도서관, 커뮤니티 등의 생태계를 살펴보고 하나를 선택하십시오. 어느 쪽을 선택했는지에 따라 메타 프로그래밍의 열반을 잃지 않을 것입니다.


그 블로그 항목은 OP의 주요 포인트였던 메타 프로그래밍보다는 개인적인 선호도 (충분히 공평하지만 보는 사람의 눈에 아름다움이 있음)와 더 관련이있는 것 같습니다.
inger 2015-09-14

16

면책 조항 : 저는 두 언어 중 하나만 사용하지만, 둘 다에 최소한 작은 작업 프로그램 (Perl, bash 또는 GNU make를 사용하는 빠른 스크립트가 아닌)을 작성했습니다.

Ruby는 도메인 별 언어를 쉽게 만들 수 있도록 열심히 작동하기 때문에 "다중 패러다임"포인트 3에 정말 좋을 수 있습니다. 예를 들어, 온라인으로 브라우징하고 몇 비트의 Ruby on Rails 코드와 몇 가지 Rake 코드를 살펴보십시오. 둘 다 Ruby이고 유사점을 볼 수 있지만 일반적으로 동일한 언어로 생각하는 것과 같지 않습니다.

파이썬은 나에게 조금 더 예측 가능해 보이지만 (아마도 '깨끗한'및 '정상적인'포인트 2와 관련이 있음), 그것이 언어 자체 때문인지 아니면 일반적으로 다른 값을 가진 사람들이 사용하는지 여부는 실제로 알 수 없습니다. . 저는 파이썬에서 깊은 마법을 시도한 적이 없습니다. 나는 확실히 두 언어 모두 잘 생각하고 있다고 말할 것입니다.

둘 다 1과 4에서 좋은 점수를 얻었습니다. [편집 : 사실 1은 꽤 논쟁의 여지가 있습니다. 통역 언어에서 흔히 볼 수있는 "eval"이 있지만 개념적으로 순수하지는 않습니다. 클로저를 정의하고, 객체에 메소드를 할당하는 등의 작업을 할 수 있습니다. 이것이 원하는만큼 진행되는지 확실하지 않습니다.]

개인적으로 저는 루비가 더 재미 있다고 생각하지만 부분적으로는 멋진 일을하는 방법에 대해 산만하게 생각하는 것이 더 쉽기 때문입니다. 저는 실제로 파이썬을 더 많이 사용했습니다. 가끔은 시원함을 원치 않고 계속하고 싶기 때문에 취침 전에 완료됩니다 ...

둘 다 들어가기가 어렵지 않으므로 다음 사소한 작업을 하나에서 수행하고 그 다음 작업을 다른 작업에서 수행하기로 결정할 수 있습니다. 또는 도서관에서 각각에 대한 소개 책을 집어 들고 둘 다 훑어보고 무엇이 당신을 사로 잡는 지보십시오.


15

스몰 토크를 고려해 보셨습니까? 반사성 및 내성 기능과 이러한 기능을 활용하는 완전히 통합 된 개발 환경을 갖춘 매우 간단하고 명확하며 확장 가능한 구문을 제공합니다. 예를 들어 Squeak Smalltalk 에서 수행되는 작업 중 일부를 살펴보십시오 . Squeak을 사용하는 많은 연구자들은 Squeak 메일 링리스트에 , #squeak은 freenode에 있습니다. 따라서 복잡한 문제에 대해 매우 쉽게 도움을받을 수 있습니다.

현재 관련성에 대한 기타 지표 : iPhone을 포함하여 이름을 지정하려는 모든 플랫폼에서 실행됩니다 . Gilad Bracha는 그의 Newspeak 작업을 Squeak에 기반하고 있습니다. V8 팀은 스몰 토크 VM에서 이빨을 잘랐습니다 . Dan Ingalls와 Randal Schwartz는 최근 광야에서 수년을 보낸 후 Smalltalk 작업으로 돌아 왔습니다.

검색에 행운을 빕니다. 최종 결정을 알려주세요.


14

Lisp는 성능을 포함한 모든 기준을 충족하며 (이상한) 구문이없는 유일한 언어입니다. 엄청나게 정보가 좋지 않거나 잘못된 정보를 바탕으로이를 피하고 결과적으로 Emacs + SLIME + CL을 사용한 경험을 놓치면 큰 손해를 입게 될 것입니다.


4
또는 Clojure를 사용해 볼 수 있습니다.
pupeno

1
매우 동의합니다. Lisp의 힘을 원하신다면, 그냥 뛰어 드세요! 실제로 괄호에 익숙해지는 것은 매우 쉽습니다. 대부분의 사람들이 그렇게 생각하는 것만 큼 큰 문제는 아닙니다.
Dan Burton

11

4 개의 "중요한"포인트는 정확히 Ruby로 이어지고, 2 개의 "다소 중요한"포인트는 Python이 지배합니다. 그러면 그렇게 해.


11

루비를 설명하고 있습니다.

  • 좋은 메타 프로그래밍. 런타임에 클래스, 메서드, 함수 등을 생성하는 기능. 가급적이면 코드와 데이터 사이의 최소한의 구분, Lisp 스타일.

런타임에 기존 프리미티브 를 확장 하고 수정하는 것은 매우 쉽습니다 . 루비에서는 모든 것이 객체, 문자열, 정수, 심지어 함수입니다.

예를 들어 class_eval 을 사용하여 구문 설탕에 대한 단축키를 구성 할 수도 있습니다 .

  • 훌륭하고 깔끔하며 건전한 구문과 일관되고 직관적 인 의미 체계. 기본적으로 신중하고 사용하기 쉽고 현대적인 언어입니다.

Ruby 는 덜 놀라움원칙을 따르며, Ruby 코드와 다른 언어의 동등한 코드를 비교할 때 많은 사람들이 더 "아름답다"고 생각합니다.

  • 다중 패러다임. 모든 프로젝트에 적합한 패러다임은 없으며 프로젝트 내의 모든 작은 하위 문제까지도 적합하지 않습니다.

명령형, 객체 지향적, 기능적 및 반사적을 따를 수 있습니다.

  • 프로그래밍에 대해 생각하는 방식에 실제로 영향을 미치는 흥미로운 언어입니다.

그것은 매우 주관적이지만 제 관점에서 동시에 많은 패러다임을 사용할 수있는 능력은 매우 흥미로운 아이디어를 허용합니다.

나는 Python을 시도했지만 중요한 점에 맞지 않습니다.


11
-1 저는 Python을 사용하고 있으며 완벽하게 맞습니다. Python과 Ruby의 차이점은 다른 측면에 있습니다. 팬보이 같은 소음기입니다.
gorsky

6
말이 많지만 걷지 않습니다. Python에서 String 클래스와 같이 동적으로 메서드를 추가하는 예제를 제공 하시겠습니까?
FelipeC 2010

6
@john 그게 바로 내 요점입니다. 매우 복잡하고보기 흉합니다 ( String 클래스에서는 불가능하다는 것은 말할 것도 없습니다 ). Ruby의 OTOH는 매우 간단합니다. "self.class.send (: define_method, : method_name) {method_code}"
FelipeC

2
루비는 수 시도 정치인을 따라,하지만 난 그것을 언급하지 않았다 않습니다 . 예를 들어, lambda/ Proc.new엉망은 여기에서 "놀라운 행동"과 "매우 반 직관적"이라고 불 렸습니다. :-) Ruby와 같이 크고 복잡한 언어는 혼란스러운 영역을 가지고 있습니다.
Ken

2
@Token String은 메타 프로그래밍을위한 Ruby 의 monkey-patching 예제입니다 : coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/… . 서브 클래 싱은 할 수 없습니다. 그러나 간단한 두 인수 함수는 가능합니다.
P Shved

8

비교 코드 예제 같은 일을 (A에서 항목의 줄 바꿈 비어 있지 않은 설명과 함께 가입 myList다른 언어 (언어 역 알파벳 순서로 배열되어있다)리스트) :

루비 :

myList.collect { |f| f.description }.select { |d| d != "" }.join("\n")

또는

myList.map(&:description).reject(&:empty?).join("\n")

파이썬 :

descriptions = (f.description() for f in mylist)
"\n".join(filter(len, descriptions)) 

또는

"\n".join(f.description() for f in mylist if f.description())

Perl :

join "\n", grep { $_ } map { $_->description } @myList;

또는

join "\n", grep /./, map { $_->description } @myList;

자바 스크립트 :

myList.map(function(e) e.description())
      .filter(function(e) e).join("\n")

Io :

myList collect(description) select(!="") join("\n")

다음은 Io 가이드 입니다.


3
(format nil "~ {~ a ~ ^ ~ % ~}"(nil 제거 (mapcar # '설명 mylist)))
Rainer Joswig

좋지만 여기 메타 프로그래밍은 어디에 있습니까? 질문과 관련이있는 약간 기능적인 스타일 인 것 같습니다.
inger

6

루비는 "주류"라는 점에서 Lisp보다 낫습니다. (그것이 실제로 의미 하는 바가 무엇이든 , 현실적인 우려는 Lisp 프로그래밍에 대한 질문에 대한 답을 찾는 것이 얼마나 쉬운 지입니다.) 어쨌든 , 루비를 쉽게 습득 할 수 있습니다. 파이썬 (또는 그 문제에 대한 다른 언어)을 처음 배웠던 것과 같은 시간 동안, 곧 이전보다 훨씬 더 효율적으로 더 나은 코드를 작성하게되었습니다 . 하지만 그것은 한 사람의 의견 일뿐입니다. 소금 한 알과 함께 가져 가세요. 이 시점에서 저는 Python이나 Lisp보다 Ruby에 대해 더 많이 알고 있지만, 제가 전환하기 전에는 제가 한동안 Python 사람이라는 사실을 알아야합니다.

Lisp는 확실히 아주 멋지고 살펴볼 가치가 있습니다. 말씀 하셨듯이 커뮤니티 규모 등은 매우 빠르게 변할 수 있습니다. 즉, 규모 자체는 커뮤니티 의 품질 만큼 중요하지 않습니다 . 예를 들어, #ruby-lang채널은 여전히 ​​엄청나게 똑똑한 사람들로 가득 차 있습니다. Lisp는 정말 똑똑한 사람들을 끌어들이는 것 같습니다. 직접 경험이 많지 않기 때문에 파이썬 커뮤니티에 대해 많이 말할 수는 없지만 가끔 "너무 큰"것 같습니다. (저는 사람들이 IRC 채널에 대해 무례한 태도를 보였고 실제로 Python을 좋아하는 친구들로부터들은 말은 예외가 아니라 규칙 인 것 같습니다.)

어쨌든 유용 할 수있는 몇 가지 리소스는 다음과 같습니다.

1) 실용적인 프로그래머 Ruby Metaprogramming 시리즈 ( http://www.pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming)- 무료는 아니지만 이후 에피소드는 매우 흥미 롭습니다. (코드를 다운로드하고 학습 내용을 보려면 코드는 무료입니다.)

2) On Lisp by Paul Graham ( http://www.paulgraham.com/onlisp.html ). 조금 오래되었지만 고전적이며 무료로 다운로드 할 수 있습니다.


5

저는 많은 프로젝트에 Python을 사용하고 있으며 Python이 요청한 모든 기능을 제공한다고 생각합니다.

중대한:

  1. 메타 프로그래밍 : Python은 메타 클래스 및 런타임 클래스 / 메소드 생성 등을 지원합니다.
  2. 구문 : 그것은 어떻게 든 주관적입니다. 나는 단순함 때문에 파이썬 구문을 좋아하지만 어떤 사람들은 파이썬이 공백에 민감하다고 불평합니다.
  3. 패러다임 : Python은 절차 적, 객체 지향 및 기본 함수 프로그래밍을 지원합니다.
  4. 저는 파이썬이 매우 실용적인 스타일을 가지고 있다고 생각합니다. 그것은 저에게 매우 고무적이었습니다.

다소 중요 :

  1. 성능 : 스크립팅 언어입니다. 그러나 Python 용 C 확장을 작성하는 것은 일반적인 최적화 방법입니다.
  2. 문서 : 불평 할 수 없습니다. 누군가가 Java에서 알 수있는 것만 큼 상세하지는 않지만 충분히 좋습니다.

당신이 대학원생이기 때문에 당신은 파이썬이 과학자에게 필요한 모든 것임을 주장하는이 논문을 읽고 싶을 입니다. 불행히도 저는 Python을 Ruby와 비교할 수 없습니다. 그 언어를 사용한 적이 없기 때문입니다.

감사합니다, Dennis


3
Python은 공백을 구분하지 않습니다. 들여 쓰기를 구분합니다.
jfs

5

@Jason 나는 각각 동의하지 않습니다. 루비가 메타 프로그래밍에있어 파이썬보다 우월하게 만드는 차이점이 있습니다-철학적이며 실용적입니다. 우선 Ruby는 Single Inheritance 및 Mixins으로 상속권을 얻습니다 . 그리고 메타 프로그래밍에 관해서는 모든 것이 자기 에 관한 것임을 이해하기 만하면 됩니다. 여기서 정식 차이점은 Ruby 에서는 런타임에 self 객체에 액세스 할 수 있다는 것 입니다. Python에서는 그렇지 않습니다!

Python과 달리 Ruby에는 별도의 컴파일 또는 런타임 단계가 없습니다. Ruby에서는 모든 코드 줄이 특정 자체 객체 에 대해 실행 됩니다. Ruby에서 모든 클래스는 객체와 숨겨진 메타 클래스 모두에서 상속됩니다. 이것은 몇 가지 흥미로운 역학을 만듭니다.

class Ninja
  def rank
    puts "Orange Clan"
  end

  self.name #=> "Ninja"
end

self.name을 사용 하면 Ninja 클래스의 메타 클래스 이름 메서드에 액세스하여 Ninja의 클래스 이름 을 반환합니다. 메타 프로그래밍이 파이썬에서 그렇게 아름답습니까? 진심으로 의심합니다!


4

글쎄, lisp 구문이 마음에 들지 않는다면 아마도 어셈블러가 갈 길일 것입니다. :-)

확실히 코드와 데이터 사이에 최소한의 차이가 있고, 다중 패러다임 (또는 패러다임이 아닐 수도 있음)이며 학습 및 수행 할 수있는 트릭 측면에서 마음을 확장하는 (지루한 경우) 경험입니다.


다른 어떤 언어보다 어셈블리 언어로 더 많은 메타 프로그래밍을 해왔다고 생각합니다. 코드는 데이터이고 데이터는 코드가 될 수 있습니다. 그리고 데이터는 서명되거나 서명되지 않은 것이 아니라 결정하는 opcode입니다.
Nosredna

1
OO라고 주장 할 수있는 어셈블러 코드가 있습니다. 그것은 오히려 메소드처럼 보이는 것을 가지고 있습니다-당신은 "클래스"에 의존하는 것을 호출합니다.
justintime

4

Io는 "중요"포인트를 모두 충족합니다. 미친 메타 해커를하는 데 더 좋은 언어가 없다고 생각합니다.


감사합니다. 몰랐습니다. 언뜻보기에는 재미있어 보이지만 어쨌든 (()) 많이 있습니다. 곧 볼 시간을 찾길 바랍니다.
flq

3

정적으로 컴파일 된 언어로는 수행 할 수없는 메타 프로그래밍 해킹을 지원하는

나는 그 멋진 물건의 일부 수있는 언어를 찾아 사랑 리스프가 수행을

Lisp를 컴파일 할 수 있습니다.



3

내 대답은 둘 다 아닙니다. 나는 두 언어를 모두 알고 있으며 Ruby에 대한 수업을 듣고 몇 년 동안 Python으로 프로그래밍했습니다. Lisp는 유일한 목적이 목록을 변환하는 것이기 때문에 메타 프로그래밍에 능숙합니다. 자체 소스 코드는 토큰 목록 일 뿐이므로 메타 프로그래밍이 자연 스럽습니다. 이 유형에 가장 좋아하는 세 가지 언어는 Rebol, Forth 및 Factor입니다. Rebol은 입력 스트림에서 코드를 가져 와서 표현식을 실행하고 언어로 작성된 규칙을 사용하여 변환하는 매우 강력한 방언 언어입니다. 표현력이 뛰어나고 방언에 능숙합니다. Factor와 Forth는 구문과 다소 완전히 분리되어 있으며 단어를 정의하고 호출하여 프로그래밍합니다. 일반적으로 자신의 언어로 작성됩니다. 전통적인 의미로 애플리케이션을 작성하지 않습니다. 특정 응용 프로그램을 정의하기 위해 자신의 단어를 작성하여 언어를 확장합니다. Factor는 소스 코드를 평가하고 작업하기 위해 스몰 토크에서만 보았던 많은 기능을 가지고 있기 때문에 특히 좋을 수 있습니다. 정말 멋진 작업 공간, 대화 형 문서 등


2

파이썬과 루비를 분리 할 것이별로 없습니다. 저는 Python 커뮤니티가 Ruby 커뮤니티보다 크고 성숙하다고 말하고 싶습니다. 그것은 저에게 정말 중요합니다. Ruby는 긍정적이고 부정적인 영향을 미치는 더 유연한 언어입니다. 그러나이 두 언어에 대해 자세히 설명 할 사람들이 많이있을 것이라고 확신하므로 세 번째 옵션을 링에 던질 것입니다. JavaScript는 어떻습니까?

JavaScript는 원래 웹용 Scheme으로 설계되었으며 프로토 타입 기반이므로 다중 패러다임 및 메타 프로그래밍에 관한 한 Python 및 Ruby보다 이점이 있습니다. 구문은 다른 두 언어만큼 좋지는 않지만 아마도 현존하는 가장 널리 배포 된 언어이며 성능은 매일 향상되고 있습니다.


2

lisp 스타일의 code-is-data 개념을 좋아하지만 Lispy 구문이 마음에 들지 않는다면 Prolog 가 좋은 선택이 될 것입니다.

그것이 "사용하기 쉽고 현대적인 언어"인지 여부는 다른 사람들에게 맡겨 판단 할 것입니다. ;-)


2

Ruby는 Python, Smalltalk 및 Ruby를 탐색 한 후 선택합니다.


2

OCaml은 어떻습니까?

OCaml 기능 : 정적 유형 시스템, 유형 추론, 매개 변수 다형성, 꼬리 재귀, 패턴 일치, 1 급 어휘 폐쇄, 펑터 (매개 변수 모듈), 예외 처리 및 증분 생성 자동 가비지 수집.

다음을 만족한다고 생각합니다.

중대한:

  1. 훌륭하고 깔끔하며 건전한 구문과 일관되고 직관적 인 의미 체계. 기본적으로 신중하고 사용하기 쉽고 현대적인 언어입니다.
  2. 다중 패러다임. 모든 프로젝트에 적합한 패러다임은 없으며 프로젝트 내의 모든 작은 하위 문제까지도 적합하지 않습니다.
  3. 프로그래밍에 대해 생각하는 방식에 실제로 영향을 미치는 흥미로운 언어입니다.

다소 중요 :

  1. 공연. 성능이 괜찮 으면 좋겠지 만 성능이 진짜 우선이라면 D를 대신 사용하겠습니다.
  2. 잘 기록 된.

OCaml을 사용하면 런타임에 클래스 / 메서드를 만들 수 있습니까? 어떻게 작동합니까?
Jason Creighton

방금 OCaml에 대해 읽었으며 런타임에 항목을 만들 수 없으므로 제거했습니다.
Robert Vuković

2

저는 Python을 아주 조금 사용했지만 훨씬 더 Ruby를 사용했습니다. 그러나 나는 둘 다 당신이 요구 한 것을 제공한다고 주장합니다.

네 가지 요점을 모두 본다면 최소한 http://www.iolanguage.com/을 확인하십시오.

Mozart / Oz도 흥미로울 수 있습니다 : http://mozart.github.io/

안부 프리드리히


1

파이썬 스타일 구문과 lisp와 같은 매크로 (실제 코드 인 매크로) 및 좋은 DSL에 대해서는 converge를 참조하십시오 .


1

파이썬이 여러분이 원하는 모든 것을 수행 할 수 있을지 확신하지 못합니다 (특히 코드와 데이터 사이의 최소한의 차이에 대한 요점). 그러나 파이썬에 찬성하는 한 가지 주장이 있습니다. D에서 파이썬 확장 프로그램을 쉽게 프로그래밍 할 수있는 프로젝트가 있으므로 두 가지 장점을 모두 누릴 수 있습니다. http://pyd.dsource.org/celerid.html



1

나는 당신이 루비와 함께가는 것을 추천 할 것입니다.

처음 배우기 시작했을 때 쉽게 익힐 수있었습니다.


1

Ruby 프로그래밍 언어와 Ruby 구현을 혼용하지 마십시오. Ruby에서는 POSIX 스레드가 불가능하다고 생각합니다.

pthread 지원으로 간단히 컴파일 할 수 있으며 , 말장난을 용서한다면 이 스레드가 생성되었을 때 이미 가능했습니다 .

이 질문에 대한 답은 간단합니다. lisp를 좋아한다면 아마도 루비를 선호 할 것입니다. 또는 원하는대로.


0

두 언어를 모두 시도해보고 자신에게 호소하는 언어를 선택하는 것이 좋습니다. Python과 Ruby 모두 원하는 작업을 수행 할 수 있습니다.

또한 이 스레드를 읽으십시오 .



0

주요 포인트 (메타 프로그래밍) 관련 : Groovy 버전 1.6에는 AST (Abstract Syntax Tree) 프로그래밍이 표준 및 통합 기능으로 내장되어 있습니다. Ruby에는 RubyParser가 있지만 추가 기능입니다.

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