Kichik munozarasi - Smalltalk - Wikipedia

Kichik munozarasi
Smalltalk80book.jpg
ParadigmaOb'ektga yo'naltirilgan
LoyihalashtirilganAlan Kay, Dan Ingalls, Adele Goldberg
TuzuvchiAlan Kay, Dan Ingols, Adele Goldberg, Ted Kaehler, Diana Merri, Skot Uolles, Piter Doych va Xerox PARC
Birinchi paydo bo'ldi1972; 48 yil oldin (1972) (rivojlanish 1969 yilda boshlangan)
Barqaror chiqish
Smalltalk-80 versiyasi 2/1980; 40 yil oldin (1980)
Matnni yozishKuchli, dinamik
OSO'zaro faoliyat platforma (ko'p platformali)
Mayor amalga oshirish
Amber, Dolphin Smalltalk, GemStone / S, GNU Smalltalk, Faro, Smalltalk / X, Siqish, VA Smalltalk, VisualWorks
Ta'sirlangan
Lisp,[1] Simula,[1] Eyler,[1] IMP,[1] Rejalashtiruvchi,[1] Logotip,[2] Sketchpad,[1] ARPAnet,[1] Burrouz B5000[1]
Ta'sirlangan
AppleScript, Umumiy Lisp ob'ekti tizimi, Dart, Dilan, Erlang, Etoys, Boring, Groovy, Io, Ioke, Java, Lasso, Logtalk, Gazeta, NewtonScript, REXX ob'ekti, Maqsad-C, PHP 5, Python, Raku, Yoqut, Scala, Chizish, O'zi

Kichik munozarasi bu ob'ektga yo'naltirilgan, dinamik ravishda terilgan aks ettiruvchi dasturlash tili. Smalltalk "inson - kompyuter simbiozi" misolida kompyuterlarning "yangi dunyosi" asosi bo'lgan til sifatida yaratilgan.[2] U qisman mo'ljallangan va yaratilgan tarbiyaviy foydalanish, ayniqsa uchun qurilishchilarni o'rganish, Learning Research Group (LRG) da Xerox PARC tomonidan Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaehler, Diana Merri, Skott Uolles va boshqalar 1970 yillar davomida.

Til birinchi marta odatda Smalltalk-80 nomi bilan chiqarilgan. Smalltalkga o'xshash tillar faol rivojlanmoqda va foydalanuvchilarning sodiq jamoalarini o'z atroflariga to'plashdi. ANSI Smalltalk 1998 yilda ratifikatsiya qilingan va Smalltalk standart versiyasini namoyish etadi.[3]

Smalltalk "eng yaxshi ko'rilgan dasturlash tili" uchun ikkinchi o'rinni egalladi Stack overflow 2017 yilda ishlab chiquvchilarni o'rganish,[4] ammo u 2018 yilgi so'rovnomada eng ko'p sevilgan 26 dasturlash tillari qatoriga kirmadi.[5]

Tarix

Ko'p sonli Smalltalk variantlari mavjud.[6] Malakasiz so'z Kichik munozarasi Smalltalk-80 tilini ko'rsatish uchun tez-tez ishlatiladi, birinchi versiyasi ommaga taqdim etilgan va 1980 yilda yaratilgan. Smalltalk VM-larini ishlaydigan birinchi apparat-muhitlar Xerox Alto kompyuterlar.

Smalltalk rahbarlik qilgan tadqiqotlar mahsuli edi Alan Kay da Xerox Palo Alto tadqiqot markazi (PARC); Alan Kay dastlabki Smalltalk versiyalarining ko'pini ishlab chiqdi, Adele Goldberg hujjatlarning aksariyatini yozgan va Dan Ingalls dastlabki versiyalarning aksariyatini amalga oshirdi. Smalltalk-71 deb nomlangan birinchi versiya Kay tomonidan bir necha kuni ertalab dastur asosida g'oyaga asoslangan dasturlash tili asosida yaratilgan. xabar o'tmoqda tomonidan ilhomlangan Simula "kod sahifasida" amalga oshirilishi mumkin.[2] Tadqiqot ishlari uchun foydalanilgan keyingi variant endi Smalltalk-72 deb nomlanadi va rivojlanishiga ta'sir ko'rsatdi Aktyor modeli. Uning sintaksis va ijro modeli zamonaviy Smalltalk variantlaridan juda farq qilar edi.

Amalga oshirish uchun semantikaning ba'zi jihatlarini muzlatib qo'ygan muhim tuzatishlardan so'ng (a Simula - o'xshash sinf meros olish bajarish modeli), Smalltalk-76 yaratildi. Ushbu tizimda a rivojlanish muhiti hozirda tanish bo'lgan vositalarning aksariyati, shu jumladan sinf kutubxonasi kodlari brauzeri / muharriri. Smalltalk-80 qo'shildi metaclasses, "hamma narsa ob'ekt" paradigmasini saqlashga yordam berish (xususiy instansiya o'zgaruvchilari bundan mustasno) xususiyatlarini va xatti-harakatlarini alohida sinflar bilan bog'lash, hatto tamsayılar va mantiqiy qiymatlar kabi ibtidoiylar (masalan, turli xil misollarni yaratish usullarini qo'llab-quvvatlash uchun).

Smalltalk-80 PARCdan tashqarida mavjud bo'lgan birinchi til varianti, birinchi bo'lib Smalltalk-80 Versiya 1 sifatida kam sonli firmalarga berilgan (Hewlett-Packard, Apple Computer, Tektronix va Raqamli uskunalar korporatsiyasi (DEC)) va universitetlar (Berkli ) uchun taqriz va o'z platformalarida amalga oshirish. Keyinchalik (1983 yilda) Smalltalk-80 Version 2 deb nomlangan umumiy mavjudlik dasturi rasm sifatida (ob'ekt ta'riflari bilan platformadan mustaqil fayl) va virtual mashina spetsifikatsiya. ANSI Smalltalk 1998 yildan beri standart til ma'lumotnomasi hisoblanadi.[7]

Hozirda mashhur bo'lgan Smalltalk dasturining ikkitasi o'sha original Smalltalk-80 rasmlarining avlodlari. Siqish bu ochiq manba Apple Smalltalk orqali Smalltalk-80 Version 1 dan olingan dastur. VisualWorks Smalltalk-80 2.5 versiyasidan Smalltalk-80 2.5 va ObjectWorks (ikkala mahsulot ham Smalltalkni bozorga olib chiqish uchun tashkil etilgan Xerox PARC ajratuvchi kompaniyasi ParcPlace Systems mahsuloti) orqali olingan. 2001 yilda Vassili Bikov avlodlar o'rtasidagi qiziqarli bog'lanish sifatida VisualWorks dasturida Smalltalk-80 ishlaydigan virtual mashina Hobbesni amalga oshirdi.[8] (Dan Ingalls Keyinchalik Gobbesni Skvekka ko'chirdi.)

1980-yillarning oxiridan 1990-yillarning o'rtalariga qadar Smalltalk muhiti, shu jumladan qo'llab-quvvatlash, o'qitish va qo'shimchalar, ikkita raqobatchi tashkilot tomonidan sotilgan: ParcPlace Systems va Digitalk, ikkalasi ham Kaliforniyada joylashgan. ParcPlace Systems Unix / Sun mikrosistemalari bozoriga, Digitalk esa Microsoft Windows yoki IBM OS / 2 operatsion tizimida ishlaydigan Intel asosidagi kompyuterlarga e'tibor qaratdi. Smalltalk-ning katta xotira ehtiyojlari, ish vaqti cheklanganligi va qo'llab-quvvatlanadigan ulanishning dastlabki etishmasligi tufayli ikkala firma ham Smalltalk-ni oqimga aylantirishga urinishdi. SQL asoslangan relyatsion ma'lumotlar bazasi serverlar. ParcPlace Smalltalk-ning yuqori narxi uning bozorga kirib borishini o'rta va yirik tijorat tashkilotlariga cheklab qo'ygan bo'lsa, Digitalk mahsulotlari dastlab arzonroq narx bilan keng auditoriyani qamrab olishga harakat qildilar. IBM dastlab Digitalk mahsulotini qo'llab-quvvatladi, ammo keyinchalik 1995 yilda VisualAge / Smalltalk deb nomlangan Smalltalk mahsuloti bilan bozorga chiqdi. Easel hozirda Enfin-ni Windows va OS / 2-da taqdim etdi. Enfin Evropada ancha mashhur bo'lib ketdi, chunki IBM uni IBM Smalltalk (keyinchalik VisualAge) ishlab chiqilishidan oldin IT-do'konlariga kiritdi. Keyinchalik Enfin tomonidan sotib olingan Cincom tizimlari, va endi nomi ostida sotilmoqda ObjectStudio, va Cincom Smalltalk mahsulot to'plamining bir qismidir.

1995 yilda ParcPlace va Digitalk ParcPlace-Digitalk-ga birlashdilar va keyin 1997 yilda Irvine, CA-da joylashgan ObjectShare nomini oldi. ObjectShare (NASDAQ: OBJS) 1999 yilgacha ommaviy savdoga qo'yilgan, keyin u ro'yxatdan chiqarilgan va tarqatib yuborilgan. Birlashtirilgan firma hech qachon samarali javob topa olmadi Java bozorning joylashuvi to'g'risida va 1997 yilga kelib uning egalari biznesni sotmoqchi bo'lishdi. 1999 yilda Seagull Software kompaniyasi ObjectShare Java ishlab chiqarish laboratoriyasini (shu jumladan original Smalltalk / V va Visual Smalltalk ishlab chiqish guruhini) sotib oldi va hali ham VisualSmalltalk-ga egalik qiladi, garchi Smalltalk mahsulotining butun dunyo bo'ylab tarqatish huquqlari ObjectShare-da qolgan bo'lsa, keyinchalik ularni sotgan. Cincom.[9] VisualWorks sotildi Cincom va hozirda Cincom Smalltalk tarkibiga kiradi. 1999 yildan beri har yili VisualWorks va ObjectStudio-ning bir nechta yangi versiyalarini chiqaradigan Cincom Smalltalk-ni qo'llab-quvvatladi.

Cincom, GemTalk va Instantiations, Smalltalk muhitlarini sotishda davom etmoqda. IBM 1990-yillarning oxirlarida Java-ni qo'llab-quvvatlashga qaror qilgan VisualAge Smalltalk-ning hayotini tugatdi va 2005 yildan boshlab, Instantiations, Inc. tomonidan qo'llab-quvvatlanadi.[10] mahsulotni VA Smalltalk (VAST Platform) deb o'zgartirgan va har yili yangi versiyalarini chiqarishni davom ettirgan. Ochiq Siqish amalga oshirish dasturchilarning faol jamoatchiligiga, shu jumladan ko'plab original Smalltalk jamoalariga ega va yaqinda Etoys muhitini ta'minlash uchun ishlatilgan. OLPC loyiha, hamkorlikdagi dasturlarni ishlab chiqish uchun qo'llanma Croquet loyihasi, va Kobaltni oching virtual dunyo dasturi. GNU Smalltalk a bepul dasturiy ta'minot dan Smalltalk-80 lotinini amalga oshirish GNU loyiha. Faro Smalltalk - bu vilkalar Siqish tijorat muhitida tadqiqot va foydalanishga yo'naltirilgan.

2016 yildan boshlab barcha Smalltalk muhitlariga tarqalib ketgan muhim voqea - bu ikkita veb-ramkadan foydalanishning tobora ko'payib borishi, Dengiz bo'yi va AIDA / Internet, murakkab veb-ilovalarni yaratishni soddalashtirish. Dengiz bo'yi Cincom, Gemstone va Instantiations kompaniyalari tarkibiga kiritilgan va kengaytirilgan bozorga katta qiziqish uyg'otdi.

Ta'sir

Smalltalk ko'plab ob'ektga asoslangan dasturlash tillaridan biri edi Simula.[11] Smalltalk shuningdek, dasturlashning eng nufuzli tillaridan biridir. Keyinchalik paydo bo'lgan ob'ektga yo'naltirilgan barcha tillar -Tatlar,[12] YAQIN, Maqsad-C, Java, Python, Yoqut,[13] va boshqa ko'plab narsalarga Smalltalk ta'sir ko'rsatgan. Smalltalk ham eng mashhur tillardan biri edi Tezkor usullar, Tezkor prototiplash va Dasturiy ta'minot naqshlari[14] jamoalar. Smalltalk platformalari tomonidan taqdim etilgan yuqori samarali muhit ularni tezkor, takrorlanadigan rivojlanish uchun ideal qildi.

Smalltalk ning katta dasturidan paydo bo'ldi ARPA ko'p jihatdan zamonaviy hisoblash dunyosini belgilaydigan tadqiqotlarni moliyalashtirdi. Smalltalk-dan tashqari, shunga o'xshash narsalarning prototiplari ishlaydi gipermatn, GUI, multimedia, sichqoncha, telepresensiya va Internet 1960-yillarda ARPA tadqiqotchilari tomonidan ishlab chiqilgan.[15][16] Alan Kay (Smalltalk ixtirochilaridan biri) o'zi chaqirgan planshet kompyuterini ham tasvirlab berdi Dynabook iPad kabi zamonaviy planshet kompyuterlariga o'xshaydi.[17]

Smalltalk muhitlari ko'pincha birinchi bo'lib ob'ektga yo'naltirilgan dasturiy ta'minot dizayni naqshlarini ishlab chiqdilar. Eng mashhurlaridan biri model-view-kontroller Uchun (MVC) naqsh foydalanuvchi interfeysi dizayn. MVC namunasi ishlab chiquvchilarga bir xil asosiy ma'lumotlarni bir nechta izchil ko'rinishga ega bo'lishiga imkon beradi. Dasturiy ta'minotni ishlab chiqish muhitlari uchun juda mos keladi, bu erda bir xil asosiy spetsifikatsiyaning turli xil ko'rinishlari (masalan, shaxs bilan bog'liqlik, ma'lumotlar oqimi, ob'ekt modeli va boshqalar) mavjud. Shuningdek, modellashtirishlar yoki o'yinlar uchun asosiy modelni har xil darajadan va mavhumlik darajasidan ko'rish mumkin.[18]

MVC naqshidan tashqari, Smalltalk tili va muhiti tarixida juda ta'sirli bo'lgan grafik foydalanuvchi interfeysi (GUI) va nima ko'rsangiz, nima olasiz (WYSIWYG ) foydalanuvchi interfeysi, shrift muharrirlari va interfeys dizayni uchun ish stoli metaforalari. Smalltalk muhiti bilan ta'minlangan kuchli o'rnatilgan disk raskadrovka va ob'ektlarni tekshirish vositalari barcha uchun standartni o'rnatdi birlashgan rivojlanish muhiti bilan boshlanadi Lisp mashinasi keyin paydo bo'lgan muhit.[19]

Ob'ektga yo'naltirilgan dasturlash

Boshqa ob'ektga yo'naltirilgan tillarda bo'lgani kabi, Smalltalk-80 da ham markaziy tushuncha (lekin Smalltalk-72da emas) ob'ekt. Ob'ekt har doim misol a sinf. Sinflar - bu ularning misollarining xususiyatlarini va xatti-harakatlarini tavsiflovchi "loyihalar". Masalan, GUI oynasi sinfi oynalar yorlig'i, joylashuvi va oynaning ko'rinadigan yoki ko'rinmasligi kabi xususiyatlarga ega ekanligini e'lon qilishi mumkin. Sinf shuningdek, misollar ochish, yopish, ko'chirish va yashirish kabi operatsiyalarni qo'llab-quvvatlashini e'lon qilishi mumkin. Har bir alohida oyna ob'ekti ushbu xususiyatlarning o'ziga xos qiymatlariga ega bo'lar edi va ularning har biri o'z sinfida aniqlangan operatsiyalarni bajarishi mumkin edi.

Smalltalk ob'ekti to'liq uchta narsani bajarishi mumkin:

  1. Holatni ushlab turish (boshqa ob'ektlarga havolalar).
  2. Xabar oling o'zidan yoki boshqa narsadan.
  3. Xabarni qayta ishlash jarayonida o'ziga yoki boshqa ob'ektga xabar yuboring.

Ob'ektning holati har doim ushbu ob'ekt uchun xususiydir. Boshqa ob'ektlar ushbu holatni so'rashi yoki o'zgartirishi mumkin, bu faqat ob'ektga so'rovlar (xabarlar) yuborish orqali amalga oshiriladi. Har qanday xabar har qanday ob'ektga yuborilishi mumkin: xabar qabul qilinganda, qabul qiluvchi ushbu xabarning mos yoki yo'qligini aniqlaydi. Alan Kay, ob'ektlarga bo'lgan e'tiborga qaramay, xabar almashish Smalltalk-dagi eng muhim tushuncha ekanligini ta'kidlab o'tdi: "Katta g'oya" xabarlar "- bu Smalltalk / Squeak yadrosi bilan bog'liq (va bu hech qachon umuman bo'lmagan narsa) bizning Xerox PARC bosqichimizda yakunlandi). "[20]

Ko'pgina boshqa tillardan farqli o'laroq, tizim ishlayotgan paytda Smalltalk moslamalarini o'zgartirish mumkin. Jonli kodlash va tuzatishlarni "tezda" qo'llash Smalltalk uchun dominant dasturlash metodologiyasidir va uning samaradorligining asosiy sabablaridan biridir.

Smalltalk - bu "sof" ob'ektga yo'naltirilgan dasturlash tili, ya'ni farqli o'laroq C ++ va Java, ob'ektlar va ibtidoiy turlar bo'lgan qiymatlar o'rtasida farq yo'q. Smalltalk-da tamsayılar, mantiqiy belgilar va belgilar kabi ibtidoiy qiymatlar ham mos ob'ektlardir, chunki ular tegishli sinflarning nusxalari bo'lib, ular ustida operatsiyalar xabarlarni yuborish orqali chaqiriladi. Dasturchi o'zgartirishi yoki kengaytirishi mumkin (orqali subklassing ) ibtidoiy qadriyatlarni amalga oshiradigan sinflar, shuning uchun ularning namunalari uchun yangi xatti-harakatlar aniqlanishi mumkin, masalan, yangi boshqaruv tuzilmalarini amalga oshirish uchun yoki hatto ularning xatti-harakatlari o'zgartirilishi mumkin. Ushbu haqiqat tez-tez eshitiladigan "Smalltalk-da hamma narsa ob'ekt" iborasida umumlashtirilgan bo'lib, u o'zgaruvchilar bo'lmaganligi sababli "barcha qiymatlar ob'ektlar" sifatida aniqroq ifodalanishi mumkin.

Barcha qiymatlar ob'ekt bo'lganligi sababli, sinflar shuningdek, ob'ektlardir. Har bir sinf. Ning misoli metaklass o'sha sinfning. Metaclasses o'z navbatida ob'ektlardir va ularning barchasi Metaclass deb nomlangan sinfning misollari. Kod bloklari —Smalltalkning ifoda usuli noma'lum funktsiyalar - shuningdek ob'ektlar.[21]

Ko'zgu

Ko'zgu bu kompyuter olimlari o'zlarining tuzilishini tekshirish qobiliyatiga ega bo'lgan dasturiy ta'minot dasturlariga, masalan, o'zlarining dasturlariga nisbatan qo'llaniladigan atama daraxtni tahlil qilish yoki ma'lumotlar turlari kirish va chiqish parametrlari. Reflection - bu Smalltalk va Lisp kabi dinamik, interaktiv tillarning xususiyati. Ko'zguga ega bo'lgan (yoki talqin qilingan yoki kompilyatsiya qilingan) interaktiv dasturlar barcha xotiradagi ob'ektlarning holatini saqlab qoladi, shu jumladan kodlash ob'ektining o'zi, ularni tahlil qilish / kompilyatsiya qilish jarayonida hosil bo'ladi va dasturiy ta'minotda mavjud va o'zgartirilishi mumkin.

Reflekt, shuningdek, Smalltalk singari meta-modelga ega bo'lish xususiyatidir. Meta-model bu tilni tavsiflovchi model bo'lib, ishlab chiquvchilar meta-modeldan foydalanib, ob'ektning o'tin daraxtini bosib o'tish, tekshirish va o'zgartirish yoki muayyan turdagi strukturaning barcha nusxalarini topish mumkin. masalan, meta-modeldagi Method sinfining barcha misollari).

Smalltalk-80 bu butunlay aks ettiruvchi tizim bo'lib, u Smalltalk-80 da amalga oshirilgan. Smalltalk-80 ham tizimli, ham hisoblash aksini ta'minlaydi. Smalltalk - bu strukturaviy ravishda aks ettiruvchi tizim bo'lib, uning tuzilishi Smalltalk-80 ob'ektlari tomonidan belgilanadi. Tizimni belgilaydigan sinflar va usullar, shuningdek ob'ektlar va ular belgilashga yordam beradigan tizimning to'liq qismidir. Smalltalk kompilyatori matnli manba kodini uslubiy ob'ektlarga, odatda, misollarda to'playdi Tuzilgan usul. Ular sinfning metodik lug'atida saqlash orqali sinflarga qo'shiladi. Sinflar belgilaydigan sinf iyerarxiyasining qismi tizimga yangi sinflarni qo'shishi mumkin. Tizim sinflar va usullarni yaratadigan yoki belgilaydigan Smalltalk-80 kodini ishga tushirish orqali kengaytiriladi. Shu tarzda, Smalltalk-80 tizimi "jonli" tizim bo'lib, ish vaqtida o'zini kengaytirish qobiliyatiga ega.

Sinflar ob'ekt bo'lganligi sababli, ularga "qanday usullarni amalga oshirasiz?" Kabi savollar berilishi mumkin. yoki "siz qaysi maydonlarni / uyalarni / misol o'zgaruvchilarini aniqlaysiz?". Shunday qilib, ob'ektlarni osongina tekshirish, nusxalash, (de)ketma-ket va shunga o'xshash tizimdagi har qanday ob'ektga tegishli umumiy kod bilan.[22]

Smalltalk-80 shuningdek, kompyuterda aks ettirishni, tizimning hisoblash holatini kuzatish qobiliyatini ta'minlaydi. Original Smalltalk-80-dan olingan tillarda, usulning joriy faollashuvi psevdo-o'zgaruvchi (oltita zaxiralangan so'zlardan biri) orqali nomlangan ob'ekt sifatida mavjud, thisContext. Xabarlarni yuborish orqali thisContext usulni faollashtirish "bu xabarni menga kim yuborgan" kabi savollarni berishi mumkin. Ushbu imkoniyatlar amalga oshirishga imkon beradi qo'shma tartib-qoidalar yoki Prolog - virtual mashinani o'zgartirmasdan orqadan kuzatib borish kabi. Istisno tizimi ushbu imkoniyat yordamida amalga oshiriladi. Buning eng qiziqarli foydalanishlaridan biri Dengiz bo'yi Dasturchini veb-brauzerning orqa tugmachasining murakkabligi bilan har bir tahrir qilingan sahifa uchun davomiylikni saqlash va ularning veb-saytida harakatlanish paytida bir-birining orasini almashtirish orqali engillashtiradi. Dengiz bo'yi yordamida veb-serverni dasturlash odatiy dasturlash uslubi yordamida amalga oshirilishi mumkin.[23]

Smalltalk aks ettirish usulidan qanday foydalanishi mumkinligi misolida xatolar bilan ishlash mexanizmi keltirilgan. Ob'ektga u amalga oshirmagan xabar yuborilganda, virtual mashina ob'ektni yuboradi doesNotUnderstand: bilan xabar reifikatsiya argument sifatida xabarning. Xabar (boshqa ob'ekt, misol Xabar) tarkibida xabar tanlagichi va an mavjud Array uning dalillari. Interaktiv Smalltalk tizimida standart dastur doesNotUnderstand: foydalanuvchiga xato haqida xabar beradigan xato oynasini (bildirishnoma) ochadigan narsadir. Ushbu va aks ettiruvchi moslamalar orqali foydalanuvchi xato yuzaga kelgan kontekstni tekshirishi, qoidabuzarlik kodini qayta aniqlab olishi va Smalltalk-80 ning aks ettiruvchi vositalaridan foydalangan holda tizim ichida davom etishi mumkin.[24][25]

Faqat doesNotUnderstand: ni tushunadigan (amalga oshiradigan) sinfni yaratish orqali unga yuborilgan har qanday xabarni doesNotUnderstand: usuli orqali ushlab turadigan misol yaratilishi mumkin. Bunday holatlar shaffof proksi-serverlar deb ataladi.[26] Keyinchalik bunday proksi-serverlar bir nechta Smalltalk tizimlari o'rtasida xabarlar almashinadigan tarqatiladigan Smalltalk, ob'ektlar ma'lumotlar bazasidan shaffof ravishda buzilgan ma'lumotlar bazasi interfeyslari, va'dalar Va boshqalar tarqatilgan Smalltalk dizayni bunday tizimlarga ta'sir ko'rsatdi KORBA.

Sintaksis

Smalltalk-80 sintaksis juda oz sonli, faqat bir nechta deklaratsiyalar va zaxira so'zlarga asoslangan. Darhaqiqat, Smalltalk-da faqat oltita "kalit so'z" zaxiralangan: to'g'ri, yolg'on, nol, o'zini o'zi, superva thisContext. Ular to'g'ri nomlangan yolg'on o'zgaruvchilar, o'zgaruvchan identifikatorlar qoidalariga amal qiladigan, lekin dasturchi o'zgartira olmaydigan bog'lanishlarni bildiradigan identifikatorlar. The to'g'ri, yolg'onva nol yolg'on o'zgaruvchilar singleton misollar. o'zini o'zi va super ushbu xabarga javoban faollashtirilgan, ammo yuboradigan usul ichida xabarni qabul qiluvchiga murojaat qiling super qabul qiluvchining sinfiga emas, balki usulni belgilaydigan sinfning superklassiga qarashadi, bu subklasslardagi usullarga superklasslarda bir xil nomdagi usullarni chaqirishga imkon beradi. thisContext joriy faollashtirish yozuviga ishora qiladi. Yagona ichki til konstruktsiyalari - bu xabarlarni yuborish, tayinlash, usulni qaytarish va ba'zi ob'ektlar uchun so'zma-so'z sintaksis. Standart Smalltalk sintaksisida barcha yoshdagi bolalar uchun til sifatida kelib chiqishi tinish belgilarini asosiy kodlash tillaridan ko'ra ingliz tiliga o'xshash tarzda ishlatiladi. Tilning qolgan qismi, shu jumladan shartli baholash va takrorlash uchun boshqaruv tuzilmalari, standart Smalltalk sinf kutubxonasi tomonidan o'rnatilgan konstruktsiyalar ustida amalga oshiriladi. (Ishlash sabablari sababli, dasturlar ushbu xabarlarning ayrimlarini tanib olishlari va ularni maxsus deb hisoblashlari mumkin; ammo bu faqat optimallashtirishdir va til sintaksisiga kiritilmagan.)

"Smalltalk sintaksisiga a mos keladi" degan maqol pochta varaqasi "kod parchasini anglatadi Ralf Jonson, usullarning barcha asosiy standart sintaktik elementlarini namoyish etish:[27]

exampleWithNumber: x    | y |    to'g'ri & yolg'on emas & (nol isNil) ifFalse: [o'zini o'zi to'xtatish].    y := o'zini o'zi hajmi + super hajmi.    #($ a #a "a" 1 1.0)        bajaring: [ :har biri |            Stenogramma ko'rsatish: (har biri sinf ism);                       ko'rsatish: ' '].    ^x < y

Literallar

Smalltalk-80 usullarida tom ma'noda yozilishi mumkin bo'lgan eng keng tarqalgan ob'ektlarni quyidagi misollarda keltirilgan.

Raqamlar. Quyidagi ro'yxat ba'zi imkoniyatlarni aks ettiradi.

42-42123.451.2345e22r1001001016rA000

Oxirgi ikkita yozuv mos ravishda ikkilik va o'n oltinchi raqamdir. "R" dan oldingi raqam bu radix yoki tayanch. Baza ikki kuchga ega bo'lishi shart emas; masalan 36rSMALLTALK - bu 80738163270632 kasrga teng haqiqiy son.

Belgilar oldidan dollar belgisi bilan yoziladi:

$ A

Satrlar - bitta tirnoq ichiga kiritilgan belgilar ketma-ketligi:

'Salom Dunyo!'

Iqtibosni mag'lubiyatga qo'shish uchun, ikkinchi tirnoq yordamida undan qochib qutuling:

"Men ularga:" Salom, dunyo! "" Dedim ularga. "

Ikki tirnoq qochish kerak emas, chunki bitta tirnoq satrni ajratadi:

'Men: "Salom, dunyo!" ularga.'

Ikkita teng satr (agar ularning barchasi bir xil belgilarni o'z ichiga olsa, satrlar teng bo'ladi) xotiraning turli joylarida joylashgan turli xil narsalar bo'lishi mumkin. Smalltalk-da qatorlardan tashqari, Symbol deb nomlangan belgilar qatori ob'ektlari klassi mavjud. Belgilarning noyobligi kafolatlanadi - har xil ob'ekt bo'lgan ikkita teng belgi bo'lishi mumkin emas. Shu sababli, ramzlarni taqqoslash juda arzon va ko'pincha xabarlarni tanlash kabi til eksponatlari uchun ishlatiladi (pastga qarang).

Belgilar # deb yoziladi, so'ngra a string literal. Masalan:

#"foo"

Agar ketma-ketlik bo'sh joy yoki tinish belgilarini o'z ichiga olmasa, uni quyidagicha yozish mumkin:

#foo

Massivlar:

#(1 2 3 4)

to'rtta butun sonli qatorni belgilaydi.

Ko'pgina dasturlar ByteArrays uchun quyidagi so'zma-so'z sintaksisini qo'llab-quvvatlaydi:

#[1 2 3 4]

to'rtta butun sondan iborat bo'lgan ByteArray-ni belgilaydi.

Va nihoyat, lekin eng muhimi, bloklar (noma'lum funktsiya adabiyotlar)

[... Biroz kichik munozarasi kod...]

Bloklar matnda batafsil bayon etilgan.

Ko'pgina Smalltalk lahjalari boshqa narsalar uchun qo'shimcha sintaksislarni amalga oshiradi, ammo yuqoridagilar hamma tomonidan qo'llab-quvvatlanadigan muhim narsadir.

O'zgaruvchan deklaratsiyalar

Smalltalk-da tez-tez ishlatiladigan ikki xil o'zgaruvchilar - bu misol o'zgaruvchilari va vaqtinchalik o'zgaruvchilar. Boshqa o'zgaruvchilar va ular bilan bog'liq bo'lgan atamalar muayyan dasturga bog'liq. Masalan, VisualWorks sinfning umumiy o'zgaruvchilariga va nomlar maydonining umumiy o'zgaruvchilariga ega Siqish va boshqa ko'plab dasturlarda sinf o'zgaruvchilari, hovuz o'zgaruvchilari va global o'zgaruvchilar mavjud.

Smalltalk-dagi vaqtinchalik o'zgaruvchilar deklaratsiyalari - bu usul ichida e'lon qilingan o'zgaruvchilar (pastga qarang). Ular usulning yuqori qismida bo'shliqlar bilan ajratilgan va vertikal chiziqlar bilan yopilgan ismlar sifatida e'lon qilinadi. Masalan:

| indeks |

dastlab qiymatni o'z ichiga olgan indeks nomli vaqtinchalik o'zgaruvchini e'lon qiladi nol.

Bir qator satrda bir nechta o'zgaruvchilar e'lon qilinishi mumkin:

| indeks unlilar |

ikkita o'zgaruvchini e'lon qiladi: indeks va unlilar. Barcha o'zgaruvchilar boshlangan. O'zgaruvchilar nolga boshlang'ich satrlar indekslangan o'zgaruvchilardan tashqari, nolga yoki 0 ga boshlangan ByteArrays indekslangan o'zgaruvchilarga kiritiladi.

Topshiriq

O'zgaruvchiga 'orqali qiymat beriladi:=sintaksis. Shunday qilib:

unlilar := 'aeiou'

Ipni tayinlaydi 'aeiou' ilgari e'lon qilingan unlilar o'zgaruvchisiga. String - bu ob'ekt (kompilyatsiya paytida kompilyator tomonidan yaratilgan ob'ekt (bitta tirnoq orasidagi belgilar ketma-ketligi - bu so'zma-so'z satrlar uchun sintaksis).

Parc Place asl rasmida ⟨_⟩ pastki chiziq belgisining glifi chap tomonga yo'naltirilgan o'q sifatida paydo bo'ldi ←⟩ (1963 yildagi versiyasida bo'lgani kabi) ASCII kod). Smalltalk dastlab ushbu chap o'qni yagona tayinlash operatori sifatida qabul qildi. Ba'zi bir zamonaviy kodlar ushbu asl ishlatishga quloq solib, topshiriqlar vazifasini bajaradigan pastki chiziqlar kabi ko'rinadi. Ko'pgina zamonaviy Smalltalk dasturlari pastki chiziqni yoki yo'g'on ichakka teng sintaksisni qabul qiladi.

Xabarlar

Xabar Smalltalk-dagi eng asosiy til konstruktsiyasidir. Hatto nazorat tuzilmalari ham amalga oshiriladi xabar yuboradi. Smalltalk sukut bo'yicha sinxron, yagona qabul qiladi dinamik xabar jo'natish strategiya (asenkrondan farqli o'laroq, bir nechta jo'natish ba'zi boshqa ob'ektga yo'naltirilgan tillar tomonidan qabul qilingan strategiya).

Quyidagi misol 42 raqamiga 'faktorial' xabarini yuboradi:

42 faktorial

Bunday vaziyatda 42 xabar deb nomlanadi qabul qiluvchi, "faktorial" xabar selektor. Qabul qilgich xabarga qiymatni qaytarish orqali javob beradi (ehtimol bu holda shunday bo'ladi) faktorial 42). Boshqa narsalar qatori, xabarning natijasi o'zgaruvchiga berilishi mumkin:

aRatherBigNumber := 42 faktorial

"faktorial" yuqoridagi narsa "a" deb nomlanadi unary xabar chunki faqat bitta ob'ekt, qabul qiluvchi ishtirok etadi. Xabarlar qo'shimcha ob'ektlarni quyidagicha olib yurishlari mumkin dalillar, quyidagicha:

2 ko'tarildi 4

Ushbu iborada ikkita ob'ekt ishtirok etadi: 2 qabul qiluvchi sifatida va 4 xabar argumenti sifatida. Xabar natijasi yoki Smalltalk tilida aytganda, javob bo'lishi kerak edi 16. Bunday xabarlar chaqiriladi kalit so'z xabarlari. Xabar quyidagi sintaksisdan foydalangan holda ko'proq dalillarga ega bo'lishi mumkin:

'Salom Dunyo' indexOf: $ o boshlang'ich: 6

qidiruv indeksini 6-indeksdan boshlab qabul qilgich satrida 'o' belgisi indeksiga javob beradi, bu qidiruvni 6-indeksdan boshlaydi. Ushbu xabarning selektori "indexOf: startAt:" bo'lib, ikkita qismdan iborat yoki kalit so'zlar.

Kalit so'zlar va dalillarning bir-biriga o'xshashligi kodning o'qilishini yaxshilaydi, chunki argumentlar ularning oldingi kalit so'zlari bilan izohlanadi. Masalan, C ++ yoki Java-ga o'xshash sintaksisdan foydalangan holda to'rtburchak yaratish uchun ibora quyidagicha yozilishi mumkin:

yangi To'rtburchak(100, 200);

Qaysi argument qaysi ekanligi aniq emas. Aksincha, Smalltalk-da ushbu kod quyidagicha yoziladi:

To'rtburchak kengligi: 100 balandligi: 200

Qabul qilgich bu holda "To'rtburchak", sinf bo'lib, javob belgilangan kenglik va balandlik bilan sinfning yangi nusxasi bo'ladi.

Va nihoyat, maxsus (alfavitga ega bo'lmagan) belgilarning aksariyati chaqirilgan sifatida ishlatilishi mumkin ikkilik xabarlar. Bular matematik va mantiqiy operatorlarni an'anaviy shaklida yozishga imkon beradi:

3 + 4

qabul qiluvchiga "+" xabarini yuboradi 3 argument sifatida berilgan 4 bilan (javobi 7 bo'ladi). Xuddi shunday,

3 > 4

3-ga 4-argument bilan yuborilgan ">" xabari (uning javobi noto'g'ri bo'ladi).

E'tibor bering, Smalltalk-80 tilining o'zi ushbu operatorlarning ma'nosini anglatmaydi. Yuqoridagilarning natijasi faqat xabar qabul qiluvchisi (bu holda Raqamli misol) "+" va ">" xabarlariga qanday javob berishi bilan belgilanadi.

Ushbu mexanizmning yon ta'siri operatorning ortiqcha yuklanishi. ">" Xabarini boshqa ob'ektlar ham tushunishi mumkin, bu ularni taqqoslash uchun "a> b" shaklidagi iboralardan foydalanishga imkon beradi.

Ifodalar

Ifoda bir nechta xabar yuborishni o'z ichiga olishi mumkin. Bunday holda iboralar oddiy ustuvorlik tartibiga ko'ra tahlil qilinadi. Unary xabarlari eng yuqori ustunlikka ega, undan keyin ikkilik xabarlar, so'ngra kalit so'z xabarlari. Masalan:

3 faktorial + 4 faktorial o'rtasida: 10 va: 100

quyidagicha baholanadi:

  1. 3 "faktorial" xabarini oladi va 6 ga javob beradi
  2. 4 "faktorial" xabarini oladi va 24 ga javob beradi
  3. 6 argument sifatida 24 bilan "+" xabarini oladi va 30 ga javob beradi
  4. 30 argument sifatida "va: orasida" xabarni 10 va 100 raqamlari bilan qabul qiladi va to'g'ri javob beradi

So'nggi yuborilgan xabarning javobi butun ifodaning natijasidir.

Qavslar kerak bo'lganda baholash tartibini o'zgartirishi mumkin. Masalan,

(3 faktorial + 4) faktorial o'rtasida: 10 va: 100

ifoda avval "3 faktorial + 4" ni hisoblab chiqadigan tarzda o'zgaradi, natijada 10 "ikkinchi" faktorial xabarni oladi va 3628800 ni beradi. 3628800 keyin "va:" orasida "noto'g'ri" javobini oladi.

Shuni esda tutingki, ikkilik xabarlarning ma'nosi Smalltalk-80 sintaksisiga qo'shilmaganligi sababli, ularning barchasi bir xil ustunlikka ega deb hisoblanadi va shunchaki chapdan o'ngga baholanadi. Shu sababli, ikkilik xabarlarni ishlatadigan Smalltalk iboralarining ma'nosi ularning "an'anaviy" talqinidan farq qilishi mumkin:

3 + 4 * 5

"(3 + 4) * 5" deb baholanib, 35 hosil bo'ladi. 23 kutilgan javobni olish uchun amallar tartibini aniq belgilash uchun qavslardan foydalanish kerak:

3 + (4 * 5)

Unary xabarlari bo'lishi mumkin zanjirlangan ularni birin ketin yozish orqali:

3 faktorial faktorial jurnal

bu "faktorial" ni 3 ga, so'ngra "faktorial" ni (6) natijaga, keyin "log" ni (720) natijaga yuboradi, natijada 2.85733 natijasini beradi.

Bir qator iboralarni quyidagi (taxminiy) misolda yozish mumkin, ularning har biri nuqta bilan ajratilgan. Ushbu misol birinchi navbatda Window sinfining yangi nusxasini yaratadi, uni o'zgaruvchida saqlaydi va so'ngra unga ikkita xabar yuboradi.

 | oyna |  oyna := Oyna yangi.  oyna yorliq: 'Salom'.  oyna ochiq

Agar yuqoridagi misol bilan bir xil qabul qiluvchiga bir qator xabarlar yuborilsa, ularni a shaklida ham yozish mumkin kaskad vergul bilan ajratilgan alohida xabarlar bilan:

  Oyna yangi    yorliq: 'Salom';    ochiq

Avvalgi misolni bitta ibora sifatida qayta yozish, yangi oynani vaqtinchalik o'zgaruvchida saqlash zarurligini oldini oladi. Odatiy ustuvorlik qoidalariga ko'ra, avval "yangi" unary xabari yuboriladi, so'ngra "new" javobiga "label:" va "open" yuboriladi.

Kod bloklari

Kod bloki (noma'lum funktsiya) so'zma-so'z qiymat sifatida ifodalanishi mumkin (bu ob'ekt, chunki barcha qiymatlar ob'ektlardir). Bunga kvadrat qavslar yordamida erishiladi:

[ :params | <xabar-iboralar> ]

Qaerda : params kod olishi mumkin bo'lgan parametrlar ro'yxati. Bu shuni anglatadiki, Smalltalk kodi:

[:x | x + 1]

quyidagicha tushunilishi mumkin:

 :

yoki lambda so'zlari bilan quyidagicha ifodalangan:

 :

va

[:x | x + 1] qiymati: 3

deb baholash mumkin

Yoki lambda bilan aytganda:

Natijada blok ob'ekti a ni tashkil qilishi mumkin yopilish: u istalgan vaqtda o'zining lug'aviy doirasi o'zgaruvchilariga kira oladi. Bloklar birinchi darajali ob'ektlar.

Bloklarni ularga yuborish orqali bajarish mumkin qiymat xabar (tarkibiy parametrlar blokga parametrlarni ta'minlash uchun mavjud, masalan. 'value: value:' va 'valueWithArguments:').

Bloklarning so'zma-so'z namoyishi yangilik edi, bu bir tomondan ma'lum kodlarni sezilarli darajada o'qishga imkon berdi; iteratsiyani o'z ichiga olgan algoritmlarni aniq va aniq tarzda kodlashga imkon berdi. Odatda ba'zi tillarda ko'chadan bilan yoziladigan kodni Smalltalk-da bloklar yordamida qisqacha, ba'zida bitta qatorda yozish mumkin. Ammo bundan ham muhimi bloklar boshqaruv strukturasini xabarlar yordamida ifodalashga imkon beradi polimorfizm, chunki bloklar hisoblashni kechiktiradi va polimorfizm alternativalarni tanlash uchun ishlatilishi mumkin. Shunday qilib Smalltalk-da if-then-else yoziladi va amalga oshiriladi

expr ifTrue: [bayonotlar ga baholash agar expr] ifFalse: [bayonotlar ga baholash agar emas expr]

Baholashning haqiqiy usullari

ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
^ trueAlternativeBlock qiymati

Baholash uchun noto'g'ri usullar

ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
^ falseAlternativeBlock qiymati
ijobiyAmount := allAmount tanlang: [:anHount | anHount isPositive]

Bu bilan bog'liqligini unutmang funktsional dasturlash, bu erda hisoblash naqshlari (bu erda tanlov) mavhum ichiga yuqori darajadagi funktsiyalar. Masalan, xabar tanlang: To'plamda yuqori darajadagi funktsiyaga teng filtr tegishli funktsiya.[28]

Boshqarish tuzilmalari

Boshqaruv tuzilmalarida Smalltalk-da maxsus sintaksis mavjud emas. Buning o'rniga ular ob'ektlarga yuborilgan xabarlar sifatida amalga oshiriladi. Masalan, shartli bajarish iftrue: xabarini mantiqiy ob'ektga yuborish orqali amalga oshiriladi, agar mantiqiy qabul qilgich rost bo'lsa, bajariladigan kod blokini argument sifatida uzatadi.

Quyidagi kod buni namoyish etadi:

natija := a > b    ifTrue:[ "katta" ]    ifFalse:[ "kam yoki teng" ]

Bloklar, shuningdek, foydalanuvchi tomonidan belgilangan boshqaruv tuzilmalarini, hisoblovchilarni, tashrif buyuruvchilarni, istisno bilan ishlash, ulanadigan xatti-harakatlar va boshqa ko'plab naqshlar.

| aString unlilar |aString := 'Bu mag'lubiyat'.unlilar := aString tanlang: [:a Belgilar | a Belgilar isVowel].

So'nggi satrda satrga xabar tanlangan holda yuboriladi: kod bloki literal bo'lgan argument bilan. Kod blokining literal ma'nosi "tanlash" ning argumenti bo'lgan kod bloki tomonidan taqdim etilgan testni qondiradigan belgilar to'plamiga String elementi kiritilishi shart bo'lgan taqdirda to'g'ri javob beradigan predikat funktsiyasi sifatida ishlatiladi: "xabari.

String ob'ekti "select:" xabariga o'z a'zolari orqali takrorlash orqali (o'zi "do:" xabarini yuborish orqali) javob beradi, tanlov blokini ("aBlock") argument sifatida har bir belgi bilan bir marta baholaydi. Baholashda ("qiymati: har biri" xabarini yuborish orqali) tanlov bloki ("aBlock" parametri havola qilingan va "[: aCharacter | aCharacter isVowel]" blok ma'nosi bilan aniqlangan)) mantiqiy javob beradi, bu keyin "ifTrue:" yuborildi. Agar mantiqiy ob'ekt ob'ektiv bo'lsa, belgi qaytariladigan qatorga qo'shiladi. "Select:" usuli "mavhum sinf" to'plamida aniqlanganligi sababli, uni quyidagicha ishlatish mumkin:

| to'rtburchaklar aPoint to'qnashuvi |to'rtburchaklar := Buyurtma qilingan yig'ish  bilan: (To'rtburchak chapda: 0 o'ngda: 10 yuqori: 100 pastki: 200)  bilan: (To'rtburchak chapda: 10 o'ngda: 10 yuqori: 110 pastki: 210).aPoint := Nuqta x: 20 y: 20.to'qnashuvlar := to'rtburchaklar tanlang: [:aRect | aRect o'z ichiga oladiPoint: aPoint].

Istisnolardan foydalanish mexanizmi bloklarni ishlovchilar sifatida ishlatadi (CLOS uslubidagi istisnolardan foydalanishga o'xshash):

[  biroz operatsiya] kuni:Xato bajaring:[:sobiq |  ishlov beruvchi-kod  sobiq qaytish]

Istisno ishlovchisining "ex" argumenti to'xtatilgan operatsiya holatiga kirishni ta'minlaydi (stek ramkasi, qator raqami, qabul qilgich va argumentlar va boshqalar) va shuningdek, hisoblashni qanday davom ettirishni boshqarish uchun ishlatiladi ("ex continue" dan birini yuborish orqali "," ex rad "," ex restart "yoki" ex return ").

Sinflar

Bu aktsiyadorlik sinfining ta'rifi:[29]

Ob'ekt subklass: #MessagePublisher    instanceVariableNames: ''    classVariableNames: ''    hovuzLug'atlar: ''    toifasi: "Smalltalk misollari"

Ko'pincha, ushbu ta'rifning aksariyati atrof-muhit tomonidan to'ldiriladi. E'tibor bering, bu Ob'ekt deb nomlangan subklass yaratish uchun sinf MessagePublisher. Boshqacha qilib aytganda: sinflar birinchi darajali ob'ektlar Smalltalk-da, xuddi boshqa ob'ektlar singari xabarlarni qabul qilishi mumkin va ijro etilish vaqtida dinamik ravishda yaratilishi mumkin.

Usullari

Ob'ekt xabar olganda, xabar nomiga mos keladigan usul chaqiriladi. Quyidagi kod nashr etish usulini belgilaydi va shuning uchun ushbu ob'ekt "nashr" xabarini olganida nima bo'lishini aniqlaydi.

nashr etish    Stenogramma ko'rsatish: 'Salom Dunyo!'

Quyidagi usul bir nechta argumentlarni qabul qilishni va qiymatni qaytarishni namoyish etadi:

quadMultiply: i1 va: i2    "Ushbu usul berilgan raqamlarni bir-biriga ko'paytiradi va natijani 4 ga ko'paytiradi."    | mul |    mul := i1 * i2.    ^mul * 4

Usul nomi #quadMultiply: va:. Qaytish qiymati bilan belgilanadi ^ operator.

Shuni esda tutingki, ob'ektlar xabarga javoban qaysi usulni bajarish kerakligini dinamik ravishda belgilashga mas'uldirlar, lekin ko'p tillarda bu (ba'zan, hatto har doim) kompilyatsiya vaqtida statik ravishda aniqlanishi mumkin.

Sinflarni tashkil qilish

Quyidagi kod:

MessagePublisher yangi

MessagePublisher sinfining yangi nusxasini yaratadi (va qaytaradi). Bu odatda o'zgaruvchiga beriladi:

noshir := MessagePublisher yangi

Shu bilan birga, vaqtinchalik, noma'lum ob'ektga xabar yuborish ham mumkin:

MessagePublisher yangi nashr etish

Salom Dunyo misoli

The Salom dunyo dasturi deyarli barcha matnlar tomonidan yangi dasturlash tillariga ishlatiladi, chunki birinchi dastur tilning eng asosiy sintaksisini va muhitini ko'rsatishni o'rgangan. Smalltalk uchun dasturni yozish juda oddiy. Quyidagi kod, "show:" xabari "Transcript" ob'ektiga "Salom, dunyo!" String so'zi bilan yuboriladi. uning argumenti sifatida. "Show:" usulini chaqirish uning argumenti belgilarini ("Salom, dunyo!" String so'zma-so'zi) transkript ("terminal") oynasida ko'rsatilishiga olib keladi.

Stenogramma ko'rsatish: 'Salom Dunyo!'.

Ushbu misol natijalarini ko'rish uchun Transcript oynasi ochilishi kerakligini unutmang.

Tasvirga asoslangan qat'iylik

Ko'pchilik mashhur dasturlash tizimlari statik dastur kodlarini (sinf ta'riflari, funktsiyalar yoki protseduralar ko'rinishida) dinamikdan yoki ishlash vaqti, dastur holati (masalan, ob'ektlar yoki dastur ma'lumotlarining boshqa shakllari). They load program code when a program starts, and any prior program state must be recreated explicitly from configuration files or other data sources. Any settings the program (and programmer) does not explicitly save must be set up again for each restart. A traditional program also loses much useful document information each time a program saves a file, quits, and reloads. This loses details such as undo history or cursor position. Image based systems don't force losing all that just because a computer is turned off, or an OS updates.

Many Smalltalk systems, however, do not differentiate between program data (objects) and code (classes). In fact, classes are objects. Thus, most Smalltalk systems store the entire program state (including both Class and non-Class objects) in an rasm fayl. The image can then be loaded by the Smalltalk virtual mashina to restore a Smalltalk-like system to a prior state.[30] This was inspired by FLEX, a language created by Alan Kay and described in his M.Sc. tezis.[31]

Smalltalk images are similar to (restartable) core dumps and can provide the same functionality as core dumps, such as delayed or remote debugging with full access to the program state at the time of error. Other languages that model application code as a form of data, such as Lisp, often use image-based persistence as well. This method of persistence is powerful for rapid development because all the development information (e.g. parse trees of the program) is saved which facilitates debugging. However, it also has serious drawbacks as a true persistence mechanism. For one thing, developers may often want to hide implementation details and not make them available in a run time environment. For reasons of legality and maintenance, allowing anyone to modify a program at run time inevitably introduces complexity and potential errors that would not be possible with a compiled system that exposes no source code in the run time environment. Also, while the persistence mechanism is easy to use, it lacks the true persistence abilities needed for most multi-user systems. The most obvious is the ability to do transactions with multiple users accessing the same database in parallel.[32]

Level of access

Everything in Smalltalk-80 is available for modification from within a running program. This means that, for example, the IDE can be changed in a running system without restarting it. In some implementations, the syntax of the language or the axlat yig'ish implementation can also be changed on the fly. Even the statement true become: false is valid in Smalltalk, although executing it is not recommended.

Vaqti-vaqti bilan tuzilgan kompilyatsiya

Smalltalk programs are usually compiled to bayt kodi, which is then interpreted by a virtual mashina or dynamically translated into machine-native code.

Amalga oshirilishlar ro'yxati

OpenSmaltalk

OpenSmaltalk VM (OS VM), is a notable implementation of the Smalltalk Runtime environment on which many modern Smalltalk VMs are based or derived from.[33] OS VM itself is transpiled from a set of Smalltalk source code files (which is called VMMaker) to native C tili source code (by using transpiler called Slang)[34][35], which is in turn compiled against specific platform and architecture of the hardware practically enabling cross-platform execution of the Smalltalk images. The source code is available on GitHub and distributed under MIT litsenziyasi. The known derivatives of the OS VM are:

Boshqalar

Shuningdek qarang

Adabiyotlar

  1. ^ a b v d e f g h Kay, Alan; Ram, Stefan (2003-07-23). "E-Mail of 2003-07-23". Dr. Alan Kay on the Meaning of 'Object-Oriented Programming'. Olingan 2009-01-03.
  2. ^ a b v Kay, Alan. "The Early History of Smalltalk". Olingan 2007-09-13.
  3. ^ "Smalltalk.org™ | versions | ANSIStandardSmalltalk.html". Smalltalk.org. Arxivlandi asl nusxasi 2006-02-16. Olingan 2013-06-25.
  4. ^ Stack Overflow Developer Survey 2017
  5. ^ Stack Overflow Developer Survey 2018
  6. ^ "Versions". Smalltalk.org. Arxivlandi asl nusxasi 2015-09-08 da. Olingan 2007-09-13.
  7. ^ "ANSI Smalltalk Standard". Smalltalk.org. Arxivlandi asl nusxasi 2015-09-07 da. Olingan 2007-09-13.
  8. ^ Xobbs
  9. ^ "Tarix". Seagull Software. Arxivlandi asl nusxasi 2002-08-06 kunlari. Olingan 2007-09-13.
  10. ^ VisualAge Smalltalk Transition FAQ
  11. ^ The Simula language was also object-oriented and preceded (and was acknowledged as an influence on) Smalltalk but it was a simulation language, not a general purpose programming language.
  12. ^ Cannon, Howard. "Flavors A non-hierarchical approach to object-oriented programming" (PDF). softwarepreservation.org. Olingan 17 dekabr 2013.
  13. ^ "About Ruby". ruby-lang.org. Olingan 17 dekabr 2013.
  14. ^ "Where Did Refactoring Come From?". sourcemaking.com. Olingan 17 dekabr 2013.
  15. ^ "DARPA / ARPA". livinginternet.com. Olingan 16 dekabr 2013. To meet this need, ARPA established the IPTO in 1962 with a mandate to build a survivable computer network to interconnect the DoD's main computers at the Pentagon, Cheyenne Mountain, and SAC HQ.
  16. ^ "Engelbart's Role in Early Computer Networking". dougengelbart.org. Olingan 17 dekabr 2013.
  17. ^ Kay, Allen. "The Early History of Smalltalk". gagne.homedns.org. Olingan 16 dekabr 2013.
  18. ^ Krasner, Glen; Pope, Stephen (August–September 1988). "A Cookbook for Using the Model-View-Controller User Interface Paradigm in Smalltalk -80". Ob'ektga yo'naltirilgan dasturlash jurnali.
  19. ^ "Our Influence". cincomsmalltalk.com. Olingan 16 dekabr 2013.
  20. ^ Kay, Alan (October 10, 1998). "Prototypes vs Classes (e-mail on Squeak list)".
  21. ^ Goldberg, Adele; Robson, David (1989). Smalltalk-80 The Language. Addison Uesli. pp. 31, 75–89. ISBN  0-201-13688-0.
  22. ^ Clark, A.N. (1997). "Metaclasses and Reflection in Smalltalk". CiteSeerX  10.1.1.33.5755. Iqtibos jurnali talab qiladi | jurnal = (Yordam bering)
  23. ^ Ducasus, Stefan; Lienhard, Adrian; Renggli, Lukas. "Seaside – A Multiple Control Flow Web Application Framework" (PDF). scg.unibe.ch. Software Composition Group Institut fur Informatik und angewandte Mathematik Universitaat Bern, Switzerland. Olingan 16 dekabr 2013.
  24. ^ Foote, Brian; Johnson, Ralph (1–6 October 1989). "Reflective Facilities in Smalltalk-80". Oopsla '89: 327–335. doi:10.1145/74877.74911. ISBN  0897913337. Olingan 16 dekabr 2013.
  25. ^ Smith, Brian C (1982-01-01). "Procedural Reflection in Programming Languages". MIT Technical Report (MIT-LCS-TR-272). Olingan 16 dekabr 2013.
  26. ^ Denker, Marcus; Peck, Mariano Martinez; Bouraqadi, Noury; Fabresse, Luc; Ducasse, Stéphane. "Efficient Proxies in Smalltalk" (PDF). Iqtibos jurnali talab qiladi | jurnal = (Yordam bering)
  27. ^ [1][2]
  28. ^ Goldberg, Adele; Robson, David (1989). Smalltalk-80 The Language. Addison Uesli. pp. 17–37. ISBN  0-201-13688-0.
  29. ^ Goldberg, Adele; Robson, David (1989). Smalltalk-80 The Language. Addison Uesli. 39-53 betlar. ISBN  0-201-13688-0.
  30. ^ "Image-Based Persistence". book.seaside.st. Olingan 17 dekabr 2013.
  31. ^ Kay, Allen (1968). "FLEX – A flexible extendable language". University of Utah MSC Thesis.
  32. ^ Fowler, Martin. "Memory Image". martinfowler.com. Olingan 17 dekabr 2013.
  33. ^ OpenSmalltalk/opensmalltalk-vm, OpenSmalltalk, 2020-11-03, olingan 2020-11-08
  34. ^ "Jargo". wiki.squeak.org. Olingan 2020-11-08.
  35. ^ "A Guide to the S-Lang Language (v2.3.0): Preface". jedsoft.org. Olingan 2020-11-08.

Qo'shimcha o'qish

Tashqi havolalar