Pytanie Dlaczego instalujemy klejnoty Ruby 1.9.2 / 1.9.3 w folderze 1.9.1?


Dzieje się tak, ponieważ katalog instalacji Gem używany przez gem polecenie widoczne podczas używania gem env, jest ustawione na coś takiego:

<base_ruby_dir>/lib/ruby/gems/1.9.1

Moje pytanie brzmi: dlaczego?

Nie powinien wywoływać folderu:

<base_ruby_dir>/lib/ruby/gems/1.9.x

lub

<base_ruby_dir>/lib/ruby/gems/1.9

albo nie może istnieć jedna na wersję Ruby, na przykład:

c:/ruby191/lib/ruby/gems/1.9.1
c:/ruby192/lib/ruby/gems/1.9.2
c:/ruby193/lib/ruby/gems/1.9.3

Nie jest to problem krytyczny, który znam, tylko się zastanawiałem.


21
2017-12-19 16:20


pochodzenie




Odpowiedzi:


W Ruby 1.9.0 interfejs C został zmieniony z serii Ruby 1.8.

Klejnoty kompilujące się do natywnego kodu musiały zostać zrekompilowane.

Interfejs został ponownie zmieniony w Ruby 1.9.1 i zachował to samo w Ruby 1.9.2 i 3. To wyjaśnia 1.9.1, który widzisz na swojej ścieżce.

Chodzi o to, że możesz zainstalować różne wersje Ruby w swoim systemie i że klejnoty będą udostępniane w grupach mających to samo C api. Tak więc Ruby 1.8.6 i 1.8.7 mogą udostępniać swoje klejnoty, podobnie jak Ruby 1.9.1, .2 i .3.

Jednak niekoniecznie jest to najlepszy pomysł. W każdym razie większość ludzi używa rvm uzyskać dostęp do różnych wersji Rubiego i rvm utrzymuje klejnoty oddzielnie dla każdej wersji, niezależnie od wersji C api.


28
2017-12-19 18:39



Ok, rozumiem. Więc 1.9.1 oznacza, że ​​klejnot jest zgodny z interfejsem C używanym w Rubim 1.9.1? Ten rodzaj ujawnia szczegóły wdrożenia, prawda? Z punktu widzenia użytkownika końcowego, dlaczego mnie to obchodzi? Czy kiedykolwiek zobaczę dwa foldery obok siebie, takie jak 1.9.1 i 1.9.4? Jeśli nie, to dlaczego mnie to obchodzi? - Ben
Dobrze. The C Api z całą pewnością ujawnia szczegóły wdrożenia! Użytkownicy Gem nie powinni dbać o ścieżkę. Odpowiedź edytowana dla dwóch ostatnich pytań - Marc-André Lafortune
Dla mnie pytanie dotyczy konwencji nazewnictwa katalogów. Jeśli wiemy, że zmiana w API C Rubiego spowoduje przekompilowanie wszystkich klejnotów przy użyciu tej wersji Ruby, to albo mam folder o nazwie 1.9.1 z klejnotami, lub folder o nazwie 1.9.2 (lub cokolwiek innego). Jeśli nie mogę mieć obu (dla jednej wersji Rubiego), wówczas 1.9.x będzie bardziej sensowne. Nigdy nie widziałem tego samego folderu, który był używany do przechowywania klejnotów dla wielu wersji Ruby - czy jest to faktycznie przypadek użycia? - Ben


Myślę, że to dlatego, że te wersje powinny być kompatybilne, a gdybyś miał osobne katalogi, musiałbyś ponownie zainstalować wszystkie swoje klejnoty. W ten sposób możesz uaktualnić wersję ruby ​​bez konieczności ponownej instalacji wszystkich klejnotów.


0
2017-12-19 16:32



Hmm tak, to ma sens. Ale w takim razie dlaczego nie zadzwonić do folderu 1.9 lub 1.9.x? Wydaje mi się dziwne. - Ben
To samo dotyczy pakietów Ruby Debiana. Zainstalowałem 1.9.2 z pakietu o nazwie ruby1.9.1. Nazwa pliku wykonywalnego również została nazwana. - Linuxios
Nie ma gwarancji (niestety), że ABI pozostanie niezmieniona przez cały cykl życia 1,9. Jeśli 1.9.4 nagle używa ABI, która łamie kompatybilność z 1.9.1-1.9.3, to twoja ścieżka 1.9.x zostaje nagle nazwana niepoprawnie. - jgoldschrafe
Jeśli mieliby zwolnić niekompatybilność (ale wyrazili, że nie będą, jak sądzę), prawdopodobnie zmieniliby nazwę tego folderu na 1.9.4. - DGM
Wydaje mi się, że wydanie nazwy "cleanup" byłoby rozsądne. - ardochhigh