Dla jakiego rodzaju aplikacji Python jest złym wyborem? [Zamknięte]

21

Właśnie zacząłem uczyć się języka Python i chciałbym uzyskać więcej informacji na temat języka.

Zdaję sobie sprawę, że w wielu przypadkach Python jest wolnym językiem w stosunku do C lub C ++. Dlatego Python prawdopodobnie nie jest najlepszym wyborem dla aplikacji, które muszą działać tak szybko, jak to możliwe.

Poza tym wygląda na to, że Python jest świetnym językiem ogólnego przeznaczenia, łatwym do czytania i pisania. Dostępne biblioteki zapewniają ogromną funkcjonalność. Gdzie poza aplikacjami krytycznymi pod względem wydajności, używanie Pythona (i dlaczego) jest złym wyborem?

Casey Patton
źródło
8
Nie ma czegoś takiego jak świetny język ogólnego przeznaczenia. Co pięć lat nowy zastępuje stary, który przetrwa tylko na niszowych rynkach. Lisp, Fortran, Pascal, Basic, Ada, Perl ...
mouviciel
3
@mouviciel: Pascal a niszowy język? Ok, jego nazwa została zmieniona na Delphi, aby pasowała do Borland / CodeGear / Embarcadero IDE, ale Delphi jest nadal (w oparciu o) Pascalem i chociaż stracił udział w rynku, nie nazwałbym go niszowym językiem. I ani Podstawowy w tej kwestii. Visual Basic jest nadal Basic. Zarówno Delphi, jak i Visual Basic są używane w wielu firmach ...
Marjan Venema,
7
„Python jest wolnym językiem w stosunku do C lub C ++”. Powinieneś to zrobić przy użyciu określonego testu porównawczego, którego użyłeś. W niektórych przypadkach (programy powiązane z We / Wy, które wywołują wiele wywołań systemowych) Python jest tak szybki jak C, ponieważ jest to tylko opakowanie wokół biblioteki C.
S.Lott,
@ S.Lott Prawda, a PyPy może czasami rywalizować z JVM, a nawet C / C ++
yati sagade
Kiedy byłem na uniwersytecie, Pascal był wybranym językiem nauczania. Potem minęło kilka dziesięcioleci i teraz jej Java wydaje się. Koduję kilka języków profesjonalnie (około pół tuzina), ale nadal koduję Delphi dla zabawy.
Mawg

Odpowiedzi:

22

Oprogramowanie skierowane na cele wbudowane z ich ograniczonymi zasobami. Większość procesorów na tej planecie albo nie może uruchomić Pythona z powodu niewystarczających zasobów, albo nikt nie przesłał wersji do tej architektury. Większość procesorów, nawet teraz, ma mniej niż megabajt pamięci.

uɐɪ
źródło
… Dopóki ktoś nie stworzy portu Arduino w Pythonie. Zaczekaj!
Spoike 23.11.11
5
@Przyklucz, że ten link służy do uruchamiania Pythona na komputerze i komunikowania się tylko szeregowo z arduino. Arduino nie uruchamia kodu python
basarat
1
@BasaratAli: Oświadczenie - napisałem swój komentarz w żartach. ;-)
Spoike 23.11.11
14

Dwa miejsca, które przychodzą mi do głowy, to rzeczy wymagające dużej współbieżności, do których skorzystałbym z Erlanga. Lub obliczenia numeryczne o dużej wytrzymałości, których prawdopodobnie spróbowałbym użyć w Fortranie.

Zachary K.
źródło
1
Czy Fortran wciąż wyprzedza C / C ++ w obliczeniach numerycznych? ...
Sardathrion - Przywróć Monikę
1
Wiesz, że nie wiem. To nie jest obszar, który mam duże doświadczenie. Ale wiem, że ludzie z Fortranu spędzili ponad 30 lat, aby ich narzędzia działały naprawdę szybko.
Zachary K
@Sardathrion - Trudno powiedzieć. Tylko naturalne, rozumiesz. Ale kilka miesięcy temu Lionel ze sławy Intel Fortran oświadczył, że ich linia fortran sprzedaje każdy inny produkt z linii rozwoju (co nie jest tak wąskie).
Gawron
@Idigas: Rzeczywiście wiem, że Fortran jest szeroko wykorzystywany, ale może to wynikać ze starszego kodu, a nie ograniczeń optymalizacji. Może powinienem zadać to pytanie ...
Sardathrion - Przywróć Monikę
Pamiętaj też, że wielu ludzi, którzy wykonują obliczenia numeryczne, zna Fortran naprawdę dobrze i jest to ich narzędzie wyboru. Więc kiedy będą musieli wykonać takie zadanie, sięgną po Fortran.
Zachary K
8

Ponieważ Python jest językiem dynamicznie typowanym, bez sprawdzania czasu kompilacji, refaktoryzacja dużego projektu Pythona, który nie ma obszernych testów jednostkowych, będzie trudna.

Więc jeśli masz duży projekt, który musi być utrzymywany i modyfikowany przez długi czas, a twój zespół nie jest zaangażowany w tworzenie automatycznych testów dla wszystkiego, to lepiej jest użyć Java lub C #.

Eric Wilson
źródło
17
Refaktoryzacja każdego dużego projektu bez testów jednostkowych jest bardzo trudna.
Sardathrion
9
To prawda, ale znacznie trudniejsze bez bezpieczeństwa typu.
Eric Wilson,
3
@Eric Wilson - Nawet wtedy mocne pisanie może dać fałszywe poczucie bezpieczeństwa ... Kompiluje, wysyła!
Mark Booth
2
To może nie być 100% na temat pytania, ale nadal jest to ważny punkt. W porównaniu z takimi językami jak Java czy C # brakuje wsparcia dla narzędzi, szczególnie refaktoryzacji dla języków dynamicznie typowanych. Już zmiana nazwy rzeczy może być wyczerpującym ćwiczeniem w dużych projektach Python.
OliverS,
Czy Python wymaga osobnego środowiska wykonawczego lub maszyny wirtualnej, czy może wygenerować pojedynczy samodzielny plik wykonywalny?
Jim In Texas
2

Jeśli główny nacisk kładziony jest na tworzenie GUI systemu Windows, polecam przeciwko CPython, ponieważ brakuje dobrych projektantów formularzy (w porównaniu do używania .Net).

Jednak IronPython działa na .Net, a do wyboru są dwa środowiska IDE z projektantami formularzy: Visual Studio i SharpDevelop. W rzeczywistości narzędzia Python Tools dla Visual Studio mogą być używane zarówno w CPython, jak i IronPython, co jest całkiem fajne, chociaż jeszcze tego nie próbowałem ...

AndyHasIt
źródło
2

To naprawdę zależy od tego, co rozumiesz przez „zły wybór”.

Jeśli masz na myśli aplikacje, w których korzystanie z Pythona jest bardzo trudne, to jest ich stosunkowo niewiele: głównym, który przychodzi na myśl i o którym jeszcze nie wspomniano, jest kod wymagający wysokiego poziomu poprawności w przypadku języków o wyrafinowanych systemach typów (Haskell, języki z typem zależnym) ) są lepszymi opcjami.

Jeśli masz na myśli aplikacje, w których Python nie jest optymalny (to znaczy, że są lepsze wybory), to jest ich więcej, ale są one również bardziej subiektywne. Na przykład, z mojego, co prawda, ograniczonego doświadczenia, praca na kompilatorach i interpretatorach jest znacznie łatwiejsza dzięki algebraicznym typom danych, dopasowaniu wzorców i bardziej funkcjonalnym funkcjom niż Python. Jednak wyczerpujące zestawienie takich aplikacji nie jest możliwe, ponieważ różnią się w zależności od osoby.

Tikhon Jelvis
źródło
2

Jest idealny do szybkiego pisania skryptów ze względu na swoją ekspresyjność i szeroką gamę bibliotek pomocniczych.

Dynamiczne sprawdzanie typów i brak wyraźnej deklaracji zmiennych sprawiają, że jest to zły wybór dla dużych projektów obejmujących setki tysięcy, a nawet miliony wierszy kodu. To samo dotyczy systemów o znaczeniu krytycznym lub bezpieczeństwa. Na przykład w systemie awioniki byłoby całkowicie niedopuszczalne, aby system zawiódł z powodu błędu, który mógł zostać wykryty w czasie kompilacji.

Mike Collins
źródło
0

Cóż, tak jak ty, zaczynam też od Pythona. Ale dla mnie w kontekście uczenia maszynowego i analizy danych.

Właśnie zdobyłem całą świeżą wiedzę o Javie 8 i jej nowych bibliotekach zorientowanych na strumień.

Bardzo podobało mi się płynne działanie nowych bibliotek strumieniowych Java 8 i to, jak blisko czułem się dzięki bibliotekom iskrowym Apache. Kiedy wszedłem do Pythona, oczekiwałem tego samego i jeszcze więcej.

Widziałem więcej. Ale o wiele mniej. Słaba dokumentacja, choć było jej dużo; brak płynności i faktycznie zgadywałem, czy metoda rządzi nowym przedmiotem, czy działa na tym; nic blisko mapy / zmniejszenia itp. Byłem zaskoczony, że byłem rozczarowany.

Jednak od samego początku nie spodziewałem się, jak łatwo będzie nauczyć się języka. Okazało się, że miałem rację: niespójny, nie intuicyjny, trudny do nauczenia. Ale to było moje doświadczenie bycia całkiem dobrym we wszystkim, co lubi Java.

Racja
źródło