2016-06-24 61 views
6

Wskazówki do typów są teraz dostępne w wersji Python 3.5. W opisie (PEP 484) celów (i nie-bramek) są narażone wyraźnie:Korzystanie z podpowiedzi do przetłumaczenia języka Python na język Cython

uzasadnienie i cele

to PEP ma zapewnić standardową składnię typu adnotacji otwarcie kod Pythona do łatwiejszej analizy statycznej i refaktoryzacji, potencjalnego sprawdzania typu środowiska wykonawczego i (być może w niektórych kontekstach) generowania kodu z wykorzystaniem informacji o typie. [...]

Z tych celów analiza statyczna jest najważniejsza.

Non-cele

Korzystanie podpowiedzi typu dla wydajności optymalizacje pozostawiamy jako ćwiczenie dla czytelnika.

Z drugiej strony, Cython używa od dawna składni statycznego w celu zwiększenia wydajności. Zwykle ludzie przepisują niektóre fragmenty kodu za pomocą składni języka Cython, kompilują je, a następnie importują z powrotem jako niezależne moduły. Bolesna robota to wszystko na dużej podstawie kodu. Ale najgorsze jest to, że nawet jeśli poprawnie wykonasz wszystkie powyższe kroki, nie masz żadnej gwarancji, że będziesz miał prawdziwą poprawę (z powodu problemów z kompatybilnością, które mogą być spowodowane, jeśli używasz niektórych modułów).

Byłoby to trudne zadanie napisać narzędzie, które wykorzystuje ten nowy rodzaj wskazówki rzeczy rozrzucone w kodzie do automatycznie przełożyć je do Cython składni i ewentualnie zrobić resztę pracy (skompilować je w moduły i importować wszystko je z powrotem)? Byłoby zatem możliwe udostępnienie tej samej składni języka we wszystkich podstawach kodu.

Teoretycznie możliwe jest napisanie takiego narzędzia, ale nie jestem pewien, czy warto (pod względem złożoności pisać i rzeczywista poprawa, która byłaby wynikiem).

Dzięki.

+0

Kiedy użyłeś 'cython', ile konwersji w Pythonie dokonałeś? Myślałem, że ideałem jest skupienie się na podzbiorze, w którym liczy się przyspieszenie, a resztę pozostawiamy w Pythonie. Lub użyj 'cython' jako pomostu do istniejącego kodu C++/Fortran. – hpaulj

+0

Zgadzam się częściowo z Państwem. Ale byłoby tak lepiej, jak sądzę, mieć zunifikowaną składnię. Ale jest ok, jak powiedział @hpaulj, mój temat nie jest dla Stackoverflow. Przepraszam. – GustavoIP

Odpowiedz

3

Ktoś jeszcze zapytał o 484 i Cythona, PEP-484 Type Annotations with own types, a ja odpowiedziałem wątkiem z kilku miesięcy wstecz o 484 i numpy.

Mam wątpliwości co do przydatności tego tematu dla Stackoverflow. Jest to temat badań, a nie pytanie "jak rozwiązać ten problem z kodowaniem".

W oparciu o ograniczony odczyt wskazówki typu w 484 są wstępne, a ich użycie ogranicza się do sprawdzania kodu opracowanego przez 484 autorów. Py3 ma adnotacje od dłuższego czasu, ale widziałem bardzo niewiele przykładów kodu, który je zawiera. Z pewnością nie w kodzie numpy, na którym się tutaj skupiam.

Kolejnym punktem jest to, że cython i numpy (i numba) są używane z Py2 tak samo, jeśli nie więcej, niż Py3. Więc najnowsze dzwony-n-gwizdy w Py 3.5 są na ogół ignorowane przez tych użytkowników. Operator @ to jedyny ostatnio dodany użytkownik, który ma wartość numpy.

Prosimy o odpowiedź, ale mogę zgłosić to pytanie do zamknięcia, ponieważ jest to duplikat lub temat wyłączony.

Moduł typing jest rozwijany w https://github.com/python/typing

mypy jest sprawdzanie typu w oparciu o 484, https://github.com/python/mypy (zabawne, ~/mypy jest katalog gdzie umieścić wszystkie moje skrypty zatem badanie).

To gdzie cięcia edge Trwa sprawdzanie typu Pythona, a nie tutaj.

+0

Niestety, nie znalazłem nic o tym, gdy szukałem tutaj w Stackoverflow i Google. Dziękuję za Twój czas! – GustavoIP