2012-01-14 2 views
0

OK, 루비 전문가, 이것은이 설명은 나와 함께 제목에 설명, 그래서 부담하는 하드 하나입니다루비 : 정렬 화 및 변수가 아닌 인스턴스를 비 정렬 화

내가 문자열을 전달 찾고 있어요는 객체를 구성하는 속성 모음이 아니라 실제 변수 인 객체에 대한 핸들을 사용합니다.

이 이유는 파일 시스템, 네트워크 또는 메모리에있을 수있는 자원을 다루고 있기 때문입니다. 일관된 방식으로 이들 각각을 처리 할 수있는 URI 핸들러를 생성하여 예를 들어 스키마를 가질 수 있습니다.

  • 파일 : //
  • 에 http : //
  • 의 ftp : //
  • inmemory : //

당신은 아이디어를 얻을. 그것은 내가 알아 내려고하는 마지막 것입니다 : 루비에서 객체에 대한 참조의 문자열 표현을 얻고, 그 문자열을 사용하여 새로운 참조를 만드는 방법이 있습니까? 저는 참조을 마샬링하는데, 객체는이 아닙니다. 이상적으로 받아들이 기가 쉬운 Object#object_id을 복용하고 동일한 객체를 참조하는 다른 곳에서 새 변수를 만드는 것과 같은 것이 있습니다. 저는 이것이 매우 약해서 예외적 인 유스 케이스라는 것을 알고 있습니다. 객체가 가비지 컬렉트되지 않도록하는 기존 변수가있는 한 Ruby 프로세스 내에서만 작동하지만, 둘 다 Ruby 프로세스에서 true입니다. inmemory 스킴 제가 개발 중입니다.

  • 원수 전체 객체와 URI로 벼락 공부하지만, 객체의 데이터가 이미지 버퍼 때문에이 작동하지 않습니다 - 매우 큰
  • : 내가 생각할 수있는

    유일한 대안은

  • 예를 들어 나중에 검색 할 변수를 저장하기 위해 전역 또는 단일 톤 연옥 영역을 만듭니다. object_id의 해시 : 변수 쌍. 이것은 약간 냄새 나는 것이지만 작동 할 것입니다.

다른 어떤 생각, StackOverflowers?

답변

4

ObjectSpace._id2ref있다 :

가비지 수집 ObjectSpace에 대한주의 사항에 추가하여
f = Foo.new #=> #<Foo:0x10036c9b8> 
f.object_id #=> 2149278940 
ObjectSpace._id2ref(2149278940) #=> #<Foo:0x10036c9b8> 

(즉, 그래서 너무 많이는 기본적으로 비활성화되어) JRuby에서 큰 성능 저하

+0

감사합니다. – Matt

1

변수의 개체 수없는 운반 루비. 당신은 마샬링/언 마샬링 할 수 없으며, 무엇이든과 함께 할 수 없습니다. 변수가 아닌 객체만으로 작업을 수행 할 수 있습니다.

(그들은 는하지만, 객체 인 경우는 정말 좋을 것이다!) 당신은 VM웨어의 Gemstone 위에 구축 대안 루비 구현 MagLev로 볼 수

0

. 그것은 당신의 유스 케이스에 맞는 배포 객체 모델을 가지고있다.

객체는 중앙 Gemstne 인스턴스에 저장되고 (일부 멋지게 캐싱 됨) 모든 원격 작업자 인스턴스에서 액세스 할 수 있습니다. 그렇게하면 모든 작업자가 동일한 객체 공간에서 작업하면서 동일한 객체에 동시에 액세스 할 수 있습니다. 그렇게하면 전역 가비지 컬렉터를 하나의 Ruby 인스턴스에서 실행하거나 Continuations를 사용하여 모든 노드에서 다른 노드로 실행을 원활하게 이동할 수 있습니다.

관련 문제