- PVSM.RU - https://www.pvsm.ru -
Smalltalk обычно воспринимается как старый, умирающий язык – антиквариат из ушедшей эпохи. Нет ничего более далёкого от правды.
Smalltalk по-прежнему очень актуален. Это отличный язык для обучения программированию людей, не имеющих технического образования. Это превосходный язык прототипирования для стартапов. Это мощный промышленный язык, используемый как крупными, так и малыми компаниями по всему миру [1]. Есть веские причины рассмотреть использование современного Smalltalk сегодня, поскольку многое было сделано за последнее время, чтобы улучшить его возможности.
Вы не обязаны использовать Smalltalk в промышленном программировании, но попробуйте кое-что написать на нём и прислушайтесь к своим ощущениям. Они должны быть знакомы, потому что реализация объектно-ориентированной парадигмы в Smalltalk настолько великолепна, что повлияла на целое поколение ОО языков, таких как Objective-C, Python, Ruby, CLOS, PHP 5, Perl 6 [2], Erlang, Groovy, Scala, Dart, Swift и многих иных.
Изучая Smalltalk, вы поймете, как все эти полезные функции в современных языках стали реальностью. Изучение Smalltalk может также дать вам преимущество среди ваших коллег, и ещё он может быть отличным инструментом для обучения программированию.
Вклад Smalltalk в индустрию программного обеспечения огромен. Просто взгляните на этот список функций и технологий, которые он представил:
Smalltalk имеет целый ряд функций, намного опередивших своё время:
И есть ещё несколько фич [12], которые делают Smalltalk особенным.
По существу, ключевым преимуществом Smalltalk как продуктивного языка и инструмента обучения является то, что он снимает большую часть, если не весь, когнитивный стресс в промышленных OO языках, таких как Java. Smalltalk не содержит синтаксического мусора или сбивающих с толку функций. Он вежливо уступает вам дорогу, так что вы можете сосредоточить всё своё внимание на проблеме или приложении. Дело не в том, что Java – плохой язык, потому что он более сложный (и имеющий 30-символьные имена классов); я говорю о том, что изучение необремененного лишними функциями OO языка на самом деле может сделать вас лучшим Java-программистом, как только вы поймёте концепции OOП с другой точки зрения.
Устранение когнитивного стресса является целью многих языков – например, Python, Ruby, Elixir, Elm и Go. Даже если вы его не чувствуете, стресс есть. Часто говорят, что программирование в Smalltalk или Python похоже на Дзен; ваше сознание просто течёт легко и непринуждённо вместе с решаемой задачей. Это красота и ценность языковой простоты, и Smalltalk обладает ею в полной мере.
В Smalltalk концепция ООП очищена до базовых понятий классов и методов, метаклассов и рефлексии, и, самое главное, передачи сообщений. Smalltalk, в силу своей объектной чистоты и согласованности, даст вам глубокое понимание объектно-ориентированного программирования и того, как использовать его с максимальной эффективностью.
Простота Smalltalk также делает его идеальным учебным языком для обучения программированию, особенно если у вас нет технической подготовки. Простота языка и инструментов позволяет сосредоточить ваши усилия на изучении методов программирования, а не языковых конструкций и формализма.
«Живой» отладчик значительно сокращает цикл редактирование – тестирование – отладка.
Главная причина успеха Smalltalk – подход к созданию программного обеспечения, основанный на образе. Образ представляет собой моментальный снимок памяти, который содержит все объекты в вашем запущенном приложении. Он инкапсулирует всё состояние выполнения вашей программы. Образ можно сохранить на диск и позже возобновить точно с того места, где вы остановились!
«Образ Smalltalk» может звучать немного необычно, но на самом деле он очень похож на нечто, широко используемое сегодня в ИТ: системные образы в виртуализации ОС, такие как в VMware и VirtualBox. Не забывайте, что Smalltalk первоначально был автономной операционной системой, созданной в Xerox PARC в 1970-х годах.
Образ Smalltalk похож на DOM (Document Object Model) в веб-приложении. Обратите внимание, что веб-приложение представляет собой по существу операционную систему, изолированную в веб-браузере и лишённую прямого доступа к файловой системе хоста и другим ресурсам. Когда веб-браузер закрывается, состояние динамического веб-сайта может быть сохранено или кэшировано, и в следующий раз, когда браузер возобновит работу, веб-сайт может быть восстановлен в браузере (с некоторыми ограничениями).
Даже электронная таблица очень близка к концепции образа. Она инкапсулирует всю нужную информацию. Она не может получить доступ к системным ресурсам. Её можно сохранить и восстановить. И вы должны знать, что электронные таблицы по-прежнему используются для разработки сложных моделей и приложений с собственным языком.
В общем, концепция образа широко распространена. Это настолько удобный способ разработки программного обеспечения, что версия образа была создана для JavaScript в Lively Kernel [13].
Без исключений: всё есть объект. Нет примитивных типов данных. Нет таких управляющих структур, как выбор и итерация! Всё в Smalltalk делается путём посылки сообщений объектам. Именно это делает Smalltalk настолько простым, элегантным и лёгким в освоении. Именно это делает язык настолько чистым синтаксически.
Например, следующий фрагмент кода расширяет класс Number
для поддержки нерекурсивной операции факториала:
Number extend [
my_factorial [
(self < 2) ifTrue: [ ^1 ]
ifFalse: [ |c|
c := OrderedCollection new.
2 to: self do: [ :i | c add: i ].
^ (c fold: [ :a :b | a * b ] ) ]
]].
7 factorial printNl.
7 my_factorial printNl. “should be the same result as the previous line”
Здесь ifTrue: это ключевое сообщение посылаемое булевому объекту, возвращённому выражением (self < 2). Аргументом для сообщения является блок кода (обозначенный квадратными скобками). На самом деле ifTrue: это первая часть сообщения с двумя аргументами, вторая часть ifFalse :.
Унарное сообщение new отправляется классу OrderedCollection
для создания новой коллекции. Сообщение printNl отправляется в результат (являющийся объектом) отправки сообщения my_factorial числу 7. Всё это очень похоже на естественный язык!
Рефлексия в Smalltalk особенно ценна как механизм проверки собственной структуры и вычислений во время выполнения. Это очень мощный механизм, позволяющий программам расширять себя новыми классами и методами или задавать вопрос «кто послал это сообщение мне?»
Рефлексия используется для реализации мощного способа обработки ошибок. Когда объект получает сообщение, которое он не реализует, ему посылается сообщение doesNotUnderstand: и код исходного сообщения. Есть много вещей, которые программа может делать с сообщением doesNotUnderstand:, включая расширение своей функциональности!
Концепция образа и рефлексия также позволяют Smalltalk устранить границу между приложением и IDE. Всё, что нужно для разработки, отладки и запуска приложения, находится в образе. Нет необходимости когда-либо покидать среду вашего приложения. Это совершенно целостный подход к разработке программного обеспечения, который делает всё более дзен-подобным и продуктивным.
Последние 15 лет развития в мире Smalltalk сделали язык более привлекательным.
Smalltalk теперь доступен для программирования веб-интерфейсов с использованием Amber Smalltalk [14], который транслируется в JavaScript. Выполнение Amber происходит исключительно в браузере. Одна из удивительных особенностей Amber в том, что при импорте библиотеки JavaScript её объекты можно обрабатывать так же, как объекты Smalltalk.
В 2002 году была выпущена веб-платформа Seaside [15], которая стала самым популярным инструментом для веб-разработки в Smalltalk. Подход, основанный на продолжениях (сontinuation), обеспечил обычный механизм «call / return» для вашего веб-приложения. Это позволило решить проблемы с двойным запросом и кнопкой «Назад». Весьма революционно для своего времени, и до сих пор не реализовано в других веб-фреймворках.
Проект Pharo [16] начался в 2008 году, чтобы сосредоточиться на современных методах разработки программного обеспечения. Он продвинул Smalltalk гораздо дальше, чем предыдущий проект с открытым исходным кодом – Squeak, основанный на диалекте Smalltalk-80. Проект Pharo также начал исследования нового типа IDE под названием Glamorous Toolkit [17]. Он основан на идее, что ваша среда программирования должна быть «пластичной», чтобы соответствовать вашим потребностям.
В прошлом году любимый многими Dolphin Smalltalk стал открытым проектом, предложив ещё один прекрасный вариант для поклонников Smalltalk. Dolphin Smalltalk часто хвалят [18] за то, что он обладает одной из лучших реализаций IDE.
Когда вы используете современные средства разработки программного обеспечения, такие как JVM, Eclipse IDE, замыкания, «живое программирование», MVC, TDD, VMware и даже простое веб-приложение, вспомните об их происхождении в Smalltalk и испытайте уважение к тому, что вы делаете. Будьте признательны ему за языки, которые вы используете, будь то Objective-C, Python, Ruby, Groovy, Scala, Dart или Swift.
Работа с языком, из которого произошли все эти замечательные функции и технологии, предоставляет уникальную возможность значительно улучшить ваши знания, остроту ума и производительность в качестве разработчика программного обеспечения. Слово «удовольствие» не всегда используется в разговорах о программной инженерии, но я думаю, что Smalltalk и его ОО собратья обеспечивают более низкий когнитивный барьер и простоту программирования, которые могут превратить разработку программ в удовольствие.
Ричард Энг [19] – отставной разработчик программного обеспечения из Канады с более чем 30-летним опытом работы в ИТ-индустрии. Он работал в сфере видео графики, баз данных и финансов, программного обеспечения реального времени, мобильных приложений для iOS и Android, а также в веб-разработке. Он писал в основном на C, но также использовал FORTRAN, Tandem TAL, C++, C#, Objective-C, Java, Smalltalk, Python и Go. Сейчас он возглавляет кампанию Smalltalk Renaissance. Большую часть времени Ричард проводит за написанием статей и эссе.
Автор: Ariel VA Feinerman
Источник [20]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/254671
Ссылки в тексте:
[1] используемый как крупными, так и малыми компаниями по всему миру: https://medium.com/smalltalk-talk/who-uses-smalltalk-c6fdaa6319a
[2] Perl 6: http://techbeacon.com/why-perl-6-game-thrones-programming-languages
[3] JIT компиляции: https://en.wikipedia.org/wiki/Just-in-time_compilation
[4] замыкание: https://en.wikipedia.org/wiki/Closure_(computer_programming)
[5] MVC: https://ru.wikipedia.org/wiki/Model-View-Controller
[6] разработку на основе тестов: https://en.wikipedia.org/wiki/Test-driven_development
[7] экстремальное программирование: https://en.wikipedia.org/wiki/Extreme_programming
[8] GemStone/S: https://gemtalksystems.com/products/gs64
[9] первый браузер рефакторинга: http://c2.com/cgi/wiki?RefactoringBrowser
[10] Предметно-ориентированные языки: https://en.wikipedia.org/wiki/Domain-specific_language
[11] сосредоточиться на проблеме: http://techbeacon.com/why-you-need-domain-driven-design
[12] фич: http://stackoverflow.com/questions/1821266/what-is-so-special-about-smalltalk
[13] Lively Kernel: http://www.lively-kernel.org
[14] Amber Smalltalk: http://amber-lang.net
[15] Seaside: http://seaside.st
[16] Pharo: http://pharo.org
[17] Glamorous Toolkit: http://gtoolkit.org
[18] Dolphin Smalltalk часто хвалят: https://medium.com/smalltalk-talk/choosing-smalltalk-on-porpoise-9bccb7cd53f
[19] Ричард Энг: https://www.linkedin.com/in/richard-kenneth-eng-28405698
[20] Источник: https://habrahabr.ru/post/328156/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.