2012-05-01 2 views
1

시스템 호출 용 루비 C 바인딩과 루비 래퍼의 주요 차이점은 무엇입니까?루비 C 바인딩과 시스템 콜용 루비 래퍼

문맥에 대한 나의 질문에, 나는 Git 버전 제어 기능을 Ruby on Rails 응용 프로그램에 많이 포함시키고 싶다. 이 작업에 접근 할 때 yajl-ruby과 같은 Ruby C 바인딩으로 구현 된 라이브러리와 시스템 콜용 Ruby 래퍼 인 git Ruby Gem과 같은 Ruby 프로그램의 실행 파이프 라인에 대해 생각하는 방법을 이해하지 못합니다.

답변

4

바인딩은 라이브러리의 API와 직접 인터페이스하며 래퍼는 시스템 호출을 사용하여 명령 줄에서 최종 사용자 응용 프로그램을 호출합니다.

래퍼는 UNIX 파이프와 유사합니다. 프로그램은 서로의 내부에 대한 지식이없고 텍스트 인터페이스를 통해 통신합니다. 하지만 느슨한 결합에는 가격이 붙습니다. 시스템 호출은 값 비싼 작업이므로 응용 프로그램의 속도가 크게 저하됩니다.

위와 같은 이유로 바인딩이 좋습니다. 라이브러리의 프로그래밍 인터페이스를 사용하기 때문에 오버 헤드가 크게 줄어 듭니다. GitHub에는 git 래퍼가 있으며 speed was issue that led them to implement git in Ruby입니다.

그들은 git에 대한 바인딩을 만들기가 다소 어려웠 기 때문에 그들 스스로했습니다. 그것은 도서관으로 사용하도록 설계되지 않았습니다. 거의 모든 오류에서 die()을 호출하기 때문에 함수를 직접 호출하는 것은 정말 어색합니다.

적절한 git 라이브러리에 대한 요구로 인해 libgit2이 개발되었습니다. 심지어 Ruby bindings과 함께 제공됩니다! git 기능을 응용 프로그램과 통합하려는 경우이를 확인해야합니다.

+1

철저한 서면 답변 해 주셔서 감사합니다. [git'에 대한 Ruby 래퍼 (https://rubygems.org/gems/git)와 ['libgit2'Ruby bindings (https://github.com/libgit2/rugged))는 모두 [ git submodule' (http://git-scm.com/book/en/Git-Tools-Submodules) 기능을 사용하지만 두 기능의 차이점을 이해할 수 있도록 도와 주셨습니다. 루비 래퍼 (git') (https://rubygems.org/gems/git)를 ['git submodule' (http://git-scm.com/book)]으로 확장하기 시작합니다./ko/Git-Tools-Submodules) 기능을 포함하고 있습니다. – rudolph9