Jak określić wersję pakietu wymaganą w pakiecie?

9

Mam teraz kilka pakietów, aw sekcji PackageRequires chciałbym umieścić w nim wszystkie wymagane pakiety, wygląda na to, że wymaga nazwy i wersji. Gdzie określasz numer wersji? Na przykład mam (cl-lib „0,5”), ale jaki jest najlepszy sposób określenia minimalnej wersji, której mogę używać? Widzę aktualną wersję, ale jaki jest najlepszy sposób na określenie minimalnej potrzebnej wartości? Ponadto niektóre wymagane pakiety nie mają określonej wersji w swoim pliku. W takich przypadkach, co jest zalecane?

użytkownik78810
źródło

Odpowiedzi:

7

Użyj wersji, dla której napisałeś pakiet. To najbezpieczniejszy poziom podstawowy, jaki możesz uzyskać, chyba że wyraźnie zaznaczysz każdą używaną funkcję. Odtąd możesz mieć tylko nadzieję, że opiekunowie tego pakietu nigdy nie po cichu przerywają wstecznej zgodności…

Jeśli chodzi o pakiety, które nawet nie mają żadnego numeru wersji, w ogóle ich nie używałbym. Jeśli opiekun nie zadaje sobie nawet trudu, aby zapewnić odpowiednią wersję, jak możesz im zaufać w czymkolwiek innym?

księżycowy
źródło
1

Moja rekomendacja:

  • Zacznij od funkcji, zmiennych, makr itp., Których faktycznie używa Twój kod. Jeśli używa czegoś, co zostało wprowadzone w danej wersji Emacsa lub w bibliotece źródłowej funkcji, zacznij od tego jako wersji minimalnej.

  • Wersja funkcji, której używasz, może nie odpowiadać oryginalnej wersji funkcji, gdy została wprowadzona po raz pierwszy. Być może dodano więcej argumentów. Sprawdź, czy ma to znaczenie dla twojego konkretnego korzystania z niego. Jeśli nie, możesz to zignorować. Jeśli tak, to znajdź najstarszą wersję źródłową, która obsługuje to, czego oczekuje Twój kod.

  • Test. Uzyskaj kopię dowolnej wersji biblioteki, którą uważasz za obsługiwaną jako minimum, i wypróbuj ją.

  • Czasami wprowadzono drobne zmiany w funkcji, a Twój kod zasadniczo nie potrzebuje nowszej wersji. Ale może wymagać dostosowania, aby obsługiwał więcej niż jedną wersję (jeśli tego właśnie chcesz). Może być konieczne sprawdzenie, czy funkcja istnieje ( fboundp) lub czy ma prawidłową sekwencję podpisu / wywołania. W tym drugim przypadku subr-aritymoże pomóc w przypadku wbudowanych funkcji, ale może być konieczne użycie condition-casefunkcji Lisp (wywoływanie z rozszerzoną liczbą argumentów i obsługa błędnej liczby argumentów przez wywoływanie z mniejszą liczbą argumentów).

Rysował
źródło