2010-02-19 1 views
3

루비 커뮤니티 외부 (및 일부 내부)는 느린 루비 응용 프로그램을 참조합니다. 우리 중 많은 사람들에게 이것은 부적합, IO 바운드 작업 등입니다. 그러나 문제가되면 문제 해결 속도를 높이기 위해 기본 코드를 사용하지 못하게합니다. 이 목적을 위해 RoR (많은 '느린'의견의 대상 자체)이 자체 요소의 속도를 높이기 위해 기본 요소를 사용하지 않는 이유가 궁금합니다.RoR이 기본 확장/코드 인라이닝 기법을 이용하는 이유는 무엇입니까?

특별한 이유가 있습니까? 코드베이스 내에서 최적화 할 수없는 루프가 부족합니까?

답변

10

레일즈는 "네이티브 (native)", 즉 컴파일 된 확장 기능을 활용하지만 별도의 옵션 라이브러리로 유지합니다. 예를 들어 레일스에서는 표준 루비 기반 파서 대신 nokogiri을 XML 파서로 사용할 수 있습니다.

레일즈가 내부 기능을 C/C++에 상응하는 것으로 대체하지 않는 데는 최소한 3 가지 이유가 있습니다.

  • 레일즈는 루비 프레임 워크입니다. Ruby 프레임 워크이기 때문에 참여자가 Ruby에 대해 알 것을 기대할 수 있지만 C 라이브러리를 사용하면 전체 Ruby 에코 시스템을 C 프로그래머로 강제 할 수 있습니다. 그리고 이것은 아마도 프레임 워크 자체에 기여하는 사람의 수를 의미 할 것입니다.
  • install on Windows a Gem which includes C extensions을 시도한 적이 있다면 Rails에서 C 코드를 사용하는 것이 왜 나쁜지 이미 알고있을 것입니다.
  • 레일즈는 표준 루비와 JRuby 같은 다른 루비 배포판의 대부분에서 행복하게 작동합니다. Ruby에서 C 코드를 사용하면 동일한 코드의 Java/Python/... 대응 코드를 제공해야합니다. 실제로 C 확장이 포함 된 보석은 JRuby와 호환되지 않습니다.
+0

는 "대부분의 RoR 애플리케이션에서 *하지 * 중요한 제약 조건 인 하나 개의 구성 요소를 최적화하는 것입니다 빨리의 RoR 프레임 워크를 만들려면."추가하려면 –

+0

필자는 철저히 생각했듯이 루비가 남아있는 루비의 정치적으로 선택된 이데올로기와 호환되는지 여부를 궁금해했다. 그래도 통증을 많이 주셔서 감사합니다! –

0

당신은 보석 (MySQL의 보석, memcache에 보석, RedCloth 등) 일반적으로

로를 설치하는 경우는, 그것들을 사용합니까하지만, 그것은 코드를 최적화하기 위해 VM에 의존한다. 그렇지 않으면 루비가하는 모든 플랫폼에서 작동하기가 어렵습니다.

0

표준 라이브러리 날짜 클래스가 일부 Ruby 응용 프로그램에서 병목 현상으로 밝혀졌습니다. Jeremy Evans는 C로 Date/DateTime 클래스를 구현했으며 20-200x의 성능을 얻었다.

home_run