2009-08-12 21 views
8

Obecnie uczę się Smalltalk. Wygląda bardzo podobnie do Pythona (właściwie przeciwnie, pyton jest bardzo podobny do Smalltalk), więc zastanawiałem się, jako entuzjasta Pythona, czy naprawdę warto to studiować.Różnice między Smalltalk i python?

Oprócz przekazywania komunikatów, jakie są inne istotne różnice koncepcyjne między Smalltalk i pythonem, które pozwoliłyby mi zobaczyć nowe horyzonty programistyczne?

+0

Pytanie nieoficjalne: Do czego służy program smalltalk? Jedyne, co znalazłem lata temu, to pisk, którego nie lubiłem zbyt mocno. Czego używasz do nauki. – OscarRyz

+0

Właśnie zainstalowałem skrzypienie, ale jest też GNU smalltalk. Niestety potrzebuję fink dla tego ostatniego, a ja jestem leniwy, aby zainstalować fink na moim starym laptopie. –

Odpowiedz

17

W języku Python "podstawowe" konstrukcje, takie jak if/else, zwarcie operatorów boolowskich i pętle są częścią samego języka. W Smalltalk są po prostu wiadomościami. W tym sensie, podczas gdy zarówno Python, jak i Smalltalk zgadzają się, że "wszystko jest przedmiotem", Smalltalk idzie dalej, ponieważ twierdzi również, że "wszystko jest wiadomością".

[EDYCJA] Kilka przykładów.

warunkowe oświadczenie w Smalltalk:

((x > y) and: [x > z]) 
    ifTrue: [ ... ] 
    ifFalse: [ ... ] 

Uwaga jak and: jest tylko wiadomość na Boolean (sama wytwarzane w wyniku przechodzenia wiadomość > do x), a drugi argument and: nie jest zwykły wyraz , ale blok, umożliwiający leniwą (tj. zwarcie) ocenę. Tworzy to kolejny obiekt Boolean, który obsługuje również komunikat ifTrue:ifFalse:, pobierając dwa dodatkowe bloki (to jest lambda) jako argumenty i uruchamiając jeden lub drugi w zależności od wartości wartości Boolean.

+6

wszystko-to-a-mutable-wszystko meta-szaleństwo ... bardzo mi się podoba. –

+2

oh ... to jest fajne. Więc nawet jeśli jest wiadomość do bloku kodu? niewiarygodne ... –

+0

Spójrz na badania w Viewpoints ... które zaszokują twój umysł. –

7

W przeszłości Smalltalk miał niesamowite wbudowane IDE. Brakowało mi tego IDE w wielu językach.

Smalltalk ma również piękną właściwość, że jest zwykle w żywym systemie. Zaczynasz czysto i zaczynasz modyfikować rzeczy. Jest to w zasadzie system trwałego przechowywania obiektów. Biorąc to pod uwagę, jest to zarówno dobre, jak i złe. To, co uruchamiasz, jest częścią twojego systemu i częścią tego, co wysyłasz. System może być ładnie ustawiony przed rozprowadzeniem. Wadą jest to, że system ma wszystko, czego używasz jako część tego, co wysyłasz. Musisz być bardzo ostrożnym pakowaniem dla redystrybucji.

Mówiąc to, minęło już trochę czasu, odkąd pracowałem z Smalltalk (około 20 lat). Tak, wiem, zabawne czasy dla tych, którzy robią matematykę. Smalltalk to przyjemny język, zabawny program, zabawny w nauce, ale trochę trudniej jest go wysłać.

Ciesz się z nim graniem, jeśli to zrobisz. Gram z Pythonem i go kocham.

Jacob

+0

IDE wygląda całkiem uroczo. Teraz gdybym mógł zobaczyć kod ... byłoby jeszcze lepiej ... –

2

Aspekt język często nie jest tak ważne, a wiele języków są dość monotonne,

Z tego co widzę, Python i Smalltalk OOP akcji ideały ... ale są bardzo różne w ich realizacji i mocy w przedstawionym interfejsie językowym.

rzeczywista wartość jest w co subtelne różnice w składni pozwala w kategoriach realizacji. Spójrz na Self i inne meta-ciężkie języki.

Przejrzyj składnię i bezpośrednią semantykę do tego, do czego subtelne różnice umożliwiają wdrożenie.

Na przykład:

Wszystko w Smalltalk-80 jest dostępny dla modyfikacji z poziomu uruchomionego programu

Jakie różnice między Python i Smalltalk pozwalają głębiej maniplation jeśli jakieś? W jaki sposób język umożliwia implementację kompilatora/środowiska wykonawczego?

9

Jako ktoś nowy w smalltalk, dwie rzeczy, które naprawdę mnie uderzą, to system oparty na obrazie, a to odbicie jest wszędzie. Te dwa proste fakty wydają się prowadzić do wszystkiego chłodne w systemie:

  • Obraz oznacza, że ​​robisz wszystko przez manipulowania obiektami, w tym pisania i kompilowania kodu
  • Reflection pozwala sprawdzić stan dowolny obiekt. Ponieważ klasy są obiektami, a ich źródłem są obiekty, można sprawdzić i manipulować kodem
  • Masz dostęp do bieżącego kontekstu wykonywania, dzięki czemu możesz rzucić okiem na stos, a stamtąd skompilowany kod i źródło tego kodu i tak na
  • Stos jest obiektem, więc można go zapisać, a następnie wznowić później. Bingo, kontynuacje!

Wszystkie powyższe zacznie się razem w chłodnych sposoby:

  • przeglądarka pozwala zbadać źródło dosłownie wszystko, łącznie z VM w Squeakiem
  • Można dokonać zmian, które wpływają na program na żywo, więc nie musisz restartować i nawigować po to, nad czym pracujesz
  • Jeszcze lepiej, gdy program zgłasza wyjątek, możesz debugować kod Live. Naprawiasz błąd, aktualizujesz stan, jeśli stał się niespójny, a następnie kontynuujesz program.
  • Przeglądarka powie Ci, czy uważa, że ​​zrobiłeś literówkę.
  • To absurdalnie łatwe przeglądanie w górę iw dół hierarchii klas lub sprawdzanie, na jakie wiadomości odpowiada dany obiekt lub który kod wysyła daną wiadomość, lub które obiekty mogą otrzymać daną wiadomość
  • można kontrolować i manipulować stan dowolnego obiektu w systemie
  • można zrobić jakieś dwa obiekty dosłownie zamieniają się miejscami ze stają :, który pozwala robić szalone rzeczy, jak odgałęzienie jakichkolwiek obiekt, a następnie leniwie wyciągnij go z innego miejsca, jeśli zostanie wysłana wiadomość.

System obrazowania i refleksji sprawił, że wszystkie te doskonale naturalne i normalne rzeczy dla smalltalkera trwały około trzydziestu lat.

1

Sam język Smalltalk jest bardzo ważny. Zawiera mały zestaw potężnych, ortogonalnych funkcji, które czynią język wysoce rozszerzalnym. Jak Alan Lovejoy mówi: "Smalltalk jest również zabawny, ponieważ definiowanie i używanie specyficznych dla domeny języków nie jest po myśli, jest to jedyny sposób, w jaki działa Smalltalk." Notacja językowa jest niezwykle ważna, ponieważ: "Różnice w sile ekspresji użytej w notacji programowej mają znaczenie". Aby uzyskać więcej informacji, przeczytaj cały artykuł here.