LINUX.ORG.RU

Помогите выбрать инструмент для разработки.

 


0

2

Добрый день!

Есть задача, написать небольшую программу которая будет обрабатывать большие данные. Программа должна работать максимально быстро. Она будет брать исходные данные, обрабатывать и складировать в памяти что бы потом взять результат и обработать. Будет такая некая БД в памяти.

Вопрос, какой лучше инструмент выбрать, если известно что должно работать с большим объёмом в памяти, с синхронным поиском результатов в памяти. Работать будет под управлением Ubuntu 16. Работать как я говорю должно максимально быстро. Понятно что мой алгоритм будет максимально оптимизирован. Никаких форм не должно быть, будет только консольное приложение. И понятно что можно написать на ASM, но ASM это уж слишком долго мне писать придётся. Я так думаю C или C++, но на них под Linux никогда не писал. Даже не знаю как компилировать. Ещё думаю Delphi 10.3 Firemonkey, но скорость не знаю как будет при обработке. Или Lasarus. Посоветуйте пожалуйста!

Задачу слишком туманно обрисовал.

Delphi 10.3 Firemonkey

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

А это точно не очередной троллинг?

EXL ★★★★★
()

Я бы взял С++. Если даже не знаешь с чего начать, попробуй тот же QtCreator, создай шаблон консольного приложения и на его скелет уже наращивай мясо. Если не собираешься использовать какие-то ос-специфичные вещи, то общих знаний тебе хватит.

hippi90 ★★★★★
()

но на них под Linux никогда не писал.

github.com в помощь. Там и определишься.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от anonymous

Я бы научился читать что написано. Я не прошу совета что мне и как делать, не спрашиваю что бы Вы сделали на моём месте. Я просто не знаю ни какие компиляторы есть под Linux, я не знаю кто из них быстрее будет производить вычисления.

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

Можно начать изучать все основные инструменты, но это будет ооочень долго.

Но я насколько догадываюсь, есть разные компиляторы для тогоже C++.

Мне нужно консольное приложение, которое будет работать локально.

LeximusNet
() автор топика
Ответ на: комментарий от EXL

У Delphi появилась возможность писать как они говорят Нативные консольные приложения под Linux. В какой вид приведёт код и использует ли он какие прослойки я увы не знаю, но на текущий момент приложение написано на Delphi, и портировать на Delphi FMX будет не долго.

LeximusNet
() автор топика

C++, понятное дело. О чём тут думать?

Даже не знаю как компилировать

Узнай. man gcc и миллионы примеров в сети.

slovazap ★★★★★
()
Ответ на: комментарий от LeximusNet

С такой постановкой задачи маловероятно, что получится написать сразу максимально быстрое приложение.

Сначала нужно прикинуть, где могут быть узкие места. Но не углубляйся в анализ, потому что настоящие результаты покажет профайлинг и бенчмарк.

Начни с простого. Один поток ожидает данные и складирует их в твоё хранилище.

Если у тебя куча мелких объектов, то постоянные new/delete, malloc/free в C/C++ вскоре могут сильно фрагментировать память. Тем не менее, написать свой аллокатор ты всегда успеешь.

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

Далее делаешь N-воркеров, которые будут забирать данные, делать вычисления, и куда-то сохранять результат.

Узких мест у тебя может быть куча — I/O, мьютексы, кэш процессора, алгоритм, сетевая часть. Возможно, в твоём случае пригодится OpenCL, расширения процессора. Но пока информации слишком мало.

Так что пиши, замеряй, расширяй.

Ну и ещё базз-вордов: неблокирующие структуры, ØMQ, OpenMP, распределённые вычисления.

P.S. Инструменты? C++ и компилятор GCC.

Pravorskyi ★★★
()
Последнее исправление: Pravorskyi (всего исправлений: 1)
Ответ на: комментарий от Pravorskyi

по-моему фраза

«обрабатывать большие данные» и «работать максимально быстро» - это шедевр :)

Это сразу нам говорит какой тип данных, какого типа обработки и однозначно говорит о выборе языка.

Но если есть делфи и работает на делфи, то может и взять делфи?

sshestov
()
Ответ на: комментарий от Pravorskyi

Спасибо большое!!!

И предыдущему автору тоже. Буду GCC и C++ смотреть.

Данную тему считаю закрытой, остальное уже буду писать на соответствующих форумах C++ и GCC

Спасибо!

LeximusNet
() автор топика
Ответ на: комментарий от LeximusNet

я не знаю кто из них быстрее будет производить вычисления.

Тебе сказали, жулия! Если надо не быстро, но замороченно, то J

deadplace
()
Ответ на: по-моему фраза от sshestov

Проблема в том что вычисления большие, не столько сложные, сколько много и долго по объёму.

Есть сервер 24 ядра и 72 гигабайта оперативки, который под Ubuntu и практически свободен и постоянно включен. Хочу вычисления запускать под ним. Под Linux только появилась возможность писать на Delphi, и технически мне было бы легко перенести то что написано на неё, но как она работать будет не знаю. В полне возмодно что быстрее будет всё таки переписать под Linux на C++

LeximusNet
() автор топика

Может готовую БД взять? Redis, Mongo, Postgress или ещё что?

anonymous
()
Ответ на: комментарий от LeximusNet

Ну опять же, сильно зависит от того, какие вычисления

По идее Лазарус должен быть компилируемым. Тогда сильно большого выигрыша от перехода на другой «более быстрый» язык не получим.

Можно взять Си или плюсы; но по-моему для числодробилки хорошой подойдет фортран, а в него порог вхождения ниже (вся сложность - индексы идут с 1; зато нет геморроя с памятью). Взамен можно накушаться с библиотеками.

Если в компьютере миллион ядер и столько же памяти, то как бы напрашивается параллелизация, будь то MPI или OpenMP. Не знаю, предполагает ли это задача и как с этим в Лазарусе, в фортране точно просто (как и в Си, но сам по себе Си будет позамороченнее).

Если вычисления таковы, что их много, и каких-либо хитрых библиотек не нужно, то со всякими джулиями-пайтонами я бы не заморачивался: геморрой как и в фортране, а выигрыша по скорости не будет.

Всё-таки дальнейшая детализация задачи поможет понять что нужно.

Также, если стоит вопрос «как БД, только другая» то это уже не про числодробилку и не про скорость.

sshestov
()
Последнее исправление: sshestov (всего исправлений: 1)

Я так думаю C или C++, но на них под Linux никогда не писал.

их стандартная библиотека везде работает одинаково, судя по задачи тебе больше не надо. инструмент разработки: gcc или clang по вкусу.

anonymous
()
Ответ на: комментарий от anonymous

если ты без жирной IDE парализован как программист то на линуксах можешь попробовать, выбрать из следующего: QtCreator, Clion, Gnome Builder, KDevelop, чё там ещё может подскажут.

anonymous
()

С языком всё ясно - это C++. И что тогда? Какую библиотеку тебе под это взять? Ну стандартную и всякие boost. Хоть я фанат Qt5/C++, но всё же не настолько упорот, чтобы советовать Qt там, где он не подойдет.

Моя версия, еще раз: C++ и его STL/boost.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от EXL

А это точно не очередной троллинг?

Вполне. Они сейчас хитрые падлюки, под интересующихся косят )))

Однако Дата регистрации: 19.04.2018 13:44:12, не верю что пациент так долго бы ждал, чтобы расконсервировать свой вкусный троллический акк

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от deadplace

А какой компилятор годный?

годится разве что для фортрана

Оу...

vladimir_vist
()
Ответ на: комментарий от LeximusNet

gcc, clang, и с десяток текстовых редакторов к ним на выбор с разным порогом вхождения

raven_cler ★★
()

C++ + CMake + Qt(опционально)
В качестве IDE посоветовал бы KDevelop, у него кмк лучшая интеграция с CMake'ом.

WatchCat ★★★★★
()
Последнее исправление: WatchCat (всего исправлений: 1)

Нода жс, шлёп-шлёп и в продакшен. Всего-то в 3-4 раза медленнее си, но тебе быстрее и не надо. Плюс не надо ничего компилировать, тем более, что ты не знаешь как. И на си ты не знаешь как писать, так что бери ноду и не выделываться. Потом начнётся, у меня где-то память течёт, а что такое сегфолт, а как потоки запилить, а почему у меня всё блочится и т.д. А на жс можно даже мартышку научить писать.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от anonymous

если ты без жирной IDE парализован как программист то лучше иди дворником

fixed

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

да, адепты раста ещё не пришли с уроков :)

bonta ★★★★★
()

Мда, куда катится мир. Топикстартер явно указал, что программа будет небольшая, должна работать под *nix и быстро, исключительно консольная. Ну казалось бы, семи пядей во лбу не надо, чтобы понять, что для этого лучше всего подходит обычный Си. Ну может быть на крайний случай с ассемблерными вставками. Но тут тебе и C++ советуют и даже Qt с Kdevelop.

anonymous
()

C, C++, Delphi

Ты слишком отстал от жизни, никто сейчас на таком легаси не пишет.

Бери node.js - современная и быстрая система. Ну а писать на JS просто приятно, да.

KillTheCat ★★★★★
()
Последнее исправление: KillTheCat (всего исправлений: 1)
Ответ на: комментарий от LeximusNet

Почти. Если знаете дельфи - пишите на нём ui, для данных не посоветую, любую популярную библиотеку/бд

Shadow ★★★★★
()

Большие данные, пфф. Сколько у тебя там памяти? Ну пусть 256гб, а дальше пойдёт своп и похрен на чём оно написано.

pon4ik ★★★★★
()

Тебе на чистом C надо писать.

Quasar ★★★★★
()

Хаскелл на данный момент является лучшим языком для новых проектов. Исключительная выразительность языка и мощная система типов позволят Вам быстро писать элегантный и надежный код. Язык еще не столь распространён. пока ваши конкуренты используют устаревшие технологии на базе нетипизированных лямбла-исчислений или императивного подхода с элементами динамической типизации, вы сможете в разы поднять свою эффективность, задействовав System F - последнее достижение науки в области статической типизации. Но это еще не все. В жизни любого стартапа наступает момент, когда он превращается в продукт и сопровождению проекта привлекаются дополнительные разработчики. На этом этапе распространённость и доступность языка начинает играть решающую роль. Благодаря активной популяризации Хаскелла и функционального программирования в среде коммерческих программистов, а также поддержке этого языка со стороны лидера производства оффисных приложений и операционных систем - корпорации Майкрософт, Вы можете быть уверены, что в будущем Вам не придется переписывать свой проект на С++, как это было с печально известной разработкой Пола Грэма. Хаскелл обеспечит вам гарантии успеха и стабильности Ваших начинаний. Выберите Хаскелл сейчас и через несколько лет Вы сможете наслаждаться результатами своих трудов - успешным проектом, выполненным с учетом всех современных технологий и индустриальных стандартов. Хаскелл - Ваш проводник к успеху в мире разработки программного обеспечения. Выбирайте Хаскелл.

pineapple
()

Rust или C/C++, не знаю что из этого быстрее. Но Rust удобнее. Если хочется попроще и возможности языка удовлетворяют, то Lua.

Задача плохо описана, это всё пальцем в небо. Возможно имеет смысл использовать СУБД, а не изобретать свой велосипед. И писать на какой-нибудь Java, потому что удобный многопоток + магия JIT. Критичные части можно вынести в нативки.

InterVi ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.