Python과 Ruby는 일반적으로 유사한 표현력과 힘을 가진 가까운 사촌으로 간주됩니다 (역사적인 짐은 상당히 다르지만). 그러나 일부는 Rails 프레임 워크의 엄청난 성공이 실제로 빌드 된 언어 인 Ruby 자체와 관련이 있다고 주장했습니다. 그렇다면 왜 Ruby가 Python보다 그러한 프레임 워크에 더 적합할까요?
Python과 Ruby는 일반적으로 유사한 표현력과 힘을 가진 가까운 사촌으로 간주됩니다 (역사적인 짐은 상당히 다르지만). 그러나 일부는 Rails 프레임 워크의 엄청난 성공이 실제로 빌드 된 언어 인 Ruby 자체와 관련이 있다고 주장했습니다. 그렇다면 왜 Ruby가 Python보다 그러한 프레임 워크에 더 적합할까요?
답변:
아마도 두 가지 주요 차이점이 있습니다.
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
익명의 클로저 / 람다를 사용하면 차단할 수있는 새로운 언어 기능을 더 쉽게 에뮬레이션 할 수 있습니다. 파이썬에서는 클로저가 존재하지만 사용하려면 이름을 지정해야합니다. 따라서 클로저를 사용하여 새로운 언어 기능을 에뮬레이트하는 대신 클로저를 사용하고 있다는 사실을 명시해야합니다.
이것은 주로 사용하기 쉽기 때문에 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는 특정 규칙을 따르면 마법처럼 다른 일이 발생합니다. 루비 방식으로 세상을 바라 보는 것과는 잘 어울리지 만 파이썬 방식을 따르지는 않습니다.
개인적으로, 저는 루비가 제가 '일관된 표현력'이라고 부르는 것을 구성하는 여러면에서 파이썬보다 우월하다고 생각합니다. 예를 들어, 루비에서 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가이 점에서 파이썬보다 낫지 않다고 결론을 내릴 수 있다고 생각합니다.
어떤 사람들은 ActiveRecord (레일의 핵심 구성 요소)를 가능하게하는 데 필요한 메타 프로그래밍 유형이 파이썬보다 루비에서 더 쉽고 자연 스럽다고 말했습니다. 아직 파이썬을 모릅니다.) 그래서 개인적으로이 진술을 확인할 수 없습니다.
저는 레일을 간략하게 사용했으며 캐치 올 / 인터셉터와 동적 평가 / 코드 삽입을 사용하면 다른 프레임 워크보다 훨씬 더 높은 수준의 추상화에서 작업 할 수 있습니다 (시간 이전). 저는 Python의 프레임 워크에 대한 경험이 거의 없거나 전혀 없습니다.하지만 똑같이 능력이 있다고 들었습니다. 그리고 Python 커뮤니티는 Python의 노력을 지원하고 육성하는 데 큰 역할을합니다.
두 가지 답변 :
ㅏ. 레일은 루 비용으로 작성 되었기 때문입니다.
비. 같은 이유로 C는 Ruby보다 Linux에 더 적합합니다.
이 모든 것이 완전히 "IMHO"입니다.
Ruby에는 하나의 웹 애플리케이션 프레임 워크가 있으므로 해당 언어에 대해 광고되는 유일한 프레임 워크입니다.
Python은 처음부터 Zope, Twisted, Django, TurboGears (다른 프레임 워크 구성 요소의 혼합), Pylons (Rails 프레임 워크의 일종의 클론) 등 몇 가지를 예로 들었습니다. 그들 중 어느 것도 파이썬 커뮤니티 전체에서 "사용할 사람"으로 지원되지 않으므로 모든 "그라운드"가 여러 프로젝트에 분산되어 있습니다.
Rails는 Rails로 인해 커뮤니티 규모가 단독으로 또는 적어도 대다수가 있습니다.
Python과 Ruby는 모두 웹 애플리케이션 프레임 워크로서의 작업을 완벽하게 수행 할 수 있습니다. 귀하 (및 귀하의 잠재적 인 개발 팀)가 좋아하고 정렬 할 수있는 것을 사용하십시오.