Smalltalk по-русски
вторник, Январь 11, 2005
[VW] Полезняшки: StackOverflow, ShiffmanTimeout

Для VisualWorks существует открытый Store-репозиторий, содержащий ряд полезных пакетов. Некоторые из них мы рассматривали раннее. Сегодня же остановимся еще на двух пакетах.

StackOverflow

Первоначально пакет первоначально был разработан для Squeak. И позже портрован на VW.

После загрузки пакета порождается процес с высоким приоритетом. Этот процес постоянно отслеживает глубину стека каждого процесса и если превышена определённая глубина (вероятно зацикливание), то процесс останавливается и открывается в отладчике, что позволяет обнаружить причину роста стека.

Глубина стека превышена, открыт отладчик

По умолчанию, порог, после которого открывается отладчик, установлен в 100'000 вызовов. См. метод класса Process class>>stackOverflowLimit

Порог для срабатывания можно установить для каждого просесса отдельно. Для этого нужно послать процессу сообщение #stackOverflowLimit: с аргументом - порогом срабатывания.

Что-бы проверить работу утилиты создайте класс Test с одним методом:

rec
  self rec

И затем в workspace выполните команду Test new rec

ShiffmanTimeout

Первоначально это расширение так же было разработано для Squeak.

После загрузки этого пакета у вас появится возможность запускать операции, ограничивая время их выполнения.

Для того, что-бы ограничить время работы блока, нужно послать этому блоку сообщение #valueWithin:onTimeout:. Параметр valueWithin: задаёт время работы блока-получателя сообщения. Это объект класса Squeak.Duration (этот класс определён в пакете Squeak-Chronos). Параметр onTimeout: это блок, который запускается на выполнение при достижении тайм-аута. Если тайм-аут не достигнут, то метод возвращает результат работы блока-получателя, если достигнут - результат работы блока onTimeout:.

Рассмотрим примеры:

[ 50000 factorial ] valueWithin: 1 second onTimeout: [ 666 ]. возвращает 666
[ 3 + 4 ] valueWithin: 1 second onTimeout: [ 666 ].  возвращает 7

Советую обратить внимание на эти пакеты, так как каждый из них состоит всего из пары методов, отлично демонстрируя возможности расширения Smalltalk-а

Ярлыки:

Comments: Отправить комментарий

<< Home

Популярные статьи
:: Smalltalk?!
:: Почему Smalltalk?
:: Great Leap Forward from Java to Smalltalk

Последние сообщения
:: Объект nil
:: smalltalk@wikipedia
:: Smalltalk Solutions
:: Use continuations to develop complex Web applicati...
:: Bottom line '2004
:: BowlingGame in Smalltalk
:: VisualWorks Smalltalk 7.3 NC and ObjectStudio 7.0 ...
:: Настройка VisualWorks Smalltalk
:: Smalltalk & grid computing
:: Smalltalk video

Архив
Предыдущие новости / Декабрь 2004 / Январь 2005 / Февраль 2005 / Март 2005 / Апрель 2005 / Май 2005 / Июнь 2005 / Июль 2005 / Август 2005 / Сентябрь 2005 / Октябрь 2005 / Ноябрь 2005 / Декабрь 2005 / Январь 2006 / Февраль 2006 / Март 2006 / Апрель 2006 / Май 2006 / Июнь 2006 / Июль 2006 / Сентябрь 2006 / Октябрь 2006 / Ноябрь 2006 / Декабрь 2006 / Январь 2007 / Февраль 2007 / Март 2007 / Апрель 2007 / Май 2007 / Июнь 2007 / Август 2007 / Сентябрь 2007 / Ноябрь 2007 / Январь 2008 / Март 2008 / Май 2008 / Июнь 2008 / Июль 2008 / Август 2008 / Сентябрь 2008

Atom Feed
Smalltalk по-русски


Powered by Blogger