LINUX.ORG.RU

Smalltalk - изучаем вместе

 , ,


5

3

Взялся изучать Smalltalk. Процесс изучения выкладываю на видео, правда информацию там стараюсь выдавать максимально достоверную, и по возможности без «воды». В этой теме по ходу дела буду оставлять ссылки на появляющиеся видеоролики. Комментарии приветствуются.

Видео 1. Общие сведения

Краткая история, перечисление некоторых реализаций, общая суть некоторых принципов системы Смолток.

………………………………………………………..

Видео 2. Сообщества, книги, проекты.

Показаны русскоязычные сообщества по Smalltalk, в частности, группа в ВК. Сделан обзор архива с книгами, которые я нашёл в Сети и выложил на Гугл-диск. Рассказано о двух крупных проектах, которые использовали Smalltalk (FLProg и OpenCobalt). Расширенный список ссылок находится в описании к видео, непосредственно на Youtube

………………………………………………………..

Видео 3. Виртуальные машины.

В уроке кратко рассмотрены среды программирования Squeak, Pharo, и Dolphin.

………………………………………………………..

В темах, не затронутых в видеороликах, я ещё либо сильно «плаваю», либо пока не знаю их вообще. Поэтому обсуждать могу только уже выложенное на Ютуб.

Ответ на: комментарий от anonymous

начать погружение в смоллток

есть три, даже четыре варианта:

  1. проприетарненько. дорого, круто, офигенно.

  2. виндовозьненько.

  3. кроссплатформно.

  4. консольно.

  5. смоллток «сделай сам».

  6. берём винду либо wine, ставим Dolphin SmallTalk. смотрим обучающие видео с сайта. читаем встроенный хелп, примеры, обучалку. здесь к примеру, меню Help > Learn SmallTalk запускает слайды-обучалку-презенташку на смоллтоке, с REPL и лайвкодингом. выделяем текст в обучалке, нажимаем Ctrl-E – выполнить или Ctrl-D – выполнить и показать результат. получается такой сразу REPL. естественно, он есть в Workspace – как в емаксе scratch-buffer, сразу можно писать и запускать, дёргать объекты за методы, смотреть их браузером классов или инспектором, и т. п.

почему проще начать с Dolphin SmallTalk? он лично мне хорошо ложится после Delphi-style RAD. хотя есть и существенные отличия, см. видео и читай в блоге.

например, то что можно компоненты ActiveX сразу дёргать за методы, смоллтоком. см. обучающее видео про iTunes как COM-объект, заодно инструментарий про tlb и прочее.

или MVP = Model View Presenter скорее Model-Presenter View, в таком порядке (читай в блоге). компоненты собственной разработки (типа TComponent в Delphi) здесь пишутся как MVC MVP. то есть, вместо мышевозюканья на форму с обработчиками в OnButtonClick()-ах, View пишется в самую последнюю очередь (и вообще может кодогенерироваться). что ломает шаблон дельфи-быдлокодерам.

то есть, здесь полноценная компонентная модель. вообще, в Dolphin SmallTalk либо в Pharo – нормальные компонентные модели.

если потыкать обучалку со слайдами Help > Learn SmallTalk, то сразу видно, что:

  1. гиперссылки запускают скрипт ProfStef next., ProfStef next.
  2. выполнить действие ProfStef next. можно разными способами. например, #perform с нужным селектором. либо объект SmallTalk (вся система в целом). или в REPL.

собственно, это демонстрирует мегафичу смоллтока:

  1. синтаксис умещается на открытку. есть определения переменных, вызов метода (посылка сообщений, 0арные..ун-арные..бинарные…n-арные методы).

нет специальных операторов. операторы это по сути :=, (), +-*/, ещё вызов метода и всё.

всё это объект. переменные это объект. словари, массивы, числа и строки это объект. блоки это объект. класс это объект. метакласс это объект. инстанс (объект) это объект.

ветвления ifTrue/ifElse это вызов метода объекта Boolean. циклы это вызов метода с параметром-блоком. new это метод класса или метакласса, или инстанса (всё едино). контейнеры и итераторы это вызов метода контейнера.

монада это моноид в категории эндофункторов. здесь сразу видно, что цепочка вычислений – монада это например chaining методов в какой-то базовый объект (например, SmallTalk за всю систему).

объект это замыкание и монада, цепочка вычислений, локализация побочных эффектов. то есть, объекты могут быть функционально-объектные. эта тема сильнее развита в реализации смоллтока newspeak от Gilad Bracha, одного из авторов Явы. newspeak – модульный функциональный смоллток.

в Dolphin SmallTalk есть пакеты, подсистемы, модульность, генерация самодостаточного exe без лишних зависимостей (типа tree shaker из лиспов).

примеры практичны: например, самодостаточный хелловорд, чятик, браузер (ActiveX COM-понент).

на Dolphin SmallTalk написан например FLprog. разработка программ под ардуину через лестничные диаграммы FDD из АСУТП, без сишного программирования.

Dolphin SmallTalk не компилируемый, а интерпретируемый. и они честно считают, что это не баг, а фича.

в целом: неплохой вариант чтобы начать ознакомление со смоллтоком – Dolphin SmallTalk либо Pharo либо Squeak.

anonymous
()
Ответ на: начать погружение в смоллток от anonymous

начать хорошо с Dolphin, потому что он не требует ломать парадигму смоллток это «система а не отдельная программа», «вещь в себе». он вполне себе такая замена дельфи, для начала. а во всякие имманентные категорические императивы можно погружаться уже потом.

в блоге и на сайте приводится такая аналогия. что смоллток это город, инфраструктура. живые, асинхронные взаимодействующие объекты, разработка «в образе». вот это вот всё.

и что ППП WWW, повсеместно протянутая паутина это пример такой инфраструктуры. которая построена именно потому что слабо связана, живая, динамически типизирована и пластична.

ну не знаю, на мой взгляд, ППП которое есть это жалкое подобие левой руки того Xanadu, которое могло бы быть. изначальный векторный гипертекстовый фидонет Xanadu предлагался с типизированными двусторонними ссылками, функциональными зависимостями, ссылочной целостностью. которую нельзя было сломать ибо клиент-сервер с авторизацией, сохранением состояния, какими-то операциями обработки (та же трансклюзия, цитирование) а не тупо смотрелка. с возможностью адресации трансфинитными tumblers каждой структурной единицы. по сути объектные ссылки между AST узлами.

ППП Берненса-Ли похерил это вот всё, конечно же. ибо ниасилили. хотя Esquire изначальный от него же, да и RDF + smart web там ссылки типизированные, с контролем ссылочной целостности.

так что, на мой взгляд, тезис в бложике и на сайте Dolphin SmallTalk что смоллток это город, повсеместно протянутая паутина, world wide web и что динамическая типизация это плюс а не минус – так себе.

тут если про город и архитектуру, нужно читать конечно же про Big Ball Of Mud, конечно же. статья, перевод на хабре

собственно, система смоллток как антипаттерн превращается не то чтобы в город. а в shanty town: нахаловку, самозахватом, трущобы и гетто, вот этот вот бомжатник с коммуналками.

потому что нахренячив какую-то архитектуру мегагибких объектов, она такой и останется – нет ничего постояннее, чем временное. если в подсистемах города есть какая-то организация, то всё же нужна нормальная модульность, пакеты, подсистемы.

то есть, нечто более идейно близкое к оберонам, или той же аде. да даже Limbo + Dis из Inferno. чем к нахаловке с самозахватами.

в общем, проблема была озвучена. в современных смоллтоках с этим борются – как и собственными средствами, выделяя модули, пакеты и подсистемы. запуская например Pharo на голом железе (без ОС, как ядро, init pid=1). так и развивая другие смоллтоки – более модульные, функционально-объектные типа newspeak

вообще, думается что и активного оберона из A2 OS было бы достаточно.

к тому же, средства типа SmaCC, Monticello (интеграция с Git), прочие фреймворки

могут отрефакторить проблему «изнутри системы».

например, написать парсер смоллтока (или любого другого языка для которого смоллток метаязык словно клей) на SmaCC.

и отрефакторить автоматически. говорим Class Browser – подразумеваем рефакторинг.

инструменты для создания инструментов.

anonymous
()
Ответ на: комментарий от anonymous

книжки про смоллток

затем, конечно нужно читать книжки. книжки берутся здесь либо здесь: books.pharo.org. ну и планету

чтения той же Pharo by example достаточно дабы проникнуться. именно практическими актуальными, осовременненными фреймворками и батарейками (а не той книге Адель Голдберг 80х годов, да). там правда, тоже была полезная книжка – про язык смоллток и его реализацию. в смысле, что описывается с практической точки зрения фреймворк и объекты, как рецепты, как сделать что-то. про реализацию VM тоже интересно, но тут следует читать уже что-то более современное.

про реализации:

  1. были платные.

  2. Squeak это Macintosh SmallTalk из 80х, ещё под Classic MacOS. у него появилась своя библиотека классов, компонентная модель, тот же Morhic.

есть такая любопытная сборка «полиглот смоллток». там на этом сайте ещё книжка Адель Голдберг классическая переведённая на русский язык была.

что сделали: вот это

ProfStef next.

==

(Smalltalk at: #ProfStef) next.

==

ProfStef perform: 'next'.

==

[ProfStef next] value.

==

3 = 3 ifTrue: [ProfStef next].

==

1 to: 1 do: [:i | ProfStef next].

==

(Smalltalk allClasses select: [:eachClass | eachClass name = #ProfStef]) do: [:eachProfstef | eachProfstef next].

==

ProfStef class compile: 'goToNextLesson ProfStef next.'

"Wow! I can't wait to use my new method!"

ProfStef goToNextLesson.

==

ProfStef perform: #next

==

self halt. ProfStef default next. 

из обучалки Dolphin SmallTalk Help > Learn SmallTalk

наглядно показывает, что нужно сделать чтобы создать русский смоллток

(или же: японский, клингонский, эльфийский, мицгольский, на эсперанто с буриме и графоманками)

то есть: достаточно сделать прокси для основных базовых селекторов.

чтобы например синоним методу next назывался не просто gotoNextLesson или как йето по-рюсски — копией-дублем с вызовом старого.

а например, отдельным русскоязычным символом #вдругорядь который совершенно аналогично действует англоязычному #next. то есть, 2 символа вызывают одну и ту же реализацию (а не заглушку-обёртку, которая не нужна).

далее можно перевести все основные методы основных классов и фреймворков, дабы невозбранно достигнуть желаемого – реализовать искомое программирование на славянском языке, на кирилическом (аще бо понеже, вдругорядь и глаголицею!).

здесь, в общем в современных смоллтоках есть полноценная поддержка юникода, всё это объекты, выделенных операторов нет – всё это вызов методов.

так что не стоит ждать каких-то неожиданностей.

раньше конечно, могло быть множество костылей.

anonymous
()
Ответ на: книжки про смоллток от anonymous

здесь следует отметить следующее:

Squeak – кроссплатформная и кроссистемная реализация смоллтока, потомка Macintosh Smalltalk.

Pharo – его современный форк, актуальная реализация с последними оптимизациями.

качается pharo-launcher под вашу систему + образ VM + запускалка. лончер позволяет удобным образом собрать каталог своих любимых образов VM.

запускалка под разные системы разная, образ везде одинаковый.

есть FFI, пакеты, библиотеки и батарейки.

качаем книжки в pdf из books.pharo.org, проходим обучающие курсы, смотрим скринкасты и обучающее видео на pharo documentation.

качаем лончер, запускалку и образ. пробуем потыкать примеры из Pharo by example *(дабы не набирать вдругорядь, можно скачать сразу уже настроенный образ).

и пробуем со всей этой машинерией хоть как-то взлететь.

ну в смысле, если после прочтения таких практичных примеров всё ещё не понятно, зачем смоллток, и что с этим делать — значит, не хватает осознания какой-то достаточно интересной задачи.

тут можно потыкать истории успеха, батарейки из каталога, новости с планеты. и подобрать что-то своё.

например, то же Grafoscopio, literate programming, reproducible research

или seaside или illiad или ещё какой веб-фреймворк.

или дазы банных и персистентные объекты (тот же GemStone, но их несколько разных).

или игрушку на opengl.

и какой-то метапрог из всего этого – куда же без него, ога.

anonymous
()
Ответ на: начать погружение в смоллток от anonymous
  1. проприетарненько. дорого, круто, офигенно.

платные смоллтоки. если оно вам надо – вы знаете где его взять. и доки тоже.

  1. виндовозьненько.

Dolphin SmallTalk, например.

  1. кроссплатформно.

Squeak (старый), Pharo (новый)

  1. консольно.

GNU SmallTalk. отличительная особенность: он не графический, а текстовый.

ну то есть, натурально. это скриптовая реализация, типа guile. из командной строки можно скрипты запускать.

есть Gtk. ORM. вебсервер. FFI. и какие-то батарейки.

по поводу библиотек классов которые тут зело отличаются – нужно читать документацию из поставки GNU SmallTalk.

раньше ещё была по нему книжка.

  1. смоллток «сделай сам».

здесь возможны варианты.

anonymous
()
Ответ на: комментарий от anonymous

синтаксис смоллтока умещается на одну открытку. из любопытных реализаций, уже упоминался newspeak, в более функционально-объектном стиле.

еще есть в Factor такая вот реализация: бложик, затем эта реализация на одной странице выросла в гитхаб .

здесь написан PEG парсер смоллтока, размером в полэкрана кода на языке factor. factor – это такой функциональный форт. местами форт, местами коммон лисп. местами хаскель. местами, как выяснилось – и смоллток тоже.

если функциональщина с монадами вызывает панические макаки , а душа требует няшной сишечки – и здесь есть отрада.

есть язык Nim. который по синтаксису вроде как питон, по семантике – дельфи, паскаль, или даже с++. или по смыслу вообще лисп – AST макросы и CTFE вычисления есть.

при этом оно компилируется в няшную сишечку. и работает со скоростью, ну тут мерять надо – потому что есть GC. который написан на том же Nim и опционально отстреливается (как и в D).

Nim нам интересен тут тем, что есть AST макросы и вычисления времени компиляции. примеры из презентаций на Nim – printf заменили макросами времени комплияции, с проверкой типизации и оптимизациями – переписыванием термов.

к тому же, на самом Nim можно написать intrinsinc. и писать код на ассемблерных вставках – либо на вставках няшной сишечки.

в итоге, оптимизировать можно очень сильно.

на Nim например, оптимизировали terf – это один из коммерческих форков OpenCobalt. говорят, получили ускорение на порядки, в 10 и больше раз. OpenGL и VR на нём переписали.

здесь Nim нам интересен в контексте spry : гитхаб и бенчмарки, замеры производительности, nim и oo

идея проста: пишем VM смоллтока как интерпретатор AST. делаем транслятор в это AST посредством PEG парсера, на том же Nim есть готовая библиотека, например. и пользуемся возможностями AST макросов Nim по CTFE и переписыванию термов для оптимизации, заменяя на intrinsic.

получаем ускорение на порядки.

понятное дело, что можно с тем же успехом взять форт, лисп, окамль, COLA by Ian Piumatra и прочее.

и запилить себе свой смоллток, с лунапарком, блекджеком и распутными женсчинами.

если производительности будет нех ватать.

хотя, при разработке на смоллтоке основное его достоинство не в этом. а в том, что это метаязык, клей, язык как инструмент для создания инструментов.

где всё можно подёргать, посмотреть, отрефакторить и распарсить в любой момент.

и есть уже полноценная компонентная модель и функционально богатая библиотека классов.

компактных, понятных, наглядных и обозримых.

в своём специфическом синтаксисе, ога.

anonymous
()
Ответ на: комментарий от anonymous

3.консольно.

GNU SmallTalk. отличительная особенность: он не графический, а текстовый.

есть ощущение, что достаточно покурив мануалы по Емаксу, Emacs org-mode babel, пакету Гипербола вики можно невозбранно достигнуть желаемого.

ну то есть – получить своё такое Smalltalk IDE с разработкой в образе с емаксом вместо IDE, и смоллтока.

где на этом пакете-расширении реализовано своё такое IDE. но без IDE. и без этой вот кафкианской «вещи в себе», самой на себе, забутстрапленной как «пирожокъ без никто».

пакет Hyperbole – был такой гипертекст на Xemacs в середине 90х.

основной его фичей были «программируемые кнопки», «программируемые гиперссылки».

это как в примере из Dolphin Smalltalk : Help > Learn Smalltalk гиперссылки по сути запускают метод ProfStef next.

здесь же увидев в тексте «кнопку» вида:

<(factorial button)>

либо

<( factorial button )>

либо многострочное из фидопочты:

топикстартер> <(factorial
топикстартер>   button)>

либо в комментариях литературно-грамотных:

;; <(factorial
;;    button)>

либо в няшной сишечке (с комментариями из PL/I):

/* <( factorial     */
/*    button   )>   */

это расширение Hyperbole само раскрасит кнопочку гиперссылкою.

причём, есть три вида различных кнопок-гиперссылок: явные, неявные и глобальные.

причём, эта кнопка запускает код – так же, как и в Help > Learn SmallTalk ProfStef next. в презентации-слайде.

здесь код на elisp в емаксе, но что мешает задать его в мультиязычной среде на другом языке (или метаязыке)? на любом, хоть на смоллтоке?

причём, можно совместно использовать как Emacs org-mode babel ради сильного уличного колдунства: техномагического плетения M-x org-babel-tangle

и программируемые кнопки-гиперссылки на Hyperbole. истории успеха (например, тестирование с прослеживаемостью гиперкнопками) намекают – основная проблема грамотного программирования (сложно отлаживать, проследить какой метакод в конкретно этот чанк раскрывается) – решена же!

ЗЫ. АУ, топикстартер со своей Перспективою.

есть ощущение, что нечто подобное уже было, и не раз. и в емаксе. или в смоллтоке.

ну или я не совсем понял твою концепцию. всё ещё пересматриваю твои видео, пытаюсь осмыслить.

кстати, подобное бывало в Emacs неоднократно: hyperbole, org-mode, eev-scripts

далее смотри например реализацию qemacs от Фабриса Беллара, автора QEMU и tcc.

нормальный минималистичный модульный емакс с плагинами.

Fabrice Bellard был заодно и ментейнером ffmpeg. логично же, что он реализовал в своём емаксе и поддержку ffmpeg тоже!!

то есть, плагин умеет показывать картинки, аудио, видео.

далее, твой пример с Cinelera и нелинейным видеомонтажём.

положим, у нас есть гиперссылки на таймкод – место в ролике, в одной из параллельных видеодорожек монтажного стола.

и типизированные гиперссылки между такими вот объектами. имеющими текстовое представление в виде дорожки, таймкода, прочего.

далее какие-то эффекты накладывать, дорожки совмещать, слои и переходы монтировать – вполне себе можно скриптом. кажется у того же ffmpeg есть какие-то ключи команднострочные для этого.

и затем это консольное или плагинное скриптовать программируемыми гиперкнопками.

то есть – гиперссылками, на любом языке.

anonymous
()
Ответ на: начать погружение в смоллток от anonymous

операторы это по сути :=, (), +-*/, ещё вызов метода и всё.

ещё ^ – вызов super – реализации того же метода из суперкласса, предка. ну и все выражения точкой заканчиваются. приоритетов операций нет, строго слева направо. поэтому обносить скобками ради правильных приоритетов в выражениях.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.