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

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

Обзор темы - WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)
Автор Сообщение
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
gudleifr писал(а):
Понятно, пришлось отказаться от статической подгрузки ресурсов и библиотек, поэтому некоторые варианты примеров опущены.
Долго пытался вспомнить, что подразумевал, но, скорее всего, ресурсы тут ни при чем. Пропал пример про присобачивание dll посредством lib - 17.1.
Нет, соврал, пропал еще 8.1 - про включение меню в класс окна.
Сообщение Добавлено: Вт июн 09, 2015 01:28
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
Тогда пропадет возможность подгружать ресурсы и работать с ними в интерактивном режиме без создания нового EXE, например, если текст программы просто запущен на интерпретацию. Я хотел обеспечить и ту возможность и ту одновременно. Чтобы имея полную возможность повторять Рихтера Форт оставался Фортом.
Хотя не факт, что все получится. Тут есть одна грабля. Но я кажется знаю как ее обойти. RESOURCE, потребуется еще один входной параметр TRUE/FALSE в зависимости от того ресурсы будут нужны сейчас или уже в новом EXE. Короче, идет обкатка идеи.
Сообщение Добавлено: Вт июн 09, 2015 00:57
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
Ethereal писал(а):
Идея также и в том, чтобы писать программы на Форте в точности также, как пишутся программы с ресурсами статически компонуемыми при сборке EXE.
Как раз это меня и не устраивало. А "в точности" можно было бы создать ресурс в Win-редакторе и честно дописать в конец exe.
Сообщение Добавлено: Вт июн 09, 2015 00:16
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
Идея также и в том, чтобы писать программы на Форте в точности также, как пишутся программы с ресурсами статически компонуемыми при сборке EXE.

Ну хотя бы чтоб примеры из Рихтера повторить один в один :)
Кроме завершающей строчки с
" Foo.res" RESOURCE, SAVE-SYSTEM
Сообщение Добавлено: Вт июн 09, 2015 00:01
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
Ethereal писал(а):
Форт сам прикомпоновывает к себе ресурсы
Все гораздо проще: WIN-API имеет стандартные ф-ии для работы с ресурсами из памяти (с суффиксом Indirect). И если уж делать под каждый набор ресурсов новый exe, то почему не сделать это стандартно, средствами Винды?
Сообщение Добавлено: Пн июн 08, 2015 23:52
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
gudleifr писал(а):
Понятно, пришлось отказаться от статической подгрузки ресурсов и библиотек, поэтому некоторые варианты примеров опущены.
Вот вот. Я неделю обдумывал и дня четыре бился, чтобы реализовать более-менее красивое решение по статической компоновке в любой момент ресурсов к саморасширяемому фортовскому EXE. Наконец-то заработало !

Идея была такая. Секции PE-EXE файла оказывается могут перекрываться в EXE образе. Это в памяти они развертываются последовательно с выравниванием на Section Align. А в образе EXE они могут наслаиваться друг на друга.

Идея :
- Forth.exe от рождения имеет секцию .rsrc , которая указывает на свое смещение в EXE, совпадающее со смещением в EXE секции .text и имеет физ.длину 0 и вирт.длину Section Align. Такая секция никому не мешает. Ее как-бы и нет.
- Секция кода .text (т.е кодофайл) имеет физический размер тот, какой имеет, с выравниванием на File Align, а виртуальный в 1 мегабайт. Этот мегабайт зарезервирован под расширение Форта в процессе определения новых слов. Сразу после этого мегабайта в памяти автоматически располагается вторая секция .rsrc
- Форт сам прикомпоновывает к себе ресурсы из скомпилированных файлов .res . Делает он это так. Выравнивает HERE на File Align. Делает так, чтобы при следующем исполнении SAVE-SYSTEM был создан такой новый EXE, что начало секции .rsrc в EXE-файле указывало именно сюда. Подчитывает файл ресурсов начиная с HERE и перелопачивает его. За ALLOT-чивает русурс и он оказывается скомпилированным в кодофайл. Делает так, чтобы при следующем исполнении SAVE-SYSTEM был создан такой новый EXE, что длина секции .rsrc равнялась размеру за ALLOT-ченного ресурса.
Ну и HERE FENCE ! , чтобы ресурс нельзя было заFORGET-ить (или наоборот усложнить FORGET, чтобы можно было безболезненно FORGET-ить).

В итоге после SAVE-SYSTEM будет создан новый EXE с ресурсом. Причем ресурс при запуске такого EXE будет размещен в памяти аж дважды - как часть секции .text (т.е внутри кодофайла) и как содержимое отдельной секции ресурсов .rsrc

Короче говоря, в первом приближении такая вот феерическая шняга заработала.
Сообщение Добавлено: Пн июн 08, 2015 23:45
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
dynamic-wind писал(а):
но это уже не паскаль.
Книга Элджера - конца 90-х, о какой версии он говорит, понятия не имею.
Мой последний опыт программирования на Pascal (Turbo) тех же времен. Помню только, что для отрисовки графики много мучился с переводом логических адресов в физические. Пытался ли работать с адресами ф-ий - не помню.
В принципе, даже Turbo это уже не Pascal - ф-ии определяются не в контексте, а в C-стиле - на глобальном уровне.
Сообщение Добавлено: Чт фев 09, 2012 14:26
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
Это невозможно в борланде (вложенная функция доступна только для вызова по имени в контексте определения).
Википедия приводит пример для Дельфей-2009, но это уже не паскаль.
Сообщение Добавлено: Чт фев 09, 2012 14:11
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
dynamic-wind писал(а):
В борланде нельзя вернуть функцию из функции.
Джефф Элджер:
Код:
В таких языках, как Паскаль, эта проблема изящно решается получением замыкания (closure) на момент получения адреса функции.
procedure p(n: integer);
  var
  procedure fn;
begin
  do_something(n);
end;
begin
  callback(@fn);
end;
В качестве аргумента процедура саllbackfn получает адрес другой процедуры. В данном примере ей передается адрес fn. При вызове fn из callbackfn первая имеет доступ к переменным, находившимся в стеке в момент получения адреса. В нашем примере fn знает значение переменной n на момент вызова саllbackfn.
Замыкания чрезвычайно полезны для обработки обратных вызовов (callback), поскольку функция обратного вызова кое-что знает о том, почему она была вызвана.
Сообщение Добавлено: Чт фев 09, 2012 13:38
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
Alex писал(а):
Scattered colons
Спасибо.
Сообщение Добавлено: Чт фев 09, 2012 13:33
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
gudleifr писал(а):
На самом деле в PC-версии Pascal есть честные завершения, позволяющие определять функции, вызываемые не в контексте определения, а в контексте исполнения.

Честные closures? :roll: В борланде нельзя вернуть функцию из функции.
Сообщение Добавлено: Чт фев 09, 2012 11:02
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
Есть еще такая техникаScattered colons, в СПФ есть реализация.

Вот здесь есть другая (dforth) реализация

тогда мы можем вначале определить

: ДЕЙСТВИЕ-1 ОБЩЕЕ-1 ... ОБЩЕЕ-2 ;
: ДЕЙСТВИЕ-2 ОБЩЕЕ-1 ... ОБЩЕЕ-2 ;

а затем по мере необходимости доопределить

..: ДЕЙСТВИЕ-1 ЧАСТНОЕ-1 ;..
..: ДЕЙСТВИЕ-2 ЧАСТНОЕ-2 ;..

но к сожалению в СПФ так не срабатывает, слово ... должно быть первым:

: ДЕЙСТВИЕ-1 ... ОБЩЕЕ-2 ;
..: ДЕЙСТВИЕ-1 ЧАСТНОЕ-1 ;..
..: ДЕЙСТВИЕ-1 ОБЩЕЕ-1 ;..
Сообщение Добавлено: Чт фев 09, 2012 09:35
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
mOleg писал(а):
chess писал(а):
"вектора в Паскале"
указатели на процедуру или функцию
Господа, зачем такие сложности? Векторные слова в "обычных" языках, это просто переменные, имеющие два варианта компиляции, в зависимости от контекста - адрес и значение.
Сообщение Добавлено: Ср фев 08, 2012 20:09
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
chess писал(а):
Я в поисковике на запрос "вектора в Паскале" получил, что-то типа "умножение вектора на матрицу и тп". Просто там на понятии вектор внимание не акцентируют как в Форте.

указатели на процедуру или функцию
Сообщение Добавлено: Ср фев 08, 2012 20:00
  Заголовок сообщения:  Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS)  Ответить с цитатой
Хищник писал(а):
А как тогда назвать переменные Паскаля типа procedure и function? Вектора и есть.

Вам виднее. Паскаль не знаю. Я в поисковике на запрос "вектора в Паскале" получил, что-то типа "умножение вектора на матрицу и тп". Просто там на понятии вектор внимание не акцентируют как в Форте.
gudleifr писал(а):
Почему же? Тот же DOER или M: , с натягом - DOES> .

Ну, тут опять вопрос терминологии. M:, например, такое же слово(процедура) Форта.
И само определение через M: тоже слово.
gudleifr писал(а):
Это критично для программиста.

Чем критично? Тем, что нужно помнить, что когда-то надо разрешить неразрешенные имена?
Ну если программист это не сделает или сделает в неподходящее время, то Форт-система ему об этом напомнит сообщением спеллчеккера "word not found" и все.
gudleifr писал(а):
Ограничения на использование слов похожих на завершение макроса.

Это проблема аналогичная, например, такому - нельзя задать строку с символом кавычки внутри.
На самом деле проблемы нет - есть ограничение, которое надо учитывать. Ну таких ограничений много.
Главное это приоритет задачи. Задача должна быть решена в рамках имеющихся ограничений на использование
инструментария. Если нужно, то окончание макроса можно оформить по другому. Немешающих в конкретных случаях вариантов много.
Сообщение Добавлено: Ср фев 08, 2012 08:38

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


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