Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб дек 04, 2021 01:54

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 143 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10  След.
Автор Сообщение
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Пн июл 19, 2021 16:53 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1143
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Не знаю. Скажите, какими фичами в СПФ пользуетесь и тогда прикинем.

Код с СПФ-ским совместим.
Однако отличий дофига.

Портировать те или иные вещи с СПФа на Нову можно с оговорками (к примеру, нет PAD, работа с float ограничена (библиотека пока под 32 бита, нет печати числа).
Перенести библиотеки, например, от ~yz не удалось.
Так, его Gui на винде и не смог портировался.

Имеющиеся библиотеки из полезного:
  • Локальные переменные (функционал как и в СПФ)
  • Строки (собственный функционал)
  • Лямбды (самая продвинутая библиотека работает с посткомпиляцией)
  • Трансляция JSON (особо не тестил)
  • Статический ООП (наследование, полиморфизм и инкапсуляция)
  • Дописывание образа форт-системы (можно создать и граф. приложение)
  • MySQL (надо допилить т. к. давно с ним не работал)
  • Небольшая обертка над сокетами
  • Дополнительные слова для отладки (печать дампа, стека возврата)
  • Списки. Массивы, Матрицы

Для gui приложений можно использовать библиотеку IUP, есть в поставке (там реализация похожа GTK, в общем ничего сложного).

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Пн июл 19, 2021 20:35 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 115
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 3 раз.
Надо попробовать, здесь описание и есть ссылка на установку https://cloud.mail.ru/public/RvuR%2FsXgxeWf1s, исходный код я ранее выкладывал, велосипеды не изобретал, все в доступных библиотеках. Да и для "кнопкодавов" за красивыми кнопками не гонюсь..


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Пн июл 19, 2021 21:50 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1143
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
По ходу исходников уже нет)

Смотрел в теме viewtopic.php?f=5&t=2980&view=previous

Просто, чтобы прикинуть.
Какие либы СПФа Вы использовали?
Просто в Нове есть далеко не все.
Так что либо придется изобретать велосипеды, либо совместно думать.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Пн июл 19, 2021 23:22 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 115
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 3 раз.
Да ссылка слетела https://cloud.mail.ru/public/5nM4%2F6jyazjtHM


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Вт июл 20, 2021 11:23 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1143
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Посмотрел мельком.
При портировании, не знаю, 2/5 надо менять :cry:

Прежде всего операции <# #S HOLD и пр.
В Нове их просто нет.
Также отсутствует двойная арифметика, что также составит некоторые проблемы.

Обратите внимание на слова для парсинга.
Связка 0 PARSE в СПФ по сути хак.
В СПФ это как бы позволяет получить всю строку до каретки т. к. творение Черезово транслирует данные построчно.
В Нове же данный код возьмет все до конца источника и это может быть отнюдь не одна строка.

Также NOTFOUND работает иначе (переопределение, как в СПФ, ничего не даст).

Насчет гуя в винде не знаю. По идее все должно работать

Однако кое-что будет проще.
Например, в Нове в ядре есть слово NDROP, дабы не плодить 3DROP 5DROP и пр.

Например, заметил как определено слово 0.6

В Нове, подключив библиотеку ~er/float/float.f , можно просто писать где нужно 0,6 или 0.6 (без разницы).

Можно кстати сделать определение для флоат-констант типа того:

Код:
: FCONST
HEADER
F> LIT, POSTPONE >F RET,
INLINE
;


Только отмечу, что на стек данных кладется флоат в 32-битном формате. на версии под 64 соот-но будет класться в 64-битном.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Вт июл 20, 2021 19:13 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 115
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 3 раз.
Я писал с СПФ у меня проблем нет... и команда мне помогала в деталях.. попробую твою Нову.. но были бы в команде.... и результат был бы..


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Вт июл 27, 2021 12:44 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1143
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Планируемые изменения в Нове касательно ядра (помимо разделнього хранения).

1) Новые слова.
Добавятся:
Z" \ -- addr
[IF] \ из-за сразу нескольких разряздностей
[ELSE] \ данные слова прямо необходимы в ядре
[THEN] \ пока думаю над адекватной поддержкой вложенности.
RADD \ сложить число со стека данных с числом со стека возвратов. Частая операция
1-! \ частая операция

2) У каждого временного словаря будет свой код удаления, который можно дописать
Просмотрев свой код, заметил, что хватает мест, где данная особеность смотрится удобно.
Так, временные словари в Нове играют роль плагинов и временных хранилищ вспомогательных данных.
Возможность увязать из в подобие дерева и очистить одним махом будет полезной.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Сб июл 31, 2021 14:32 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1143
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Потихоньку пишу новый ЦК.
Одна из его особенностей - структуры и некоторые слова берутся прямо из исходников нового форта.
Сделано специально, дабы не дублировать код множество раз.

Сейчас в образ компилируются примитивы, константы, переменные, и структуры.

Для компиляции обычных слов мне потребуется баба и паяльник написать интерпретатор (просто) и завести словарик с IMMEDIATE-словами (тоже не сложно), для подмены вызовов в новом форте.
Просто рутина.

Однако как не хочется её делать :) а надо)

А теперь безумные и бессмысленные идеи)

Оооптимизация :lol:

Можно в качестве развлечения уменьшить размер кода в примитивах.
Для этого при компиляции очередного примитива. Мы сравниваем код предыдущего скомпилированного примитива со всем ранее скомпилированным кодом.
Если найдется соответствие, то "ужимаем" пред. примитив (удаляем память под него, указатель на примитив переносим на найденное соответствие)
По прикидкам это позволит ужать целых 20 байт :))

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Пт авг 06, 2021 13:10 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1143
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Портирование несколько застопорилось.
Причина:
Для компиляции переменных необходим механизм TO/FROM. Для механизма необходимо слово FFA-COMPILE, А для этого слова необходима реализация стека словарей, а для реализации словарей необходимы переменные с механизмом TO/FROM. :))

В общем, я думал как перетасовать исходики так, чтобы все компилилось последовательно и логично.
Мысли зашли в тупик.
Поэтому механизм поддержки TO/FROM будет работать на "честном слове", а все необходимые ссылки я поставлю постфактум.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Сб авг 07, 2021 14:32 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1143
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Всё-таки помимо преимуществ заимствования кода напрямую из образов есть и недостатки.

Так, совершенно случайно обнаружил, что слово INLINE ведёт себя некорректно.
Так, ежели перед нами короткое слово, то инлайн должен вычислить его размер и записать в поле флагов.
И вот тут-то нас ждёт засада.

В CFA хранятся адреса сразу пригодные для форт-образа, а не реальные. а слово HERE как раз даёт реальный адрес...
Короче, разница получившихся значений более чем существенна.
В общем, если даже слово в 1 байт, то INLINE забьёт на выяснение его размера.

Варианты решения:
1) Адекватное. Работать с образом в реальных адресах, а их после просто привести к виртуальным.
2) решение курильщика. Сделать HERE вектором и в зависимости от количества вызовов вести себя по разному :) Н - надёжность)

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Пн авг 23, 2021 11:30 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1143
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Текущаяя ситуация.

Где-то примерно 75 % кода подготовлено и компилируется без ошибок. Сейчас допиливаю ОС-зависимую часть.
Все рутинно, аж скучно.

А теперь перйдём к надуманным проблемам)

1) Ужасный ЦК.
Нет, серьёзно, почти весь ЦК находится в одном файле). Удобно, но потом надо будет всё же разнести.

2) Меньше ОСа!
Откомпилированы примитивы для поддержки API.
Вместе с ними так же написал на асме GetLoadLibraryA и GetProcAddress.
Просто мне показалось идиотизмом реализовывать обёртки над этими функции, поскольку в обёртках есть вызов этих же функций :)

3) EXE
Надо будет подрихтовать образ EXE, дабы при старте ОС давала память (сколько я там обычно ставил?) пусть на один мегабайт.


Эх, чую придётс мне форт под Идой запускать, по-любому где-нибудь ошибусь)

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Ср авг 25, 2021 14:54 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1143
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Когда-то я релизовывал на Нове стековый комбинатор, то использовал для него самопальный ассемблер.
Проблема ассемблера в том, что его лень писать)
А тут ещё и на 64-бита переводить.

Ладно, это все лирика.

Заметил, что у меня оказывается местами в исходниках как раз часть кода на стековом комбинаторе. Переделать фигня.
Но я удивился другому.
Спустя 2 года, когда я вообще не лез в синтаксис комбинатора, я прекрасно в нем разобрался.
Как-то умудрился сделать его интуитивно-понятным)

Так что после перевода Новы на 64 бита, сделаю новую реализацию стек. комбинатора)
Но на этот раз буду создавать на лету исходники и скармливать его Фасму).
К несчастью, фасм не умеет компилировать строки. Придётся заниматься файломаханием, зато относительно портируемо)

Также "слияние" с фасмом, позволит, страдать наслаждаться созданием оптимизатора :)

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Пн сен 13, 2021 18:27 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1143
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
О WORDS замолвите слово

Реализация слова WORDS в нынешнем виде это просто слабочитаемый перечень всех слов в каждой цепочке поиска.
Хотелось чего-то понагляднее.
Набросал штук 4 варианта от самого наглядного к самому трешовому.
И вот мне захотелось, внезапно, сделать реализацию слова наиболее компактной при компиляции.
Вечер был свободный, поэтому уложился в 637 байта :))
Мне вот реально делать нехрен)

Код:
\ печать слова или его отсутствия
:NONAME \ maxlen pos -- maxlen
S"                              " DROP >R
." > "
>R
R@ @
IF
R@ @ L>NFA @ R@ @ L>countFA W@ DUP >R TYPE 
2 RPICK OVER R> -  TYPE
R@ @ @ R> !
RDROP
ELSE
RDROP
R> OVER TYPE
THEN 

; >R

:NONAME 0 1 CURRENT @ WORDS-ITER: L>countFA W@ MAX >R 1+ R> ; \ -- cnt maxlen

: WORDS4
[ COMPILE, ]

RP@ [ VOC-THREADS CELLS LIT, ] - RP!
CURRENT @ L>LLFA  RP@ [ VOC-THREADS CELLS LIT, ]  MOVE

BEGIN
2R@
2 RPICK
3 RPICK
OR OR OR WHILE

RP@                   [ R@ COMPILE, ]
RP@ CELL+             [ R@ COMPILE, ]
RP@ [ 2 CELLS LIT, ] +       [ R@ COMPILE, ]
RP@ [ 3 CELLS LIT, ] +       [ R@ COMPILE, ]

                  [ RDROP ]

CR
REPEAT
RDROP RDROP
RDROP RDROP
DROP
." all-words: " . CR

;


Соответственно, если подскажете где ещё можно ужать не прибегая к машинным кодам, то буду рад :lol:
Изображение

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Вт сен 14, 2021 11:37 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 188
Откуда: Москва
Благодарил (а): 33 раз.
Поблагодарили: 6 раз.
Victor__v писал(а):
Соответственно, если подскажете где ещё можно ужать не прибегая к машинным кодам, то буду рад :lol:

Ну тут сразу бросается в глаза повторяющийся 4 раза фрагмент r@ @, возможно, этот момент можно как-то обыграть, чтобы сэкономить пару байт (но это зависит от используемого шитого кода)...
Кроме того, 1 строка лучше, чем 2 (это опять же зависит от реализации строк), т.е. можно было бы сразу работать со строкой S" > "...
А еще лучше вообще без строк, а недостающие по фэншую пробелы выводить словом spaces...
Если числа 64-битные, то, возможно, фрагмент 0 1 будет короче, если написать 0 dup 1+
А еще, если я правильно уловил мысль, сейчас словарь выводится группами по 4 слова, а не проще ли было выводить по одному слову, а после каждого четвертого делать перевод строки?
Но это все оптимизации ради оптимизации... :) Ведь главное, чтобы работало и реализация была понятной автору... :D


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1143
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Total Vacuum писал(а):
Victor__v писал(а):
Соответственно, если подскажете где ещё можно ужать не прибегая к машинным кодам, то буду рад :lol:

Ну тут сразу бросается в глаза повторяющийся 4 раза фрагмент r@ @, возможно, этот момент можно как-то обыграть, чтобы сэкономить пару байт (но это зависит от используемого шитого кода)...
Кроме того, 1 строка лучше, чем 2 (это опять же зависит от реализации строк), т.е. можно было бы сразу работать со строкой S" > "...
А еще лучше вообще без строк, а недостающие по фэншую пробелы выводить словом spaces...
Если числа 64-битные, то, возможно, фрагмент 0 1 будет короче, если написать 0 dup 1+
А еще, если я правильно уловил мысль, сейчас словарь выводится группами по 4 слова, а не проще ли было выводить по одному слову, а после каждого четвертого делать перевод строки?
Но это все оптимизации ради оптимизации... :) Ведь главное, чтобы работало и реализация была понятной автору... :D


r@ @
Пробовал обыгрывать, преимуществ нет)

spaces
В моей реализации нет этого слова) Однако реализовал, выигрыш теперь 14 байт)

0 dup 1+
О, спасибо, сэкономил 4 байта)

а не проще ли было выводить по одному слову, а после каждого четвертого делать перевод строки?
Там 4 цепочки поиска. Соот-но, за один цикл должны выводиться по одному слову из каждой цепочки.
Может и проще, но хочется еще и выразительности. Вертикальные столбцы более красивы)

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 143 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10  След.

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


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

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


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

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