From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <4415C4F3.1080803@altlinux.org> Date: Mon, 13 Mar 2006 22:16:03 +0300 From: Mikhail Yakshin User-Agent: Mozilla Thunderbird 1.0.6 (X11/20050905) X-Accept-Language: en-us, en MIME-Version: 1.0 To: ALT Devel discussion list Subject: Re: [devel] ruby-rake =?KOI8-R?Q?=C9_gems?= References: <4415833C.2050604@altlinux.org> <20060313165552.GA4565@basalt.office.altlinux.org> <4415B2B2.5060402@altlinux.org> <20060313181824.GA12280@basalt.office.altlinux.org> In-Reply-To: <20060313181824.GA12280@basalt.office.altlinux.org> Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 8bit X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.6 Precedence: list Reply-To: ALT Devel discussion list List-Id: ALT Devel discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Mar 2006 19:20:07 -0000 Archived-At: List-Archive: List-Post: Dmitry V. Levin wrote: >>Если в двух словах - то это такой менеджер пакетов и стандарт упаковки >>всевозможных расширений для Ruby. Ближайшие аналоги - cpan для perl, >>pear для php, egg для python. > Спасибо. > > Если проводить аналогию с CPAN, то ни у нас, ни в дистрибутивах, за > которыми я наблюдаю, не предпринимается попытка подменить CPAN'ом нативный > менеджер пакетов. CPAN просто используется как репозиторий, из которого > пакуются пакеты. При этом пакет perl-CPAN в Сизифе тоже есть, который > теоретически позволяет пользоваться CPAN'ом в обход rpm. > > Чем принципиально отличается подход к gems от подхода к CPAN? Принципиально - ничем. Пакет perl-CPAN по той роли, которую он играет - полностью аналогичен пакету rubygems. Продолжая аналогии - /usr/bin/cpan - это /usr/bin/gem и т.п. Речь и идет о том, чтобы "оборачивать" взятые из репозитория gems пакеты в rpm, так же, как это делается для CPAN. Разница начинается в деталях. Механизм gems - более высокоуровневый, чем CPAN. В gem включается информация о зависимостях, причем - например - зачастую не в декларативном виде, а в процедурном. В ruby есть метод "require", позволяющий подключить содержимое какого-то файла. В gems предлагается ему замена - метод "require_gem", который подключает нужные модули не пофайлово, а одной командой позволяет подключить сразу все, что нужно, причем еще запросить файлы из пакета какой-то определенной версии и т.п. автоматика. Внутренняя структура пакета, соответственно, тоже более сложная: в базовой директории (/usr/lib/ruby/gems/1.8/gems/%name-%version) лежит обычно дерево из: bin configs doc examples lib test и еще того, что создатель сочтет нужным туда положить. Очевидно, конечно, что это бардак - что документация и примеры лежат в %_libdir, но такой вот стандарт и если его рушить и, скажем, оторвать упаковку gem у какого-то одного пакета - надо будет рушить и все, его использующие. Сейчас идет очередной раунд прений на тему, как нам с этим чудом вражеской техники быть. В Сизифе около 70 пакетов, судьба которых от этого может косвенно зависеть. -- WBR, Mikhail Yakshin AKA GreyCat ALT Linux [http://www.altlinux.ru] [xmpp:greycat@altlinux.org]