И во имя чего такой трудовой подвиг? Если программа для виндоуз, можно было vbs подтянуть через ExecuteGlobal. Либо вообще lua.
Когда я пришел в контору кое какие наработки уже в этом направлении были зделаны другим программистом которого я пришел заменить. Основная программа была написана на C++ и тот вариант интерпертатора соответственно тоже. Он работал плохо,вываливался. Отладка его мне давалась очень тяжело. Я не программист по образованию и пришел только после универа. Я слабо понимал С++ как работает перегрузка операторов, виртуальные функции, наследование. А тот чувак был программистом и большим стороником обьектного программирования. Что хорошо сказалось на графическом интерфейсе программы но вот с интерпретатором он перестарался помоему. Каждая комманда была описана классом унаследованным от базового класса. Мне это все было дико тяжело понять и еще тяжелее отладить. Так как до этого я на C++ программировал мало. А интерпретатор это падал совершенно непредсказуемо. Поэтому я все обдумав решил написать все самому с нуля. Я отказался от обьектного подхода и решил писать на С++ как на С. Про другие интерпретаторы я краем уха слышал но поскольку не программист то не интересовался да и в то время я был молод,полон сил и самоуверенности. Плюс склонность изобретать велосипеды была тогда и даже сейчас осталась но к счастью в меньшей степени. С польской нотацией я еще сталкнулся в школе когда совершенно случайно мне попался советский калькулятор MK64. Сей девайс прикольный тем что как раз команды и операторы в него вводятся согласно порядку польской нотации. Алгоритм сортировочной станции нашелся достаточно легко. После некоторых экспериментов я начал писать все заново. Сначала текст программы преобразуется в токены через анализ контекста. Затем алгоритмом сортировочной станции переводится в польскую нотацию.Потом выполняется как форт. Выполнять формулы оказалось достаточно легко. Сложнее было с циклами у которых глубина вложенности произвольная. Генерация правильных меток перехода.Но и это все решилось. Потом потребовалось сделать функции которые сам пользователь может описать.Пришлось немного менять концепцию но и это тоже вышло. Самый гемор это конечно утечки памяти. Как только вышла первая версия люди начали наворачивать скрипты таких размеров что я поначалу охуевал представляя как мне это все прийдется отлаживать. Так и вышло. Написал я этот движок за три месяца. А потом еще год отлавливал всякие ошибки 90 процентов которых связаны с переполнением памяти. Моя ошибка в том что я от C++ не взял умные указатели эти delete раскиданные по всему проекту являются спонсорами многих сидений на работе до 12 ночи.И по выходным. Потом я сделал примитивный отладчик научился вычислять номер строки в тексте где ошибка.Стало намного легче. Где то через год все было закончено. Параллелльно я написал гдето 200 функций для обработки сигналов. ПОдключил IPP, MKL, NI VISA для работы с измерительным оборудыванием. Прошло 10 лет проект живой и поддерживается мной. Я его использую сам как простой калькулятор для других задач. Иногда надо вот подобрать резисторы для делителя напряжения или что то подобное посчитать незатейливое. Хотя еслиб сейчаc мне поставили эту задачу то я бы не стал конечно все это писать самому. По причине что нет уже такого энтузиазма и интереса к программированию. Я бы взял готовый язык и прикрутил бы свои функции. Мне иногда кидают предьяву что медленно работает.Я тогда переписываю часть кода на C++ и даю команду скриптовую. А еще я бы сделал так. Написал бы преобразователь в язык C. Скомпилировал бы и запустил тайком от пользователя. Выполнил бы и считав результат выдал бы пользователю. Тут и скорость выполнения и проще архитектура. Хотя зачем что то преобразовывать? Можно так и дать пользователю С язык. Для автоматизации измерений и цифровой обработки подойдет. Почему мне тогда эта мысль не пришла в голову не знаю...
Надо было убедить начальство в том, что понадобится разрабатывать еще и свою собственную ОС, тогда бы лет 10 получал за это з/п.
KingT, > Сначала текст программы преобразуется в токены через анализ контекста. Затем алгоритмом сортировочной станции переводится в польскую нотацию wtf ?? Польский язык дерьмовый имхо.
Вариант трансляции формул на Форт языке 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 Что интересно, 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 и результат уже обычной точности.
Ты тут так наспамил, как будто бы этот рейтинг ну вообще хоть что-то значит. Там Nim на пятом месте - отличный язык, хоть и никому толком никуда не впился. Wren - на шестом, автор языка целую книгу написал о том, как на коленке клипать Lua-подобные миниатюрные интерпретаторы (хорошая книга кстати, я прочел), но сам Wren непопулярен чуть более, чем полностью. Про Raku и Phix вообще первый раз слышу. Что вообще может этот рейтинг показывать?
Rel, raku = perl6, попытка сделать шестой перл, но в итоге там что-то не так пошло, и сделали новый яп; а новая версия перл должна быть 7. А рейтинг бредовый, да. Какие задачи они решали? Вот взять даже ActiveDirectory - не верю, что кто-то на какой-то джулии кодил что-то , обычно павершелл юзают. --- Сообщение объединено, 28 окт 2021 --- Богиня реверса (hasherezade) с тобой не согласится.
Rel А, что вообще "рейтинги" показывают? Спойлер Oтчасти, показывает и какую то заинтересованность сообщества или отдельных членов его, использующего тот или иной язык, в "проверке реализуемости" отобранного списка задач наиболее вероятно встречающихся в повседневной практике программирования. (и как то обозначающих проблематику их реализации на том или ином языке для использующих его) Кто то, если сталкивается с незнакомым языком может больше понять какие то моменты по применению того или иного языка в сравнительном рассмотрении сделанных решений и что то осмыслить/переосмыслить для себя. Спойлер Предположу, что есть какая то граница по сложности и простоте применения того или иного языкового инстументария и где и как она проходит в понимании разработчика может как то иллюстрировать и эта таблица в представленных языков в ней. P.S. Ну, да Форт немного оффтопик, т.к. в нём нет классической идеи Обратной польской записи. (т.к. нет в общем виде разделения на данные и функции работы с этими данными - СЛОВА в Форт могут быть чем угодно, хоть объектами в своём синтаксисе и семантике использования)
Абсолютно заурядный цэшный код, без технологий: Код (C++): long unsigned int _____crc_calc(unsigned char* pData,long unsigned int nSize,long unsigned int nIV){ long unsigned int nVal1 = nIV; long unsigned int nVal2; for (long unsigned int i=0;i<nSize;i++){ nVal2 = binCrcTable[pData[i]^(nVal1>>24)]; nVal1 <<= 8; nVal1 ^= nVal2; } return ~nVal1; } Лень перезагружаться в другую винду, но параметры компилера тоже вроде бы заурядные: Код (Text): CPP = g++.exe 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++" CXXFLAGS = $(CXXINCS) -m32 main.o: main.cpp $(CPP) -c main.cpp -o main.o $(CXXFLAGS)
Типа если актуальный гцц скачать он неожиданно не гавно окажется? Типа его все прогрессивное человечество разрабатывает и за пять лет он преобразился до неузнаваемости? Лады. g++.exe (MinGW.org GCC-6.3.0-1) 6.3.0 Last Update: 2021-09-05, новей не нашел. Код (Text): set PATH=C:\MinGW\bin C:\MinGW\bin\g++.exe -c main.cpp -o main.o -I"C:/MinGW/include" -I"C:/MinGW/mingw32/include" -m32
Очень смешно, спецов еще гуглить нужно учить? https://winlibs.com/ (GCC 11.2) и оптимизацию может включишь еще?
Еще бы уметь. Но задумка классная по умолчанию генерировать что попало и добавить опцию компилить по-человечески. Нашел по приведенной тобою ссылке место где лежат билды под венду (http://win-builds.org/doku.php/download_and_installation_from_windows), там вот так: Код (Text): C:\Program Files (x86)\winbuilds\bin>g++ --version g++ (GCC) 4.8.3 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Еще ссылка https://www.mingw-w64.org/downloads/#mingw-builds Самое новое, что предложил инсталлятор: Код (Text): C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin>g++ --version g++ (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 8.1.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Без -O3 результат абсолютно тот же, с оптимизацией всё на первый взгляд даже прилично. Но теперь есть претензии к самой оптимизации ЗЫ: вообще эта древняя иде с неприлично старой версией гцц мне понравилась, и хорошо что я с этим компилером ничего серьезного делать не собираюсь.