Nasza strona używa cookies. Dowiedz się więcej o celu ich używania i zmianie ustawień w przeglądarce. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

Python vs Pharo

Sprawdź porównanie dwóch łatwych do nauki języków, jakimi są Python i Pharo.
Python vs Pharo

Python powszechnie uważany jest za język przyjazny dla początkujących. Ale czy wiesz, że istnieje dużo łatwiejszy język programowania, który ma znacznie większe możliwości? Nazywa się Pharo, czyli nowoczesny wariant Smalltalka. Porównajmy zatem te dwa języki…


Prostota, zwięzłość i elegancja

Pharo jest dużo, dużo prostszy niż Python. Ma wszystkie sześć słów zastrzeżonych. Pełna składnia mieści się pocztówce!

Czegoś takiego nie da się zrobić w Pythonie.

Możesz nauczyć się całego języka w 15 minut: Naucz się Smalltalk z ProfStef. Czegoś takiego również nie da się zrobić w Pythonie!

Pharo jest zadziwiająco zwięzły i elegancki. Oto próbka jednowierszowych poleceń:

"Compute difference in days between two dates"
('2014-07-01' asDate - '2013/2/1' asDate) days

"Set up an HTTP server that returns the current timestamp"
(ZnServer startDefaultOn: 8080)
onRequestRespond: [ :request |
ZnResponse ok: (ZnEntity with: DateAndTime now printString) ]

"Split a string on dashes, reverse the order of the elements and join them using slashes"
$/ join: ($- split: '1969-07-20') reverse

"Sum of the primes up to 64"
(Integer primesUpTo: 64) sum

"Extract a Unix format timestamp from the 5th to 8th byte of a byte array given in hex"
DateAndTime fromUnixTime:
((ByteArray readHexFrom: 'CAFEBABE4422334400FF')
copyFrom: 5 to: 8) asInteger

"Return the weekday of a date"
'2013/5/7' asDate dayOfWeekName

"Save the HTML source of a web page to a file"
'http://www.pharo.org' asUrl saveContentsToFile: 'page.html'

"Count the number of, or show the leap years between two years"
(1914 to: 1945) count: [ :each | Year isLeapYear: each ].
(1895 to: 1915) select: [ :each | Year isLeapYear: each ].

"Encode the same string using Latin1, UTF-8 and UTF-16"
#(latin1 utf8 utf16) collect: [ :each |
(ZnCharacterEncoder newForEncoding: each)
encodeString: 'Les élèves Français' ]


Zrobienie czegokolwiek w jednym wierszu w Pythonie jest prawie niemożliwe.


Reguły “wcięć”

Wykorzystanie wcięć jako składni Pythona jest wysoce kontrowersyjne. To główny powód, dla którego tak wielu programistów nienawidzi Pythona. Jednym z problemów jest to, że przypadkowe nieprawidłowe przesunięcie kodu może spowodować bardzo subtelny i trudny do znalezienia błąd. Wypadki się zdarzają, prawda?

Pharo nie cierpi na tę chorobę.


Programowanie obiektowe

Pharo jest zorientowany czysto obiektowo od góry do dołu. Jego jasność i spójność w tym zakresie nie mają sobie równych w żadnym innym języku.

Z drugiej strony Python ma prowizoryczną implementację OOP, która wydaje się dospawana. Na przykład nie znajdziemy prawdziwej hermetyzacji w Pythonie: zmienne instancji i metody są „ukryte” lub „prywatne”, poprzedzając ich nazwy podkreśleniami. To jest bardzo niezdarne.

Python wymaga jawnego przekazania „self” jako pierwszego argumentu dla wszystkich metod instancji. To niewiarygodnie bałaganiarskie.

Obiekty Pythona nie zawsze mają oczekiwany atrybut. Na przykład właściwość length jest prawie zawsze funkcją zewnętrzną o nazwie len().


Programowanie funkcyjne

Pharo ma piękną implementację lamb w swoich „blokach”. Zapewnia to dobre możliwości funkcyjnego programowania. W rzeczywistości biblioteka klas Pharo zawiera wiele funkcyjnych konstrukcji.

W Pythonie też da się jako tako programować funkcyjnie, jednak jego lambdy są ograniczone do pojedynczego wyrażenia, zamiast zezwalać na wiele linii kodu. Żaden inny język programowania na świecie nie ma takiego ograniczenia! Waham się nazywać to bałaganiarskim i niezdarnym. (ale dobra, skłamałem: to jest bałaganiarskie i niezdarne.)


IDE

Pharo ma piękny wbudowany IDE do kodowania na żywo, który jest tak prosty i łatwy w użyciu, jak sam język. Kodowanie na żywo umożliwia przeglądanie i modyfikowanie kodu i danych w programie podczas jego działania. Ta potężna technika praktycznie eliminuje tradycyjny cykl edycji-kompilowania-testowania-debugowania, który utrudnia życie programistom od ponad pół wieku. Jest to główny powód, dla którego Pharo jest najbardziej produktywnym językiem programowania ogólnego przeznaczenia na świecie, wynika z badań przeprowadzonych przez Namcook Analytics.

Najlepszym IDE Pythona jest PyCharm. Chociaż jest to ładne IDE, nie ma wątpliwości, że jest dużo, dużo większe i bardziej złożone niż IDE Pharo. Nauczenie się tego programu na wylot zajęłoby dużo czasu.

Dodatkowo PyCharm nie obsługuje kodowania na żywo.


Produktywność i łatwość rozwoju

Python ma reputację języka produktywnego. Jednak Namcook Analytics mówi nam, że Pharo (Smalltalk) jest dwa razy bardziej wydajny niż Python. I to tylko średnio. W wielu przypadkach Pharo będzie znacznie bardziej produktywny, czasami nawet pięciokrotnie.

Krótko mówiąc, Pharo jest znacznie łatwiejszy w użyciu do programowania. Język i środowisko programistyczne praktycznie nie obciążają programisty.


Ekosystem

Python ma godny pozazdroszczenia ekosystem bibliotek. To słaby punkt dla Pharo. Mimo to Pharo jest niezwykle wszechstronny. Jest używany do wielu różnych zastosowań. Jest np. bardzo dobry do tworzenia stron internetowych, dzięki frameworkowi internetowemu Seaside i mikro frameworkowi Teapot.

Pharo jest bardzo dobry w rozwoju front-endu, dzięki PharoJS. Jest dobry do nauki danych dzięki PolyMath i Roassal. Jest dobry dla IoT i programowania wbudowanego. Zobacz tekst: Dowiedz się, jak programować.

Pharo jest używany do skryptowania silnika Unreal a także do walki z Ebolą! Jest używany do wizualizacji danych na szeroką skalę dla leków w 16 krajach, do przetwarzania języka naturalnego, do uczenia maszynowego i przetwarzania sieci neuronowych.

Smalltalk jest na ogół wszechstronny. Amerykańskie wojsko wykorzystało Smalltalk do napisania symulatora bitewnego o nazwie JWARS, który składał się z miliona wierszy. W rzeczywistości przewyższył on podobny program o nazwie STORM napisany w C ++ przez amerykańskie siły powietrzne. Wow!

Smalltalk został wykorzystany przez JP Morgana do napisania ich ogromnego systemu zarządzania ryzykiem finansowym o nazwie Kapital.

Orient Overseas Container Lines wykorzystał Smalltalk do opracowania systemu zarządzania wysyłką IRIS-2.

Nawet jeśli Pharo jest ograniczony przez swój ekosystem, z pewnością go on nie spowalnia. W rzeczywistości uważam, że można śmiało powiedzieć, że Pharo jest bardziej uniwersalny niż Python.


Wielowątkowość

Zarówno Pharo, jak i Python mogą wykorzystywać wielowątkowość, ale w Pythonie jest to utrudnione przez GIL (globalną blokadę interpretera), coś na co od dawna skarżą się programiści.


Oryginalny tekst w języku angielskim przeczytasz tutaj.

Masz coś do powiedzenia?

Podziel się tym z 120 tysiącami naszych czytelników

Dowiedz się więcej