Python rpm'y i pliki *.py *.pyc *.pyo
wrobell
wrobell w ite.pl
Wto, 10 Wrz 2002, 14:11:45 CEST
On Tue, Sep 10, 2002 at 01:46:59PM +0200, Mateusz Korniak wrote:
> On Tuesday 10 September 2002 13:21, wrobell wrote:
> > On Tue, Sep 10, 2002 at 01:04:57PM +0200, Mateusz Korniak wrote:
> > > > A rzeczywiście. Nigdy nie wpadłem na pomysł, żeby w ten sposób to
> > > > zrobić... Tylko trzeba to nieszczęsne -O zapodać.
> > >
> > > To nie jest 'nieszczesne'. Użytkownik powinien miec świadomość kiedy chce
> > > używać -O ( co może zmienić zachowanie programu (pomijając wątpliwy efekt
> > > przyspieszenia)), a kiedy nie. Oczywiście prawidłowe (bez błędów) *.py
> > > powinny działać tak samo w obu przypadkach .. ale to może być tylo
> > > teoria.
> > >
> > > > 2. W przypadku braku .pyc i _podania_ -O oraz braku .pyo i nie podania
> > > > -O, powinien zaimportować dostępną wersję.
> > >
> > > IMHO nie powinien. (patrz wyżej)
> >
> > No to się nie zgadzamy. To tak jakbyś musiał jakieś chocki
> > klocki odstawiać, żeby uruchomić programy w C skompilowane
> > raz z -O2, a raz z -Os, albo w przypadku Javy bez -O lub z -O.
> >
> Ta analogia jest zła IMHO.
> Przenosząc ją na grunt gcc, Twoje rozwiązanie pozwalałoby kompilatorowi gcc
> wybierać/losować czy ma kompilować poszczególne pliki źródłow używając
> -DNODEBUG albo i nie, i tak nonsensownie posklejany kod dystrybuować.
>
> Zauważ że jeśli gcc wygeneruje kod który działa inaczej* pod różnymi trybami
> opytmalizacji to jest to błąd kompliatora. Natomiast gdy program dziala
> inaczej* przy użyciu lub nie NODEBUG to na ogół jest to wina programisty.
>
> I wola programisty C/C++ powinno być czy kod jest kompilowany z -DNODEBUG czy
> bez, a gcc powinno konsekwentnie podążać za wola programisty.
Mówimy o *uruchamianiu*! Nie kompilacji.
Nie możesz tego, jak to napisałeś, "przenieść na grunt gcc". Można to
odnieść np.: do funkcji exec. Wyobrażasz sobie systuację gdy dla różnych
optymalizacji musiałbyś używać funkcji execO1, execO2, itp?
Albo Java na ten przykład. Klasy Javy możesz kompilować z optymalizacją
lub bez (opcja -O). Jakkolwiek został skompilowany dany kod, to możesz
go uruchomić za pomocą wirtualnej maszyny, bez żadnych specjalnych
kombinacji.
> I teraz analogicznie, wolą programisty Pythona jest czy chce uruchamiać
> programy z asercjami i mieć zdefiniowane __debug__ w kodzie na 1/0, czy nie
> ( -O), a python powinien konsekwentnie podążąć za tą wolą.
>
> Ufff, czy teraz się zgadzamy ? :)
Nie.
Programy w C kompilujemy pod daną architekturę i z optymalizacją -O2.
Programy w Pythonie, jeśli istnieje taka możliwość, też powinny być
dystrybuowane w postaci zoptymalizowanej.
> Jeśli nawet nie to i tak ma to mniejsze znaczenie (bo python działa tak ja
> chce i sądze ze dobrze) wobec drugiego pytania. Czemu dalej dystrybuować
> *.pyc/ *.pyo a nie tak jak mi się wydaje sensowniej *.py/ *.pyo ?
Źródła dystrybujemy w .src.rpm.
> * działa inaczej - rozumiem generuje inne wyniki dla tych samych danych, a nie
> zużywa inną ilość zasobów.
Nie zauważyłem, żeby .pyo generowały inne wyniki niż .pyc dla tych
samych danych. Jakiś przykład?
wrobell <wrobell w ite.pl>
Więcej informacji o liście dyskusyjnej pld-devel-pl