A Smalltalk egy objektumorientált, dinamikusan tipizált, reflektív programozási nyelv. A Smalltalkot az "ember-számítógép szimbiózis" által példázott "új számítástechnikai világ" alapnyelveként hozták létre. A nyelvet részben oktatási célokra, különösen a konstruktivista tanuláshoz tervezték és hozták létre a Xerox PARC Learning Research Group (LRG) munkatársai, Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaehler, Diana Merry, Scott Wallace és mások az 1970-es években.

A nyelv először Smalltalk-80 néven jelent meg. A Smalltalk-szerű nyelveket aktívan fejlesztik, és hűséges felhasználói közösségeket gyűjtöttek maguk köré. Az ANSI Smalltalkot 1998-ban ratifikálták, és ez a Smalltalk szabványos változata.

A Smalltalk 2017-ben a Stack Overflow fejlesztői felmérésében a második helyet szerezte meg a "legkedveltebb programozási nyelv" kategóriában, de a 2018-as felmérésben nem került be a 26 legkedveltebb programozási nyelv közé.Stack Overflow Developer Survey 2018

Történelem Számos Smalltalk változat létezik. A Smalltalk szóval gyakran jelölik a Smalltalk-80 nyelvet, az első nyilvánosan elérhetővé tett változatot, amelyet 1980-ban készítettek. Az első hardver-környezetek, amelyeken a Smalltalk VM-ek futottak, Xerox Alto számítógépek voltak.

A Smalltalk a Xerox Palo Alto Research Center (PARC) Alan Kay által vezetett kutatásának eredménye; Alan Kay tervezte a korai Smalltalk-verziók nagy részét, Adele Goldberg írta a dokumentáció nagy részét, Dan Ingalls pedig a korai verziók nagy részét implementálta. Az első, Smalltalk-71 elnevezésű verziót Kay néhány reggel alatt készítette el egy fogadásból, hogy a Simula által inspirált üzenetátadás ötletén alapuló programozási nyelvet "egy oldalnyi kódban" meg lehet valósítani. Egy későbbi, kutatómunkához használt változatot Smalltalk-72-nek neveztek el, és befolyásolta az Actor-modell kialakulását. Szintaxisa és végrehajtási modellje nagyban különbözött a modern Smalltalk-változatoktól.

Jelentős átdolgozások után, amelyek a teljesítmény növelése érdekében a végrehajtás szemantikájának néhány aspektusát befagyasztották (egy Simula-szerű osztály öröklési modell bevezetésével), létrejött a Smalltalk-76. Ez a rendszer egy olyan fejlesztőkörnyezettel rendelkezett, amely a ma már megszokott eszközök többségét tartalmazta, beleértve az osztálykönyvtár kódböngészőjét/szerkesztőjét is. A Smalltalk-80 metaosztályokkal egészült ki, hogy segítsen fenntartani a "minden egy objektum" paradigmát (kivéve a privát példányváltozókat) azáltal, hogy tulajdonságokat és viselkedést társított az egyes osztályokhoz, sőt olyan primitíveket is, mint az egész és bólus értékek (például a példányok létrehozásának különböző módjainak támogatására).

Jelentős átdolgozások után, amelyek a teljesítmény növelése érdekében a végrehajtás szemantikájának néhány aspektusát befagyasztották (egy Simula-szerű osztály öröklési modell bevezetésével), létrejött a Smalltalk-76. Ez a rendszer egy olyan fejlesztőkörnyezettel rendelkezett, amely a ma már megszokott eszközök többségét tartalmazta, beleértve az osztálykönyvtár kódböngészőjét/szerkesztőjét is. A Smalltalk-80 metaosztályokkal egészült ki, hogy segítsen fenntartani a "minden egy objektum" paradigmát (kivéve a privát példányváltozókat) azáltal, hogy tulajdonságokat és viselkedést társított az egyes osztályokhoz, sőt olyan primitíveket is, mint az egész és bólus értékek (például a példányok létrehozásának különböző módjainak támogatására).

A jelenleg népszerű Smalltalk implementációs változatok közül kettő az eredeti Smalltalk-80-as képek leszármazottja. A Squeak egy nyílt forráskódú implementáció, amely a Smalltalk-80 1. verziójából származik az Apple Smalltalk segítségével. A VisualWorks a Smalltalk-80 2. verziójából származik a Smalltalk-80 2.5 és az ObjectWorks segítségével (mindkettő a ParcPlace Systems terméke, amely a Xerox PARC spin-off cége, amelyet a Smalltalk piacra dobására hoztak létre). A generációk közötti érdekes kapcsolódási pontként Vassili Bykov 2001-ben megvalósította a Hobbes-t, egy virtuális gépet, amely Smalltalk-80-at futtat a VisualWorks-en belül. (Dan Ingalls később a Hobbes-t Squeak-re portolta).

Az 1980-as évek végétől az 1990-es évek közepéig a Smalltalk-környezeteket – beleértve a támogatást, a képzést és a kiegészítőket – két egymással versengő szervezet értékesítette: ParcPlace Systems és Digitalk, mindkettő kaliforniai székhelyű. A ParcPlace Systems inkább a Unix/Sun mikrorendszerek piacára összpontosított, míg a Digitalk a Microsoft Windows-t vagy az IBM OS/2-t futtató Intel-alapú PC-kre. A Smalltalk jelentős memóriaigénye, korlátozott futási teljesítménye és az SQL-alapú relációs adatbázis-kiszolgálókhoz való támogatott kapcsolódás kezdeti hiánya miatt mindkét cégnek nehézséget okozott a Smalltalk elterjedése. Míg a ParcPlace Smalltalk magas ára a piaci elterjedését a közepes és nagy kereskedelmi szervezetekre korlátozta, a Digitalk termékek kezdetben alacsonyabb árral próbáltak szélesebb közönséget elérni. Az IBM kezdetben támogatta a Digitalk terméket, de aztán 1995-ben belépett a piacra egy Smalltalk termékkel, a VisualAge/Smalltalkkal. Az Easel ebben az időben vezette be az Enfin-t Windows és OS/2 rendszereken. Az Enfin sokkal népszerűbb lett Európában, mivel az IBM még az IBM Smalltalk (később VisualAge) kifejlesztése előtt bevezette az informatikai boltokba. Az Enfin-t később felvásárolta a Cincom Systems, és ma ObjectStudio néven árulják, és a Cincom Smalltalk termékcsomagjának része.

1995-ben a ParcPlace és a Digitalk ParcPlace-Digitalk néven egyesült, majd 1997-ben ObjectShare néven újjáalakult, székhelye Irvine, Kalifornia. Az ObjectShare (NASDAQ: OBJS) 1999-ig nyilvánosan volt jegyezve, amikor kivonták a tőzsdéről és megszűnt. A beolvadt cégnek soha nem sikerült hatékony választ találnia a Javára a piaci pozícionálást illetően, és 1997-ben a tulajdonosok már el akarták adni az üzletágat. 1999-ben a Seagull Software felvásárolta az ObjectShare Java fejlesztő laboratóriumát (beleértve az eredeti Smalltalk/V és Visual Smalltalk fejlesztőcsapatot), és még mindig a VisualSmalltalk tulajdonosa, bár a Smalltalk termék világméretű forgalmazási jogai az ObjectShare-nél maradtak, amely aztán eladta azokat a Cincomnak. A VisualWorks-et eladták a Cincomnak, és most a Cincom Smalltalk része. A Cincom erőteljesen támogatta a Smalltalkot, 1999 óta minden évben több új verziót ad ki a VisualWorks és az ObjectStudio programból.

A Cincom, a GemTalk és az Instantiations továbbra is Smalltalk-környezeteket forgalmaz. Az IBM a VisualAge Smalltalkot "leállította", miután az 1990-es évek végén úgy döntött, hogy inkább a Java-t támogatja, és 2005-től az Instantiations, Inc. támogatja, akik átnevezték a terméket VA Smalltalkra (VAST Platform), és továbbra is évente új verziókat adnak ki. A nyílt Squeak implementációnak aktív fejlesztői közössége van, köztük sokan az eredeti Smalltalk közösségből, és a közelmúltban az OLPC projekt Etoys környezetének, a Croquet Project kollaboratív alkalmazások fejlesztésére szolgáló eszközkészletnek és az Open Cobalt virtuális világ alkalmazásnak a biztosításához használták. A GNU Smalltalk a GNU projekt Smalltalk-80 származékának szabad szoftveres implementációja. A Pharo Smalltalk a Squeak elágazása, amely a kutatásra és a kereskedelmi környezetben való használatra irányul.

Jelentős fejlemény, amely 2016-tól minden Smalltalk-környezetben elterjedt, a két webes keretrendszer, a Seaside és az AIDA/Web egyre szélesebb körű használata a komplex webes alkalmazások építésének egyszerűsítése érdekében. A Seaside iránt jelentős piaci érdeklődés mutatkozott, a Cincom, a Gemstone és az Instantiations beépítette és kibővítette.

Befolyások A Smalltalk egyike volt a Simulán alapuló objektumorientált programozási nyelveknek. A Smalltalk egyben az egyik legnagyobb hatású programozási nyelv is. Gyakorlatilag az összes objektumorientált nyelv, amely utána jött – a Flavors, a CLOS, az Objective-C, a Java, a Python, a Ruby és sok más – a Smalltalk hatása alatt állt. A Smalltalk volt az egyik legnépszerűbb nyelv az agilis szoftverfejlesztési módszerek, a gyors alkalmazásfejlesztés (RAD) vagy prototípusok készítése és a szoftvertervezési minták terén is. A Smalltalk platformok által biztosított rendkívül produktív környezet ideális volt a gyors, iteratív fejlesztéshez.

A Smalltalk egy nagyobb, az Advanced Research Projects Agency (ARPA) által finanszírozott kutatási programból nőtt ki, amely sok szempontból meghatározta a modern számítástechnika világát. A Smalltalk mellett az ARPA kutatói az 1960-as években olyan dolgok működő prototípusait fejlesztették ki, mint a hipertext, a grafikus felhasználói felület, a multimédia, az egér, a távjelenlét és az internet. Alan Kay (a Smalltalk egyik feltalálója) egy általa Dynabooknak nevezett táblagépet is leírt, amely hasonlít a modern táblagépekhez, például az iPadhez.

A Smalltalk-környezetek gyakran elsőként fejlesztették ki a ma már elterjedt objektumorientált szoftvertervezési mintákat. Az egyik legnépszerűbb a modell-nézet-vezérlő (MVC) minta a felhasználói felület tervezéséhez. Az MVC-minta lehetővé teszi a fejlesztők számára, hogy ugyanazon mögöttes adatokra több konzisztens nézetet alakítsanak ki. Ideális olyan szoftverfejlesztési környezetekben, ahol ugyanannak a mögöttes specifikációnak különböző nézetei vannak (pl. entitás-reláció, adatfolyam, objektummodell stb.). Továbbá szimulációkhoz vagy játékokhoz, ahol a mögöttes modell különböző nézőpontokból és absztrakciós szintekről nézhető.

Az MVC mintán kívül a Smalltalk nyelv és környezet nagy hatással volt a grafikus felhasználói felület (GUI) és a WYSIWYG (what you see is what you get) felhasználói felület, a betűszerkesztők és a felhasználói felület tervezésének asztali metaforái történetére. A Smalltalk-környezetekhez tartozó hatékony beépített hibakeresési és objektumvizsgálati eszközök meghatározták a szabványt az összes utána következő integrált fejlesztőkörnyezet számára, kezdve a Lisp Machine környezetekkel.

Objektumorientált programozás

Más objektumorientált nyelvekhez hasonlóan a Smalltalk-80-ban (de nem a Smalltalk-72-ben) is az objektum a központi fogalom. Az objektum mindig egy osztály példánya. Az osztályok "tervrajzok", amelyek leírják példányaik tulajdonságait és viselkedését. Például egy GUI ablak osztálya deklarálhatja, hogy az ablakok rendelkeznek olyan tulajdonságokkal, mint a címke, a pozíció és az, hogy az ablak látható-e vagy sem. Az osztály azt is deklarálhatja, hogy a példányok támogatják az olyan műveleteket, mint a nyitás, zárás, mozgatás és elrejtés. Minden egyes ablakobjektumnak saját értékei lennének ezekre a tulajdonságokra, és mindegyikük képes lenne az osztálya által meghatározott műveletek végrehajtására.

Egy Smalltalk objektum pontosan három dologra képes:

Hold állapot (hivatkozások más objektumokra). Üzenet fogadása önmagától vagy egy másik objektumtól. Az üzenet feldolgozása során üzeneteket küldhet magának vagy egy másik objektumnak.

Egy objektum állapota mindig az adott objektum sajátja. Más objektumok csak úgy kérdezhetik le vagy változtathatják meg ezt az állapotot, ha erre vonatkozó kéréseket (üzeneteket) küldenek az objektumnak. Bármilyen üzenet küldhető bármelyik objektumnak: amikor egy üzenet érkezik, a címzett eldönti, hogy az üzenet megfelelő-e. Alan Kay megjegyezte, hogy az objektumokra fordított figyelem ellenére az üzenetküldés a Smalltalk legfontosabb fogalma: "A nagy ötlet az 'üzenetküldés' – erről szól a Smalltalk/Squeak magja (és ez az, amit a Xerox PARC fázisunkban soha nem fejeztünk be teljesen)".

A legtöbb más nyelvtől eltérően a Smalltalk objektumok a rendszer futása közben is módosíthatók. Az élő kódolás és a javítások "menet közbeni" alkalmazása a Smalltalk egyik domináns programozási módszertana, és ez az egyik fő oka a hatékonyságának.