Forth
http://fforum.winglion.ru/

Вопрос: как отлаживать программы на форт?
http://fforum.winglion.ru/viewtopic.php?f=2&t=2150
Страница 1 из 4

Автор:  simne [ Вс июн 21, 2009 19:01 ]
Заголовок сообщения: 

Здравствуйте!
Вопрос: как отлаживать программы на форт?
- Ну вот скажем, делаю я программу на форт на устройстве без защиты памяти, понятно что ошибка может мне завалить всю систему (да вобщем и на Линуксе тоже программа может вывалиться в core (аналог GPF винды), и тоже очень тяжело чего-то найти). Как эту проблему решают опытные фортеры?

Дебаггер плохо, потому что зачем-же тогда ЯВУ если отладку делать на уровне кода.

Автор:  WingLion [ Вс июн 21, 2009 19:14 ]
Заголовок сообщения: 

Отлаживать надо по частям.
Проверять каждое новое слово.
Например, путем вставки после каждого слова некоего отладочного слова, распечатывающего стек или(и) некие рабочие данные, чтобы увидеть, как слово работает и правильно ли отрабатываются входящие в него слова.

Или примерно так:

: квадрат DUP * ; - определили новое слово

2 квадрат . -- проверили, что оно работает правильно и печатается 4

: куб DUP DUP * * ; - определили следующее

опять проверили, что
2 куб . - печатает 8

и т.д.

Автор:  simne [ Вс июн 21, 2009 22:19 ]
Заголовок сообщения: 

WingLion писал(а):
Отлаживать надо по частям.
Проверять каждое новое слово..

Спасибо, это понятно.
А что если я хочу использовать достаточно крупный, уже готовый кусок кода, скажем, который портировал с другой архитектуры (или даже просто с другого, несовместимого форта)?

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

Автор:  mOleg [ Вс июн 21, 2009 23:52 ]
Заголовок сообщения: 

simne писал(а):
А что если я хочу использовать достаточно крупный, уже готовый кусок кода, скажем, который портировал с другой архитектуры (или даже просто с другого, несовместимого форта)?

то скорее всего текст придется адаптировать к конкретной системе, так как стандартизирован по сути только один вид форт-системы на, приблизительно среднем уровне. Все что ниже него или выше находится на совести создателя системы. Поэтому перенести пример, к примеру с Win32Forth на SPF и обратно не получится без серьезных переделок 8( это уже многократно отмечалось и многократно обсуждалось. Нужен качественно другой стандарт и, соответственно, соответствующие ему системы.

simne писал(а):
- Ну скажем в таких монстрах как Ада, просто в сам язык встроены очень жесткие проверки, например на диапазоны разрешенных значений переменных, и я могу просто включить эти проверки и оттестировать старый код на новых данных, и по сообщениям об ошибках, быстро найти места которые нужно модифицировать, и "малой кровью" получить работающую систему.

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

Автор:  Wlad [ Вс июн 21, 2009 23:52 ]
Заголовок сообщения: 

Тут язык "бестиповый". Все проверки - на откуп разработчика системы. Считается, что все мы такие умныя и организованныя, что сами догадаемся, когда нам нужно чего проверять и напишем соответствующий код...
Для тестирования кода писать надо будет раза в 3-4 больше основного алгоритма. И для проверки.
В тестах (и не токма Форта это касаемо, от языка вообще это не зависит!) я обычно выбираю пример внутри "области определения" входных данных, по краям, - граничныяе значения, и значения (на "ловлю") вне диапазонов разрешённых значений.
Написано несколько утилит для генерации тестовых наборов (машина - дура - не хай генерит по полному Декартовому произведению сочетание диапазонов указанных областей) -
- Хлопотно только первый раз!
Потом в ножки народ кланяется!

Автор:  WingLion [ Вс июн 21, 2009 23:57 ]
Заголовок сообщения: 

simne писал(а):
А что если я хочу использовать достаточно крупный, уже готовый кусок кода, скажем, который портировал с другой архитектуры (или даже просто с другого, несовместимого форта)?


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

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

Форт же изначально построен так, что ошибка в синтаксисе - практически исключены и практически не встречаются такие комбинации слов, которые бы были восприняты как ошибочные. Форт считает, что "программист всегда прав" что бы он ни написал в своей программе.

Автор:  Wlad [ Пн июн 22, 2009 10:54 ]
Заголовок сообщения: 

В конце концов - где мы ещё имеем возможность самим синтаксис в языке (и сам язык!) переопределять и подстраивать под своё понимание, нужды и эстетические требования??? :)
А две характерные ошибки - ошибки в диапазонах индексов и при операциях адресной арифметики - вполне можно ловить (и даже пытаться "на лету" исправлять) в определяемых словах...

Автор:  Mihail [ Вт июн 23, 2009 22:39 ]
Заголовок сообщения: 

simne писал(а):
А что если я хочу использовать достаточно крупный, уже готовый кусок кода, скажем, который портировал с другой архитектуры (или даже просто с другого, несовместимого форта)?


Если хочется пошаговую отладку - http://www.easy-share.com/1906074126/DBGWC11.7z

Автор:  simne [ Ср июн 24, 2009 00:29 ]
Заголовок сообщения: 

Mihail писал(а):
Если хочется пошаговую отладку - http://www.easy-share.com/1906074126/DBGWC11.7z

А что это?
PS и можно куда-то в другое место выложить - у меня под FF не сохраняет.

Автор:  simne [ Ср июн 24, 2009 01:01 ]
Заголовок сообщения: 

Wlad писал(а):
В конце концов - где мы ещё имеем возможность самим синтаксис в языке (и сам язык!) переопределять и подстраивать под своё понимание, нужды и эстетические требования??? :)
А две характерные ошибки - ошибки в диапазонах индексов и при операциях адресной арифметики - вполне можно ловить (и даже пытаться "на лету" исправлять) в определяемых словах...


Да, это понятно..
Я сейчас продумываю встраиваемый в программу на Си форт, и мне сразу показалось здорово что можно многое делать на форте намного удобнее и красивее чем на Си, но вот возможность валить систему труднообнаружимыми ошибками ставит крест на идее..
Собственно в том и проблема, что просто написать свой форт несложно, особенно сейчас, имея доступ к накопленному объему информации :D , а вот сделать отлов даже характерных ошибок мне кажется уже намного больший объем работы, или нет?

Кстати, я хочу сделать форт в котором будут отлавливаться ошибки при операциях адресной арифметики, причем мне проще всего сделать по принципу защиты памяти (то есть у операций будут ограничения по доступу к памяти и если кто-то залезет не туда куда надо, получит "по шапке"), но я эти ошибки буду отлавливать не на уровне слов а на уровне машинных команд, то есть ошибка будет ловиться где-то посреди слова.
Собственно вопрос к опытным фортерам: как в таком случае лучше делать систему, чтобы можно было эффективно "откатывать" все что сделало сбойное слово?
Производительность критична, но вероятно будет отдельная версия для дебага и версия с отключенными проверками (для лучшей производительности).

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

Автор:  WingLion [ Ср июн 24, 2009 06:28 ]
Заголовок сообщения: 

simne писал(а):
а вот сделать отлов даже характерных ошибок мне кажется уже намного больший объем работы, или нет?


А в условиях, когда "характерные ошибки" у каждого свои - оно и не реально, имхо.

simne писал(а):
возможность валить систему труднообнаружимыми ошибками ставит крест на идее..


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

Автор:  Kopa [ Ср июн 24, 2009 08:39 ]
Заголовок сообщения: 

simne писал(а):
..
Я сейчас продумываю встраиваемый в программу на Си форт, и мне сразу показалось здорово что можно многое делать на форте намного удобнее и красивее чем на Си, но вот возможность валить систему труднообнаружимыми ошибками ставит крест на идее..
.


Размышления:

Труднообнаруживаемыми - это какими?
Обнаруживаемыми на этапе эксплуатации программы?
( предположу возникшими по невнимательности,
нерабочим кодом и не локально проверенным кодом, плохо понимаемым диапазоном
применимости существующего кода из-за узконапраленности применённого решения, ......
- это всё практика реального программирования и лучше пусть тест определит, что система не работает
сейчас, чем впоследствии )
Из реальных ошибок Форта может проявляться несбалансированность стека из-за
некоректного использования слов. Ещё, навскидку, есть переменные VARIABLE и VALUE .

P.S. Это лирика, а практика подсказывает, что пытаться решить "неизвестную" или
частично надуманную, без определения целевой аудитории пользователей данного
решения, проблему - проблематично. Но попробовать, всё же, стоит если есть
потребность:) Для Форта, что то подобное, Lint были разработки какой выход
не известно.
Существует миф, что Форт программы обладают повышенной надёжностью, но
подтвердить или опровергнуть его мне сложно. ( Возможно вопрос к Nasa :)
Близко к обозначенному вопросу - защищённость Форт систем уже обсуждался на местном форуме.
а контролировать Форт программы на предмет потенциальных ошибок - это возможно из
трудно осуществимого:) "Хороший" контроль - это изначальное ограничение возможностей
использования инструментария и другие способы к языку почти не относящиееся

Автор:  вопрос [ Ср июн 24, 2009 10:13 ]
Заголовок сообщения: 

Мой опыт отладки в форте - необходимо - никуда не денешься - делать собственные отладочные слова и даже модули.
Сначала отладка намного медленнее, чем в среде С
да и потом тоже
я вот задавался вопросом о таком средстве, полезном часто при отладке как
форматный вывод
http://fforum.winglion.ru/viewtopic.php?t=2069
обсуждение в теме показательно

Автор:  Mihail [ Ср июн 24, 2009 11:26 ]
Заголовок сообщения: 

simne писал(а):
Mihail писал(а):
Если хочется пошаговую отладку - http://www.easy-share.com/1906074126/DBGWC11.7z

А что это?


Проход по строкам в редакторе.
Клавиша F7 - шаг дебагера
Клавиша F8 - шаг дебагера с заходом в подпрограмму
Клавиша F4 - исполнять до курсора

Команда F7_ED играет роль точки останова.

Файл DBG.BAT - запуск примера

simne писал(а):
можно куда-то в другое место выложить


http://uploading.com/files/XP46NL8M/dbgwc11.7z.html

Автор:  VoidVolker [ Ср июн 24, 2009 11:27 ]
Заголовок сообщения: 

Грамотно написанная на форте программа практически не имеет ошибок. Весь вопрос в том, как грамотно писать программы на форте. Писать определения не больше двух-четырех строк по паре-тройке слов, не лениться качественно тестировать каждое определение(например проследить работу каждого слова в определении). Большинство ошибок возникают от невнимательности и недостаточной проработанности алгоритма.

Страница 1 из 4 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/