Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
Окей, напишите реализацию слов C! C@ @ ! , которые будут работ с базой+смещение, а также одновременно с нормальными адресами. Покажите мастер-класс.
Окей, напишите реализацию слов C! C@ @ ! , которые будут работ с базой+смещение, а также одновременно с нормальными адресами. Покажите мастер-класс.
|
|
|
|
Добавлено: Пт мар 29, 2024 13:27 |
|
|
|
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
Victor__v писал(а): Как работать с выделенной памятью в хипе? При помощи слов @ ! C@ C! Victor__v писал(а): Как работать с выделенной памятью в стеке? Допустим, что стек это тоже хип. Victor__v писал(а): Как модифицировать уже существующий код? Приобрести достаточно пива для этого марафона. Victor__v писал(а): Как писать компилирующие слова (аля 0x65 c 0x48 c,)? А код тоже располагается в хипе? Для локальных вызовов можно использовать относительный call. А как вызываются слова из другого хипа? Адрес CFA тоже ведь указатель. Victor__v писал(а): Ладно бы Вы предложили для работы связок база+смещение отдельный набор слов, так нет жеж) Предлагаете всё менять. С точки зрения обычного пользователя форта, отдельный набор слов для работы связок база+смещение - это неприемлемо. Поэтому да, всё менять.
[quote="Victor__v"]Как работать с выделенной памятью в хипе?[/quote] При помощи слов @ ! C@ C!
[quote="Victor__v"]Как работать с выделенной памятью в стеке?[/quote] Допустим, что стек это тоже хип.
[quote="Victor__v"]Как модифицировать уже существующий код?[/quote] Приобрести достаточно пива для этого марафона. :)
[quote="Victor__v"]Как писать компилирующие слова (аля 0x65 c 0x48 c,)?[/quote] А код тоже располагается в хипе? Для локальных вызовов можно использовать относительный call. А как вызываются слова из другого хипа? Адрес CFA тоже ведь указатель.
[quote="Victor__v"]Ладно бы Вы предложили для работы связок база+смещение отдельный набор слов, так нет жеж) Предлагаете всё менять.[/quote] С точки зрения обычного пользователя форта, отдельный набор слов для работы связок база+смещение - это неприемлемо. Поэтому да, всё менять. :)
|
|
|
|
Добавлено: Чт мар 28, 2024 19:12 |
|
|
|
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
tsdima писал(а): Немного усложнится только ядро. Но оно обычно не очень большое, и не все слова работают с памятью. Всё, что написано на форте, останется таким-же простым. Ядро усложнится не немножко, а офигеть как) Работа с памятью вот просто везде. Как работать с выделенной памятью в хипе? Как работать с выделенной памятью в стеке? Как модифицировать уже существующий код? Как писать компилирующие слова (аля 0x65 c 0x48 c,)? Ладно бы Вы предложили для работы связок база+смещение отдельный набор слов, так нет жеж) Предлагаете всё менять.
[quote="tsdima"] Немного усложнится только ядро. Но оно обычно не очень большое, и не все слова работают с памятью. Всё, что написано на форте, останется таким-же простым.[/quote]
Ядро усложнится не немножко, а офигеть как) Работа с памятью вот просто везде. Как работать с выделенной памятью в хипе? Как работать с выделенной памятью в стеке? Как модифицировать уже существующий код? Как писать компилирующие слова (аля 0x65 c 0x48 c,)?
Ладно бы Вы предложили для работы связок база+смещение отдельный набор слов, так нет жеж) Предлагаете всё менять.
|
|
|
|
Добавлено: Чт мар 28, 2024 15:03 |
|
|
|
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
Victor__v писал(а): И как бы переход на реальные адреса упрощает систему. Немного усложнится только ядро. Но оно обычно не очень большое, и не все слова работают с памятью. Всё, что написано на форте, останется таким-же простым.
[quote="Victor__v"]И как бы переход на реальные адреса упрощает систему.[/quote] Немного усложнится только ядро. Но оно обычно не очень большое, и не все слова работают с памятью. Всё, что написано на форте, останется таким-же простым.
|
|
|
|
Добавлено: Ср мар 27, 2024 18:02 |
|
|
|
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
Victor__v писал(а): (система 64-битная). Ну 20 бит номер, 44 бита смещение. Лям динамических куч по 16 терабайт. Хватит?
[quote="Victor__v"](система 64-битная).[/quote] Ну 20 бит номер, 44 бита смещение. Лям динамических куч по 16 терабайт. Хватит? :)
|
|
|
|
Добавлено: Ср мар 27, 2024 17:59 |
|
|
|
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
tsdimaДа, точно с ними такая же хрень возможна. Но если со словарём ещё можно придумать практическое применение, то вот с переменными я затрудняюсь... Ну вот кому придёт в голову сделать что-то вроде VARIABLE TEST TEST CONSTANT TEST2 ???? Цитата: Может реальный адрес не обязательно должен быть реальным? Почему бы не сделать его типа "сегмент:смещение" и учесть это в словах (@ ! C@ C! и др.) работающих с памятью? Например 8 бит номер динамического пространства и 24 бит смещение (для 32-битного форта). Итого 256 пространств размером до 16Мб. Или мало? Это копец как мало, что даже не смешно. И как бы переход на реальные адреса упрощает систему. Сейчас у меня указатель на словарь как раз и предоставляет собой указатель на связку база+смещение в 16 байт. (система 64-битная).
[b]tsdima[/b] Да, точно с ними такая же хрень возможна. Но если со словарём ещё можно придумать практическое применение, то вот с переменными я затрудняюсь... Ну вот кому придёт в голову сделать что-то вроде VARIABLE TEST TEST CONSTANT TEST2
????
[quote]Может реальный адрес не обязательно должен быть реальным? Почему бы не сделать его типа "сегмент:смещение" и учесть это в словах (@ ! C@ C! и др.) работающих с памятью? Например 8 бит номер динамического пространства и 24 бит смещение (для 32-битного форта). Итого 256 пространств размером до 16Мб. Или мало?[/quote]
Это копец как мало, что даже не смешно.
И как бы переход на реальные адреса упрощает систему. Сейчас у меня указатель на словарь как раз и предоставляет собой указатель на связку база+смещение в 16 байт. (система 64-битная).
|
|
|
|
Добавлено: Ср мар 27, 2024 16:45 |
|
|
|
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
Victor__v писал(а): А ведь устаревшие указатели могут быть дополнительно спрятаны пользователем. А разве устаревшим указателем может быть только адрес словаря? А как же адреса переменных? Может реальный адрес не обязательно должен быть реальным? Почему бы не сделать его типа "сегмент:смещение" и учесть это в словах (@ ! C@ C! и др.) работающих с памятью? Например 8 бит номер динамического пространства и 24 бит смещение (для 32-битного форта). Итого 256 пространств размером до 16Мб. Или мало?
[quote="Victor__v"]А ведь устаревшие указатели могут быть дополнительно спрятаны пользователем.[/quote] А разве устаревшим указателем может быть только адрес словаря? А как же адреса переменных?
Может реальный адрес не обязательно должен быть реальным? Почему бы не сделать его типа "сегмент:смещение" и учесть это в словах (@ ! C@ C! и др.) работающих с памятью? Например 8 бит номер динамического пространства и 24 бит смещение (для 32-битного форта). Итого 256 пространств размером до 16Мб. Или мало?
|
|
|
|
Добавлено: Ср мар 27, 2024 14:17 |
|
|
|
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
Что ж, придётся признать страшную правду. В моей форт-системе много костылей и несуразностей Сейчас думаю как избавиться от одного слова VOC>REAL Что слово делает – превращает идентификатор словаря в реальный адрес для последующих манипуляций. Идентификатор не более чем указатель на структуру, которая содержит: 1) Указатель на переменную, где хранится адрес пространства. 2) Смешение в данном пространстве до словаря. На данный момент указатели на словарные структуры находятся в динамически выделяемом пространстве. Таким образом, впихивая реальных адрес словаря, который также ж является словом в динамическом пространстве, при добавлении в словарь новых полей или перезаписи/старте форт-системы адрес будет некорректным. В общем, хочется и чтоб реальный адрес был и чтоб динамические пространства были, и чтоб по красоте, и никаких структур на горизонте. Где ТРИЗ когда он так нужен) Варианты обхода проблемы, какие мне в голову пришли: 1) Храним структуру словаря в реальном пространстве Преимущества: Простота реализации. Недостатки: Некрасиво, словарные структуры будут выбиваться из общего ряда с другими словами. Нельзя произвольно изменять размер словарной структуры. 2) Изменяем словарь в динамическом пространстве при соответствующих событиях. Преимущества: на самом деле сделать это не так уж и сложно Недостатки: Код вида CURRENT @ CONSTANT test-voc будет багоопасным, что не есть хорошо. При каждом обновлении придётся перетряхивать стек контекста, переменную CURRENT. А ведь устаревшие указатели могут быть дополнительно спрятаны пользователем.
Что ж, придётся признать страшную правду. В моей форт-системе много костылей и несуразностей :o
Сейчас думаю как избавиться от одного слова VOC>REAL
Что слово делает – превращает идентификатор словаря в реальный адрес для последующих манипуляций. Идентификатор не более чем указатель на структуру, которая содержит: 1) Указатель на переменную, где хранится адрес пространства. 2) Смешение в данном пространстве до словаря.
На данный момент указатели на словарные структуры находятся в [b]динамически выделяемом пространстве[/b]. Таким образом, впихивая реальных адрес словаря, который также ж является словом в динамическом пространстве, [b]при добавлении в словарь новых полей[/b] или [b]перезаписи/старте форт-системы[/b] адрес будет некорректным.
В общем, хочется и чтоб реальный адрес был и чтоб динамические пространства были, и чтоб по красоте, и никаких структур на горизонте. Где ТРИЗ когда он так нужен)
Варианты обхода проблемы, какие мне в голову пришли:
1) Храним структуру словаря в реальном пространстве Преимущества: Простота реализации. Недостатки: Некрасиво, словарные структуры будут выбиваться из общего ряда с другими словами. Нельзя произвольно изменять размер словарной структуры.
2) Изменяем словарь в динамическом пространстве при соответствующих событиях. Преимущества: на самом деле сделать это не так уж и сложно Недостатки: Код вида CURRENT @ CONSTANT test-voc будет багоопасным, что не есть хорошо. При каждом обновлении придётся перетряхивать стек контекста, переменную CURRENT. А ведь устаревшие указатели могут быть дополнительно спрятаны пользователем.
|
|
|
|
Добавлено: Пн мар 25, 2024 15:53 |
|
|
|
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
Просто список значений. Если код ошибки дошёл до верхнего уровня, то вместо вывода, собственно, кода будет выводиться заданная в THROW-MES: THROW-MES; строка.
Просто список значений. Если код ошибки дошёл до верхнего уровня, то вместо вывода, собственно, кода будет выводиться заданная в THROW-MES: THROW-MES; строка.
|
|
|
|
Добавлено: Чт фев 15, 2024 16:19 |
|
|
|
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
Victor__v писал(а): Механизм наименования ошибок. А подробнее?....
[quote="Victor__v"]Механизм наименования ошибок.[/quote] А подробнее?.... :shuffle;
|
|
|
|
Добавлено: Чт фев 15, 2024 12:25 |
|
|
|
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
Выпилил очередную порцию багов у тут пришли идеи в мой мозг.
Механизм наименования ошибок. Аля: THROW-MES: -2003 : WORD NOTFOUND -2012 : FORTH TRANSLATE ERROR not_value : IS NOT VALUE virtual_empty : OOP: VIRTUAL FUNC NOT INIT!!! THROW-MES;
Выпилил очередную порцию багов у тут пришли идеи в мой мозг.
Механизм наименования ошибок. Аля: THROW-MES: -2003 : WORD NOTFOUND -2012 : FORTH TRANSLATE ERROR not_value : IS NOT VALUE virtual_empty : OOP: VIRTUAL FUNC NOT INIT!!! THROW-MES;
|
|
|
|
Добавлено: Ср фев 14, 2024 18:06 |
|
|
|
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
В ЦК был обнаружен странный баг.
Уж не знаю почему, но часть компилирующих слов по какой-то причине вообще не реагируют на изменения.
И слово REFILL (возможно не одно) по какой-то причине использует неверное смещение. При том в самом форте всё норм, но новын слова будут ссылаться не на то места.
Буду копаться или переписывать ЦК,
В ЦК был обнаружен странный баг.
Уж не знаю почему, но часть компилирующих слов по какой-то причине вообще не реагируют на изменения.
И слово REFILL (возможно не одно) по какой-то причине использует неверное смещение. При том в самом форте всё норм, но новын слова будут ссылаться не на то места.
Буду копаться или переписывать ЦК,
|
|
|
|
Добавлено: Пт дек 22, 2023 18:13 |
|
|
|
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
Все-таки возможность создавать дополнительные точки входа в функцию достаточно полезна. Например, недавно сия возможность помогла мне расширить функциональность трансляции строк с числа с минимумом усилий. Как так вышло Слово STR>NUM разбирает числа со знаком и с префиксом 16-ричности. Совершенно нормально слово схавает строку "-0xAA1234", но на днях потребовалось транслировать просто числа без этих наворотов. Путь нормального человека: написать отдельное слово для трансляции. А после сделать рефакторинг слова STR>NUM Путь курильщика: использовать слово с наворотами, но вызывать его без определения наворотов
Все-таки возможность создавать дополнительные точки входа в функцию достаточно полезна.
Например, недавно сия возможность помогла мне расширить функциональность трансляции строк с числа с минимумом усилий. Как так вышло Слово STR>NUM разбирает числа со знаком и с префиксом 16-ричности. Совершенно нормально слово схавает строку "-0xAA1234", но на днях потребовалось транслировать просто числа без этих наворотов.
Путь нормального человека: написать отдельное слово для трансляции. А после сделать рефакторинг слова STR>NUM
Путь курильщика: использовать слово с наворотами, но вызывать его без определения наворотов :))
|
|
|
|
Добавлено: Чт авг 24, 2023 17:42 |
|
|
|
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
Когда писал функцию для преобразования строки в число с плав. точкой обнаружил ошибку при трансляции обычных чисел. Не забыть исправить.
Также добавил простейшие функции для работы с хипом. H.NEW H.FREE H.S+ H.N+ H.UN+ H.B+ H.W+ H.DW+ H.CELL+ H.FILE+
В мыслях написать оптимизатор (опять, да) Всё что нужно это ассемблер где-то на 30 мнемоник. такой же дизассемблер и вселенская скука.
Когда писал функцию для преобразования строки в число с плав. точкой обнаружил ошибку при трансляции обычных чисел. Не забыть исправить.
Также добавил простейшие функции для работы с хипом. H.NEW H.FREE H.S+ H.N+ H.UN+ H.B+ H.W+ H.DW+ H.CELL+ H.FILE+
В мыслях написать оптимизатор (опять, да) Всё что нужно это ассемблер где-то на 30 мнемоник. такой же дизассемблер и вселенская скука.
|
|
|
|
Добавлено: Вт авг 15, 2023 11:46 |
|
|
|
|
|
Заголовок сообщения: |
Re: Nova Дневник разработчика |
|
|
Hishnik писал(а): Так если программист сам начинает изменять эту словарную структуру, убирая что-то из поиска, то наверное он понимает что делает? Надеюсь) Только по логике исключение из поиска словарной структуры не должно влиять на работоспособность кода.
[quote="Hishnik"]Так если программист сам начинает изменять эту словарную структуру, убирая что-то из поиска, то наверное он понимает что делает?[/quote] Надеюсь) Только по логике исключение из поиска словарной структуры не должно влиять на работоспособность кода.
|
|
|
|
Добавлено: Вт июл 25, 2023 12:51 |
|
|
|
|