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

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

Обзор темы - представление чисел
Автор Сообщение
  Заголовок сообщения:  Re: представление чисел  Ответить с цитатой
В простейшей Forth-реализации львиная доля чисел требуется на обслуживание адресной арифметики и естественным является стек, содержащий вперемешку числа и адреса (понятно, одинаковой длины).
Если требуется работа с "другими" числами, то, за исключением популярных трюков с двойными числами, проще создать отдельный стек.
Если же шитый код сам требует "странных" чисел, например, упакованных, то имеет смысл сразу отказаться от "обычного" способа построения Forth системы, разделив "логическую" и "физическую" организацию компилируемого кода. (Т.е. Forth будет думать, что работает с обычными числами/адресами или, даже, методами/сообщениями, а слова работы со словарем будут переводить их в требуемый вид - относительный, упакованный или еще какой).
Сообщение Добавлено: Ср май 29, 2013 11:19
  Заголовок сообщения:  Re: представление чисел  Ответить с цитатой
Majestio писал(а):
Конечная программа может (должна) работать на процессорах различной разрядности. Я считаю, что имеет смысл разделить вычисления на "родные" и "зарубежные" (читаем "за рубежом").

в Форте обычно так:
Есть базовая разрядность, с которой работает ФВМ (обычно, но не всегда, соответствует разрядности АЛУ процессора); все операции без префиксов работают с числами данной разрядности; если появляется новый тип данных, появляются операции с префиксами, т.е.:
@ ! - это работа со значениям базовой разрядности;
2@ 2! (или D@ D!) - работа со значениями двойной длины;
F@ F! - работа с числами в формате с плавающей точкой,
и т.д.
Такой формат вобщем достаточно универсален, но, при портировании кода на другие системы с другой разрядностью возможны проблемы, но аналогичные проблемы у того же Си с типом int.
Возможно, стоит забить на CELL (то есть ячейку базовой разрядности) и явно указывать для каждой операции разрядность операндов, т.е., к примеру, убрать @ и ! заменив их на Q@ Q! (вобщем префикс ввести обязательный). Последнее будет нормально работать для чисел базовой разрядности и ниже, а вот с числами, не влезающими в CELL проблема не уйдет.
Сообщение Добавлено: Ср май 29, 2013 10:53
  Заголовок сообщения:  Re:  Ответить с цитатой
mOleg писал(а):
то есть предлагаете формат записи чисел двойной длины:
1231:3423 ?
тогда если просто число типа; 1234313478 не влазит в CELL, то ошибку выдавать?
я правильно понял?

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

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

1) Компилируется/интерпретируется код, он изначально знает о своей разрядности целевой платформы
2) Создается некая библиотека - в заголовка/настройках программист обязан указать желаемую разрядность
3) "Линкер" обязан подключить одну из библиотек - "родной" разрядности или "повышенной" в зависимости от двух факторов - спецификация разрядности в коде, анализ неопределенной разрядности в процессе разбора исходного кода

Примеры:

работаем с числом xEF0D

  • Для 8-битного процессора это число "не родное", нужно использование библиотеки "повышенной разрядности";
  • Для 16-,32-,64-битного - оно вмещается в "битность" - используем "родную" библиотеку;

Есть ряд задач, где необходимо манипулировать сверх-большими числами. Порядка n*10^100. Как поступить? ИМХО - это адекватно ложится в мою концепцию "родное/не родное" вычисление.

Резюме: релиз библиотеки предусматривает обязательное уточнение целевой таргет-разрядности. Для гибкости можно предусмотреть "библиотечный" и "словарный" описатель (если слово оперирует другой, отличной разрядностью) .
Сообщение Добавлено: Вт май 28, 2013 11:39
  Заголовок сообщения:   Ответить с цитатой
Wlad писал(а):
Зачем явно указывать для чисел двойной длины какая часть числа в какой элемент стека пойдёт???

это вообще-то определяется используемой архитектурой процессора BIG vs LITTLE endian

Wlad писал(а):
НО! В подавляющем большинстве случаев прикладных программ программист абстрагируется от представления чисел в вычислительном механизме.

я не акцентировал то, как хранятся числа в памяти. Я просто показал, в чем отличе в записи: 123`123 и 123:123
если есть идея, как это сделать без показывания как оно в памяти будет лежать, то говори 8) я исправлю(сь)

Wlad писал(а):
как только вы устанавливаете правило какая часть байтов в какой элементов стека уходит, то при смене разрядности у вас это будет уже ДРУГОЕ число ( в середину числа внесены доп элементы - нулевые байты). А большинство алгоритмов работают с ЯЧЕЙКАМИ. И если двойное число это ДВЕ ячейки, то, при упомянутом мною случае, вы автоматом получаете ошибки и головняк.

эм, не совсем так. Собственно две ячейки и есть две ячейки.
Сообщение Добавлено: Ср авг 12, 2009 20:12
  Заголовок сообщения:   Ответить с цитатой
Очередные мои пять копеек:

Зачем явно указывать для чисел двойной длины какая часть числа в какой элемент стека пойдёт???

Я согласен: конечно, в Форте особенности вычислительного механизма (стек) ЯВНО присутствуют в языке.
НО! В подавляющем большинстве случаев прикладных программ программист абстрагируется от представления чисел в вычислительном механизме.
Знание распределение (количества) байтов по элементам стека может быть полезным, но мы можем попасть в просак при переносе фортовых исходников с платформы на платформу.

есть число 0х123456 - все прекрасно понимают, что это за число
как только вы устанавливаете правило какая часть байтов в какой элементов стека уходит, то при смене разрядности у вас это будет уже ДРУГОЕ число ( в середину числа внесены доп элементы - нулевые байты). А большинство алгоритмов работают с ЯЧЕЙКАМИ. И если двойное число это ДВЕ ячейки, то, при упомянутом мною случае, вы автоматом получаете ошибки и головняк.
Сообщение Добавлено: Вт авг 11, 2009 23:02
  Заголовок сообщения:   Ответить с цитатой
_Harry писал(а):
А когда еще длиннее надо бы предупредить или выдать ошибку.

а вот это сложно ловить. Я подумаю как сделать проще, но переполнение двойной разрядност ловить сложнее.
Сообщение Добавлено: Вт авг 11, 2009 21:27
  Заголовок сообщения:   Ответить с цитатой
mOleg писал(а):
Источник: D:\fork\src-102\lib\util\envir.fts

В строке: 35 :52

: MAX-UD ( --> dconst ) 0xFFFFFFFFFFFFFFFF

Число двойной длины!



вот так выглядит предупреждение

Это когда число двойной длины тут понятно.
А когда еще длиннее надо бы предупредить или выдать ошибку.?
Сообщение Добавлено: Вт авг 11, 2009 17:45
  Заголовок сообщения:   Ответить с цитатой
_Harry писал(а):
Несовсем понятно что получится если введена строка определяющая число больше чем двойное.

Источник: D:\fork\src-102\lib\util\envir.fts           
В строке: 35 :52
: MAX-UD ( --> dconst ) 0xFFFFFFFFFFFFFFFF
Число двойной длины!

вот так выглядит предупреждение :)

_Harry писал(а):
А также мне кажется ' это уже слишком, : достаточно.

они разные, если ты наберешь в строке:
123:456 то на стеке получишь два числа: 456 123
123`456 на стеке оставит два числа: 0 123456

однако, самое интересное происходит с отрицательными числами:
-123:456 = -456 -124
-123`456 = -1 -123456
Сообщение Добавлено: Пн авг 10, 2009 17:15
  Заголовок сообщения:   Ответить с цитатой
вопрос писал(а):
Забыл спросить, чему в реальности соответствуют отрицательные шестнадцатеричные числа

:) вопрос логичный. Но иногда проще записать: -0x2 а не 0xFFFFFFE
вобщем дополнительный код
кстати, замечу, что запись -0x2 гораздо универсальнее, чем 0xFF... потому, что не завязана на разрядность числа
Сообщение Добавлено: Пн авг 10, 2009 17:11
  Заголовок сообщения:   Ответить с цитатой
mOleg писал(а):
В данной Форт-системе есть ряд отличий и в том, как распознаются числа, и в том, какой формат записи чисел принят (по сравнению с ANSI94).


Несовсем понятно что получится если введена строка определяющая число больше чем двойное.
А также мне кажется ' это уже слишком,
: достаточно.
Сообщение Добавлено: Пн авг 10, 2009 10:52
  Заголовок сообщения:   Ответить с цитатой
Цитата:
0xABCDEF положительное число одинарной длины в шестндцатиричной системе счисления,
4) -0x42DF0 отрицательное число одинарной длины в шестнадцатиричной системе счисления.
Заглавные и прописные символы не различаются, то есть можно писать как: 0x1DEC, так и: 0x1dEc . Надо отметить, что число может быть и двойной длины, но тогда в STDERR будет выдаваться предупреждение о том, что вместо числа одинарной длины, введено число двойной длины, но только предупреждение, то есть процесс трансляции прерываться не будет
Забыл спросить, чему в реальности соответствуют отрицательные шестнадцатеричные числа
Сообщение Добавлено: Пн авг 10, 2009 10:30
  Заголовок сообщения:   Ответить с цитатой
to Wlad:
вопрос писал(а):
Будучи расширяемым, форт имеет совсем непроработанным 2 слой - отсюда эти проблемы - там где можно сделать как угодно, ничего как правило сделано не будет

вот-вот, характерный пример - Perl, например, там до сих пор нет именованных параметров в процедурах/функциях.
т.е. на самом деле они очень легко реализуются библиотечкой в десяток строчек текста, и таких библиотечек
десятки, но нет ни одной стандартной. причём таких моментов (как с параметрами) можно назвать много.
Сообщение Добавлено: Пн авг 10, 2009 10:00
  Заголовок сообщения:   Ответить с цитатой
Wlad писал(а):
В данной ветке, как в капле - море, отражается причинность вопроса "почему Форт не столь популярен"...

мне это странно слышать\видеть, так как в данной ветке идет обсуждение как лучше организовать ввод чисел с точки зрения пользователя(программиста) в конкретной Форт-системе (см. раздел).
Поэтому ваш коментарий мне совсем не ясен.
Сообщение Добавлено: Сб авг 08, 2009 17:52
  Заголовок сообщения:   Ответить с цитатой
Цитата:
В данной ветке, как в капле - море, отражается причинность вопроса "почему Форт не столь популярен"...

Любой язык можно поделить на 2-3 слоя
Код:
--------------------------------------------------------------
слой собственно пользователя (программиста)
--------------------------------------------------------------
слой расширений (готовых решений и средств для удобства)
--------------------------------------------------------------
слой ключевых идей (определяет сам язык)
--------------------------------------------------------------

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

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

Будучи расширяемым, форт имеет совсем непроработанным 2 слой - отсюда эти проблемы - там где можно сделать как угодно, ничего как правило сделано не будет
Сообщение Добавлено: Сб авг 08, 2009 10:40
  Заголовок сообщения:   Ответить с цитатой
А уважаемому сообществу не кажется несколько странным обсуждение данной темы в таком количестве сообщений?
Мы же не в 1959 году, вообще-то...
Даже если дело касается Форта, есть уже устоявшиеся "стандарты" (привычные формы) записи чисел в подавляющем большинстве языков программирования.
В конце концов, слово NUMBER можно реализовать по одному в каждом из каких-либо соответствующих словарях/библиотеках...

В данной ветке, как в капле - море, отражается причинность вопроса "почему Форт не столь популярен"...
Сообщение Добавлено: Пт авг 07, 2009 23:38

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


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