Представляем вашему вниманию демо-ролик, демонстрирующий некоторые приемы интерактивной работы с Dolphin Smalltalk 5.0 - DolphinBouncingBalls.zip (архив около 4Mb).
Вкратце - в среде запускается интерактивное приложение-пример, входящее в стандартную поставку продукта. После чего выполняются действия, типичные для сеанса разработки/отладки - инспектирование объектов, модифицирование состояния, рефакторинг, добавление нового кода.
P.S. Просмотр ролика обязателен для тех, кто хочет понять, чем разработка на Smalltalk отличается в лучшую сторону от мэйнстримовых языков. Свои отзывы оставляйте в комментариях.
Опубликована финальная версия Seaside 2.5, приуроченная к выходу Squeak 3.8. Скачать полный образ можно здесь. Для VisualWorks доступна одна из последних бета-версий в Public Cincom Repository.
Интересными делами занимаются студенты в University of Magdeburg и University of Applied Sciences Magdeburg-Stendal совместно с компанией Impara.
Проект Pirates длился один семестр. Его целью была разработка нестандартного физического пользовательского интерфейса для игры с множеством игроков. Есть видео, но на немецком языке.
На сайте Impara есть некоторые подробности еще одного проекта. Проект Magrathea - разработка на основе OpenCroquet броузера Интернета будещего. Предполагается, что вместо "домашних страниц" будут существовать "домашние миры".
Ярлыки: squeak
Одним из основных факторов, отпугивающим новичков от Squeak, сами новички часто называют непривычный GUI. Именно эту проблему и должнен устранить wxSqueak - интерфейс к wxWidgets (больше известный как wxWindows). Недавно как раз вышел wxWindows 0.4 основанный на Squeak 3.8 и wxWidgets 2.6.0.
На сайте доступны для загрузки версии для Win32 и OS X.
Ярлыки: squeak
Вышел Squeak 3.8. Дистрибутивы образов доступны по адресу: ftp://st.cs.uiuc.edu/Smalltalk/Squeak/3.8.
Напомню, что кроме образов для работы понадобятся: файл SqueakV3.sources.gz , и ВМ. Для Squeak версий 3.х подойдёт любая ВМ версии 3.х. ВМ для Win32 можно взять на squeak.sf.net, ВМ для Un*x можно взять здесь.
Из нововведений:
Ярлыки: squeak
Появилась информация, что, возможно, вместе с полной версией Dolphin 6.0 будет выпущена бесплатная версия под названием Dolphin Community Edition.
Пока не известно будет бесплатная версия базироваться на Dolphin 5 или 6. Впрочем не известно даже будет ли бесплатный вариант вообще. Но сам факт появления подобных слухов внушает оптимизм.
Ярлыки: dolphin
В продолжение темы из предудыщего сообщения...
Ни для кого не секрет, что продуктивность достигается не ограничениями, а возможностями. Но волей-неволей необходим некоторый набор ограничений, чтобы большая часть времени не была потрачена на исправление ошибок, и эти возможности были реализованы в полной мере. Динамические и скриптовые языки стремятся ввести минимально необходимый набор ограничений для облегчения быстрого написания коротких программ. Но до сих пор нет однозначного мнения, пригодны ли скриптовые языки для написания больших систем. Наибольшие нареканивая вызывает тот факт, что никакие ошибки в исходном коде не могут быть найдены автоматически, пока программа не будет запущена (следует отметить, что статическая типизация тоже пропускает достаточно ошибок, просто класс всех ошибок намного шире класса синтаксических и семантических ошибок, которые может обнаружить компилятор).
Smalltalk в этом отношении выбивается из общего ряда языков программирования. И как язык, и как среда разработки, он предоставляет некоторые ограничения, не присущие скриптовым и другим динамическим языкам, но которые только увеличивают продуктивность.
Исходный код в нем вводится через специализированные браузеры, которые являются медиумами между программистом и миром "живых" объектов. Не делается разделения между временем создания и временем запуска приложения. Приложение как бы работает все время. А разработчик посредством ввода исходного кода и команды Apply пробует модифицировать программу непосредственным изменением определений классов и байт-кода их методов. Естественно, если в исходном коде содержится синтаксическая ошибка, то об этом будет сообщено немедленно. То же относится к некоторым семантическим ошибкам вроде использования необъявленной переменной или класса. Но Smalltalk остается динамически-типизированным языком, поэтому ошибка "метод не найден" может быть обнаружена только при выполнении соответствующего кода. Но и здесь современная IDE приходит на помощь - она может подсказать, что метода с указанным именем в системе не существует, что предотвращает опечатки и неверное написание.
Также следует сказать, что Refactoring Browser, изначально придуманный для Smalltalk, делает изменения кода более контролируемыми и корректными. Хоть в исходном коде и не содержится описаний типов, но в некоторых случаях инструмент "догадывается" о типах исходя из контекста. Кроме того, есть возможность проводить refactoring в полуавтоматическом режиме с контролем со стороны разработчика.
Из всего этого следует, что по контролю корректности разработки Smalltalk скорее ближе к Java и C# с инструментами IDEA и ReSharper соответственно, чем к PHP, Perl, Python и Ruby. Но, в то же время, он полностью сохраняет всю свою простоту и гибкость.
Мне неоднократно приходилось слышать (и самому говорить), что Smalltalk имеет большую гибкость (предоставляет больше свободы) чем любые майнстримовые на сегодня языки.
Дэвид Бак (David Buck), автор первоначальной версии POV-Ray, приводит интересное обоснование этого утверждения.
Например, рассмотрим того что даёт ООП:
Теперь посмотрим на ряд тенденций в майнстримовых языках:
Сегодня страх перед тем, что может написать программист побеждает возможности развития которые обычно даёт свобода. Но правильный ли это путь?
Первая фаза 1-го соревнования программистов на Smalltalk длилась 48 часов с 17 часов по московскому времени понедельника 16 мая по 17 часов среды 18 мая.
Ошибся я сразу же. Забыл о разнице между киевским и московским временем, и, в результате, ознакомился с заданием на час позже начала.
После ознакомления с заданием первым ощущением было разочарование. Так как я ожидал задание посложнее. Хотя, с другой стороны, у этого задания есть один плюс - это не "академическое", а, пусть и простое, но "реальное" приложение.
Прикинув сложность, я подумал, что вполне реально сделать приложение удовлетворяющее базовым требованиям за пару часов. Через три часа стало ясно, что нужно еще минимум столько же времени :), а значит лучше перенести всё на следующий день.
Ввиду лёгкости задачи и того, что осталось работы часа на два-три следующий день (вторник) прошёл даром. И только в среду я занялся второй частью задания, а именно построением веб-интерфейса. Задание я делал на VW7.3 с Seaside поверх WebToolkit и BGOK для генерации графиков. Для упрощения разворачивания решения я решил использовать версию Seaside, идущую в дистрибутиве с VW. Это было второй ошибкой, из-за которой я пробежал по всем(!) багам, как отдельно Seaside-а так и комбинации Seaside+WebToolkit, которые были пофикшены за последние пол года. Последним испытанием стала отправка результатов. После отправки парселов, я решил отправить готовый образ с загруженными парселами дабы исключить любые накладки. Запакованый архив иеет размер около 8Мб. Потратив 40 минут я понял, что ни один из трёх доступных мне SMTP серверов письмо такого объёма не пропустит.
В среду на разработку было затрачено порядка 6-7 часов. Итого около 10 часов на выполнение задания.
Признаюсь, что, не смотря на относительную простоту и даже банальность, выполнение задания оказалось довольно полезным. В очередной раз убедился, что знание английского у меня хромает; даже не представляю, как тестировать веб-приложение и вообще с TDD проблемы; знаний CSS маловато даже для того, чтобы приложение выглядело хоть чуть получше, чем "нераскрашенный" HTML; чем делать графики под VW я не знаю. В сухом остатке: не стоило считать себя слишком могучим и откладывать разработку на потом.
В результате я получил приложение которое которое позволяет вести множество голований, выводить результаты голосования в текстовом и графическом виде (столбчатые и круговые диаграммы), данные хранятся в самом образе. И, так как в интернете выложены уже два приложения, то и я решил, не смотря на недовольство результатом, не прятаться от глаз общественности.
Скачайте архив с парселами. Перед загрузкой этих парселов загрузите парсел "Wave-Base", а затем пакет "SeasideForWebToolkit" версии "2.5b7.10.2" (последняя на даный момент) из публичного синкомовского репозитория. Урл для доступа к приложению: http://localhost:8008/seaside/go/surveys.
Два других доступных решения делались на других технологиях. Решение Blaine Buxton - Squeak с Seaside и PieChatMorph. Во-первых, выглядит оно не в пример красивей моего :). Во-вторых, большое покрытие тестами. В третьих, намного более полно использованы возможности Seaside. Так, там существует редактор вопросов, который, естественно, генерируется на лету. Существует возможность отображения круговых диаграм, а вот экспорт в XML вызывает исключение.
Решение Michael Lucas-Smith использует VW, собственный веб-фрейморк SimpleWeb (поверх WebToolkit), Prevayler и BGOK. Интересна история SimpleWeb. Зародился он на VAST. Так как там нет Seaside, то был создан фреймворк с API подобным Seaside, и использующим стиль передачи продолжений (CPS) для достижения того поведения, которое обеспечивает Seaside с помощью явных продолжений. Во время соревнования фреймворк был переписан(!) на VW. Помимо базовой функциональности данное приложение умеет отображать результат в виде круговой диаграммы, и имеет экспорт в XML. Приложение имеет около 90 тестов. Мои несколько тестов на этом фоне выглядят просто смешно.
Учитывая лёгкость создания базовой функциональности можно предположить, что при выборе победителя основную роль будут играть дизайн приложения, покрытие тестами, и дополнительная функциональность, как то наличие экспорта в XML, графического представления результатов голосования, качество пользовательского интерфейса (персонально мне понравился редактор голосований Blaine Buxton). Ну, и, нельзя исключить вероятность того, что приложение не сможет "скушать" тот конфиг, который приготовили судьи. Это будет довольно не приятно.
Результаты соревнования должны быть готовы к 1-му июня. Ждём-с.
Ярлыки: conference
Сравните язык объектных ограничений - Object Constraint Language (OCL) и работу с коллекциями в Smalltalk:
OCL:Company.allInstances->collect(employees->size)Smalltalk:
Company allInstances collect: [:each | each employees size]OCL:
Contact.allInstances->firstSmalltalk:
Contact allInstances firstOCL:
Company.allInstances->first.employees->includes(self)Smalltalk:
Company allInstances first employees includes: selfOCL:
Category.allInstances->select(name = 'business')->notEmptySmalltalk:
(Category allInstances select: [:each| each name = 'business']) notEmptyOCL:
Company.allInstances->reject(employees->size = 1)Smalltalk:
Company allInstances reject: [:each| each employees size = 1]
Smalltalk: впечатления от четырех месяцев работы - "Самое главное: у меня оформилось мнение, что думающему программисту изучение Смолтока абсолютно необходимо".
Появился первый отзыв о бете Dolphin 6.
Количество бета-тестеров ограничено, так что ожидаем и других подробностей.
Обновление: Последним предложением я хотел сказать, что из-за ограничения участвующих в программе бета-тестирования, прийдётся ждать, пока кто-то из бета тестеров не даст более подробной информации о Dolphin 6.
Переведена очередная глава из документации по Dolphin Smalltalk - Забава с Объектами на игровой площадке.