Ruby가 Python보다 Rails에 더 적합한 이유는 무엇입니까? [닫은]


90

Python과 Ruby는 일반적으로 유사한 표현력과 힘을 가진 가까운 사촌으로 간주됩니다 (역사적인 짐은 상당히 다르지만). 그러나 일부는 Rails 프레임 워크의 엄청난 성공이 실제로 빌드 된 언어 인 Ruby 자체와 관련이 있다고 주장했습니다. 그렇다면 왜 Ruby가 Python보다 그러한 프레임 워크에 더 적합할까요?


44
두운. _
Jimmy

75
"버킷에 파이썬은"그냥 ... 그것 같은 느낌이 없습니다
ephemient

105
@Ephemient : 나는 그것이 비행기의 파이썬 일 것이라고 믿습니다.
Jimmy

37
@Jimmy : 누가 비행기를 필요로합니까? import antigravity ;-) xkcd.com/353
Vinay Sajip

157
Jails에 Java가 있습니까?
Nosredna

답변:


170

아마도 두 가지 주요 차이점이 있습니다.

Ruby에는 우아하고 익명의 클로저가 있습니다.

Rails는 좋은 효과를 내기 위해 그것들을 사용합니다. 예를 들면 다음과 같습니다.

class WeblogController < ActionController::Base
  def index
    @posts = Post.find :all
    respond_to do |format|
      format.html
      format.xml { render :xml => @posts.to_xml }
      format.rss { render :action => "feed.rxml" }
    end
  end
end

익명의 클로저 / 람다를 사용하면 차단할 수있는 새로운 언어 기능을 더 쉽게 에뮬레이션 할 수 있습니다. 파이썬에서는 클로저가 존재하지만 사용하려면 이름을 지정해야합니다. 따라서 클로저를 사용하여 새로운 언어 기능을 에뮬레이트하는 대신 클로저를 사용하고 있다는 사실을 명시해야합니다.

Ruby는 더 깨끗하고 사용하기 쉬운 메타 프로그래밍을 제공합니다.

이것은 주로 사용하기 쉽기 때문에 Rails에서 광범위하게 사용됩니다. 구체적으로 말하자면 Ruby에서는 클래스 컨텍스트에서 임의의 코드를 실행할 수 있습니다. 다음 스 니펫은 동일합니다.

class Foo
  def self.make_hello_method
    class_eval do
      def hello
        puts "HELLO"
      end
    end
  end
end

class Bar < Foo # snippet 1
  make_hello_method
end

class Bar < Foo; end # snippet 2
Bar.make_hello_method

두 경우 모두 다음을 수행 할 수 있습니다.

Bar.new.hello  

"HELLO"가 인쇄됩니다. 이 class_eval메서드는 또한 String을 사용하므로 전달 된 매개 변수에 따라 다른 의미를 갖는 클래스가 생성 될 때 즉석에서 메서드를 만들 수 있습니다.

사실 이런 종류의 메타 프로그래밍은 파이썬 (그리고 다른 언어에서도)으로 할 수 있지만, 메타 프로그래밍은 특별한 프로그래밍 스타일이 아니기 때문에 루비가 한 발 앞서 있습니다. Ruby에서는 모든 것이 객체이고 모든 코드 라인이 직접 실행된다는 사실에서 비롯됩니다. 결과적으로 Classes는 그 자체가 객체이고 클래스 본문은 selfClass를 가리키며 클래스를 만들 때 클래스에서 메서드를 호출 할 수 있습니다.

이것은 Rails에서 가능한 선언의 정도와 키워드 또는 새로운 블록 언어 기능처럼 보이는 새로운 선언적 기능을 구현할 수있는 용이성에 큰 책임이 있습니다.


40
파이썬에서는 모든 것이 객체이고 모든 코드 라인도 직접 실행됩니다. ;)하지만, 클래스 본문의 클래스를 가리키는 "self"가 없습니다. 클래스 정의 이후까지 생성되지 않으므로 나중에 해당 코드를 Python에 넣어야합니다. 이지만 기능적으로 동일합니다.
Lennart Regebro 2007

31
@lennart 그게 요점입니다. Python을 사용하면 명명 된 람다, 데코레이터 및 클래스가 생성 된 후 코드를 넣어 같은 종류의 작업을 수행 할 수 있지만 우아함의 손실은 빠르게 추가되고 Rails와 같은 것을 구현하기가 눈에 띄게 더 어렵거나 최종 사용자에게 덜 우아하게 만듭니다.
Yehuda Katz

9
그들은 나에게 큰 차이점처럼 보이지 않습니다.
Dietrich Epp

10
@lennart 나는 약간 혼란 스럽습니다. 나는 파이썬에서 그것들이 필요하지 않다고 말했지만, 그것들이 없으면 코드를 구현하기가 더 어렵거나 최종 사용자 (하나 또는 다른 사람)에게 덜 우아해 졌다고 말했습니다. 언어가 완성되었습니다. 원한다면 C로 Rails를 작성할 수 있습니다.
Yehuda Katz

5
@lennart 이제 우리는 주관적인 영역으로 들어가고 있지만, 제가 말한 두 가지 기능은 선언적 프로그래밍과 절차 적 프로그래밍이 혼합 된 프레임 워크를 생성 할 때 매우 편리합니다. 특히 익명의 람다가 없다는 점은 Python의 표현력 제한입니다. 일관성 부족 (클래스가 생성 된 후에 만 ​​생성 된 클래스로 작업해야 함)도 상당히 제한적입니다.
Yehuda Katz

58

주장한 사람들

Rails 프레임 워크의 엄청난 성공은 실제로 빌드 된 언어와 관련이 있습니다.

(IMO) 잘못되었습니다. 이러한 성공은 아마도 어떤 기술적 능력보다 영리하고 지속적인 마케팅에 더 많은 빚을지고있을 것입니다. Django 는 Ruby의 기능 없이도 많은 영역 (예 : 내장 된 킥-애스 관리자)에서 더 나은 작업을 수행합니다. 나는 루비를 전혀 무시하지 않고 단지 파이썬을 위해 일어 섰다!


10
음, 우리는 여기서 주관적인 영역으로 들어가고 있습니다. 관리자가 "유일한"사람이라고 생각한다면 시간을 절약 할 수있는 혜택을 누리지 못했기 때문일 것입니다. Ruby에는 있고 Python에는없는 기능 때문에 Django가 Rails보다 더 나쁘다고 생각하는 영역이 있습니까? 요점은 실제로 어떤 프레임 워크가 더 나은지에 대한 것이 아닙니다. (이 질문의 다른 부분에서 지적했듯이) Python에 부족한 것이 있는지 여부에 따라 킥 엉덩이 프레임 워크를 개발할 능력이 떨어집니다. 증거로는 그러한 부족이 없습니다.
Vinay Sajip

18
@ 다운 보 터들에게 : 나는 정말로 신경 쓰지 않지만 왜 내 대답이 도움되지 않는다고 생각했는지 궁금합니다 . 다른 사람의 입장에 동의하지 않기 때문에 반대표를 한 사람이 있다는 사실을 깨닫지 못했습니다. 일반적으로 질문이나 답변이 상황을 악화 시킨다고 생각하는 경우에만 반대표를 던졌습니다.
Vinay Sajip

5
내 자신의 관리 섹션을 작성할 수 있지만 프레임 워크에 필요하지 않습니다. 응용 프로그램을 더 쉽게 작성할 수있는 다른 방법을 선호합니다.
nitecoder

8
@railsninja : 잘 됐네요. 나는 대부분의 시스템에 필요한 관리 작업을 위해 상용구 페이지를 작성하지 않는 것을 선호합니다. 최근에 나는 지역 자선 웹 사이트에서 프로 보노 작업을했는데, 장고 관리자가 공식에 포함되지 않았다면 그 사이트를 전혀 할 수 없었을 것입니다. 그대로 최종 사용자를 위해 상당히 사용자 정의 된 Ajaxified UI가있는 사이트를 제공했지만 백엔드 관리자는 관리자와 함께 작업했고 그들의 요구에 적합했습니다.
Vinay Sajip

6
@Matt : 그의 질문은 Ruby가 Python보다 더 적합한 이유입니다. 그리고 대답은 정확하지 않다는 것입니다.
Lennart Regebro 2007

54

파이썬 커뮤니티는 가능한 가장 간단하고 직접적인 방식으로 일을하는 것이 최고의 우아함이라고 믿습니다. 루비 커뮤니티는 멋진 코드를 허용하는 영리한 방식으로 일하는 것이 최고의 우아함이라고 믿습니다.

Rails는 특정 규칙을 따르면 마법처럼 다른 일이 발생합니다. 루비 방식으로 세상을 바라 보는 것과는 잘 어울리지 만 파이썬 방식을 따르지는 않습니다.


4
물론 이죠,하지만 펄 사람들 (물론, 아마의 손실이있는 많은 는 진정한 언어의 맹세 비밀 한 라이너가 멋진 생각), 그리고 많은 리스프 사람들. 우리는 확실히 당신의 배가 떠 다니는 영역에 있습니다.
Vinay Sajip

4
Rails에는 마법이 없으며 소스에 바로 있습니다. 방법을 알고 싶다면 엉덩이에서 벗어나 알아보십시오.
nitecoder

21
"충분히 발전된 기술은 마법과 구별 할 수 없습니다."
-Arthur

1
"마법"이란 프레임 워크가 직접 요청하지 않고도 많은 작업을 수행한다는 것을 의미합니다. 다시 말하지만, 나는 가치 판단을 내리는 것이 아니라 좋은면과 나쁜면이있는 일을하는 한 가지 스타일입니다. 개인적으로 레일에서 훌륭하게 작동한다고 생각합니다.
Matt Briggs

2
우아함과 관습은 마법을 의미하지 않습니다.
BJ Clark

26

이 논쟁이 새로운 "vim 대 emacs"논쟁입니까?

저는 Python / Django 프로그래머이며 지금까지 Ruby / Rails로 전환 할 수있는 언어 / 프레임 워크에서 문제를 발견 한 적이 없습니다.

Ruby / Rails를 경험했다면 똑같을 것이라고 상상할 수 있습니다.

둘 다 비슷한 철학을 가지고 있으며 빠르고 우아한 방식으로 작업을 수행합니다. 더 나은 선택은 이미 알고있는 것입니다.


25

개인적으로, 저는 루비가 제가 '일관된 표현력'이라고 부르는 것을 구성하는 여러면에서 파이썬보다 우월하다고 생각합니다. 예를 들어, 루비에서 join은 문자열을 출력하는 배열 객체의 메서드이므로 다음과 같은 결과를 얻습니다.

numlist = [1,2,3,4]
#=> [1, 2, 3, 4]
numlist.join(',')
#=> "1,2,3,4"

파이썬에서 조인은 문자열 객체에 대한 메소드이지만 조인 할 대상으로 문자열이 아닌 다른 것을 전달하면 오류가 발생하므로 동일한 구문은 다음과 같습니다.

numlist = [1,2,3,4]
numlist
#=> [1, 2, 3, 4]
",".join([str(i) for i in numlist])
#=> '1,2,3,4'

시간이 지남에 따라 추가되는 이러한 작은 종류의 차이가 많이 있습니다.

또한 공백을 중요하게 만드는 것보다 보이지 않는 논리 오류를 도입하는 더 좋은 방법을 생각할 수 없습니다.


29
내 경험에 따르면 공백을 중요하게 만드는 것은 논리 오류를 없애는 데 도움이됩니다. 공백과 구문이 일치하지 않는 것은 훨씬 더 혼란 스럽습니다.
Nosredna

5
시작과 끝이있는 언어와 중괄호가있는 언어와 어셈블리에서 코드가 잘못 붙여져 나중에 문제를 일으키는 것을 보았습니다. 그것은 항상 문제입니다. 사람들이 파이썬을 잘못 붙여 넣는 데 많은 어려움을 겪었습니까?
Nosredna

5
공백은 Python에서 중요하지 않습니다 : secnetix.de/~olli/Python/block_indentation.hawk . 파이썬에서 들여 쓰기로 인해 "보이지 않는 오류"를 도입하는 것은 거의 불가능합니다 (편집기 설정을 변경해야합니다). 물론 다른 언어의 들여 쓰기로 인해 단순히 잘못 들여 쓰기 만하여 보이지 않는 오류를 도입하는 것은 완전히 가능합니다. @fields : 따라서 스카이프 나 HTML을 통해 코드를 복사하지 마십시오. 이런.
Lennart Regebro

7
Join에서와 같이 문자열에 비 문자열을 추가하려고하면 Python이 불평하는 것은 옳습니다. 이는 명시적인 것이 암시적인 것보다 낫기 때문입니다. Python에는 자동 변환이 거의 없으며, 그 이유는 특히 동적 언어에서 문제가 발생하는 경향이 있기 때문입니다. 확실히 "".join () 메서드는 처음에는 거꾸로 느껴지지만 그 이유입니다. 사실은 ... 목록에 이해가되지 않습니다
레나 Regebro에게

8
전능하신 하나님 ... 당신은 강력하게 타이핑 된 것이 아니라 정적으로 타이핑 된 것을 의미합니다. Python은 강력한 형식입니다. Ruby도 마찬가지입니다. stackoverflow.com/questions/520228/… Ruby에서도 정수에 문자열을 추가 할 수 없습니다. 나는 당신을 수정하는 데 지쳤습니다. 나중에 대답하기 전에 사실을 확인하십시오.
Lennart Regebro 2007

15

진짜 대답은 Python이나 Ruby가 웹 프레임 워크에 대해 더 나은 / 나쁜 후보 가 아니라는 것입니다 . 객관성을 원한다면 둘 다에 코드를 작성하고 커뮤니티를 포함하여 개인 취향에 가장 적합한 코드를 확인해야합니다.

하나 또는 다른 것을 주장하는 대부분의 사람들은 다른 언어를 진지하게 사용하지 않았거나 개인적인 선호도에 대해 '투표'합니다.

나는 대부분의 사람들이 새로운 것을 가르치거나 (MVC, 테스트, 생성기 등) 더 나은 것을 (플러그인, 템플릿 등)하기 때문에 그들이 먼저 접촉하게되는 어느 쪽을 선택하든 안주 할 것이라고 생각합니다. PHP로 개발하고 RubyOnRails와 접촉했습니다. Rails를 찾기 전에 MVC에 대해 알고 있었다면 PHP를 남기지 않았을 것입니다. 하지만 Ruby를 사용하기 시작하자 구문, 기능 등이 즐거웠습니다.

Python과 MVC 프레임 워크 중 하나를 먼저 찾았다면 그 언어를 대신 칭찬 할 것입니다!


11

Python에는 Rails와 유사한 프레임 워크가 많이 있습니다. 농담이 너무 많아서 PyCon에서 일반적인 강연을하는 동안 적어도 하나의 웹 프레임 워크가 빛을 보게 될 것입니다.

Rubys 메타 프로그래밍이 더 적합하다는 주장은 IMO가 잘못되었습니다. 이와 같은 프레임 워크에는 메타 프로그래밍이 필요하지 않습니다.

그래서 우리는 Ruby가이 점에서 파이썬보다 낫지 않다고 결론을 내릴 수 있다고 생각합니다.


8

Rails는 Rubys 기능 세트를 활용하도록 개발 되었기 때문입니다.

비슷한 험난한 질문은 "왜 Python이 Ruby보다 Django에 더 적합합니까?"입니다.


4

언어 기능 자체가 아니라 각 커뮤니티가 언어 기능에 대한 악센트를 논의해야한다고 생각 합니다. 예를 들어, Python에서 클래스를 다시 여는 것은 완벽하게 가능하지만 일반적이지 않습니다. 그러나 Ruby에서 수업을 다시 여는 것은 일상적인 연습입니다. 이를 통해 현재 요구 사항에 맞게 프레임 워크를 빠르고 간단하게 사용자 정의 할 수 있으며, Ruby는 다른 어떤 동적 언어보다 Rails와 유사한 프레임 워크에 더 유리합니다. 따라서 내 대답은 재개 수업의 일반적인 사용입니다.


1

어떤 사람들은 ActiveRecord (레일의 핵심 구성 요소)를 가능하게하는 데 필요한 메타 프로그래밍 유형이 파이썬보다 루비에서 더 쉽고 자연 스럽다고 말했습니다. 아직 파이썬을 모릅니다.) 그래서 개인적으로이 진술을 확인할 수 없습니다.

저는 레일을 간략하게 사용했으며 캐치 올 / 인터셉터와 동적 평가 / 코드 삽입을 사용하면 다른 프레임 워크보다 훨씬 더 높은 수준의 추상화에서 작업 할 수 있습니다 (시간 이전). 저는 Python의 프레임 워크에 대한 경험이 거의 없거나 전혀 없습니다.하지만 똑같이 능력이 있다고 들었습니다. 그리고 Python 커뮤니티는 Python의 노력을 지원하고 육성하는 데 큰 역할을합니다.


3
사실, 이런 종류의 "마법"은 종종 파이썬에서 눈살을 찌푸립니다. 예 : code.djangoproject.com/wiki/RemovingTheMagic
ephemient

2
"마법"을위한 "마법"(메타 프로그래밍 트릭)은 항상 눈살을 찌푸려 야한다고 생각합니다. 코드는 간단하지만 똑같이 강력하고 표현력이 뛰어나야 항상 이겨야합니다.하지만 정확한 기능과 구문 을 제공하는 유일한 방법이있는 경우가 있습니다. 당신이 원하는는 "마법"필요 - 그 경우에 따라서는 "마법"indispendable입니다)
파이잘 VALI에게

1

구문이 더 깨끗하고 적어도 나에게 Ruby는 훨씬 더 "즐겁다"고 생각합니다.


-1

두 가지 답변 :

ㅏ. 레일은 루 비용으로 작성 되었기 때문입니다.

비. 같은 이유로 C는 Ruby보다 Linux에 더 적합합니다.


질문 답변의 맥락을 감안할 때 전혀 의미가 없습니다.
lorefnon 2012-08-04

-6

이 모든 것이 완전히 "IMHO"입니다.

Ruby에는 하나의 웹 애플리케이션 프레임 워크가 있으므로 해당 언어에 대해 광고되는 유일한 프레임 워크입니다.

Python은 처음부터 Zope, Twisted, Django, TurboGears (다른 프레임 워크 구성 요소의 혼합), Pylons (Rails 프레임 워크의 일종의 클론) 등 몇 가지를 예로 들었습니다. 그들 중 어느 것도 파이썬 커뮤니티 전체에서 "사용할 사람"으로 지원되지 않으므로 모든 "그라운드"가 여러 프로젝트에 분산되어 있습니다.

Rails는 Rails로 인해 커뮤니티 규모가 단독으로 또는 적어도 대다수가 있습니다.

Python과 Ruby는 모두 웹 애플리케이션 프레임 워크로서의 작업을 완벽하게 수행 할 수 있습니다. 귀하 (및 귀하의 잠재적 인 개발 팀)가 좋아하고 정렬 할 수있는 것을 사용하십시오.


7
니트로, Merb는, 캠핑 .. 몇 가지 이름을 : 루비는 여러 웹 애플리케이션 프레임 워크가
코반 브룩

5
추가 : Sinatra 및 매우 빠른 최소 웹 앱을위한 베어 랙 앱도 있습니다.
Kris

2
-1 "Ruby에는 하나의 웹 애플리케이션 프레임 워크가 있습니다."너무 범주 적 ... 거짓 진술. Nitro, Merb, Camping, Sinatra
Maximiliano Guzman

2
양측의 정보가없는 의견은이 모든 것을 해결하려는 신규 이민자에게 혼란의 원인이됩니다. 그것은 또한 그들이 더 잘 안다면 그들이 실제로 감사 할 무언가를 놓칠 수 있음을 의미합니다.
Walt Jones

3
나는 그의 지점 레일 장고보다 루비 커뮤니티의 큰 마음 점유율이 유효 파이썬 커뮤니티의가 있는지 생각
pjb3가
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.