2008-09-23 13 views

Odpowiedz

24

nie ma korzyści, jakie można osiągnąć poprzez przełączanie z Perl Python. Nie ma także żadnej korzyści, którą można uzyskać, przechodząc z Python na Perl. Obaj są równie zdolni. Wybierz narzędzia w oparciu o to, co znasz, i problem, który próbujesz rozwiązać, zamiast myśleć o tym, że jeden jest w jakiś sposób lepszy od drugiego.

Jedyną realną zaletą jest to, że przechodzisz z języka, którego nie znasz na język, który znasz, w którym to przypadku Twoja produktywność prawdopodobnie wzrośnie.

+2

Mówicie: „Wybierz swoje narzędzia w oparciu o to, co wiesz, a problem staramy się rozwiązać”, ale w tej chwili nie wiem język i nie wiem, jakie aspekty problemu, który próbuję rozwiązać, są dostosowane do jakiego języka. Właśnie dlatego zadałem to pytanie. – raldi

+0

@raldi - Perl 6 nie różni się zbytnio od Perla 5, więc znasz większość jednego języka. Z tego co widzę, Python nie różni się nawet od Perla 5, a duża wiedza Perla przeniesie się do Pythona. –

+1

Nic z tego nie dodaje żadnych informacji, które pomagają pytającym (i mnie) decydować w dowolny sposób. To dość próżna odpowiedź. – reinierpost

12

Moim zdaniem, składnia Pythona jest znacznie czystsza, prostsza i spójna. Struktury danych zagnieżdżonych można definiować wszędzie tak samo, niezależnie od tego, czy planujesz przekazać je do funkcji (lub zwrócić je z jednego), czy użyć bezpośrednio. Bardzo lubię Perla, ale gdy tylko nauczyłem się wystarczająco dużo Pythona, aby go "zdobyć", nigdy się nie odwróciłem.

Z mojego doświadczenia wynika, że ​​losowe fragmenty Pythona są bardziej czytelne niż losowe fragmenty Perla. Różnica naprawdę sprowadza się do kultury wokół każdego języka, gdzie użytkownicy Perla często doceniają spryt, podczas gdy użytkownicy Pythona częściej wolą jasność. To nie znaczy, że nie możesz mieć jasnego Perla lub przebiegłego Pythona, ale są one znacznie rzadziej spotykane.

Obie są w dobrym języku i rozwiązują wiele podobnych problemów. Osobiście skłaniam się ku Pythonowi, jeśli nie z innego powodu, wydaje się, że zyskuje on na znaczeniu, podczas gdy Perl wydaje się tracić użytkowników na Python i Ruby.

Zwróć uwagę na obfitość łasic w powyższym tekście. Szczerze mówiąc, to naprawdę sprowadza się do osobistych preferencji.

+0

Twoja odpowiedź prawdopodobnie należy do przeciwnego pytania; to pytanie zawiera link. – tzot

+5

Problem polega na tym, że losowe fragmenty Pythona czasami nie działają, ponieważ miejsce wklejenia nie zachowało poprawnego odstępu. – MkV

13

Python nie ma Junctions. W rzeczywistości myślę, że tylko Perl ma już złącza. :-)

+0

Ja i inni utworzyliśmy "skrzyżowania" dla Pythona, po prostu nie nazwaliśmy go jako takiego, gdzie można zrobić rzeczy takie jak: al = [1, 2, 3, 4]; al1 = Wszystkie (al) + 1; jeśli Dowolny (al)> 3: drukuj "jakiś prawdziwy". – tzot

+4

Połączenia w Perlu 6 mogą znacznie więcej. Czy Twoje zjazdy są automatycznie odczytywane? –

+0

Nie, nie moja. Czy autotreading junction już poprawia szybkość twoich programów? Jeśli tak, z jakiego powodu? – tzot

5

Python ma jedną ogromną zaletę: jest zaimplementowany, istnieje raczej stabilny kompilator.

Perl 6 jest językiem raczej wizjonerskim i nie jest jeszcze wystarczająco stabilny do produkcji. Ale ma zestaw bardzo fajnych funkcji, między innymi: skrzyżowania, gramatyki (tak, możesz pisać pełne parsery z Perla 6 "wyrażeń regularnych"), obsługi unicode na poziomie grafem, leniwych list i potężnych makr.

W szczególnym przypadku, gdy znasz Perl 5, bardzo szybko poznasz składnię Perla 6.

Bardziej obszerna lista ciekawych funkcji, które oferuje Perl 6, patrz: the FAQ.

+0

Twoja odpowiedź prawdopodobnie należy do * przeciwnego * pytania. – tzot

+0

Jestem facetem z Perl, ale dostajesz +1 za udzielanie Perl6 jego rekwizytów jako "wizjonerski język". – Axeman

4

Nie powiedziałeś, dlaczego chcesz odejść od Perla *. Jeśli moja kryształowa kula funkcjonuje dzisiaj, to dlatego, że nie znasz w pełni języka i to cię frustruje.

Trzymaj się z Perlem i dobrze ucz się języka. Jeśli to zrobisz, pewnego dnia będziesz guru i wiesz, dlaczego twoje pytanie jest nieistotne. Oświecenie przychodzi do tych, którzy go szukają.

  • Nazwałeś to "Perl5", ale nie ma takiego języka. : P
+1

Uważam Perl5 za język. Jestem Fiver!: D – skiphoppy

+2

Perl 5.10 jest na zewnątrz, ale powiedziałeś, że Perl 5 nie istnieje? –

+3

Wręcz przeciwnie, na PerlMonks iw "Organizacji PerlMonks" w PerlMonks "Organizacji Perl", w PerlMonks, obydwaj uważają Perla5 za język, a Perl6 za * inny * (ale powiązany) język. Czytałem pytanie nie jako "chcę uciec od Perla", ale raczej jako "Wierzę, że Perl5 już niedługo odejdzie, więc gdzie mam się udać, kiedy to się stanie?", W takim przypadku poprawna odpowiedź brzmi naprawdę " Perl5 nie zniknie w najbliższym czasie, więc nie martw się o to. " –

4

Python ma dużą zaletę, że jest dostępny w formie gotowej do produkcji już dziś.

Python ma Jython i IronPython, jeśli potrzebujesz ściśle współpracować z Javą lub .NET clr.

Perl 6 ma zalety bycia opartym na tych samych zasadach co Perl (1-5); Jeśli podoba ci się Perl, spodoba ci się Perl 6 z tych samych powodów. (Jest więcej niż jeden sposób, aby to zrobić, itp.)

Perl 6 ma tę zaletę, że jest tylko częściowo zaimplementowany: Jeśli chcesz włamać się do wewnętrznych elementów językowych lub pomóc zdefiniować standardowe biblioteki, jest to świetny czas zacząć w Perl 6.

Edit: (2011) to wciąż wielki czas, aby włamać się na wewnętrznych Perl6, ale teraz jest znacznie bardziej dojrzały, nadające dystrybucja Perl6, Rakudo Star. Jeśli chcesz dziś korzystać z Perl6, to świetny wybór.

+0

Jednym z pól, w których Python jest lepszy od rodziny Perla jest obfitość potężnych bibliotek kreślenia, analizy danych i uczenia maszynowego w Pythonie. Rodzina Perla również pozostaje w tyle. Poza tymi obaj są dobrzy. –

3

Wyrejestrowanie pytona przez IMO, zwł. kiedy próbujesz reprezentować coś takiego jak operator perl/e, jak w s/whatever/somethingelse/e, staje się dość powolny. Tak więc w razie wątpliwości możesz potrzebować pozostać przy Perl5 :-)

14

Perl 6 ma kilka świetnych funkcji na pytonie. Myślę, że są to wszystkie funkcje, które Python 3 nie posiada:

  • rozszerzalny, ale opcjonalny system typu
    • w tym multi-metody wysyłki oraz wpisać sprawdzanie
    • nawet do poleceń wbudowanych i „operatorów”
    • z podzbioru typów
  • funkcje: dla klas dla kodu chwilowe ponownego wykorzystania (aka wstawek)
    • z dodatkowymi zaletami ponad większości wstawek:
    • kompilacji kontroli nazwa metody kolizji
    • umiejętność wymagać, w definicji roli, że niektóre metody są obecne w klasie gospodarza, a następnie zadzwonić metody klasa hosta w implementacji roli.
  • Grammars (kompozycje regexes zwracające strukturyzowanych danych)
  • Silne wydłużone Wyrażenia regularne. Bardziej komfortowe niż wbudowane w Pythona funkcje regex.
  • Skrzyżowania i rodzaj skrzyżowania
  • Metaoperators
  • Możliwość definiowania operatorów okołorostek, postcircumfix, Infix, przedrostków i Postfix.
  • Teoretycznie możliwość pracy z AST jako dane strukturalne.(aka: LISP makra)
  • bloku scopingu
  • * przy określenie wytwarzania zamknięcia z dowolnego wyrazu
  • Pośrednia konstrukty współbieżności ([] meta, węzły)
  • deklaratywne konstrukty współbieżności (hiper o)
  • Podmenu MAIN zamienia swoją sygnaturę funkcji na interfejs wiersza poleceń i przewodnik użycia wiersza poleceń.
  • Lazy listy (ale można toczyć własne z generatorów)

I dzieli się z Pythonem następujące zalety nad Perl 5:

  • Pojęcie „klasa”, słowo kluczowe class i związany cukier **:
    • Słowo kluczowe własnym
    • getter/setter cukier z koncepcją prywatnych danych
  • dobrze zdefiniowane, dostępny protokół metaobiektów
  • wielkie wsparcie Unicode
  • wielka data/support czas wybudowany w
  • W ogóle „baterie włączone” - wiele funkcji wbudowanych
  • zakaz globalnie scoped domyślnie zmienne

Implementacja Perl6 nie jest w 100% kompletna lub dostrojona na tyle, aby mogła być użyta dla pewnych wartości aplikacji "wrażliwych na wydajność". Ale 80-90% specyfikacji wymaganej dla 95-99% przypadków użycia jest kompletne w Rakudo, teraz *

* Jedno rażące zaniedbanie to jakiekolwiek zabezpieczenie asynchronicznych operacji we/wy. Ta część specyfikacji jest w ciągłym ruchu.

** Choć popularny Moose Projekt przewiduje to w Perl 5.