Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт июл 16, 2019 10:03

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Nova-forth версии
Автор Сообщение
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
NOVA-CDW

Основные изменения:
Добавлены слова: UMIN UMAX U> U< BYE
Новая документация (пока разрабатывается) Спасибо KROL!
Основное направление сейчас: причёсывание исходников и написание документаций к либам и Нове в целом.
В ini-файле подключается более навороченный транслятор файлов. Позиционирует ошибку вплоть до слова и выводит путь к файлу, строку и соб-но слово.

Скачать можно тут
Сообщение Добавлено: Сб июл 13, 2019 12:55
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
Для разработчика это не проблема. А для пользователя чуть сложнее. Как на ассемблере достать число со стека? Как положить? Какие регистры нельзя использовать? Понятно, что это в целом не так сложно, но всегда есть сомнение, и порог вхождения получается чуть выше. Поэтому и речь о том, что вещи, которые очевидны для автора проекта, но не так очевидны для пользователей, имеет смысл добавлять именно автору. Даже если ему самому не особо надо.
Сообщение Добавлено: Вс июн 30, 2019 17:04
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
Как будто кто-то запрещает использовать ассемблер при необходимости :)
Сообщение Добавлено: Вс июн 30, 2019 16:53
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
Тут вопрос не в том, что чего-то не хватает, а в том, что некоторые вещи нельзя доопределить, потому что нужно или знать внутреннюю структуру, или иметь доступ к вещам, которых на уровне слов Форта просто нет. D+ как раз такое слово, его надо писать на ассемблере, а через + не выразить никак.
Сообщение Добавлено: Вс июн 30, 2019 15:06
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
У меня тогда вопрос, где вы используете числа такой большой длины? Где 4 гигабайтов не хватает?
Сообщение Добавлено: Вс июн 30, 2019 09:55
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
Victor__v писал(а):
Да и вообще при ошибке выдаётся краткая информация:
последнее скомпилированное слово
Да я заметил. Но если пишешь исходник не для компиляции в EXE, а для немедленной интерпретации, то ниже последнего определяемого слова может быть уйма текста. Там ведь обычно нужные слова наопределяешь, а потом или расписываешь что в процессе интерпретации делать. И если при этом используешь словечко которого нет, то начинается засада найти где грабль.
Цитата:
По остальному конечно,
смотри. Не важно что у тебя каких-то слов нет. Важно чтобы не было препятствия определить нужные слова. А без U< у тебя много чего определить будет невозможно. Или перейти к арифметике еще большей точности. Тут бы D+ и главное без UM* и UM/MOD не обойтись, это слова у которых произведение и делимое двойного размера, вот без них никак. Умножения и деления совсем уж больших чисел через них определять.
Сообщение Добавлено: Вс июн 30, 2019 02:04
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
WORDS это жёстко)
Я использовал связку число и точка т. е.
Код:
5 .
к примеру
Да и вообще при ошибке выдаётся краткая информация:
последнее скомпилированное слово
STATE и BASE возникшие при ошибке.

По остальному конечно,
Слов для работы с числами двойной длины нет поскольку не требовались отчего-то ни разу за последнее время, а так вещь нужная.
С LITERAL ситуёвина интереснее. Слово несколько блеклое что ли... связка [ LIT, ] наглядней.
Соот-но : LITERAL LIT, ; IMMEDIATE
Я уже и не помню почему решил отказаться от этого слова.
Сообщение Добавлено: Вс июн 30, 2019 01:59
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
Victor__v писал(а):
Насчёт спартанской отладки в квадрате не черезчур ли?
Так эта. Если Форт выводит эхо строк, то на какой строке заткнулось видно сразу. Если еще показывает на каком именно слове в строке ошибка, то вообще комфорт, хотя без этого не проблема и обойтись. А у тебя ни того ни другого. Я в исходник слово WORDS вставлял и смотрел вывалило ли список слов или нет. Если выволило - ошибка по тексту выше, если не вывалило по тексту ниже. Потом слово WORDS перемещал вверх или вниз и опять смотрел. Так строку с ошибкой и вычислял. А ошибки-то какие были - оказывается у тебя CHAR+ нет, S>D нет, 2@ нет, 2! нет, D< U< 0< нет, LITERAL нет и даже после подключения ~ER/DOLOOP.F нету J . Вот глядя на текст как ошибку было увидеть ? Нашел проблемную строку, пучишь на нее глаза и непонятно, ну здесь-то что может не нравится ? Приходится дополнительными экспериментами вычислять теперь уже проблемное слово в строке, порой пошинковывая ее на строки и [ WORDS ] между ними вставляя. Ну чем не спартанская отладка в квадрате ?
Тут решения два - или валить в консоль эхо строк исходника, читаемого из файла, или показать проблемное слово. Либо то, либо другое, либо и то и другое. Это вот как я у себя делал. Либо как Хищник предлагает вывести номер проблемной строки.
Сообщение Добавлено: Вс июн 30, 2019 01:39
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
найти последнее слово породившее родное фортовское исключение не так уж и сложно.
А вот все эти операции с адресами. Тут уж надо отлаживать код под дебаггером, он ещё заодно и состояние регистров выведет :) или просто медетировать над исходниками.
Сообщение Добавлено: Вс июн 30, 2019 01:28
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
Как локализовать ошибку - интересный вопрос. Если ориентироваться только на слово, вызвавшее ошибку, то можно свалиться либо в "ошибку вызвало слово RUN, потому что именно его ввели с консоли, а там уж куда выполнение попало - неизвестно", либо в "ошибка в слове @, потому что именно оно непосредственно выполнялось в момент исключения". Оно где-то логично, что наиболее вероятные кандидаты попасть в исключение - @ и !, когда им неправильно передают адрес. Поэтому хочется-то видеть всю цепочку, от слова, запустившего все, до слова, на котором все упало (и заодно при каких обстоятельствах - сразу, или когда дошли до определенной итерации цикла). Другой вопрос, что отладочную информацию можно просто не успеть достать.
Сообщение Добавлено: Вс июн 30, 2019 00:41
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
В Нове с этим проблемы с подобной отладкой.
В СПФ это есть, но подозреваю, что там всё завязано с трансляцией файлов.

В Нове же с трансляцией файлов всё гораздо проще.
Словили исключение --> освобождаем память под буфер и выходим пока не поймаем исключение.

Впрочем, ошибки позиционируются с точностью до последнего определённого слова. Думаю, что с выводом слова породившего исключение это будет достаточно.
Ну или переопределить слово TRANSLATE-FILE, благо это вектор :)
Сообщение Добавлено: Сб июн 29, 2019 22:09
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
Для отладки еще хорошо строки считать, причем не просто глобальным инкрементом, а для каждого файла. Но я это не в самом Кварке у себя делал, а с учетом подключения чего-то внешнего. Потому что вот будет ошибка, пусть даже с выводом неправильного слова, а где это слово искать? По всем файлам? Удобнее, когда имя файла и номер строки с ошибкой можно хотя бы достать из транслятора внешней программой.
Сообщение Добавлено: Сб июн 29, 2019 22:01
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
Ethereal писал(а):
Кстати если -7D3 word not found то уже пиши какое именно word not found

Хотите верьте, хотите нет, но только сейчас в голову пришло, как это получше сделать, не трогая транслятор :) М-да.

Насчёт спартанской отладки в квадрате не черезчур ли?
Сообщение Добавлено: Сб июн 29, 2019 21:39
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
Victor__v писал(а):
А что EXIT не входит в метафизическую квинтессенцию Форта?
Так я думал не об EXIT-е, а как вставить машинный JUMP на точку сразу за +LOOP. Потом надоело разбираться как это сделать и я подумал, что раз адрес куда надо прыгнуть есть на стеке, то сделаем JUMP RET-ом. Вставил RET, и не получилось. Потом обнаружил, что если обрамить RET, квадратными скобками, то компилируется то, что нужно. Потом подумал, что кажется это в точности EXIT и кажется я забыл один DROP и тут-же удалил свое сообщение об [ RET, ] чтобы обдумать. Ты уже на удаленное сообщение отвечал и теперь ерничаешь. А меж тем я на твой Форт внимание обратил и две ошибки в твоем Форте нашел, а кто еще так сделал и по сему можно было бы и не ерничать. Я же по поводу твоих ошибок не ерничал.

Кстати если -7D3 word not found то уже пиши какое именно word not found (эха-то вводимых из файла строк нет), а то приходится вывод диагностических сообщений по тексту раскидывать чтобы обнаружить в какой именно строчке и какое именно слово not found. Особенно в интерпретируемом тексте когда latest word подсказывает, что все было в порядке страницы три текста выше. Форт итак спартанская среда, а у тебя отладка спартанская в квадрате.
KPG писал(а):
Не знаю, но мне ?DUP никогда лишним в системе не казался. :) (т.к. это слово легко применяемое и понимаемое)
?DUP по жизни удаляет ветку ELSE DROP THEN которая без него возникает постоянно. В этом его призвание.
Сообщение Добавлено: Сб июн 29, 2019 19:41
  Заголовок сообщения:  Re: Nova-forth версии  Ответить с цитатой
Victor__v писал(а):
и Кварке хищника нет слова ?DUP

Только потому, что : ?DUP DUP IF DUP THEN ; Где надо, оно появляется, и как-то традиционно сложилось, что в ядро не попало.

Victor__v писал(а):
По поводу реализации DO LOOP на асме. Можно конечно, но зачем?
Тот же код слова DO в этом плане оптимален. На ассемблере будет точно так же.

Как правило, DO LOOP полезен для обработки больших массивов, в отличие от BEGIN WHILE REPEAT, для которого характерно выполнение с проверкой какого-то локального условия. А вот DO LOOP - это про мегабайтные массивы с i-м элементом. Там даже пустой цикл заметен по времени выполнения.
Сообщение Добавлено: Сб июн 29, 2019 16:58

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


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