Results 1 to 10 of 22

Thread: Forth :)

Threaded View

  1. #11
    подниматель пингвинов crazy-mike's Avatar
    Join Date
    Nov 2006
    Location
    L'viv
    Posts
    177,975

    Default Re: Forth :)

    Ну прикольный язык - на работе пришлось для него начать писать интерпретатор - потому что ничего готового под Cortex M3 не хотело работать. Компилировалось и линковалось нормально - но потом тупо не могло даже свой собственный словарь загрузить.

    На github этих "фортов" как бы много - но все чуточку разные.

    У меня сначала был критерий выбора - чтобы всё было на С и никакого ассемблера. ( потому что мне собирать при помощи кросс-компилятора всю эту дурь как бы надо было ).

    Выбор оказался не таким уж и большим ( из бесплатно-халявно простого для расширения ). Есть очень хороший на http://forth.com/ - со своим IDE и т.д. Но оно всё же платное.

    Ну попробовал два разных собрать из исходников -

    http://www.softsynth.com/pforth/
    https://github.com/philburk/pforth

    - очень хороший. Но - он создаёт свой собственный словарь методом самораскрутки. Соответственно не совсем подходит для standalone embedded application.

    Нечто Standalone Embedded не должно практически использовать "функции операционной системы" - только что-то из libnano. А ещё у этого pforth структура словаря является machine dependent. Словарь для 32bit mcu не работаёт со словарём для 64bit mcu.

    Поэтому пришлось глянуть на https://github.com/zevv/zForth

    Понравилось - внешне очень короткий и базовый словарь системы подгружается из обычного текстового файла. Полностью на С и используются функции только stdio и stdlib.
    Не понравилось - кое-какие команды не совпадают со "стандартами forth". ( quit вместо bye , var вместо variable и куча другой шизы ).

    Для Standalone Embedded конечно же нужно переписать printf , puts , gets - написать свои и подменить имена для ld. ( это если кросс-компилятор gcc использовать ).

    Ну провёл все эти манипуляции - собрал всё это при помощи Cube MX. Всё скомпилировалось и даже запустилось - но оказалось , что зараз не может загрузить словарь. Ну а без словаря она ни одного слова языка Forth вообще распознать не может. ( не на embedded , а под qemu тем не менее работала нормально )

    Ну - начал искать причину глюка. Оказалось - libnano не обеспечивает работу функций atof, strtod и ещё чего-то для преобразования чисел из строк. Хотя строковые функции в libnano как раз работают правильно. В этом идиотском zForth идентификатор от числа пытались отличить по результату выполнения функции sscanf(buf,"%f", &d) для float d. Если всё нормально - то buf считалось числом. Иначе - идентификатором. Но в этой libnano уже на Cortex M3 sscanf всегда возвращало "всё нормально". И поэтому идентификаторы так вообще нельзя было распознать. Соответственно словарь ( а словарь как раз из идентификаторов и состоит ) нельзя было загрузить.

    Короче - надоели они со своими глюками - а для поиска ошибки всё равно пришлось начать кусочек чего-то похожего на интерпретатор этого Forth-а писать. Ну хотя бы - чтобы уточнить причины ошибочной работы того интерпретатора. ( размер используемой памяти ? переполнение стека ? - ну мало ли что. ).

    В итоге за два рабочих дня у меня получился свой собственный интерпретатор подмножества Forth - который работает как standalone embedded application.
    Last edited by crazy-mike; 11-14-2018 at 03:28 PM.
    Жизнь дается человеку один раз и прожить ее надо так, чтобы не ошибиться в рецептах.
    Строить Асгардию побуждает тьма, посетившая людские души

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Russian America Top. Рейтинг ресурсов Русской Америки. Terms of Service | Privacy Policy Рейтинг@Mail.ru