Обратная польская запись

Тема в разделе "WASM.BEGINNERS", создана пользователем assch, 4 сен 2021.

  1. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    И во имя чего такой трудовой подвиг? Если программа для виндоуз, можно было vbs подтянуть через ExecuteGlobal. Либо вообще lua.
     
  2. KingT

    KingT Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    208
    Когда я пришел в контору кое какие наработки уже в этом направлении были зделаны другим программистом которого я пришел заменить. Основная программа была написана на C++ и тот вариант интерпертатора соответственно тоже.
    Он работал плохо,вываливался. Отладка его мне давалась очень тяжело. Я не программист по образованию и пришел только после универа. Я слабо понимал С++ как работает перегрузка операторов, виртуальные функции, наследование. А тот чувак был программистом и большим стороником обьектного программирования. Что хорошо сказалось на графическом интерфейсе программы но вот с интерпретатором он перестарался помоему. Каждая комманда была описана классом унаследованным от базового класса. Мне это все было дико тяжело понять и еще тяжелее отладить. Так как до этого я на C++ программировал мало. А интерпретатор это падал совершенно непредсказуемо.
    Поэтому я все обдумав решил написать все самому с нуля. Я отказался от обьектного подхода и решил писать на С++ как на С. Про другие интерпретаторы я краем уха слышал но поскольку не программист то не интересовался да и в то время я был молод,полон сил и самоуверенности. Плюс склонность изобретать велосипеды была тогда и даже сейчас осталась но к счастью в меньшей степени.
    С польской нотацией я еще сталкнулся в школе когда совершенно случайно мне попался советский калькулятор MK64. Сей девайс прикольный тем что как раз команды и операторы в него вводятся согласно порядку польской нотации.
    Алгоритм сортировочной станции нашелся достаточно легко.
    После некоторых экспериментов я начал писать все заново.
    Сначала текст программы преобразуется в токены через анализ контекста. Затем алгоритмом сортировочной станции переводится в польскую нотацию.Потом выполняется как форт.
    Выполнять формулы оказалось достаточно легко. Сложнее было с циклами у которых глубина вложенности произвольная. Генерация правильных меток перехода.Но и это все решилось.
    Потом потребовалось сделать функции которые сам пользователь может описать.Пришлось немного менять концепцию но и это тоже вышло.
    Самый гемор это конечно утечки памяти. Как только вышла первая версия люди начали наворачивать скрипты таких размеров что я поначалу охуевал представляя как мне это все прийдется отлаживать.
    Так и вышло. Написал я этот движок за три месяца. А потом еще год отлавливал всякие ошибки 90 процентов которых связаны с переполнением памяти.
    Моя ошибка в том что я от C++ не взял умные указатели эти delete раскиданные по всему проекту являются спонсорами многих сидений на работе до 12 ночи.И по выходным.
    Потом я сделал примитивный отладчик научился вычислять номер строки в тексте где ошибка.Стало намного легче.
    Где то через год все было закончено.
    Параллелльно я написал гдето 200 функций для обработки сигналов. ПОдключил IPP, MKL, NI VISA для работы с измерительным оборудыванием.
    Прошло 10 лет проект живой и поддерживается мной.
    Я его использую сам как простой калькулятор для других задач.
    Иногда надо вот подобрать резисторы для делителя напряжения или что то подобное посчитать незатейливое.
    Хотя еслиб сейчаc мне поставили эту задачу то я бы не стал конечно все это писать самому. По причине что нет уже такого энтузиазма и интереса к программированию. Я бы взял готовый язык и прикрутил бы свои функции.
    Мне иногда кидают предьяву что медленно работает.Я тогда переписываю часть кода на C++ и даю команду скриптовую.
    А еще я бы сделал так. Написал бы преобразователь в язык C. Скомпилировал бы и запустил тайком от пользователя. Выполнил бы и считав результат выдал бы пользователю. Тут и скорость выполнения и проще архитектура.
    Хотя зачем что то преобразовывать? Можно так и дать пользователю С язык.
    Для автоматизации измерений и цифровой обработки подойдет.
    Почему мне тогда эта мысль не пришла в голову не знаю...
     
  3. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Надо было убедить начальство в том, что понадобится разрабатывать еще и свою собственную ОС, тогда бы лет 10 получал за это з/п.
     
  4. KingT

    KingT Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    208
    >>Надо было убедить начальство в том

    Наxальство не совсем тупое :)
     
  5. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    KingT,

    > Сначала текст программы преобразуется в токены через анализ контекста. Затем алгоритмом сортировочной станции переводится в польскую нотацию

    wtf ??

    Польский язык дерьмовый имхо.
     
    M0rg0t нравится это.
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    eegr7v.jpg.jpg
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Зато их женская сборная по волейболу довольно неплохо играет.
     
  8. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Это вы еще перевод польского гимна не видели.
     
  9. KPG

    KPG Member

    Публикаций:
    0
    Регистрация:
    13 янв 2021
    Сообщения:
    121
    Вариант трансляции формул на Форт языке http://galileo.phys.virginia.edu/~jvn/ftran202.htm

    P.S. Ассемблер для микроконтроллеров AVR. Написан на форте, использует spf4, разработан для linux. Позволяет писать на языке ассемблера, но с высокоуровневыми if else then, begin while until и пр.,
    --- Сообщение объединено, 28 окт 2021 ---
    Вот, например, что ответил автор статьи Универсальный DSL. Возможно ли это?
    на вопрос о применимости Forth в его задачах.

    У меня не было цели использовать Форт в своих решениях как таковой. Последние годы я занимался разработкой высокоуровневых приложений, где возникала потребность в скриптовом языке для описания логики. Использовал в разное время python, lua, js, lisp, forth. Для двух последних писал свои интерпретаторы с нужными мне характеристиками. Форт действительно тут мне очень помог, во первых компактная и быстрая vm, а во вторых свобода в синтаксисе. Это позволило мне на базе Форта строить DSL и отдавать его заказчику, разумеется с инструментами тестирования и отладки. В итоге я и моя команда смогли реализовать довольно сложные решения в короткий срок, где основная сложность вынесена в скрипт.
    ANSI Форт в моей области не показался полезным, пробовал реализовывать вебсервисы, но преимуществ особо не заметил. Быстродействие съедалось IO к базе или файловой системе, а скорость разработки была ниже чем на C#, возможно дело в опыте).
    Для примера можно привести решение по обработке документов. В модуль прилетает документ с данными, над этими данными в зависимости от значений нужно провести операции, что-то удалить при определенных условиях, заменить, добавить, сходить в сервис(КЛАДР) и т.д… Логика становится громоздкой, особенно раздражает избыточный для задачи синтаксис, если описывать ее на том же js. Тут Форт выступает во всей красе, скрипт выглядит как описание логики на человеческом языке. И что еще важно, высокая скорость работы скрипта, поскольку все данные уже подгружены и доступны для интерпретатора.
    Чтобы создавать конкурентные и продвинутые решения, нужно выходить за рамки стереотипного мышления. Форт в этом случае оказывается полезным и мощным инструментом, потому что позволяет делать с ним почти все, минимум ограничений.
    --- Сообщение объединено, 28 окт 2021 ---
    Pейтинг языков программирования с rosettacode.org по количеству решённых на них задач:
    Rosetta Code: Popular Programming Languages
    [​IMG]

    Что интересно, Factor язык (конкатенативный) на 23-ем месте. :)

    --- Сообщение объединено, 28 окт 2021 ---
    Forth, при этом, на 48-м месте этого рейтинга.
    --- Сообщение объединено, 28 окт 2021 ---
    OForth на 79-м.

    Ассемблеры тоже присутствуют в этом рейтиге.
    --- Сообщение объединено, 28 окт 2021 ---
    В этом списке есть и Befunge на 169 месте! :)
    --- Сообщение объединено, 28 окт 2021 ---
    ! ошибся на 113- месте.

    Из Форт языков Retro на 159-м месте
    --- Сообщение объединено, 28 окт 2021 ---
    8th - на 179 месте.
    --- Сообщение объединено, 28 окт 2021 ---
    Concatenative language wiki!
    --- Сообщение объединено, 28 окт 2021 ---
    PostScript - 176-e место.
    --- Сообщение объединено, 28 окт 2021 ---
    158 Open Source Forth Software Projects

    --- Сообщение объединено, 28 окт 2021 ---
    Кстати, в Форт есть слово "масштабирования" операции
    */ ( a b с -- результат ) A умножается на B и результат/промежуточный в двойной точности, а затем делится на C и результат уже обычной точности.
     
    Последнее редактирование: 28 окт 2021
  10. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Ты тут так наспамил, как будто бы этот рейтинг ну вообще хоть что-то значит. Там Nim на пятом месте - отличный язык, хоть и никому толком никуда не впился. Wren - на шестом, автор языка целую книгу написал о том, как на коленке клипать Lua-подобные миниатюрные интерпретаторы (хорошая книга кстати, я прочел), но сам Wren непопулярен чуть более, чем полностью. Про Raku и Phix вообще первый раз слышу. Что вообще может этот рейтинг показывать?
     
  11. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Rel, raku = perl6, попытка сделать шестой перл, но в итоге там что-то не так пошло, и сделали новый яп; а новая версия перл должна быть 7. А рейтинг бредовый, да. Какие задачи они решали? Вот взять даже ActiveDirectory - не верю, что кто-то на какой-то джулии кодил что-то , обычно павершелл юзают.
    --- Сообщение объединено, 28 окт 2021 ---
    Богиня реверса (hasherezade) с тобой не согласится.
     
  12. KPG

    KPG Member

    Публикаций:
    0
    Регистрация:
    13 янв 2021
    Сообщения:
    121
    Rel
    А, что вообще "рейтинги" показывают? :)

    Oтчасти, показывает и какую то заинтересованность сообщества или отдельных членов его, использующего тот или иной язык, в "проверке реализуемости" отобранного списка задач наиболее вероятно встречающихся в повседневной практике программирования.
    (и как то обозначающих проблематику их реализации на том или ином языке для использующих его)
    Кто то, если сталкивается с незнакомым языком может больше понять какие то моменты по применению того или иного языка в сравнительном рассмотрении сделанных решений и что то осмыслить/переосмыслить для себя.

    Предположу, что есть какая то граница по сложности и простоте применения того или иного языкового инстументария и где и как она проходит в понимании разработчика может как то иллюстрировать и эта таблица в представленных языков в ней.

    P.S. Ну, да Форт немного оффтопик, т.к. в нём нет классической идеи Обратной польской записи.
    (т.к. нет в общем виде разделения на данные и функции работы с этими данными - СЛОВА в Форт могут быть чем угодно, хоть объектами в своём синтаксисе и семантике использования)
     
  13. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Могут быть и пше, и курвой?
     
  14. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Я был неправ относительно дельфи: на фоне гцц в составе mingw (dev c++) он ничем не выделяется :good3:
    изображение_2021-12-12_000816.png
     
  15. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    462
    volatile?
     
  16. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Абсолютно заурядный цэшный код, без технологий:
    Код (C++):
    1. long unsigned int _____crc_calc(unsigned char* pData,long unsigned int nSize,long unsigned int nIV){
    2.     long unsigned int nVal1 = nIV;
    3.     long unsigned int nVal2;
    4.     for (long unsigned int i=0;i<nSize;i++){
    5.         nVal2 = binCrcTable[pData[i]^(nVal1>>24)];
    6.         nVal1 <<= 8;
    7.         nVal1 ^= nVal2;
    8.     }
    9.     return ~nVal1;
    10. }
    Лень перезагружаться в другую винду, но параметры компилера тоже вроде бы заурядные:
    Код (Text):
    1. CPP      = g++.exe
    2. CXXINCS  = -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++"
    3. CXXFLAGS = $(CXXINCS) -m32
    4. main.o: main.cpp
    5.     $(CPP) -c main.cpp -o main.o $(CXXFLAGS)
     
  17. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Да в 2021 году самое то GCC версии 4.9.2 под mingw использовать...
     
  18. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Типа если актуальный гцц скачать он неожиданно не гавно окажется? Типа его все прогрессивное человечество разрабатывает и за пять лет он преобразился до неузнаваемости? Лады.
    g++.exe (MinGW.org GCC-6.3.0-1) 6.3.0 Last Update: 2021-09-05, новей не нашел.
    Код (Text):
    1. set PATH=C:\MinGW\bin
    2. C:\MinGW\bin\g++.exe -c main.cpp -o main.o -I"C:/MinGW/include" -I"C:/MinGW/mingw32/include" -m32
    upload_2021-12-12_11-0-54.png
     
  19. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Очень смешно, спецов еще гуглить нужно учить? https://winlibs.com/ (GCC 11.2) и оптимизацию может включишь еще?
     
  20. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Еще бы уметь. Но задумка классная по умолчанию генерировать что попало и добавить опцию компилить по-человечески. Нашел по приведенной тобою ссылке место где лежат билды под венду (http://win-builds.org/doku.php/download_and_installation_from_windows), там вот так:
    Код (Text):
    1. C:\Program Files (x86)\winbuilds\bin>g++ --version
    2. g++ (GCC) 4.8.3
    3. Copyright (C) 2013 Free Software Foundation, Inc.
    4. This is free software; see the source for copying conditions.  There is NO
    5. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    Еще ссылка https://www.mingw-w64.org/downloads/#mingw-builds
    Самое новое, что предложил инсталлятор:
    Код (Text):
    1. C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin>g++ --version
    2. g++ (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 8.1.0
    3. Copyright (C) 2018 Free Software Foundation, Inc.
    4. This is free software; see the source for copying conditions.  There is NO
    5. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    Без -O3 результат абсолютно тот же, с оптимизацией всё на первый взгляд даже прилично.
    Но теперь есть претензии к самой оптимизации :acute:
    ЗЫ: вообще эта древняя иде с неприлично старой версией гцц мне понравилась, и хорошо что я с этим компилером ничего серьезного делать не собираюсь.