Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 19:38

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: .Интерактивность Форта позволяет программисту....
СообщениеДобавлено: Сб ноя 04, 2006 10:45 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Полная цитата из Броуди:
Цитата:
Интерактивность Форта позволяет программисту набирать и тестировать примитивные команды

Поделитесь, плиз, как это выглядит на практике в случае СПФ? Вообще, кто-то использует возможность интереактивного написания и тестирования слов?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 04, 2006 11:12 
Пишешь,

Код:
2 DUP * .


Нажимаешь Enter, выходит "4". Это простейшая проверка.

Потом. Допустим нужно тебе для программы слово которое подсчитывает кол-во пробелов в строке. Написал его. Теперь по быстрому проверяешь:

Код:
S" ля ля тополя" сколькоПробелов .


По логике должно выходить "2". Это значит что только что написанное слово "сколькоПробелов" можно пускать в работу.

И так далее.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: .Интерактивность Форта позволяет программисту....
СообщениеДобавлено: Сб ноя 04, 2006 13:34 
Не в сети

Зарегистрирован: Чт май 04, 2006 22:43
Сообщения: 78
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
AlexF писал(а):
Полная цитата из Броуди:
Цитата:
Интерактивность Форта позволяет программисту набирать и тестировать примитивные команды

Поделитесь, плиз, как это выглядит на практике в случае СПФ? Вообще, кто-то использует возможность интереактивного написания и тестирования слов?

Мне очень помогало при отладке оконных приложений и вообще работе с winapi. При работе с различными структурами часто использую DUMP (неинтерактивно его и не поюзаешь). Ну и конечно, если какое-то слово не работает, полезно вручную прогнать его по составляющим на интерпретаторе.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 04, 2006 13:57 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 16, 2006 23:02
Сообщения: 65
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
AlexF писал(а):
Вообще, кто-то использует возможность интереактивного написания и тестирования слов?

Пожалуй, это одно из основных преимуществ Форта, оно сильно облегчает программирование и тестирование. Вряд ли без этого вообще имеет смысл использовать Форт. Традиционные методы отладки не идут ни в какое сравнение.

_________________
Я знаю только то, что я ничего не знаю. /(с) Сократ/
Мой форт | Мой проект ИИ


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 04, 2006 14:03 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
В Форт хорошо бы добавить assert в качестве стандартного синтаксиса для тестов. По типу

Код:
2 2 + 4 = ASSERT " А у вас 2 + 2 не равно четырем!!!"


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 04, 2006 14:34 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Посмотреть что возвращает слово -- да. А если мне нужно посмотреть что происходит на стеке, когда слово выполняется? Пока опробовал два варианта:
    * ручками набиваю по одному оператору в консоли и смотрю состояние стека. Минусы очевидны: большой объем ручной работы, ошибка в написании и стек сбрасывается (сколько на этом горел!), есть конструкции которые работают только в режиме компиляции...
    * делаю тестовую программуи ее запускаю в режиме "откорректировал - запустил_весь_код - посмотрел - внес корректировки". Т.е этот способ ничем не отличается от привычного.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 04, 2006 15:46 
Не в сети

Зарегистрирован: Чт май 04, 2006 22:43
Сообщения: 78
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
AlexF писал(а):
ручками набиваю по одному оператору в консоли и смотрю состояние стека.
Вот это правильно :)

AlexF писал(а):
Минусы очевидны: большой объем ручной работы, ошибка в написании и стек сбрасывается (сколько на этом горел!), есть конструкции которые работают только в режиме компиляции...

Стек сбрасывает SPF. В retroforth'е, если слово не найдено, ничего не происходит. Даже компиляция продолжается (другое дело). С другой стороны, в спф состояние стека показывается автоматически (не нужно вызывать .s). Так что важно сперва определится с инструментом...

AlexF писал(а):
* делаю тестовую программуи ее запускаю в режиме "откорректировал - запустил_весь_код - посмотрел - внес корректировки". Т.е этот способ ничем не отличается от привычного.

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

AlexF писал(а):
Можно ли править текст слова прямо в консоли и тут же его перекомлировать и запустить?

Править нельзя, можно переписать. Именно поэтому (не в последнюю очередь) советуют максимально факторизовать (разбивать) определения. Т.е. чтобы слово было в одну строку.

AlexF писал(а):
Как посмотреть по ходу работы слова, что происходило на стеке?

Вставить после каждого слова в определении .s ;)

AlexF писал(а):
Можно ли сделать так, что бы если слово не найдено, стек не сбрасывался?
Перейти на retroforth :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 04, 2006 16:01 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Цитата:
Править нельзя, можно переписать. Именно поэтому (не в последнюю очередь) советуют максимально факторизовать (разбивать) определения. Т.е. чтобы слово было в одну строку.

т.е фактически заново пернабрать определение, верно? Но если слово содержит упраляющие конструкции их очень неудобно читать когда они записаны в одну строчку. Думаю, что это не выход :(
Цитата:
Стек сбрасывает SPF. В retroforth'е, если слово не найдено, ничего не происходит.

подозреваю, что в СПФ можно изменить такое поведение...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 04, 2006 16:44 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Хищник писал(а):
В Форт хорошо бы добавить assert в качестве стандартного синтаксиса для тестов. По типу

Код:
2 2 + 4 = ASSERT " А у вас 2 + 2 не равно четырем!!!"


lib/ext/debug/accert.f
\ ~day 11.02.2001
\ В ACCERT удобно выводить лог, например
\ ACCERT( 2DUP LOG )
\ проверять значения на правильность, выводить отладочную
\ информацию
\ Уровни ACCERT-LEVEL:
\ 0 - не компилировать ACCERTION
\ 1 - компилировать все ACCERTION
\ 2 - компилировать ACCERT уровня выше 1
\ 3 - компилировать ACCERT уровня выше 2

Код:
: a
2 2 +
ACCERT( DUP 4 <> IF ABORT" bla-bla" THEN ) ;

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 04, 2006 16:58 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
AlexF писал(а):
подозреваю, что в СПФ можно изменить такое поведение...

Верно подозреваете.
Код:
: NOTFOUND ( a u -- )
  2DUP 2>R ['] NOTFOUND CATCH
  IF
    2DROP
    2R@ CR ." Hm! I don't know this word: " TYPE CR
  THEN
  RDROP RDROP
  ;

Вот и spf_intro пригодилось.

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 04, 2006 17:11 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Могу привести пример из Prolog'а
Предположим, программа ищет некое конечное решение, опираясь на предварительные
но решений нет, хотя должны быть...
пишем break после поиска предв. решений и
задаём программе вопросы
"существует ли среди найденных предв. решений решение с такими-то свойствами?"
Ели его нет, а быть должно, ищем ошибку в предварительном этапе
Если есть, ищем ошибку в закл. этапе
слово break переводит Пролог в интерактивный режим (вопросов и ответов). Не уверен, что так во всех Прологах, но в последнем, которым я пользовался - так.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 04, 2006 21:03 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
yGREK писал(а):
lib/ext/debug/accert.f
\ ~day 11.02.2001


Я не про определение этого слова, а про введение в широкую практику.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 08, 2006 16:56 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
AlexF писал(а):
Можно ли править текст слова прямо в консоли и тут же его перекомлировать и запустить?
Как посмотреть по ходу работы слова, что происходило на стеке?
Можно ли сделать так, что бы если слово не найдено, стек не сбрасывался?


Для каждой системы нужно смотреть в отдельности.
Я писал удобное средство именно для таких нужнд
лежит на http://wiki.forth.org.ru называется "оболочка для SMAL32"

И еще у смал32 есть шикарный дебаггер, которого иногда не хватает в спф-е

Ну, а насчет сброса стека - это скорее плюс, чем минус.
Вопрос в том, что историю команд сложно набирать, но в моем шелле это есть 8)

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 25, 2007 19:33 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Когда-то сильно упростила жизнь при визуализации сложных структур.
http://www.graphviz.org/ -- главная страница программки
http://www.graphviz.org/Gallery.php -- галерея схем, и их описаний.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB