272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
1

С++ плагины для Ноды

07.10.2019, 09:44. Показов 1363. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, подскажите кто пользуется???

Решил для начала "прогуглить" тему. Хочу понять ВОЗМОЖНОСТИ такого подхода.

1) успешно скомпилил пример под Win. Пришлось переустановить .net на более свежую (кажется больше гигабайта). И кажется что-то из Microsoft Visual C++. (долго намучался) Можно использовать другие компиляторы? mingw32? gcc?

2) можно ли таскать уже скомпилированный код вместе с программой без исходников (между win)? Какие файлы обязательны?

3) можно ли использовать обычные dll написанные на других языках? mingw32, делфи?

Не по теме:

заинтересовался из-за:
1) в примерах (статья) нашел сравнение обычного цикла на js и с++

Javascript
1
2
3
4
5
6
7
const addNumbersNode = (num, count) => {
    let result = 0;
    for (let i = 0; i < count; i++) {
        result = result + num;
    }
    return result;
};

Bash
1
2
3
4
5
6
7
3140000.000013152
C++: 1.640ms
 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 
313999999.2044479
JS: 264.632ms
ускорение на "чистой" математике - в 150 раз... теоретически быстрее будет и работа с памятью, потоками, простыми сокетами, нейро-сети, работа с графами, крипто-алгоритмы, графика, использование видеокарт для расчетов, кеширование данных для ускорения поиска в памяти...

2) это хоть какая-то защита от кражи исходников - хоть часть из них можно будет прятать в скомпилированный модуль на С++

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2019, 09:44
Ответы с готовыми решениями:

Определение ноды выбранной после падения активной ноды кластера
Предположим есть 3 ноды, активная нода падает, какая из двух будет выбрана активной?

Плагины для 3dsmax на VB
Можно ли на VB писать плагины для 3dsmax. По SDK к MAX их нужно писать ни С. Но С я плохо знаю и...

Плагины для Wordpress
Все доброго времени суток форумчани. У меня возник один вопрос, решил что вы сможете мне помочь....

плагины для WMP!
помогите кто-нить! у меня стоит виста, я хочу настроить потоковое телевидение через интернет, но...

20
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
07.10.2019, 10:10 2
Цитата Сообщение от andyj Посмотреть сообщение
Хочу понять ВОЗМОЖНОСТИ такого подхода.
Возможности у него и программисту мозги засрать мозги и память компу. Весь фарш как понимаю хотите писать на плюсах. Если весь фарш на плюсах то зачем тормозная обертка на JS который к тому же и десятой доли того что плюсы в плане построения высокоуровневых абстракций могут не умеет? Не кажется ли что проще и логичней или модулем существующего HTTP сервера все оформить или вообще http и кеширование свое слепить, прикрутить коннектор БД и ни от кого вообще не зависеть? А тем более что если ориентироваться на связь с браузером по web-socket и интерактивную обработку с кешированием стейта клиента в ОЗУ, то как бы это по любому демон а GC и тем более скриптам в демонологии не место.
0
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
07.10.2019, 10:50  [ТС] 3
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Весь фарш как понимаю хотите писать на плюсах.
Ни в коем случае! Скорее небольшие спец-функции и спец-объекты "с ускорением".

Год назад придумывал как хранить для моего веб-сервера хеш-данные по юзерам, созданных сложными запросами из Postgre-базы (кука + ...куча характеристик, доступы, описания). Сейчас остановился на Редисе(намучался со структурой хранения). И это ради ОДНОЙ таблицы в памяти. Ради одной таблицы "с запоминанием если изменилось каждые 5 минут на диск и восстановлением при старте" я с редисом вынужден: держать сокет-канал, оформлять свои запросы в JSON (через редис-модуль ноды), парсить JSON результат от высылаемый редисом, занимать сокет-порт, задействовать ОС в обработке "разрешено ли это системным фаерволом". + отдельная программа в памяти. Даже моих (убогих) знаний С++ хватило бы что бы за неделю написать подобную систему на С++ в 5-6 экранов кода (я с редисом дольше игрался). И ускорил бы работу в 200-300 раз? (на тысяче запросов в секунду это станет заметным) (а если прирост будет явным, то можно было бы и заказать такой код у тех кто С++ "живет")

...это конечно лишь пример... Когда начал обдумывать подобные "ускорялки" пошел дальше - нагуглил преобразователь "TypeScript в С" и "JavaScript в TypeScript". =) Представь, пишу функцию в несколько экранов кода - например многопроходный парсер сложной строки, а потом... "загоняю" в С++ и подключаю ее "аддоном".

сейчас просто возможности хочу понять!
ну очень "вкусным" показалось ускорение! https://morioh.com/p/ffefb96b3... 576RMhXL10

И жутко взбесило сколько "танцев с бубном" пришлось проинсталировать в Win для компиляции такого проекта. После Ноды привык что "всю папку можно свободно переносить", а если прижмет, то вместе с node.exe. и дописывать в Notepad.exe если прижмет исправить что-нибудь на месте... Помню что GCC был полностью портабл и не больше 300 Мб в самой большой сборке.

Если подумать, то есть КУЧА задач, где нужна "чистая математика". Например обработка матриц фотографий - просто "добавить контраст", 3Д преобразования, шифрование/дешифрование открыто/закрытыми ключами... Помню надо было "задачу коммивояжера решать", причем "жадным перебором" - моя однопоточная JS машина зависала. Почему бы не подготовить матрицу средствами JS, а потом "отправить" в аддон? Есть еще матрицы в нейронных сетях... (пока не пользуюсь) тоже прирост был бы, если более-менее "универсальный" аддон сделать...
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
07.10.2019, 12:14 4
Цитата Сообщение от andyj Посмотреть сообщение
Почему бы не подготовить матрицу средствами JS, а потом "отправить" в аддон? Есть еще матрицы в нейронных сетях... (пока не пользуюсь) тоже прирост был бы, если более-менее "универсальный" аддон сделать...
Ну а почему бы с таким же успехом не парсить JSON средствами плюсов и т.д сразу с проверкой соответсвеия структуре которая ожидается? А еще лучше не перейти с json на hex или base64?
Цитата Сообщение от andyj Посмотреть сообщение
И ускорил бы работу в 200-300 раз?
Ну в 200-300 это смотря что там или смотря как там. А к примеру в текущем проекте только замена вырезания строк при парсинге на вьюшки (ну в общем указатель на буфер с исходным JSON и длина фрагмента) позволили скорость парсинга в исходе плюсового сразу в 20 раз увеличить это при том что там по ходу пьесы кроме самого парсинга еще куча лукапов связывающих распарсенные структуры.
Цитата Сообщение от andyj Посмотреть сообщение
Если подумать, то есть КУЧА задач, где нужна "чистая математика"
А она везде. К примеру парсинг json - это чистая семиотика, такой раздел математики.
Цитата Сообщение от andyj Посмотреть сообщение
Представь, пишу функцию в несколько экранов кода - например многопроходный парсер сложной строки, а потом... "загоняю" в С++ и подключаю ее "аддоном"
Это не очень хорошая идея. Пишется просто универсальный парсер потом ему декларативно задается формат и работает все обычно в один проход.
Цитата Сообщение от andyj Посмотреть сообщение
И жутко взбесило сколько "танцев с бубном" пришлось проинсталировать в Win для компиляции такого проекта.
Visual Studio и никаких проблем вообще. Если нужно под линуху то по сетке коннектится и местным GCC или __clang компиляет прямо на линух-хосте. Единственное что надо - ssh на линуху поставить.
0
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
07.10.2019, 13:20  [ТС] 5
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
почему бы с таким же успехом не парсить JSON средствами плюсов и т.д сразу с проверкой соответсвеия структуре которая ожидается
Потому что переводить в JSON и назад - это ЛИШНЯЯ операция.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Ну в 200-300 это смотря что там или смотря как там.
Между "мне нужны данные из таблицы" и "я получил объект с данными и могу их использовать" есть СЛИШКОМ много преобразований - данные в JSON, JSON через сокет Редис-Базе, парсинг JSON на базе, потом собственно поиск по многократно усложненной базе (редис поддерживает не только одну мою таблицу, а значит там еще куча лишних фильтров), потом обратный процесс - в JSON, через сокет и из JSON... с модулем на С++ это было бы быстрее! А учитывая что ради одной записи иногда приходится делать несколько поисковых запросов в редис, то и куда больше команд...

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
К примеру парсинг json - это чистая семиотика, такой раздел математики.
Подозреваю что он УЖЕ на С++, т.к. является СИСТЕМНОЙ командой JS. А значит встроено в "ядро" (которое на С++).

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Это не очень хорошая идея. Пишется просто универсальный парсер потом ему декларативно задается формат и работает все обычно в один проход.
Не все можно сделать "в один проход". Вы сложные SQL функции на несколько экранов еще не писали! )) Простой пример - "если в строке больше 10 букв W то посчитай сколько будет букв R а иначе сколько букв Q" = два цикла писать... или заранее все считать... А если это простой "цикл на сравнение по букве" - значит С++ отработает его на порядок быстрее.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Visual Studio и никаких проблем вообще.
Не у каждого клиента установлен VisualStudio. А для установки инструментов (помню) требовало .Net обновить... Короче кучу мегабайт на С:\ забрало, причем даже примерно не знаю сколько, требовало админ-доступ и возможно получил кучу конфликтов с программами требующими старую VisualStudio... А значит не могу писать "простые парсеры" с использованием С++ для клиентов, которые можно установить на их ЛЮБЫХ компах. МультиОС-ность уже не так явно выглядит...
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
07.10.2019, 15:34 6
Цитата Сообщение от andyj Посмотреть сообщение
Потому что переводить в JSON и назад - это ЛИШНЯЯ операция.
Лишняя. Но когда данные приходят от сервера только в JSON никуда не денешься придется парсить.
Цитата Сообщение от andyj Посмотреть сообщение
Подозреваю что он УЖЕ на С++, т.к. является СИСТЕМНОЙ командой JS. А значит встроено в "ядро" (которое на С++).
Ну на плюсах тоже можно по разному. К примеру только замена с нарезки на строки на вьюхи дала прирост около 20 раз с 7 с гаком милисекунд до 350 микросекунд на 55 кб JSON. Это при том что он по ходу кучу лукапов ну по имени в указатели приобразовывает. Если чисто на строки разобрать это на нем вообще 50-70 микросекунд стало. Тяжко конечно по сравнению с бинаркой но уже не смертельно. Сомнительно что у них так.

Добавлено через 46 секунд
Цитата Сообщение от andyj Посмотреть сообщение
Не у каждого клиента установлен VisualStudio.
А клиенту то он зачем? Это только разрабу надо. В нем код писать и отлаживать.

Добавлено через 3 минуты
Цитата Сообщение от andyj Посмотреть сообщение
Простой пример - "если в строке больше 10 букв W то посчитай сколько будет букв R а иначе сколько букв Q" = два цикла писать... или заранее все считать...
Ну от одним проходом все считать потом выбирать. Считает комп быстро то что в кеше. А вот в кеш тянет долго. Поэтому чем больше манипуляций с символами проведем за один проход тем быстрее. И чем длиннее строка тем это актуальней.

Добавлено через 1 минуту
Цитата Сообщение от andyj Посмотреть сообщение
Между "мне нужны данные из таблицы" и "я получил объект с данными и могу их использовать" есть СЛИШКОМ много преобразований - данные в JSON,
Ну через коннекторы многие все равно через текст придется. Тот же к примеру MySQL выхлоп только текстом отдает.

Добавлено через 9 минут
Цитата Сообщение от andyj Посмотреть сообщение
МультиОС-ность уже не так явно выглядит...
Мультиплатформенность в плюсах только через компиляцию для каждой оси/таргета по отдельности.
0
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
07.10.2019, 16:15  [ТС] 7
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Лишняя. Но когда данные приходят от сервера только в JSON никуда не денешься придется парсить.
я же не предлагаю отказаться от него совсем... просто есть задачи, где это - лишнее!

Еще раз, задача: (временно закрытая)
Есть тяжелая база юзеров. (куча характеристик и сложные уровни доступа). Запрос по одному юзеру(куке) в базу около 0.1 секунды.
На сервере (планировалось) до 10К запросов от пользователей в секунду с обращением к разным частям этих характеристик. Характеристики меняются раз в несколько минут/часов, а запрос 0.5-2 раза в секунду. => надо либо ускорять запрос (можно раз в 5-10 ускорить базу), либо кешировать "ответы".
Кешировать можно в памяти программы, но при перезапуске программы/сервера все сбивается.
Задействовал Редис. Он в 100 раз быстрее Постгреса, но хранит лишь записи вида "ключ-ответ". Ответ вынужден хранить в формате JSON. Общение с редисом в формате JSON и через сокеты. = куча "промежуточных" преобразований. Для 1К юзеров пока хватает, но что будет на 100К предсказать боюсь. Если исключить Всю эту мишуру с преобразованиями, то раз в 10 можно было бы ускорить... Если не в 200...

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Тот же к примеру MySQL выхлоп только текстом отдает.
С MySQL - это оправдано. Там преобразование в строку/объект занимает тысячную от времени на выполнение запроса по бзае. С Редисом совсем другие пропорции...

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Ну от одним проходом все считать потом выбирать. Считает комп быстро то что в кеше. А вот в кеш тянет долго. Поэтому чем больше манипуляций с символами проведем за один проход тем быстрее. И чем длиннее строка тем это актуальней.
Вы меняете подход/задачу вместо того чтобы признать что БЫВАЮТ задачи где приходится парсить текст больше чем в один проход. Не "линейными" методами... Не все задачки такие "школьные"(синтетические) как с этими 3мя буквами... Хотите усложню? Книга "Война и Мир" - если слово "Наташа" упоминается больше 1000 раз, вернуть количество слов "и тогда", иначе "это означало"... =)

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А клиенту то он зачем? Это только разрабу надо. В нем код писать и отлаживать.
Парсер пишется "под клиента". Если бы для моего сайта - это одно, но если для использования на компе заказчика... Пришел на чужой комп, обнаружил ошибку в коде и... уносишь код домой для перекомпиляции? На линуксе (не пробовал, но подозреваю) что ничего лишнего для компиляции устанавливать не надо. Тем более "под рутом".

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Мультиплатформенность в плюсах только через компиляцию для каждой оси/таргета по отдельности.
Хотелось бы "ничего лишнего" не устанавливать клиенту. Тем более у меня не всегда есть Рут/админ-права...

...решил пока обдумать другой подход... на срр-аддонах пишется "система плагинов". Которая методами С++ умеет подключать/отключать dll или *.o библиотеки, написанные по определенным правилам. "Подключатель" плагинов может быть написан и скомпилирован "дома". Он неизменнен под любого заказчика. ДЛЛ-плагины под нее уже будут компилироваться при помощи GCC. Технически и под линукс они легко будут пересобираться. А благодаря С++ ядру можно будет их подключать "в горячем режиме" (отключать/заменять без перезагрузки ноды). Под win их можно будет компилировать при помощи портабл версии GCС, которую вообще можно оформить как node-плагин и выложить в репозиторий. Увы, знаний С++ пока для подобного не хватает... буду дальше думать! Но пока такая идея кажется самой адекватной! И скорость от наличия "переходника" не должна сильно пострадать...

Кстати, по идее, тогда можно будет писать dll на ЛЮБОМ языке. Например на go, Делфи или freepascal/Lazarus...

Кстати, недавно нашел модуль ffi, который позволяет подключать системные dll из Win для прямого доступа к WinAPI. Но не уверен что он позволит поменять библиотеку "на лету". И не уверен в его мультиОСности.
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
08.10.2019, 03:18 8
Цитата Сообщение от andyj Посмотреть сообщение
Парсер пишется "под клиента".
А клиенту это не надо. А тем более что ставится оно только под виндой. И ходить никуда не надо вообще. Приконнектился подправил перекомпилял и вперед.

Добавлено через 6 минут
Цитата Сообщение от andyj Посмотреть сообщение
Не все задачки такие "школьные"(синтетические) как с этими 3мя буквами... Хотите усложню? Книга "Война и Мир" - если слово "Наташа" упоминается больше 1000 раз, вернуть количество слов "и тогда", иначе "это означало"..
Это тоже самое.
Да кстати второй и последующий проходы в многопроходных парсерах работают не с исходным текстом. А с абсолютно другим алфавитом, в который преобразует исходный текст первый проход, или вообще деревом а не текстом. Для примеру вот в вашем примере если делать в несколько проходов то первым проходом строится словарь входящих в текст слов а слова заменяются на номер в словаре. А второй проход уже аналогичен первому в предыдущей задаче, поэтому его в принципе можно совместить в данном случае с первым, при этом все кроме искомых слов вообще пропускать еще в первом проходе.

Добавлено через 46 минут
Цитата Сообщение от andyj Посмотреть сообщение
Хотелось бы "ничего лишнего" не устанавливать клиенту
Ну дык вот речь о том чтобы убрать все лишнее

Добавлено через 3 минуты
Цитата Сообщение от andyj Посмотреть сообщение
Делфи или
На дельфе там совсем другие расклады. Ее тулсы в направление веба вообще заточены под создание веб-моста корпоративной системы и потому в исходе ориентированны что на ней пишется служба/демон которая и работает серваком. Причем вся бизнес-логика делается преимущественно визуально. Под линуху кстати тоже вроде бы как именно это направление применения в крайней версии Дельфы сделали. Но под линуху еще не пробовал.

Добавлено через 1 минуту
Цитата Сообщение от andyj Посмотреть сообщение
Технически и под линукс они легко будут пересобираться
Технически под линукс нет DLL а тем более COM. Там совсем другая система динамически линкуемых библиотек. И вообще динамическая линковка не особо приветствуется. Вплоть до того что настоящие гентушники ядро собирают со статически прилинкованными драйверами.

Добавлено через 6 минут
Цитата Сообщение от andyj Посмотреть сообщение
А благодаря С++ ядру можно будет их подключать "в горячем режиме" (отключать/заменять без перезагрузки ноды).
Плюсы позволяют очень надежный софт разрабатывать. Поэтому вопрос "как мы будем в случае чего перезапускать патч при сбое?" обычно превращается в вопрос "как мы будем перезапускать при сбое электропитания?".
0
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
10.10.2019, 19:39  [ТС] 9

Не по теме:

(выпадал в оффлан на 2 дня)

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А клиенту это не надо. А тем более что ставится оно только под виндой. И ходить никуда не надо вообще. Приконнектился подправил перекомпилял и вперед.
Недавно было предложение/просьба написать парсер под один сайт. (клиент является платным пользователем, но в одном отчете надо цифорку собрать за месяц и вывести на график - сайт позволяет только постранично листать)
В теории мог написать и использовать некую заготовку на С++. Сделать ее красиво и пользоваться тем что она парсит страницу например не 7 секунд а только одну... Конечно клиент не знает что такое линукс и ему надо прямо на компе фин-директора это проворачивать... В идеале поставил бы ему портабл Ноду, подправил в Notepad.exe скрипты и запустил... Но с С++ такое не выйдет.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А с абсолютно другим алфавитом, в который преобразует исходный текст первый проход, или вообще деревом а не текстом.
А если "алфавит" зависит от результатов выполнения первого "прохода"? )) На ОЧЕНЬ большом "не системном" тексте иногда проще пройти дважды, чем в первый раз составлять "дерево"/"словать" на все случаи жизни.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
На дельфе там совсем другие расклады. Ее тулсы в направление веба вообще заточены под создание веб-моста корпоративной системы и потому в исходе ориентированны что на ней пишется служба/демон которая и работает серваком. Причем вся бизнес-логика делается преимущественно визуально. Под линуху кстати тоже вроде бы как именно это направление применения в крайней версии Дельфы сделали. Но под линуху еще не пробовал.
Суть не в этом! В КОМПИЛИРУЕМЫХ языках (С++, Делфи, фрипаскаль/Лазарус) работа ЧИСТОЙ математики всегда будет в несколько раз быстрее чем на интерпретируемых языках (JS, PHY, Pyton, Ruby, и даже Java). Если я на чистом паскале (я его знаю и он на порядок проще С++) напишу DLL которую смогу "подключить" к Ноде, то получу прирост в скорости... Например задача получения 1000 чисел PI после запятой. Мне не визуальная часть Делфи нужна... А Лазарус(фрипаскаль) успешно компилится под Мак и Линукс. Не пробовал, но в теории можно писать либы (*.o) или "исполняемые" даже для хостинга. И хоть они не особо приспособлены для веба, но куда успешнее ноды работают в мнопоточных системах и могут ускорить математику.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
И вообще динамическая линковка не особо приветствуется. Вплоть до того что настоящие гентушники ядро собирают со статически прилинкованными драйверами.
Все там есть! Файлы с расширением *.о . По крайней мере под Иксы. В (опен) С++ прямо в "конструкторах" есть "создать динамическую библиотеку под Линуск". Понятно что если "прилинковать", то еще в несколько раз ускорится, но если выбирать между в 100 раз ускорить или в 150, то... меня и в 20 раз устроит! ))

Не по теме:

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Плюсы позволяют очень надежный софт разрабатывать.
Ой, не надо про надежность заливать! Все зависит от сложности кода и места из которого у программиста росли руки! JS тоже достаточно надежный код пишет. А банки предпочитают Java использовать, хоть надежность Java+С в андроиде хуже чем в детском конструкторе...


пробовал запустить ffi + dll на MinGW(+CodeBlocks) - не зашло! (( Собрал библиотеку с одним числовым результатом и без параметров, но подключить к ffi не получилось - "ошибка подключения функции".

Пока отложил проект... надо еще материал обдумать... Если у кого получится - отпишитесь, плиииз!
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
10.10.2019, 20:06 10

Не по теме:

Цитата Сообщение от andyj Посмотреть сообщение
Все зависит от сложности кода и места из которого у программиста росли руки!
Ну это понятно. Просто те у кого они растут откуда надо обычно выбирают плюсы а не жабы и прочие пыхи.



Добавлено через 1 минуту
Цитата Сообщение от andyj Посмотреть сообщение
Конечно клиент не знает что такое линукс и ему надо прямо на компе фин-директора это проворачивать... В идеале поставил бы ему портабл Ноду, подправил в Notepad.exe скрипты и запустил... Но с С++ такое не выйдет.
ЗАчем отлаживать и т.д. на компе фин директора то? Сделал загнал в то или иной инсталлятор и клиенту так или иначе отдал

Добавлено через 2 минуты
Цитата Сообщение от andyj Посмотреть сообщение
А если "алфавит" зависит от результатов выполнения первого "прохода"?
С каких делов ему зависить? Многопроходность имеет смысл только в тех случаях когда предыдущий проход резко снижает количество данных и/или упрощает обработку данных для следующего.

Добавлено через 18 секунд
Цитата Сообщение от andyj Посмотреть сообщение
А если "алфавит" зависит от результатов выполнения первого "прохода"?
С каких делов ему зависить? Многопроходность имеет смысл только в тех случаях когда предыдущий проход резко снижает количество данных и/или упрощает обработку данных для следующего.

Добавлено через 11 секунд
Цитата Сообщение от andyj Посмотреть сообщение
А если "алфавит" зависит от результатов выполнения первого "прохода"?
С каких делов ему зависить? Многопроходность имеет смысл только в тех случаях когда предыдущий проход резко снижает количество данных и/или упрощает обработку данных для следующего.

Добавлено через 57 секунд
Цитата Сообщение от andyj Посмотреть сообщение
Суть не в этом!
Суть в том что работа с сеткой/БД и т.д. ускоряется еще в большее количество раз.

Добавлено через 1 минуту
Цитата Сообщение от andyj Посмотреть сообщение
Мне не визуальная часть Делфи нужна...
А визуальной части в дельфовом фреймверке процентов 10. Остальное доступ к данным данным и сеть.
0
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
10.10.2019, 20:28  [ТС] 11

Не по теме:

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Просто те у кого они растут откуда надо обычно выбирают плюсы а не жабы и прочие пыхи.
"Каждая лягушка свое болото хвалит"! Не надо превращать эту ветку в священные войны...Я работал на фирме в 20 человек, где ВСЕ работали на java, а заказчики были в основном из США и Европы. Знакомый работает в Израиле на фирме в 100-200 программистов - весь бэк на Java (он на меня с Node как на не нормального смотрит).
Несколько лет назад писал СЛОЖНЫЕ функции на PostgreSQL и пытался их хоть как-то упростить нормальными языками. Выбрал таким PHP - подправил код, нажал F5 и в браузере новый результат через 0.3 секунды. Я несколько месяцев потратил, прежде чем то-же в Ноде с той-же скоростью смог проделывать на той-же машине (систему плагинов придумывал для "обновления кода без перезапуска"). А С++ - это СЛОЖНЫЙ язык! С очень высоким порогом входа, с кучей правил отвлекающих от логики. Подозреваю что простой веб-сайт там тоже не в 5 строк пишется...



Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
ЗАчем отлаживать и т.д. на компе фин директора то? Сделал загнал в то или иной инсталлятор и клиенту так или иначе отдал
Затем что только на компе у директора есть нужные доступы к сайту, есть куки, которые можно забирать после переавторизаци. Есть требования которые заранее в ТЗ не пропишешь, а надо "ткнуть пальцем". Подключаешься через TeamView/AmmyAdmin/AnyDesk и правишь что нужно "на месте", видя результат в консоли. Увы, С++ плагины в этом ограничены... пока отложу тему! Либо придумаю что-нибудь, либо придумаю как подключать либы на других компиляторах, либо сделаю список жутко-ограниченных "ускорялок" на С++ и скомпилирую их под большинство нужных мне ОС.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Многопроходность имеет смысл только в тех случаях когда предыдущий проход резко снижает количество данных и/или упрощает обработку данных для следующего.
Многопроходность имеет смысл когда при первом проходе не знаешь что понадобится при втором проходе, а выясняешь это лишь сделав первый проход и "уточнив ТЗ". Самое простое - когда поставляется БОЛЬШАЯ таблица методов обработки исходника в зависимости от условий первого прохода.

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

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А визуальной части в дельфовом фреймверке процентов 10. Остальное доступ к данным данным и сеть.
Если получится подключить библиотеку на Делфи к Ноде - сообщите... У меня пока тупик! И Делфи - не лучшее решение для Ноды. Я бы предпочел все-таки С++. В крайнем случае Лазарус/фрипаскаль. И базы мне не нужны - с сетью и с базами и сама нода не плохо справляется! Мне от плагинов нужны ускорялки математики, многопоточники, быстрая работа с памятью и возможность сохранять/восстанавливать память (аналог Редиса).
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
10.10.2019, 20:38 12
Цитата Сообщение от andyj Посмотреть сообщение
Подобные ситуации и с парсингом текста иногда бывают...
Подобная ситуация с парсингом называется левосторонний нисходящий парсер с возвратами. На практике вообще никогда не применялся, потому что достаточно просто преобразуется в левосторонний нисходящий парсер без возвратов. Используется только для объяснения студентам чаво вооще парсер должен делать.
0
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
10.10.2019, 20:42  [ТС] 13
А еще... одним из моих побочных проектов (хобби) является изучение мета-программирования ("результатом работы программы является другая программа"). Сейчас изобретаю "само-оптимизаторы" объектов определенного вида. Автоматический перенос некоторых функций или объектов с JS на С++ было бы интересным решением... Одним из условий работы таких программ - является замена кода БЕЗ перезапуска программы - прямо "на лету". А значит DLL должны быть "динамически-подключаемыми" с возможность отключения и замены.
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
10.10.2019, 20:44 14
Цитата Сообщение от andyj Посмотреть сообщение
Есть требования которые заранее в ТЗ не пропишешь
Ну это уже от вас зависит. Вообще то ТЗ программист разрабатывает так же как и постановку задачи. Заказчик может ее только в общих чертах сформулировать. Для чего то большего у него квалификации нет.
Цитата Сообщение от andyj Посмотреть сообщение
, а надо "ткнуть пальцем"
А это при качественной постановке задачи вообще конфигурационными данными решается а не изменением кода.
0
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
10.10.2019, 20:56  [ТС] 15
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А это при качественной постановке задачи вообще конфигурационными данными решается а не изменением кода.
Все зависит от задачи. И ТЗ иногда настолько расплывчатое что его тяжело сформулировать... Проще "ткнуть пальцем".

Пример "видишь здесь на сайте написано 12 литров/км, надо взять эту цифру и если она больше 10, то... ищешь на этом же сайте чуть раньше фамилию водителя и высылаешь мне, а если меньше, то ищешь чуть выше дату отправки (если не красная, а если красная, то нужна фамилия экспедитора - еще выше) и высылаешь уже не мне, а отдел бухгалтеров-зарплатников!" ))

Вот тебе и двойной проход по странице (иногда ВСЕ это в одном ДИВЕ одной строкой без разделителей), и "ткни пальцем" при формировании задачи. Представь себе, если бы я всю эту математику на С++ плагине написал для ускорения. Сайт "граблю" нодой, рассылку результата тоже нодой, а парсинг "строки" в С++. А на месте оказывается что в тексте иногда 2 даты и надо всего-лишь 2 строчки подправить и перекомпилировать... В Ноде - запросто! В С++ - ставь ВижуалСтудиоЛибы и ДотНет! )) или забрий домой "для перекомпиляции" и возвращай лишь уже скомпилированное.

Короче - пока технология СЫРАЯ! (( хоть и "вкусная"...
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
10.10.2019, 20:57 16
Цитата Сообщение от andyj Посмотреть сообщение
Самое простое - когда поставляется БОЛЬШАЯ таблица методов обработки исходника в зависимости от условий первого прохода.
Задача парсера - преобразование текста в абстрактное синтаксическое дерево. А вся обработка идет уже по оному AST а не по исходнику. Подобные алгоритмические оптимизации дают прирост производительности на порядки больший чем любая железячная.
0
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
10.10.2019, 21:05  [ТС] 17
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Задача парсера - преобразование текста в абстрактное синтаксическое дерево. А вся обработка идет уже по оному AST а не по исходнику. Подобные алгоритмические оптимизации дают прирост производительности на порядки больший чем любая железячная.
Задача парсера - "вырвать" из текста полезные данные по заданному алгоритму! Не путайте с классическими парсерами типа JSON, HTML или даже Babel. Не к каждому парсеру требование потом "собрать текст взад слегка изменив". 1000 лет назад писал парсер - из сайта банка выдирал 2-3 курса валюты и высылал СМСкой таможеннику. Это тоже был парсер... без AST и даже без возможности получить дерево сайта - просто искались "точки привязки" прямо в тексте - например редкое название класса, потом искалось </div>, потом делался отспуп в 21 символ, потом бралось первое число, потом искали третье </span> и брали еще 10 символов, в котором было второе число курса... и тд. Это тоже был парсер!
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
10.10.2019, 21:14 18
Цитата Сообщение от andyj Посмотреть сообщение
Это тоже был парсер!
Парсер - это синтаксический анализатор, преобразующий поток лексем в абстрактное синтаксическое дерево. А это у вас был не парсер а так поиск по тексту на основании пола потолка и прошлогодней газеты. Кста если он сработал то скорее всего сработало бы просто вытаскивание символов по заданному смещению.
0
andyj
10.10.2019, 21:22  [ТС]
  #19

Не по теме:

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Парсер - это синтаксический анализатор, преобразующий поток лексем в абстрактное синтаксическое дерево.
Парсер (англ. parser; от parse — анализ, разбор), или синтаксический анализатор, — часть программы, преобразующей входные данные (как правило, текст) в структурированный формат. Парсер выполняет синтаксический анализ текста.
https://ru.wikipedia.org/wiki/... 0%BE%D1%80

"Дерево" - это частный случай парсера...
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Кста если он сработал то скорее всего сработало бы просто вытаскивание символов по заданному смещению.
Это был сайт банка. С лентой новостей. Курсы меняли точность с 5 знаков на 7 и назад в завимости от наличия нулей в конце. Курсы тоже иногда переставляли местами... Это были 2000е... мои первые потуги на РНР. Могли запросто точку на запятую поменять или пробел добавить. Или даже картинку вставить "неожиданно сильно вырасло/упало"

0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
10.10.2019, 21:48 20
Цитата Сообщение от andyj Посмотреть сообщение
Парсер выполняет синтаксический анализ текста.
ну вот сутью синтаксического анализа и есть преобразование в дерево, по которому производится семантический анализ. А вот тут уже действительно есть варианты. Для языков программирования к примеру оное дерево сразу преобразуется в абстрактный синтаксический граф, и обработка идет уже по оному графу а не по дереву.
0
10.10.2019, 21:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2019, 21:48
Помогаю со студенческими работами здесь

Плагины для joomla.
Где брать плагины для joomla? Как их ставить в joomla? Не развалится ли хостинг, если поставить их...

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

Плагины для bbPress
Ребята, подскажите плагины для bbPress, которые расширяют функционал форума. Например, добавляют...

Плагины для Мозиллы
МедведЪ, тут выбирай любую локализацию)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru