Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/131: Рейтинг темы: голосов - 131, средняя оценка - 4.52
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549

Архитектура: парсинг и выгрузка текстовиков

11.03.2020, 10:51. Показов 32490. Ответов 421

Студворк — интернет-сервис помощи студентам
начало было положено в ветке - Считать текстовые файлы из папки - там и возник вопрос об Архитектуре...
Цитата Сообщение от JeyCi Посмотреть сообщение
так и не собрала эти все объекты этого класса в group class...
вроде уже собрала...
осталось отображение создать (типа I_tbl_Show) и пронаследовать ? в разные классы пункта назначения (или на консоль, или в файл, или в БД, или допустим ещё в форму)... N.B. классы (пункты-назначения) делать не надо - эти View уже реализованы разработчиками того ПО, на котором сейчас идёт работа...
а) пока что можно просто прописать функции-члены класса; и по месту использовать, что надо при разработке - в файл или на консоль;
б) в перспективе для Release - реализовать и откомпилировать и выгрузку и в файл, и выгрузку в БД, и отражение в DataGrid...
===
!! Т.Е. если в Release захочется и выгрузку в текст, и в БД, и допустим ещё в форму (например с разных кнопок сделать) - тут уж лучше и писать, как положено, наследование??... -- к слову из прошлой ветки о:
Цитата Сообщение от JeyCi Посмотреть сообщение
полагаю тут Наследования никакого не пригодится?
... или как раз тут (при выборе направления выгрузки) его (наследование) делать??
===
Обоснование выбора уровня Абстракции (I_tbl_Show со всеми виртуальными функциями):
чтобы не дублировать код-сбора-для-выгрузки -- сделать class Table - и класс-интерфейс I_tbl_Show, в котором обозначить virtual-функции выгрузки... эти функции определить в др. классах - типа Interface (IwriteCSV, IwriteDB, IwriteDataGrid)...
p.s.
классы консоль, файл, бд, DataGrid - не создаём, т.к. эти пункты назначения уже присутствуют...
p.p.s.
вывести конечные интерфейсы с определёнными методами записи на кнопки...
===
ИЛИ то, что подчёркнуто чуть выше, стоит реализовать в одном классе Table, и здесь же задать все virtual функции ??
===
на скрине: синие - классы, зелёные - интерфейсы (в с++ по сути тоже классы)
птицами отмечены уже кое-как реализованные классы (2 птицы)
курсивные стрелки - отсутствие наследования


Добавлено через 7 минут
вобщем вопрос:
class Table и класс I_Tbl_Show - объединить или нет?

Добавлено через 10 минут
p.p.s.
чтобы избежать проблем Ромба и такого:
Неоднозначность при множественном наследовании
Цитата Сообщение от DrOffset Посмотреть сообщение
Тут нужно виртуальное наследование.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2020, 10:51
Ответы с готовыми решениями:

Проверка двух текстовиков
Написать прогу на языке Си, проверяющую, совпадают ли тексты в двух файлах #include <stdio.h> #include <stdlib.h> ...

Access модуль объединения текстовиков
Добрый день. Очень нужен модуль access который будет объединять текстовые файлы с предложенной папки (каждый раз разные названия и...

Сделать скрипт для вывода текстов из текстовиков
Здравствуйте! Не могли бы помочь сделать скрипт для вывода текстов песен из текстовиков в папке. Расскажу подробней: есть папка с...

421
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
28.03.2020, 18:26  [ТС]
Студворк — интернет-сервис помощи студентам
ок, посмотрю - но видела в Code::Blocks какие-то QT4 и QT5 appl. заготовки - думала одно и то же... и wxWidgets видела - вроде компактные для многих device'ов интерфейсы... даже Win32 видела... скромно, но по делу - то, что надо...
хотя к json в U++ уже привыкла...
boost только строила в прошлом году - так и не подрядила для своих нужд

p.s.
а вообще, насколько поняла в CodeBlocks и Qt подключение GCC MinGW (более нового) и libs проблем нет (в Settings->ToolchainExecutables)... в отличие от VS (куда Microsoft свои постоянно обновляет для своего компилятора - т.е. не оч. универсально)... с Borland у меня такая же история вышла - свой (его) компилятор, да ещё старенький, - многие из boost и не собрались под него
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
28.03.2020, 18:45
JeyCi, к Code::Blocks нормально прицепить Qt достаточно трудно. Ну то есть прицепить получится, конечно, но неудобно.
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
28.03.2020, 18:58  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
к Code::Blocks нормально прицепить Qt достаточно трудно.
в смысле GUI или сам разработанный код?
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
28.03.2020, 19:09
JeyCi, в смысле библиотеку Qt, чтобы можно было пользоваться всеми ее возможностями.
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
29.03.2020, 07:43  [ТС]
но линк по Элементам Управления C всё-таки оставлю...
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
29.03.2020, 18:05  [ТС]
всё-таки однозначно надо подтянуть UML -
Где реально используют UML кроме образовательного процесса?
а то потом будет поздно...
===
11. ОСНОВЫ УНИФИЦИРОВАННОГО ЯЗЫКА МОДЕЛИРОВАНИЯ
- тогда и рисунок будет лучше.....
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
31.03.2020, 10:46  [ТС]
Цитата Сообщение от bedvit Посмотреть сообщение
С интересом жду решения вашего вопроса с БД.
вот кстати могу дать кое-какие пояснения - так сказать раскрою карты -
GOAL: свой Appl. для взаимодействия с бд (1-й шаг - загрузка в бд из сети или файлов)... ВАЖНО: данные по сути - отображение 3х измерений (не путать с количеством файлов для join)... [вот тут карты не раскрою - и так понятно, кому не понятно - нечего забивать себе голову]
БЫЛО:
- file load_from_url (with PQ forming links)
- file parse (with PQ parse jsons & unifying some fields)
- тот же file (get data to DB with VBA)
=> т.е. по сути поведенческий Шаблонный паттерн проектирования, распределённый на 3 шага по 2м файлам;
НО N.B. "хороший интерфейс - это невидимый интерфейс" -
поэтому -
ЕСТЬ желание перевести всё это на C++
в связи с этим ЗДЕСЬ СЕЙЧАС ВАЖНО для меня - правильно выстроить иерархию Классов в ООП... - т.к. С++ - строго типизированный язык - выделить и потом задать все нужные мне типы -- ну это уже Implementation (насколько понимаю) - как Сущности... и их зависимости или взаимодействия - как Отношения...
С ПОМОЩЬЮ Декомпозиции, где надо, и использованием выгодных паттернов проектирования, где можно...
и С ПЕРСПЕКТИВОЙ масштабирования на др. продукты... о кроссплатформенности пока не думаю (там , если сейчас будет хорошая модель взаимодействия с бд, проблем быть не должно)...
--наконец высказала Цель этой ветки под названием Архитектура...
===
пока, наверно, бОльшего не вижу смысла хотеть от 1-го этапа взаимодействия с БД...
(кроме как разбросать подзадачи на те, которые надо выполнить на уровне Клиента, и те, которые надо выполнить на уровне Сервера, - условно) - в принципе в этой ветке все ответы и советы прямо в точку были - всем Спасибо!..
===
если будут нюансы в проектировании Классов и подклассов в такой архитектуре - спрошу ещё...
- просто последовательность шагов, которую хочется скрыть от глаз юзера - понятна (изложена, да и на vba+pq реализована), а вот структура входящих данных (ввиду разношёрстности) - для выделения в Классы (Сущности) - ввиду начала знакомства с ООП - пока чуть-чуть в тумане... чуствую нутром, что надо как-то обобщать что-то в Абстрактных классах, но такааая разношёрстность ! - что в принципе - в Абстракции её загнать можно -- но паттерны проектирования чувствую, что применить стоит (для уменьшения количества кода) - но немного глаза разбегаются по паттернам пока (структурным и порождающим)...
===
т.е. по сути условно Алгоритм обработки данных понятен, а Структура даже данных, не говоря уже о структуре appl'e - немного под вопросом... особенно с учётом того, что структура Данных и структура Приложения разрабатываемого - это вообще разные вещи...
вобщем пункт условно алгоритм и условно структура классов (имеющихся/отображённых в файлах входящих) - как бы понятны... - структура, но пока не методы в полной мере... а вот как сократить количество кода исходя из выделенного зелёным - каким паттерном?? пока в задумчивости...

Добавлено через 19 минут
кстати инфо для однократной обработки 10-200мб -- т.е. в оперативку влезть должно при 40% свободной оперативки от 2гб...

Добавлено через 1 час 28 минут
ЭВРИКА, о которой bedvit уже предупреждал когда-то!
(вольный перевод)
"не всегда функциональные языки дают преимущество, иногда для целей оптимальности лучше отказаться от функциональщины"...
- т.к. PQ - реализует свои функциональные возможности для разработчика, насколько понимаю, - то -
ВОТ рисую ручками своё ТЗ из уже имеющихся Excel+PQ файлов, чтобы то же самое написать на С++ [поскольку, как уже отметила выше, win10 не даёт load_urls из-за SSL/TLS проблем к интересующему чужому сайту]... тут в принципе не суть важно, откуда json'ы - из файлов на локал компе тестово или из сети по сути...
И получаю ТЗ в несколько строк, которое при имеющихся Классах по структуре json-файлов формирует нужные линки в 2-счёта... а в Excel для этого пришлось отводить целый файл, чтобы на PQ выразить в много шагов само формирование линков и форматирования отдельных его частей (тектовый формат дат по шаблону и др) с последующей загрузкой...
ВОБЩЕМ чувствую я, что переходя на ООП и имея возможность задавать свои типы - мы Качественно облегчаем себе жизнь... ну да время покажет...
просто сама удивлена - какое короткое ТЗ и как много пришлось сделать шагов в PQ, чтобы учесть все нюансы, излагая алгоритм на функциональном языке...
и как проще его (это ТЗ) даже просто прочитать ! без PQ-кода, и нарисовать Классами в ООП... !!!!!!!!
всё может быть, что и с Архитектурой я зря усложняю (думая, что 2 файла Excel+PQ+VBA мне будет сложно перевести на C++, ну или даже Python)...
-- не смогла не поделиться этой радостью (т.к. давно не читала тот свой длинноватый код на PQ+VBA)
0
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22
31.03.2020, 17:24
JeyCi, про функциональщину не припомню, но если вам это как-то это помогло, то ОК. Мне пока трудно понять вашу конечную цель: Написать свою СУБД на С++, заменить инструменты Excel+PQ+VBA своей программой на С++, или что то другое, я бы исходил из следующего:
1.Приоритетной является задача, а не инструменты ее решения. А значит, возможно вам не нужно копировать функционал Excel+PQ+VBA, а нужно просто решить свою задачу наиболее оптимально, наиболее удобными инструментами, того языка на котором вы хотите ее решить.
2.Если вы все же решили написать свое СУБД. Нужно этот проект разбить по отдельным задачам, и начинать с простого и необходимого, далее добавляя функционал. По каждой задаче, можно на этом форуме, спросить, ту часть, которая не получается. Сразу объять необъятное непростая задача. Знаю одного человек, который задачи ставит себе - как два дня работы. Если больше дней - разбить блок или не берется. Он, в отличии от меня, тру-программист, и за два дня сделает, то что я пилю месяц.
3.Если вы хотите перейти на С++, потому что это быстрее - это не очевидный результат. Возможно стоит поспрашивать у спецов, так ли это и взлетит ли данный подход.
ИМХО
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
31.03.2020, 20:16  [ТС]
Цитата Сообщение от bedvit Посмотреть сообщение
заменить инструменты Excel+PQ+VBA своей программой на С++,
Да
P.S. про "функциональщину"
p.p.s
Цитата Сообщение от bedvit Посмотреть сообщение
3.Если вы хотите перейти на С++, потому что это быстрее
потому что цели и задачи разрастаются, и, возможно, многоплановость входящих данных, и становится сложно сопровождать... хочется перейти на рельсы ООП... думаю, что без нормального ООП масштабировать на др. активы уже не смогу на чисто процедурном и уж тем более функциональном языке... не саму БД, а её входящими данными... а в бд в принципе логика останется - разве что объёмы увеличтся... поэтому с Access тоже вероятно захочется мигрировать куда-нибудь...SQLite или ms sql express... как-то так
Цитата Сообщение от bedvit Посмотреть сообщение
А значит, возможно вам не нужно копировать функционал Excel+PQ+VBA
вот этим я сегодня и была both happy & confused - пока пытаюсь сформировать нужную мне иерархию классов... но всё-таки возможность формировать на лету свои типы - очень привлекает, как и их закрытость (т.е. Классов)...
пока от новизны ООП подхода ещё немного в растерянности, как перевести процедурный яз в ООП... но понимаю, что это и не надо...а надо всё те же задачи реализовать совершенно по-новому... надо ещё помозговать - чтобы нормальный UML прикинуть на Input-данные того скрина, который в 1-м посту этой ветки... с аггрегированием и экспортом уже вроде здесь по ветке разобрались... (но пока ещё тоже не реализовала)... время однако - надо первостепенно подгрузку из сети перевести на новые рельсы... т.е. эти Input-data

Добавлено через 28 минут
Цитата Сообщение от bedvit Посмотреть сообщение
Возможно стоит поспрашивать у спецов, так ли это и взлетит ли данный подход.
даже если и не взлетит - но мне будет легче прочитать то, что писала уже давно в контексте общей структуры, - тоже будет хорошо...
а на Python - честно говоря, подгрузка взлетает с использованием асинхронности - но опять же ввиду многоплановости входящих данных - ещё дорабатывать и дорабатывать тот код... а по уму - то тоже лучше используя норм. ооп, чтобы потом читать и сопровождать легче было...
p.s.
или Boost asio для начинающих ещё при случае посмотреть...
p.p.s.
на win10 конкретно интересующий сайт в PQ2016 даёт ошибку "SSL/TLS" для подгрузки с линков - поэтому и задумалась вообще о переезде... на C++ достучаться по линкам могу - проверено...
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
01.04.2020, 06:17  [ТС]
Boost.Asio - для примера...
===
ВСЁ - вроде поняла, что мне надо сделать, чтобы перевести проект с процедурного яз на ООП:
надо НЕ последовательность шагов прописывать, а задать нужные Типы (их свойства и методы), которые смогут реализовать эту последовательность шагов своими силами (методами и свойствами)... а саму последовательность шагов прописать в int main()...
и благодаря возможности создавать свои Типы и их иерархию мы можем значительно сократить саму нужную нам последовательность шагов по ТЗ в int main()... т.к. всю нагрузку из процедуры обработки данных можем переложить на плечи Классов, разработанных!...
благодаря этому сам код последовательности шагов в int main() может значительно сократиться и стать более прямолинейным логически, нежели когда мы вынуждены использовать только объекты, которые нам даёт процедурный язык - не всегда удобные для нас в полной мере... вобщем как-то так...
EDGE - возможность создавать Нужные объекты Нужных типов с Нужным функционалом,
а не искать обходные пути и бег с препятствиями и возможность выкрутиться общими заданными кем-то (не нами) объектами процедурного языка...
p.s.
т.е. самой надо написать более прямолинейное ТЗ для обработки данных - а для его реализации подрядить свои типы... aka ТЗ может быть иное, т.е. проще и короче (при том, что все типы разработать надо под свои нужды)
это и есть Формализовать логику проекта...
0
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22
01.04.2020, 11:46
Цитата Сообщение от JeyCi Посмотреть сообщение
P.S. про "функциональщину"
И до сих пор так думаю, лично мне так удобнее. И на С++ парадигма программирования - это императивно программирование (процедурное, ООП,...). и в других языках которые я использую. Для функционального программирования есть другие языки -Erlang, Haskell и т.д. не уверен, что они подойдут для вашей задачи, но не спец./не пользовался, настаивать не буду.
Цитата Сообщение от JeyCi Посмотреть сообщение
перевести проект с процедурного яз на ООП
опять же, каковы задачи. ООП не самоцель. Для каждой задачи, оптимальны свои инструменты, архитектура и т.д.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
01.04.2020, 17:45  [ТС]
Цитата Сообщение от bedvit Посмотреть сообщение
опять же, каковы задачи. ООП не самоцель.
bedvit, ближайшая цель в #67 под флагом БЫЛО... с учётом проблем win10 (уже ведь писала)...
перейти на C++ чтобы быть более свободной от Microsoft...
формирование линков тяжёлое на функциональном PQ (хоть PQ и понимает json),
парсинг json модулем класса JsonBag через vba - не очень приятен... - через пол-года с трудом вчитываюсь, что я там наворотила - хотя работает, но громоздкое описание всех шагов в процедурном vba на разношёрстные json-структуры ...
хочу получить приятную структуру кода - который легко будет сопровождать (т.к. сайт сторонний, на него влиять не могу, периодически какие-то корректировки приходится делать)...
также структура файлов разношёрстна - умаялась парсить (потом читать нелегко) - хочу иметь приятные глазу Классы - по структуре входящих json...
+ на С++ есть приятные библиотеки для парсинга json...
вобщем решение имеет корни из этих соображений
P.S.
в #67 под флагом БЫЛО...
там кстати каждое слово file - это всего лишь файл Excel - а в нём работа сразу со всеми разношёрстными нужными json'ами, да ещё на PQ... от ~400 шт и более... не нравится мне рекурсивная природа PQ и как он (PQ) её реализовывает на 2х гб RAM


Добавлено через 57 минут
вобщем Дату выбрала
Basic CtrlLib appl U++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <CtrlLib/CtrlLib.h>
 
using namespace Upp;
 
struct MyAppWindow : TopWindow {
    
    //https://www.ultimatepp.org/srcdoc$CtrlLib$Tutorial$en-us.html
    
    //Definition
    Button button;    
    void Click() { PromptOK(~dd.GetData()); }
    
    EditDate Date;
    DropDate dd;
    
    typedef MyAppWindow CLASSNAME;
    MyAppWindow() {
        Title("My application with button");
        Sizeable(true);
        SetPos(PosLeft(0,400),PosTop(0,200));
        //CenterScreen();
        
        //Button button
        Add(button.LeftPos(10, 100).TopPos(60, 50));
        button.SetLabel("Click me!");
        button <<= THISBACK(Click);
        
        //DropDate dd;
        dd <<= GetSysDate();
        Add(dd.HSizePos().TopPos(10, Ctrl::STDSIZE));
    }
};
 
 
GUI_APP_MAIN
{
    MyAppWindow app;
            app.Run();
            Date dt=app.dd.GetData();
                SetDateFormat("%1:4d%2:02d%3:02d");
                SetDateScan("ymd");
            String sdt=Format(dt);
            PromptOK((String)sdt);
}

- в принципе, имея класс Формы - в main'e всё стандартно, как в процедурном vba - работаем по схеме Объект.Свойство.Метод.
MyAppWindow наследует от TopWindow (базовый класс в одной из библиотек U++ ), насколько понимаю...
дальше начинается самое интересное - писать свои классы - чтобы с ними работать по схеме Объект.Свойство.Класс...
вобщем-то - начало положено - выпадающий календарь есть...
===
приложила кодом, как было отмечено ранее - struct - это, как и класс, тип класса... взаимодействие с Main в принципе отражено... начало положено!
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
02.04.2020, 15:28  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Могу предложить такое эмпирическое правило: "если вы не знаете зачем вам в коде нужен указатель на функцию, то вы не должны использовать его". В большинстве стандартных ситуаций, где вам нужен вызов функций, непосредственный вызов даст самый оптимальный код из возможных.
- да уж - нечастые ситуации - (бОльшей частью связано с компилятором, как впрочем и вся работа указателей - большей частью для компилятора, насколько понимаю) -
15.1. Применение указателей функций для их обратного вызова
Callback (программирование)
P.S.
Делегат (программирование)
Делегаты (C++/CX)
подписаться на событие. Когда экземпляр класса инициирует событие
При создании универсальная платформа Windows приложения часто приходится работать с делегатом в качестве типа события, предоставляемого классом среда выполнения Windows. Чтобы подписаться на событие, создайте экземпляр типа делегата, указав функцию (или лямбда-выражение), соответствующее сигнатуре делегата. Затем воспользуйтесь оператором += , чтобы передать объект делегата члену события в классе. Это называется "подписаться на событие". Когда экземпляр класса инициирует событие, вызывается ваша функция, а также другие обработчики, которые были добавлены данным объектом или другими объектами.

Делегаты на C++
===
Коллбэки и Делегаты, используемые в мониторинге событий, - в принципе используются в некоторых паттернах... но не уверена, что нужную мне последовательность шагов/процедур стоит завязывать на события... а в некоторых паттернах даже - Перехват (программирование) - как в Шаблонном что-то было...
НО - всё проще во взятии json'ов - хоть из сети, хоть из файлов... имхо...
вот уж, действительно:
Цитата Сообщение от DrOffset Посмотреть сообщение
Ошибка в том, что вы не должны думать "а какой бы паттерн мне применить", если ваша задача еще не формализована до конца. Вы сначала должны описать формально задачу, а потом посмотреть содержатся ли в ней какие-то типовые подзадачи, которые можно было бы описать паттерном.
Добавлено через 12 минут
т.е. поняла! - сначала разбить на Классы, а потом, если у классов имеются точки соприкосновения в жизненном цикле или повторяемые несколькими сущностями действия, - то выделить в некую бОльшую систему - Паттерн !.. а иногда даже просто Абстрактного класса хватит для облегчения сопровождения кода... или даже просто friend'a...
p.s.
а "событийное" программирование - вероятно, вообще более актуально для сетевого программирования... имхо
ну или события с формы...
p.p.s.
хотя callback'и и в std::algorithms некоторых уже исполизованы - например, for_each... - так сказать, паттерн Итератор уже есть в std ... да и даже Lambda expressions начиная с C++v.11... - и нечего создавать Америку...

Добавлено через 1 час 11 минут
===
вот что-то такое надо бы обкатать Скачать html страницу (boost.beast) ,
но в U++ есть и свои примеры Async в Tutorial'e...

Добавлено через 3 часа 0 минут
HTTP downloader using Beast - C++v.14
C++ provides std::future to ease working with asynchronous APIs. Futures can also pass exceptions.
- C++v.11

Добавлено через 47 минут
и наконец, знакомые из Python слова -
Для удобства, во многих языках используют оператор await
Сопрограммы (корутины, coroutine) - что это?
link
на ru_stackoverflow_com - /questions/496002/%D0%A1%D0%BE%D0%BF%D1%80%D0%BE%D0%B3%D1% 80%D0%B0%D0%BC%D0%BC%D1%8B-%D0%BA%D0%BE%D1%80%D1%83%D1%82%D0%B8%D0% BD%D1%8B-coroutine-%D1%87%D1%82%D0%BE-%D1%8D%D1%82%D0%BE

Coroutines (C++20)
=== если либы и компилятор обновить... хоть и
Library support - This section is incomplete...
===
поэтому можно std::async std::future и функции-члены
===
ВОЗМОЖНО, И STD - ДОСТАТОЧНО чтобы сильно не заморачиваться Архитектурой и boost'ом ...
- всё-таки пока не для сетевых технологий делаю, а для себя...
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
03.04.2020, 12:59  [ТС]
Цитата Сообщение от JeyCi Посмотреть сообщение
перейти на C++ чтобы быть более свободной от Microsoft...
вобщем склоняюсь к тому, что именно коллбэки (точнее их нужное использование в нужном виде в нужных местах) - отличительная черта новых технологий, обеспечивающая конкурентность и параллелизм и скорость...
и часто уже реализованы они в самих библиотеках... таких, как async, thread...
может Microsoft просто как-то не очень хорошо их подрядил для своих задач (раз тормозит иногда)... + всё-таки эти технологии, действительно, привязал к мощи железа (размеру RAM или количеству ядер) уж очень с перебором (может и не всегда нужное)... имхо...
надо просто новый инструментарий (эти библиотеки) применять соответствующе...
==
C++11 Multithreading – Part 9: std::async Tutorial & Example
Асинхронное вызов функции - хоть здесь и предупреждают
Остерегайтесь условий гонки.
НО
C++11 Multithreading – Part 4: Data Sharing and Race Conditions
set of operations in parallel, that access the same memory location.
главное, правильно распорядиться памятью и не создавать ситуаций "share memory" (читать оттуда, куда кто-то пишет)... в принципе такие проблемы (Race Condition) - свойственны для CPU-bound операций, нежели для IO-bound (т.е. интересующих меня)...
P.S. чуть что -
C++11 Multithreading – Part 5: Using mutex to fix Race Conditions
how to use mutex locks to protect shared data
Добавлено через 35 минут
от boost'a не отказываться, т.к. есть boost::coroutines (Техника написания аналога await/async из C# для C++ )
==
Всем спасибо за неоценимые подсказки, чтобы сориентироваться в такой сложной системе, как новый язык и MyProject.
Полагаю, остальные вопросы - это подробности для вынесения в отдельные ветки.
Overview в этой ветке считаю полным, хоть и немного сумбурным


Добавлено через 1 час 56 минут
Цитата Сообщение от bedvit Посмотреть сообщение
ООП не самоцель.
кстати, да ...
понимаю, почему его используют для создания софта - т.е. когда нужно создать по сути UI (user Interface), которым user будет манипулировать на своё усмотрение на этапе Run-time и, как следствие, софт будет выполнять те или иные действия... в зависимости от того, что разработчик прописал в Классах (управляющих Объектами) на этапе до Complile-time...
т.е. ООП выгодно именно для обеспечения Interaction between soft (game or etc, т.н. Виртуальной Реальностью) & user...
а не для перевода процедурного языка в ООП...
но т.к. возможности C++ (т.е. библиотеки) шире, чем vba - пока начну с такого простого своего задания - выполнить процедуру из 3х шагов на C++ (подгрузить [из 2х альтернативных источников - folders & http], распарсить, закинуть в бд)... кнопку "достать из бд" - бонусом...

Добавлено через 23 минуты
и кстати работать с указателями надо лишь в том случае, когда в библиотеке нет соответствующего wrapper'a или adapter'a или декоратора или etc., скрывающих эту потребность использовать указатели... как правило либы C++ как раз нейтрализуют необходимость использовать указатели, а чистый С - работает с ними как есть...
поэтому по совету из 1й моей ветки - определиться, какой файл писать - .c или .cpp - и, желательно, "не смешивать языки", в крайнем случае в рамках проекта, полагаю, можно создать файл нужного типа... другой вопрос - как потом скомпилируется такой "разношёрстный проект" - но это уже на усмотрение компилятора... или на собственном опыте...
p.s.
кстати clang - вроде быстрее компилирует, чем gcc... - есть инфо на форуме
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
07.04.2020, 06:13  [ТС]
Цитата Сообщение от JeyCi Посмотреть сообщение
для Input
Цитата Сообщение от DrOffset Посмотреть сообщение
JeyCi: надо 3 разных вида файлов... это лучше использовать/переделать на Абстрактный класс?
DrOffset: Не обязательно. Но возможно.
std::variant<T1, T2, T3> еще рассмотрите.
приложу пример абстрактного класса для наследования от него классов с разным количеством входящих параметров... И.Ф.Астахов - Язык С++
полагаю, - по аналогии...
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
07.04.2020, 20:25  [ТС]
или кодом из предыдущего вложения
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Файл shape.h
#ifndef SHAPE_H
#define SHAPE_H
 
// Абстрактный класс, вычисляющий площадь фигуры 
class shape {
protected:
    /* поле param должно быть доступно в производных классах : Это один из параметров, имеющий смысл для фигур: */
    double param;
public:
    shape (double) ;    // конструктор базового класса
    virtual double area()=0; // чисто виртуальный метод, 
} ; // возвращающий площадь фигуры
 
// Круг, заданный радиусом
class circle : public shape {
public: // конструктор инициализирует радиус круга
    circle(double);
    double area();
};
 
// Треугольник, заданный основанием и высотой 
class triangle : public shape {
    double height;
public: // конструктор инициализирует длину основания
    triangle(double, double);   // и высоту
    double area():
};
 
// Прямоугольник, заданный длинами сторон
class rectangle : public shape {
    double other_side;
public: // конструктор инициализирует длины сторон
    rectangle(double, double);
    double area();
};
 
#endif SHAPE_H
 
//========================
//Файл реализации методов:
// Файл shape.cpp
#include "shape.h"
 
// Конструкторы инициализируют поля в списке инициализации 
shape::shape(double val) : param(va1) {} 
circle::circle (double rad) : shape(rad) {} 
triangle::triangle (double а, double h) : shape(a), height(h) {}
rectangle::rectangle (double а, double b) : shape(a), other_side(b) {},
 
// Площадь круга
double circle::area() {
    const double pi=3.1415926;
    return pi*param*param;
)
 
// Площадь треугольника
double triangle::area() {
    return param*height/2.0;
}
// Площадь прямоугольника
double rectangle::area() {
    return param*other_side;
}
 
//===============================
//Файл с тестовой функцией main():
 
// Файл test_shape.cpp
#include "shape.h"
#include <iostream.h>
 
// Функция вывода значения площади
void print_area (shape *ptr) {
    cout << "Площадь равна: " << ptr->area() << endl; )
void main() {
    circle C(5);
    triangle t(4,3.2);
    rectangle r(2,7);
    print_area(&c);
    print_area(&t);
    print_area(&r);
}


Добавлено через 4 минуты
Цитата Сообщение от JeyCi Посмотреть сообщение
с разным количеством входящих параметров...
т. е. разное количество полей разных json'ов... имхо

Добавлено через 3 часа 32 минуты
Цитата Сообщение от JeyCi Посмотреть сообщение
Coroutines (C++20)
=== если либы и компилятор обновить...
в принципе в Ultimate++ это возможно (см в части Troubleshooting) - надо пересобрать IDE с др компилятором...
if you want to use another compiler, you can run make with the CXX parameter.
хотя в \upp\ моём - вроде стоит GCC 6.3 и MinGW 710... -- это в принципе включает возможность компилировать C++v.11 и C++v.14 и даже что-то из v.17
p.s.
в CodeBlocks и QT, как уже отмечала - проще, можно задавать в настройках...
p.p.s.
а новый boost со старым компилятором, полагаю, погоды не сделает...

Добавлено через 15 секунд
Цитата Сообщение от bedvit Посмотреть сообщение
Возможно стоит поспрашивать у спецов, так ли это и взлетит ли данный подход.
вспомнила:
>> пока даже проверять не хочется асинхронность саму по себе - она просто даёт возможность appl'у не зависать, загоняя процесс в фон.
>> чтобы добиться реального ускорения, - полагаю, надо подрядить параллельность именно библиотеки, выполняющей то или иное действие, совокупно с возможностью выделения Task'ов, например, в цикле по линкам (как, например, было в Python, где я получила оооч. хорошее ускорение)...например, используя async await + aiohttp (или aiofiles)...
>> пока же в стандарте C++ беглым взглядом не вижу подобных библиотек, вобщем надо изучать сами библиотеки (какие из них уже перешли на параллельность) стандарта - чтобы потом их подрядить в Couroutines, дающий возможность запускать это добро в Tasks...
>> либо весь параллелизм прописывать самостоятельно, заботясь о thread safety и НЕ на библиотеках С++ (fopen, fread, GetLine etc)... а на начальном С - создать свою библиотеку, полагаю...
>> коллбэки и делегаты стоит подрядить для создания параллельного чтения GetLine... но вряд ли это сильно поможет (у json - 1 строка)... и у меня ещё не тот уровень для написания библиотек...
>> ... или хотя бы своих Классов с использованием design patterns с этими коллбэками и делегатами для реализации параллельности...
======
======
вобщем ВЫВОД:
>>>> ООП - (помимо его реального предназначения) - удобен, когда проект разрастается...
>>>> Py для ускорения уже имеет реальные инструменты (библиотеки), пока С++, вероятно, ещё только разрабатывает их... (не уверена, т.к. не видела внутренностей этих библиотек)
>>>> в Ultimate++ (last version - compiler 7.3 - для стандарта С++v.17 норм), ещё не v.20... но есть свой набор plug-in'ов - e.g. SSL, чтобы решить мою проблему... пример асинхронности тоже есть, как и CoWork - но реализовано это всё силами Core.h, родной для U++
>>>> LINQ C#'а (возник на основе Haskell lambdas, перерос в язык реальных запросов, правда синтаксис немного др., чем SQL, есть LINQ to Json) тоже не будет быстрее, чем Серверный SQL... поэтому по возможности выполнять операции на стороне сервера...
>>>> компактный SQLite - обкатать
P.S.
c boost'ом в U++ может быть - U++ Problem using boost library
For some reason UPP compiles successfully a standard project containing boost library, but has no success if the same code is in a Console Core Project.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
08.04.2020, 08:52  [ТС]
Цитата Сообщение от JeyCi Посмотреть сообщение
асинхронность саму по себе
Цитата Сообщение от JeyCi Посмотреть сообщение
надо изучать сами библиотеки
уже ведь реализована в U++ Core/CoWork.h (Line 212)
A lightweight worker thread for non-blocking operations.
примеры отсюда - дают error: call of overloaded 'Async(GuiMainFn_()::<lambda()>)' is ambiguous
as example p.3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// https://www.ultimatepp.org/forums/index.php?t=msg&th=10118&prevloaded=1&&start=0
#include <CtrlLib/CtrlLib.h>
#include <future>
 
using namespace Upp;
 
/*template< class Function, class... Args>
std::future<std::result_of_t<std::decay_t<Function>(std::decay_t<Args>...)>>
 
Async(Function&& f, Args&&... args )
{
    std::promise<std::result_of_t<std::decay_t<Function>(std::decay_t<Args>...)>> p;
    auto ftr = p.get_future();
    CoWork::Schedule([=, p = pick(p)]() mutable {
    p.set_value(f(args...));
    });
    return ftr;
}
*/
 
GUI_APP_MAIN
{
    StdLogSetup(LOG_COUT|LOG_FILE );
    DUMP(Async([] { return "Hello world"; }).Get());
}

(закомментированное размещаем в заголовочный файл) - так создаются библиотеки... ... результат...
Anyway, (maybe I forgot to mention to AsyncWork is now in U++)
поэтому если мы вставим пример под спойлером as-is (уже сейчас разместив закомментированное в .h) получим error: call of overloaded 'Async(GuiMainFn_()::<lambda()>)' is ambiguous, поскольку оно всё уже определено в библиотеке Core/CoWork.h... в 2020г. на дворе (линк от 2017г)

Добавлено через 5 минут
P.S.
всё есть - simple download test app that concurrently downloads a number of jpg files - 2016г. - и уже даже лучше может быть... reading the new libs
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
09.04.2020, 11:58  [ТС]
Цитата Сообщение от bedvit Посмотреть сообщение
Возможно стоит поспрашивать у спецов, так ли это и взлетит ли данный подход.
вобщем оттестировано считывание файлов (500 шт) из папки с применением асинхронности улучшается время на 0,1сек... не густо... без асинхронности идёт порядка 1 сек...
===
т.к. функций пока нет - про разброс по ядрам пока не думаю... т.к. параллельное вычисление пока не надо, а если и понадобится - то это доп расходы... не думаю, что на 500-10000 файлах сильно сэкономлю, хотя всё зависит от того, что там считать надо будет (да и, в приципе, расчёты не сложные - и на сервере посчитать можно будет)... имхо...
честно говоря, вопрос о том ИДУТ ЛИ lambda выражения через стэк или через кучу - до сих пор для меня не отвечен - если кто в теме?
===
coroutines ещё не пробовала - v.20
... да и без них считывание с файлов быстрое... теперь вижу, что все тормоза идут из IO-процессов... в PQ вероятно из его функциональной природы, а в VBA из-за медленного взаимодействия его с объектной моделью Excel - заметно становится при выгрузке больших объёмов... если выгружать сразу в Access - то его движок тоже не быстрый... ПРОБЛЕМЫ ВСКРЫТЫ, ПУТИ ОПТИМИЗАЦИИ ПОНЯТНЫ...
остальные подзадачи обработки данных - это лишь вопрос алгоритмов...
кстати в U++ есть CoSort и несколько др. с приставкой Co... - that are Parallel Algorithms - справка об этом и не умалчивает...
Хорошая Библиотека - друг разработчика... намного более useful чем форумные "мобберы"
===
а bedvit'у и DrOffset'у - ещё раз отдельные спасиба...
p.s.
Input из сети всё-таки ещё покручу в голове и в коде (если можно ускорить)...
и как альтернатива Абстрактному классу выше - Runtime Polymorphism with std::variant and std::visit - вот из названия мне уже не очень нравится - после того, как благодаря DrOffset'у узнала слова Compile-Time И Run-Time... но этот контейнер просто буду иметь ввиду...
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
12.04.2020, 09:44  [ТС]
вот оно для U++
You can use your own (or existing) compiler switches to include different things for different builds here, based on configuration flags.
там же
Link mode ◾All static - static external libraries are preferred. This is default and recommended option for windows environment.
sqlite3.dll - возможно тоже можно включить в статическую сборку... ?
p.s.
и в U++ для работы с сервером SQLite - видимо, всё-таки надо файл схемы ещё иметь(делать) в проекте.. но почему-то запросом (Execute) простые tbls достаёт из бд, а views не хочет, даже если обратиться не к view, а подобной sql-инструкцией по коду к тблице...
p.p.s.
и несколько простых правил для - Ускорение сборки C и C++ проектов
и наконец, мой ВЫВОД из жизненного опыта - по словам не сразу начинаю верить:
Цитата Сообщение от bedvit Посмотреть сообщение
про "функциональщину" -- И до сих пор так думаю, лично мне так удобнее. И на С++ парадигма программирования - это императивно программирование (процедурное, ООП,...). и в других языках которые я использую. Для функционального программирования есть другие языки -Erlang, Haskell и т.д. не уверен, что они подойдут для вашей задачи, но не спец./не пользовался, настаивать не буду.
== Дествительно, для парсинга Функцмональные языки - ну, никак... для работы с упорядоченными объёмами строго структурированной по ER-модели инфо - ОК... по крайней мере, с задачами др. рода для ФЯ ещё не встречалась...
-- хоть чтение json - и не совсем парсинг, но по моей задаче, например, значения некоторых полей json-структуры - вынуждает копаться в строковой переменной - для приведения к единообразию и логической обоснованности выбранного атрибута...
p.p.p.s.
и интересный нюанс sqlite3 - ещё не тестила... sqlite3+regex - есть линки...
0
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22
12.04.2020, 13:17
sqlite3.dll - возможно тоже можно включить в статическую сборку... ?
Ищите .lib, а лучше используйте исходники.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.04.2020, 13:17

В указанном dsn архитектура драйвера и архитектура приложения не соответствуют друг другу
Добрый день. При запуске программы выскакивает вот такая вот ошибка. В чем может быть проблема и как ее исправить?

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

Ошибка "в указанном dsn архитектура драйвера и архитектура приложения"
Вот такая ошибка при нажатии на кнопку &quot;Проверить соединение&quot; Я прочитал, что это возможно из за того, что моя система 64, а...

Архитектура бд
Я начинающий php-разраб. Пишу свой проект для своего города. Но встал вопрос о архитектуре. Пользователь создает свою страницу с...

Архитектура БД
Доброго времени суток.Задание написать АИС Учёт абонентов телефонной сети предприятия. Краткое описание предметной области: В состав...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru