Smalltalk este perceput pe scară largă ca un limbaj vechi, muribund—un antic dintr-o epocă trecută. Nimic nu poate fi mai departe de adevăr.
Smalltalk este încă foarte relevant. Este un limbaj de instruire excelent pentru predarea programării persoanelor care nu au experiență tehnică. Este un limbaj de prototipare superlativ pentru startup-uri. Este un limbaj industrial-putere întreprindere utilizat de către întreprinderile mari și mici din întreaga lume. Există motive întemeiate pentru a lua în considerare utilizarea Smalltalk modern astăzi, deoarece multe s-au schimbat în ultimii ani pentru a-și îmbunătăți perspectivele.
nu trebuie să utilizați Smalltalk în producție astăzi, dar încercați să codificați ceva în Smalltalk și să vedeți cum se simte. Ar trebui să se simtă familiar, deoarece implementarea Smalltalk a paradigmei orientate pe obiecte (oo) este atât de excelentă încât a influențat o întreagă generație de limbi OO, cum ar fi Objective-C, Python, Ruby, CLOS, PHP 5, Perl 6, Erlang, Groovy, Scala, Dart, Swift și așa mai departe.
învățând Smalltalk, veți înțelege cum au apărut toate aceste caracteristici utile în limbile OO de astăzi. Învățarea Smalltalk ar putea, de asemenea, să vă ofere un avantaj mare în abilitățile de programare în rândul colegilor dvs. și ar putea fi un instrument excelent pentru predarea programării pentru începători.
- ce ne-a dat Smalltalk?
- dar cum poate învățarea Smalltalk să mă facă un dezvoltator mai bun?
- cum funcționează Smalltalk? Abordarea bazată pe imagine a programării
- totul în Smalltalk este un obiect
- reflecție computațională în Smalltalk
- renașterea lui Smalltalk
- moștenirea Smalltalk: Efectuarea de programare distractiv
ce ne-a dat Smalltalk?
Smalltalk are o moștenire bogată de contribuții la industria de software. Uită-te la această listă de caracteristici și tehnologii pe care le-a introdus:
- Smalltalk a introdus lumea în mașina virtuală lingvistică (sau VM), care permite software-ului să fie independent de platformă. Aceasta este aceeași tehnologie care stă la baza Java (JVM) și.net, precum și Android (Dalvik).
- Smalltalk a fost, de asemenea, pionier în compilarea JIT (just-in-time), o tehnică pentru îmbunătățirea dramatică a performanței software-ului bytecode, cum ar fi Java.
- de la Smalltalk a venit primul IDE modern (integrated development environment), care a inclus un editor de text, un browser de sistem sau de clasă, un inspector de obiecte sau proprietăți și un depanator. Acest lucru a dus la numeroasele IDE pe care dezvoltatorii le favorizează astăzi, cum ar fi Visual Studio, Xcode și IntelliJ IDEA. Personal, cred că niciuna dintre aceste IDE nu se poate compara cu IDE-ul Smalltalk în simplitate, eleganță și viteză de dezvoltare; originalul este încă cel mai bun!
- de la bun început, Smalltalk a avut închideri, care sunt funcții lexicale de primă clasă. În esență, o închidere este o funcție de apel invers care poate vedea variabile nelocale în locația în care au fost definite. Acest lucru vă poate ajuta să scrieți un cod mult mai compact și mai ușor de citit. Închiderile își găsesc drumul în multe limbi majore, cum ar fi Java, C# și PHP.
- Smalltalk a fost primul instrument de limbă pentru a sprijini programarea „live” și tehnici avansate de depanare, cum ar fi inspecția on-the-fly și modificările de cod în timpul execuției. Astăzi, depanarea live este posibilă în C # cu Visual Studio „editați și continuați” și în Java cu HotSwap.
- Smalltalk a introdus MVC (Model-View-Controller) în lume. MVC este un model arhitectural software pentru implementarea interfețelor de utilizator. Este popular cu aplicațiile GUI desktop și aplicațiile web. În zilele noastre, este arhitectura pe care majoritatea dezvoltatorilor web o învață mai întâi.
- în mare măsură, Smalltalk este responsabil pentru a ne oferi dezvoltare bazată pe teste (sau TDD) și programare extremă (sau XP), care sunt ambele foarte influente în practicile agile standard de astăzi.
- Smalltalk a făcut „tastarea rață” un cuvânt de uz casnic (bine, dacă casa ta are un programator în ea). Duck typing este locul în care” verificarea tipului ” este amânată până la rulare—când capacitățile de reflecție sunt utilizate pentru a asigura un comportament corect. Găsim tastarea rață în multe limbi astăzi, inclusiv Java, Python, Common Lisp, Go, Groovy, Objective-C și PHP.
- Smalltalk pionier dezvoltarea bazelor de date obiect. Deși nu au ajuns în mainstream, bazele de date cu obiecte au piețele lor de nișă. Cel mai bun exemplu de produs de bază de date obiect este GemStone/s, Care este potrivit pentru sisteme distribuite scalabile, de înaltă performanță, multitier.
- Smalltalk ne-a dat primul browser refactoring. Desigur, suportul de refactorizare poate fi găsit în majoritatea IDE-urilor de astăzi.
- Smalltalk a avut un rol esențial în dezvoltarea interfeței grafice cu utilizatorul (sau GUI) și a interfeței cu utilizatorul „ceea ce vedeți este ceea ce obțineți” (WYSIWYG).
dar cum poate învățarea Smalltalk să mă facă un dezvoltator mai bun?
Smalltalk are mai multe caracteristici ucigașe care au fost cu mult înaintea timpului lor:
- persistență bazată pe imagini
- obiecte: totul este un obiect, iar obiectele comunică numai prin mesaje („cea mai pură” OO și una dintre cele mai vechi)
- programare”Live”
- Tehnici Avansate de depanare, cum ar fi modificările codului din zbor
- o interfață IDE simplă, ordonată
- limbi specifice domeniului (DSL): Singura modalitate Smalltalk funcționează, astfel încât programatorii trebuie să se concentreze pe domeniul problemă folosind un limbaj și notație care este natural pentru acel domeniu
și există câteva alte caracteristici care fac Smalltalk prea special.
în esență, avantajul cheie Smalltalk ca un limbaj productiv și instrument de învățare este că benzi departe cele mai multe, dacă nu toate, de stres cognitiv în mainstream limbi OO, cum ar fi Java. Smalltalk nu prezintă dezordine sintactice sau caracteristici distrag atenția. Pur și simplu vă iese din cale, astfel încât să vă puteți concentra toată atenția asupra problemei sau aplicației la îndemână. Nu este faptul că Java este un limbaj rău pentru a fi mai complex (și având nume de clase de 30 de caractere); ceea ce spun este că învățarea unui limbaj oo neîncărcat vă poate face de fapt un programator Java mai bun odată ce înțelegeți conceptele sale OO dintr-o altă perspectivă.
eliminarea stresului cognitiv este un obiectiv fundamental al multor limbi—de exemplu, Python, Ruby, Elixir, Ulm și Go. Chiar dacă nu o simți, stresul este acolo. Se spune adesea că programarea în Smalltalk sau Python este mai degrabă ca Zen; mintea ta curge fără efort cu sarcina. Aceasta este frumusețea și valoarea simplității limbajului, iar Smalltalk are acest lucru în pică.
în Smalltalk, OO este distilat la conceptele sale cele mai de bază de clase și metode, metaclase și reflecție, și cel mai important mesaj de trecere. Smalltalk, în virtutea purității sale obiect și consecvență, vă va oferi o înțelegere profundă mai bună a programării orientate pe obiecte și cum să-l folosească la cel mai bun efect.
simplitatea Smalltalk, de asemenea, un limbaj de instruire ideal pentru învățarea programării face, mai ales dacă nu aveți un fundal tehnic. Simplitatea limbajului și a instrumentelor vă permite să vă concentrați energiile pe învățarea tehnicilor de programare, nu pe formalitățile lingvistice.
cum funcționează Smalltalk? Abordarea bazată pe imagine a programării
principala pretenție a lui Smalltalk la faimă este abordarea sa bazată pe imagine a creării de software. O imagine este un instantaneu al memoriei care conține toate obiectele din aplicația sau sistemul dvs. care rulează. Acesta încapsulează întreaga stare de execuție a programului. O imagine poate fi salvată pe disc, iar execuția poate fi reluată ulterior exact de unde ați rămas!
imaginea Smalltalk poate suna un pic nașpa, dar, de fapt, are o asemănare puternică cu ceva utilizat pe scară largă în ea astăzi: imagini de sistem în virtualizarea sistemului de operare, cum ar fi în VMware și VirtualBox. Trebuie să vă amintiți că Smalltalk a fost inițial un sistem de operare autonom atunci când a fost creat la Xerox PARC în anii 1970.
imaginea Smalltalk are, de asemenea, o asemănare puternică cu DOM-ul unei pagini web (Document Object Model). Rețineți că o aplicație web este în esență un sistem în sine, sechestrat în browserul web și refuzat accesul direct la sistemul de fișiere al gazdei și la alte resurse. Când un browser web se închide, starea site-ului web dinamic poate fi salvată sau memorată în cache, iar data viitoare când browserul se reia, site-ul web poate fi restabilit în browser (cu unele limitări).
chiar și foaia de calcul umilă se apropie îndeaproape de conceptul de imagine. Încapsulează întreaga stare de execuție. Nu poate accesa resursele de sistem ale gazdei. Poate fi salvat și restaurat. Și ar trebui să știți că foile de calcul sunt încă folosite pentru a dezvolta modele și aplicații sofisticate cu propriul limbaj.
deci, conceptul de imagine este destul de răspândită. Este un mod atât de frumos de a dezvolta software încât a fost creată o versiune a conceptului de imagine pentru JavaScript în nucleul Lively.
totul în Smalltalk este un obiect
fără excepții: totul este un obiect. Nu există tipuri de date primitive. Nu există structuri de control, cum ar fi selecția și iterația! Totul în Smalltalk se face prin trimiterea de mesaje către obiecte. Aceasta este ceea ce face Smalltalk atât de simplu, elegant și ușor de învățat. Aceasta este ceea ce face ca limbajul să fie atât de curat din punct de vedere sintactic.
de exemplu, următorul fragment de cod extinde clasa numerică pentru a suporta o operație factorială nerecursivă:
Number extend
ifFalse: .
^ (c fold: ) ]]].
7 factorial printNl.
7 my_factorial printNl. "should be the same result as the previous line"
aici, ifTrue: este un mesaj de cuvinte cheie trimis obiectului Boolean care rezultă din evaluarea expresiei (auto < 2). Argumentul mesajului de cuvinte cheie este un bloc de cod (delimitat de paranteze pătrate). De fapt, ifTrue: este prima parte a unui mesaj de cuvinte cheie din două părți, a doua parte fiind ifFalse:.
mesajul unar nou este trimis la clasa OrderedCollection pentru a crea o nouă colecție. Mesajul printNl este trimis la rezultatul (care este un obiect) de a trimite mesajul my_factorial la numărul 7. Totul se citește aproape ca un limbaj natural!
reflecție computațională în Smalltalk
reflecție în Smalltalk este deosebit de valoros ca un mijloc pentru un program pentru a inspecta propria structură și calcul în timpul rulării. Acest lucru conferă o putere enormă, permițând programelor să se extindă cu noi clase și metode sau să întrebe „Cine mi-a trimis acest mesaj?”
reflecția computațională este utilizată pentru a implementa un mod puternic de a gestiona Erorile. Când unui obiect i se trimite un mesaj pe care nu îl implementează, acesta primește un mesaj doesNotUnderstand:, împreună cu o reificare a mesajului original. Există multe lucruri pe care programul le poate face cu mesajul doesNotUnderstand:, inclusiv extinderea cu noi funcționalități!
conceptul de imagine și reflecția permit, de asemenea, Smalltalk să elimine limita aplicației/IDE. Tot ce aveți nevoie pentru a dezvolta, depana și rula aplicația dvs. este în imagine. Nu este nevoie să părăsiți vreodată mediul de aplicare. Este o abordare complet holistică a dezvoltării de software care face totul mai Zen și mai productiv.
renașterea lui Smalltalk
ultimii 15 ani de dezvoltare în lumea Smalltalk au făcut Limba mult mai atrăgătoare.
Smalltalk este acum disponibil pentru programare web front-end folosind Amber Smalltalk, care transpiles JavaScript. Dezvoltarea Amber are loc în întregime în browser. Unul dintre lucrurile uimitoare despre Amber este că atunci când importați o bibliotecă JavaScript, obiectele sale pot fi tratate la fel ca obiectele Smalltalk.
în 2002, Seaside web framework a fost lansat, devenind cel mai popular instrument pentru dezvoltarea web în Smalltalk. Abordarea sa bazată pe continuare a oferit un mecanism convențional de „apel/returnare” pentru aplicația dvs. web. Acesta poate ajuta la rezolvarea problemelor, cum ar fi cererea dublă și problemele butonului înapoi. Destul de revoluționar pentru timpul său și încă nu este adoptat în mod obișnuit în alte cadre web.
proiectul Pharo a început în 2008 să se concentreze pe tehnici moderne de inginerie software și dezvoltare. A adus Smalltalk mult mai departe decât proiectul open-source anterior numit Squeak, care se baza pe venerabilul dialect Smalltalk-80. Proiectul Pharo a generat, de asemenea, cercetări într-un nou tip de IDE numit Glamorous Toolkit. Se bazează pe ideea că mediul dvs. de programare ar trebui să fie „modelabil” pentru a se potrivi nevoilor dvs.
anul trecut, delfinul foarte apreciat Smalltalk a devenit open source, oferind o altă opțiune minunată pentru fanii Smalltalk. Dolphin Smalltalk a fost frecvent lăudat pentru că are una dintre cele mai bune implementări ale IDE Smalltalk.
moștenirea Smalltalk: Efectuarea de programare distractiv
atunci când utilizați multe facilități de dezvoltare de software moderne, cum ar fi JVM, Eclipse IDE, închideri, „live coding,” MVC, TDD, VMware, și chiar simplu vechi Web app, cred că înapoi la originile lor în Smalltalk și dețin un respect mai mare pentru ceea ce faci. Aveți o apreciere mai mare pentru limbile pe care le utilizați, fie că sunt Objective-C, Python, Ruby, Groovy, Scala, Dart sau Swift.
lucrul cu limba care a creat toate aceste caracteristici și tehnologii excelente oferă o oportunitate unică de a vă îmbunătăți foarte mult cunoștințele, acuitatea mentală și productivitatea ca dezvoltator de software. Cuvântul „distracție” nu intră întotdeauna în discuții despre ingineria software, dar cred că Smalltalk—și frații săi OO—oferă bariera cognitivă scăzută și ușurința programării care pot face ingineria software distractivă.