교수님은 coursera (https://www.coursera.org/saas/)에서 강의를 듣고 있었는데 교수님은 Ruby의 모든 것이 객체이고 모든 메소드 호출이 객체에 send 메소드를 호출하고 일부 매개 변수를 전달한다고 말하고있었습니다. 여기에는 숫자, 배열 및 기타 기본 클래스가 포함됩니다.Ruby 효율성
나는 구글에 가서 효율 벤치 마크 보면서 나는 다음과 같은 발견 http://benchmarksgame.alioth.debian.org/u32/which-programs-are-fastest.html
는 컴파일 된 언어, 해석보다 빠르다는 것을 충격적인 아니지만을 (루비, 파이썬) 및 Java 사이의 성능 차이 예를 들면 충격적이다.
루비 코드를 컴파일하는 방법 (이 주제를 연구하지는 못했음)이 있더라도 언어의 핵심 "문제"로 인해 효율성 문제가 여전히 남아 있다고 생각합니다. 기본 연산이 너무 무거워서 : 1 + 1은 완료하는 데 더 많은 CPU 사이클을 필요로합니다.
루비가 너무 좋아요. 나는 메타 프로그래밍의 고수준 측면을 좋아하고 이것이 미래가 어디로 향해야하는지 생각하며, 때로는 좀 더 효과적이기 위해 어떤 것을 타협해야 할 때가있다. 나는 어셈블리에서 코드를 최적화하지 않는다. 몇 밀리 초를 절약 할 수 있습니다. 그러나 우리가 C로 1 + 1을 수행 할 때 기본 작업이 수행되는 시간이 기하 급수적으로 증가하지는 않습니다!
제 질문은 어떻게 운영 집중 프로그램을 다루고 있습니까? 우리는 약 1 년 동안 우리가 개발해온 Ruby on Rails 프로젝트를 가지고 있으며, 우리는 지리적 위치 추적과 우선 순위 지정으로 기계 학습을 시작할 시점에 있습니다.
난 당신이 내 문제를 이해하고 의견을보고 보인다 이것은 나쁜 질문하지
루비에서 두 개의 fixnum을 추가하는 데 걸리는 시간은 기하 급수적입니다. 그것은 여전히'O (1)'입니다 (두 개의 bignum을 추가하는 것은'O (log n)'입니다). – sepp2k
Ruby에서 1 + 1은 유형 1을 찾고, Fixnum을 찾고, 조회 테이블에서 + 메소드를 찾아 실행하고 결과를 반환합니다.몇 가지 추가 단계가 필요했는데, 이는 고정 숫자이며 이론적으로는 맞습니다. O (1)입니다. 실질적으로 말하자면, 모든 방법이 그렇게한다면, (벤치 마크에서 보았 듯이) 소비 된 시간은 "기하 급수적으로"증가하고 있습니다. 나는 이론적 인 알고리즘 복잡성과 실제 알고리즘의 복잡성을 구별하는 경향이있다. 버킷 정렬은 http://en.wikipedia.org/wiki/Bucket_sort에서 볼 수 있습니다. – Abdo
아니요, 모든 방법이 그렇게하는 경우 시간 증가는 선형입니다. 메소드 호출을 추가 할 때마다 프로그램의 런타임은 두 배로되지 않습니다. 그것은 지속적으로 증가합니다. 이론과 실생활을 원하는만큼 구별 할 수 있습니다. "지수 적"은 여전히 "큰"의 동의어가 아닙니다. – sepp2k