Python과 Ruby는 일반적으로 유사한 표현력과 힘을 가진 가까운 사촌으로 간주됩니다 (역사적인 짐은 상당히 다르지만). 그러나 일부는 Rails 프레임 워크의 엄청난 성공이 실제로 빌드 된 언어 인 Ruby 자체와 관련이 있다고 주장했습니다. 그렇다면 왜 Ruby가 Python보다 그러한 프레임 워크에 더 적합할까요?
답변
아마도 두 가지 주요 차이점이 있습니다.
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에서는 모든 것이 객체이고 모든 코드 라인이 직접 실행된다는 사실에서 비롯됩니다. 결과적으로 Class
es는 그 자체가 객체이고 클래스 본문은 self
Class를 가리키며 클래스를 만들 때 클래스에서 메서드를 호출 할 수 있습니다.
이것은 Rails에서 가능한 선언의 정도와 키워드 또는 새로운 블록 언어 기능처럼 보이는 새로운 선언적 기능을 구현할 수있는 용이성에 큰 책임이 있습니다.
답변
주장한 사람들
Rails 프레임 워크의 엄청난 성공은 실제로 빌드 된 언어와 관련이 있습니다.
(IMO) 잘못되었습니다. 이러한 성공은 아마도 어떤 기술적 능력보다 영리하고 지속적인 마케팅에 더 많은 빚을지고있을 것입니다. Django 는 Ruby의 기능 없이도 많은 영역 (예 : 내장 된 킥-애스 관리자)에서 더 나은 작업을 수행합니다. 나는 루비를 전혀 무시하지 않고 단지 파이썬을 위해 일어 섰다!
답변
파이썬 커뮤니티는 가능한 가장 간단하고 직접적인 방식으로 일을하는 것이 최고의 우아함이라고 믿습니다. 루비 커뮤니티는 멋진 코드를 허용하는 영리한 방식으로 일하는 것이 최고의 우아함이라고 믿습니다.
Rails는 특정 규칙을 따르면 마법처럼 다른 일이 발생합니다. 루비 방식으로 세상을 바라 보는 것과는 잘 어울리지 만 파이썬 방식을 따르지는 않습니다.
답변
이 논쟁이 새로운 “vim 대 emacs”논쟁입니까?
저는 Python / Django 프로그래머이며 지금까지 Ruby / Rails로 전환 할 수있는 언어 / 프레임 워크에서 문제를 발견 한 적이 없습니다.
Ruby / Rails를 경험했다면 똑같을 것이라고 상상할 수 있습니다.
둘 다 비슷한 철학을 가지고 있으며 빠르고 우아한 방식으로 작업을 수행합니다. 더 나은 선택은 이미 알고있는 것입니다.
답변
개인적으로, 저는 루비가 제가 ‘일관된 표현력’이라고 부르는 것을 구성하는 여러면에서 파이썬보다 우월하다고 생각합니다. 예를 들어, 루비에서 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'
시간이 지남에 따라 추가되는 이러한 작은 종류의 차이가 많이 있습니다.
또한 공백을 중요하게 만드는 것보다 보이지 않는 논리 오류를 도입하는 더 좋은 방법을 생각할 수 없습니다.
답변
진짜 대답은 Python이나 Ruby가 웹 프레임 워크에 대해 더 나은 / 나쁜 후보 가 아니라는 것입니다 . 객관성을 원한다면 둘 다에 코드를 작성하고 커뮤니티를 포함하여 개인 취향에 가장 적합한 코드를 확인해야합니다.
하나 또는 다른 것을 주장하는 대부분의 사람들은 다른 언어를 진지하게 사용하지 않았거나 개인적인 선호도에 대해 ‘투표’합니다.
나는 대부분의 사람들이 새로운 것을 가르치거나 (MVC, 테스트, 생성기 등) 더 나은 것을 (플러그인, 템플릿 등)하기 때문에 그들이 먼저 접촉하게되는 어느 쪽을 선택하든 안주 할 것이라고 생각합니다. PHP로 개발하고 RubyOnRails와 접촉했습니다. Rails를 찾기 전에 MVC에 대해 알고 있었다면 PHP를 남기지 않았을 것입니다. 하지만 Ruby를 사용하기 시작하자 구문, 기능 등이 즐거웠습니다.
Python과 MVC 프레임 워크 중 하나를 먼저 찾았다면 그 언어를 대신 칭찬 할 것입니다!
답변
Python에는 Rails와 유사한 프레임 워크가 많이 있습니다. 농담이 너무 많아서 PyCon에서 일반적인 강연을하는 동안 적어도 하나의 웹 프레임 워크가 빛을 보게 될 것입니다.
Rubys 메타 프로그래밍이 더 적합하다는 주장은 IMO가 잘못되었습니다. 이와 같은 프레임 워크에는 메타 프로그래밍이 필요하지 않습니다.
그래서 우리는 Ruby가이 점에서 파이썬보다 낫지 않다고 결론을 내릴 수 있다고 생각합니다.