Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS) |
|
|
gudleifr писал(а): Понятно, пришлось отказаться от статической подгрузки ресурсов и библиотек, поэтому некоторые варианты примеров опущены. Долго пытался вспомнить, что подразумевал, но, скорее всего, ресурсы тут ни при чем. Пропал пример про присобачивание dll посредством lib - 17.1. Нет, соврал, пропал еще 8.1 - про включение меню в класс окна.
[quote="gudleifr"]Понятно, пришлось отказаться от статической подгрузки ресурсов и библиотек, поэтому некоторые варианты примеров опущены.[/quote]Долго пытался вспомнить, что подразумевал, но, скорее всего, ресурсы тут ни при чем. Пропал пример про присобачивание dll посредством lib - 17.1. Нет, соврал, пропал еще 8.1 - про включение меню в класс окна.
|
|
|
|
Добавлено: Вт июн 09, 2015 01:28 |
|
|
|
|
|
Заголовок сообщения: |
Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS) |
|
|
Тогда пропадет возможность подгружать ресурсы и работать с ними в интерактивном режиме без создания нового EXE, например, если текст программы просто запущен на интерпретацию. Я хотел обеспечить и ту возможность и ту одновременно. Чтобы имея полную возможность повторять Рихтера Форт оставался Фортом. Хотя не факт, что все получится. Тут есть одна грабля. Но я кажется знаю как ее обойти. RESOURCE, потребуется еще один входной параметр TRUE/FALSE в зависимости от того ресурсы будут нужны сейчас или уже в новом EXE. Короче, идет обкатка идеи.
Тогда пропадет возможность подгружать ресурсы и работать с ними в интерактивном режиме без создания нового EXE, например, если текст программы просто запущен на интерпретацию. Я хотел обеспечить и ту возможность и ту одновременно. Чтобы имея полную возможность повторять Рихтера Форт оставался Фортом. Хотя не факт, что все получится. Тут есть одна грабля. Но я кажется знаю как ее обойти. RESOURCE, потребуется еще один входной параметр TRUE/FALSE в зависимости от того ресурсы будут нужны сейчас или уже в новом EXE. Короче, идет обкатка идеи.
|
|
|
|
Добавлено: Вт июн 09, 2015 00:57 |
|
|
|
|
|
Заголовок сообщения: |
Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS) |
|
|
Ethereal писал(а): Идея также и в том, чтобы писать программы на Форте в точности также, как пишутся программы с ресурсами статически компонуемыми при сборке EXE. Как раз это меня и не устраивало. А "в точности" можно было бы создать ресурс в Win-редакторе и честно дописать в конец exe.
[quote="Ethereal"]Идея также и в том, чтобы писать программы на Форте в точности также, как пишутся программы с ресурсами статически компонуемыми при сборке EXE.[/quote]Как раз это меня и не устраивало. А "в точности" можно было бы создать ресурс в Win-редакторе и честно дописать в конец exe.
|
|
|
|
Добавлено: Вт июн 09, 2015 00:16 |
|
|
|
|
|
Заголовок сообщения: |
Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS) |
|
|
Идея также и в том, чтобы писать программы на Форте в точности также, как пишутся программы с ресурсами статически компонуемыми при сборке EXE. Ну хотя бы чтоб примеры из Рихтера повторить один в один Кроме завершающей строчки с " Foo.res" RESOURCE, SAVE-SYSTEM
Идея также и в том, чтобы писать программы на Форте в точности также, как пишутся программы с ресурсами статически компонуемыми при сборке EXE.
Ну хотя бы чтоб примеры из Рихтера повторить один в один :) Кроме завершающей строчки с " Foo.res" RESOURCE, SAVE-SYSTEM
|
|
|
|
Добавлено: Вт июн 09, 2015 00:01 |
|
|
|
|
|
Заголовок сообщения: |
Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS) |
|
|
Ethereal писал(а): Форт сам прикомпоновывает к себе ресурсы Все гораздо проще: WIN-API имеет стандартные ф-ии для работы с ресурсами из памяти (с суффиксом Indirect). И если уж делать под каждый набор ресурсов новый exe, то почему не сделать это стандартно, средствами Винды?
[quote="Ethereal"]Форт сам прикомпоновывает к себе ресурсы[/quote]Все гораздо проще: 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 Короче говоря, в первом приближении такая вот феерическая шняга заработала.
[quote="gudleifr"]Понятно, пришлось отказаться от статической подгрузки ресурсов и библиотек, поэтому некоторые варианты примеров опущены.[/quote]Вот вот. Я неделю обдумывал и дня четыре бился, чтобы реализовать более-менее красивое решение по статической компоновке в любой момент ресурсов к саморасширяемому фортовскому 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-стиле - на глобальном уровне.
[quote="dynamic-wind"]но это уже не паскаль.[/quote]Книга Элджера - конца 90-х, о какой версии он говорит, понятия не имею. Мой последний опыт программирования на Pascal (Turbo) тех же времен. Помню только, что для отрисовки графики много мучился с переводом логических адресов в физические. Пытался ли работать с адресами ф-ий - не помню. В принципе, даже Turbo это уже не Pascal - ф-ии определяются не в контексте, а в C-стиле - на глобальном уровне.
|
|
|
|
Добавлено: Чт фев 09, 2012 14:26 |
|
|
|
|
|
Заголовок сообщения: |
Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS) |
|
|
Это невозможно в борланде (вложенная функция доступна только для вызова по имени в контексте определения). Википедия приводит пример для Дельфей-2009, но это уже не паскаль.
Это невозможно в борланде (вложенная функция доступна только для вызова по имени в контексте определения). Википедия приводит пример для Дельфей-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), поскольку функция обратного вызова кое-что знает о том, почему она была вызвана.
[quote="dynamic-wind"]В борланде нельзя вернуть функцию из функции.[/quote]Джефф Элджер:[code]В таких языках, как Паскаль, эта проблема изящно решается получением замыкания (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), поскольку функция обратного вызова кое-что знает о том, почему она была вызвана.[/code]
|
|
|
|
Добавлено: Чт фев 09, 2012 13:38 |
|
|
|
|
|
Заголовок сообщения: |
Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS) |
|
|
Alex писал(а): Scattered colons Спасибо.
[quote="Alex"]Scattered colons[/quote]Спасибо.
|
|
|
|
Добавлено: Чт фев 09, 2012 13:33 |
|
|
|
|
|
Заголовок сообщения: |
Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS) |
|
|
gudleifr писал(а): На самом деле в PC-версии Pascal есть честные завершения, позволяющие определять функции, вызываемые не в контексте определения, а в контексте исполнения. Честные closures? В борланде нельзя вернуть функцию из функции.
[quote="gudleifr"]На самом деле в PC-версии Pascal есть честные завершения, позволяющие определять функции, вызываемые не в контексте определения, а в контексте исполнения.[/quote] Честные 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 ;..
Есть еще такая техника[url=http://www.forth.org.ru/~mlg/ScatColn/ScatteredColonDef.html]Scattered colons[/url], в СПФ есть [url=http://spf.sourceforge.net/docs/intro.ru.html#scatcoln]реализация[/url].
Вот здесь есть [url=http://code.google.com/p/dforth/wiki/tut_scattered]другая (dforth) реализация[/url]
тогда мы можем вначале определить
: ДЕЙСТВИЕ-1 ОБЩЕЕ-1 ... ОБЩЕЕ-2 ; : ДЕЙСТВИЕ-2 ОБЩЕЕ-1 ... ОБЩЕЕ-2 ;
а затем по мере необходимости доопределить
..: ДЕЙСТВИЕ-1 ЧАСТНОЕ-1 ;.. ..: ДЕЙСТВИЕ-2 ЧАСТНОЕ-2 ;..
[b]но к сожалению в СПФ так не срабатывает[/b], слово ... должно быть первым:
: ДЕЙСТВИЕ-1 ... ОБЩЕЕ-2 ; ..: ДЕЙСТВИЕ-1 ЧАСТНОЕ-1 ;.. ..: ДЕЙСТВИЕ-1 ОБЩЕЕ-1 ;..
|
|
|
|
Добавлено: Чт фев 09, 2012 09:35 |
|
|
|
|
|
Заголовок сообщения: |
Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS) |
|
|
mOleg писал(а): chess писал(а): "вектора в Паскале" указатели на процедуру или функцию Господа, зачем такие сложности? Векторные слова в "обычных" языках, это просто переменные, имеющие два варианта компиляции, в зависимости от контекста - адрес и значение.
[quote="mOleg"][quote="chess"]"вектора в Паскале"[/quote]указатели на процедуру или функцию[/quote]Господа, зачем такие сложности? Векторные слова в "обычных" языках, это просто переменные, имеющие два варианта компиляции, в зависимости от контекста - адрес и значение.
|
|
|
|
Добавлено: Ср фев 08, 2012 20:09 |
|
|
|
|
|
Заголовок сообщения: |
Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS) |
|
|
chess писал(а): Я в поисковике на запрос "вектора в Паскале" получил, что-то типа "умножение вектора на матрицу и тп". Просто там на понятии вектор внимание не акцентируют как в Форте. указатели на процедуру или функцию
[quote="chess"]Я в поисковике на запрос "вектора в Паскале" получил, что-то типа "умножение вектора на матрицу и тп". Просто там на понятии вектор внимание не акцентируют как в Форте.[/quote] указатели на процедуру или функцию
|
|
|
|
Добавлено: Ср фев 08, 2012 20:00 |
|
|
|
|
|
Заголовок сообщения: |
Re: WIN-FORTH ДЛЯ МИНИМАЛИСТОВ (ПРОЕКТ FOBOS) |
|
|
Хищник писал(а): А как тогда назвать переменные Паскаля типа procedure и function? Вектора и есть.
Вам виднее. Паскаль не знаю. Я в поисковике на запрос "вектора в Паскале" получил, что-то типа "умножение вектора на матрицу и тп". Просто там на понятии вектор внимание не акцентируют как в Форте. gudleifr писал(а): Почему же? Тот же DOER или M: , с натягом - DOES> . Ну, тут опять вопрос терминологии. M:, например, такое же слово(процедура) Форта. И само определение через M: тоже слово. gudleifr писал(а): Это критично для программиста. Чем критично? Тем, что нужно помнить, что когда-то надо разрешить неразрешенные имена? Ну если программист это не сделает или сделает в неподходящее время, то Форт-система ему об этом напомнит сообщением спеллчеккера "word not found" и все. gudleifr писал(а): Ограничения на использование слов похожих на завершение макроса. Это проблема аналогичная, например, такому - нельзя задать строку с символом кавычки внутри. На самом деле проблемы нет - есть ограничение, которое надо учитывать. Ну таких ограничений много. Главное это приоритет задачи. Задача должна быть решена в рамках имеющихся ограничений на использование инструментария. Если нужно, то окончание макроса можно оформить по другому. Немешающих в конкретных случаях вариантов много.
[quote="Хищник"]А как тогда назвать переменные Паскаля типа procedure и function? Вектора и есть. [/quote] Вам виднее. Паскаль не знаю. Я в поисковике на запрос "вектора в Паскале" получил, что-то типа "умножение вектора на матрицу и тп". Просто там на понятии вектор внимание не акцентируют как в Форте. [quote="gudleifr"]Почему же? Тот же DOER или M: , с натягом - DOES> .[/quote] Ну, тут опять вопрос терминологии. M:, например, такое же слово(процедура) Форта. И само определение через M: тоже слово. [quote="gudleifr"]Это критично для программиста.[/quote] Чем критично? Тем, что нужно помнить, что когда-то надо разрешить неразрешенные имена? Ну если программист это не сделает или сделает в неподходящее время, то Форт-система ему об этом напомнит сообщением спеллчеккера "word not found" и все. [quote="gudleifr"]Ограничения на использование слов похожих на завершение макроса.[/quote] Это проблема аналогичная, например, такому - нельзя задать строку с символом кавычки внутри. На самом деле проблемы нет - есть ограничение, которое надо учитывать. Ну таких ограничений много. Главное это приоритет задачи. Задача должна быть решена в рамках имеющихся ограничений на использование инструментария. Если нужно, то окончание макроса можно оформить по другому. Немешающих в конкретных случаях вариантов много.
|
|
|
|
Добавлено: Ср фев 08, 2012 08:38 |
|
|
|
|