Skip to main content

Блог инженера

Блог о минимализме, инжинерии и программировании.



Эксперементируем с pForth

  | #programming

В прошлой публикации я установил компилятор Pelles C на рабочий компьютер без прав администратора. Мне это нужно для того, чтобы собрать одну из реализаций языка Форт - pForth. В репозитории проекта на GitHub нет релиза, т.е. исполняемых файлов. А если бы и были - мне понадобится модифицировать код. Поэтому всё равно нужно собрать проект самому. К счастью, это оказалось несложно.

Клонируем проект командой

git clone https://github.com/philburk/pforth

Или делаем это любым клиентом для GitHub с графической оболочкой. В папке проекта есть каталог build/win32/vs2017 с файлом проекта для Visual Studio 2017. Проблема в том, что Pelles C не открывает файлы проекта VS 2017. С другой стороны, это не такая уж и проблема. Код pforth довольно прост. Открываем файл проекта pforth_main.vcxproj. Это xml файл, где перечислены файлы проекта:

<ItemGroup>
    <ClCompile Include="..\..\..\csrc\pfcompil.c" />
    <ClCompile Include="..\..\..\csrc\pfcustom.c" />
    <ClCompile Include="..\..\..\csrc\pf_cglue.c" />
    <ClCompile Include="..\..\..\csrc\pf_clib.c" />
    <ClCompile Include="..\..\..\csrc\pf_core.c" />
    <ClCompile Include="..\..\..\csrc\pf_inner.c" />
    <ClCompile Include="..\..\..\csrc\pf_io.c" />
    <ClCompile Include="..\..\..\csrc\pf_io_none.c" />
    <ClCompile Include="..\..\..\csrc\pf_main.c" />
    <ClCompile Include="..\..\..\csrc\pf_mem.c" />
    <ClCompile Include="..\..\..\csrc\pf_save.c" />
    <ClCompile Include="..\..\..\csrc\pf_text.c" />
    <ClCompile Include="..\..\..\csrc\pf_words.c" />
    <ClCompile Include="..\..\..\csrc\stdio\pf_fileio_stdio.c" />
    <ClCompile Include="..\..\..\csrc\win32_console\pf_io_win32_console.c" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="..\..\..\csrc\pfcompfp.h" />
    <ClInclude Include="..\..\..\csrc\pfcompil.h" />
    <ClInclude Include="..\..\..\csrc\pfdicdat.h" />
    <ClInclude Include="..\..\..\csrc\pfdicdat_arm.h" />
    <ClInclude Include="..\..\..\csrc\pfinnrfp.h" />
    <ClInclude Include="..\..\..\csrc\pforth.h" />
    <ClInclude Include="..\..\..\csrc\pf_all.h" />
    <ClInclude Include="..\..\..\csrc\pf_cglue.h" />
    <ClInclude Include="..\..\..\csrc\pf_clib.h" />
    <ClInclude Include="..\..\..\csrc\pf_core.h" />
    <ClInclude Include="..\..\..\csrc\pf_float.h" />
    <ClInclude Include="..\..\..\csrc\pf_guts.h" />
    <ClInclude Include="..\..\..\csrc\pf_host.h" />
    <ClInclude Include="..\..\..\csrc\pf_inc1.h" />
    <ClInclude Include="..\..\..\csrc\pf_io.h" />
    <ClInclude Include="..\..\..\csrc\pf_mem.h" />
    <ClInclude Include="..\..\..\csrc\pf_save.h" />
    <ClInclude Include="..\..\..\csrc\pf_text.h" />
    <ClInclude Include="..\..\..\csrc\pf_types.h" />
    <ClInclude Include="..\..\..\csrc\pf_win32.h" />
    <ClInclude Include="..\..\..\csrc\pf_words.h" />
  </ItemGroup>

Это все файлы, которые нам нужны.

Create pforth project

Теперь просто открываем Pelles C, создаём новый консольный проект для Windows 64. Создаём этот проект внутри клонированного с GitHub проекта pforth. Можно собрать в папке build, так будет правильнее, но я посчитал это неудобным и создал проект прямо в корневой папке. Вручную добавляем к проекту все файлы, которые перечислены выше и сохраняем проект.

Add pforth files

Убедился, что подключены 64-разрядные библиотеке. pforth можно собирать для 64-разрядных операционных систем.

Check libs

Теперь можно жать Project --> Build pforth.exe и проект успешно скомпилировался.

Пока это “сырой” Форт, в котором определены только базовые слова. Читаем руководство к pForth. Там описано четыре шага.

1. Скомпилировать pForth в исполняемый файл.

Это то, что мы сделали.

2. Запустить pForth с инсрукцией -i, чтобы построить словарь Форт. Основные слова языка содержатся в файле system.fth.

Нужный файл находится в папке “fth”. Переходим в неё и исполняем команду.

..\pforth -i system.fth

3. Словарь слов форта собирается и сохраняется в файл “pforth.dic”. Если теперь запускать форт просто командой pforth - он загрузит словарь автоматически. Самое время запустить тесты.

4. Запускаем Форт из той же папки “fth”

..\pforth

Запускаем тесты:

include tester.fth
include coretest.fth

Если тесты отработали хорошо, значит у нас всё получилось.

Пища для размышлений содержится в GitHub репозитории “Graphics Lesson In Gforth”. То, что проект для gForth и Linux не должно особо пугать. Я планирую добавить прямо в pforth слова для работы с графической библиотекой SDL2. Будет что-то вроде LÖVE но на форте. Просто потому, что я так хочу. Проблема в том, что пока я не представляю себе, как добавить эти возможности в форт и не умею пользоваться библиотекой SDL. Думаю, стоит начать с определения собственных слов.

Для начала я хочу разобраться со словами для работы с датой и временем. В Форт нет совсем ничего для этих целей. Зато есть стандарные функции С.

About Mikhail Kiselev

Photo of Mikhail Kiselev

Приветствую в моём блоге! 😄 Меня зовут Михаил. Я инженер и программист. Живу в Израиле. Но мой блог связан с работой в Сибири и на Сахалине, путешествую где придётся. Я предпочитаю пост в блог посту в твиттер. Описание полезной технологии или гаджета предпочитаю описанию заката или посиделок в кафе.