Новый проект: у меня проблемы с выбором языка для использования

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

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

Итак, мой вопрос:

  1. Может ли PAR, Perl2exe или эквивалент скомпилировать больше, чем базовые тестовые примеры?
  2. Помимо скорости и компиляции, почему я должен использовать C++ вместо Perl?

Редактировать: Некоторые из моих проектных спецификаций.

  • Мультиплатформенность. Я ожидаю, что 50% или более моих пользователей будут владеть компьютерами Mac, а большинство остальных - пользователи Windows. Если возможно, я также хочу поддерживать Linux, так как это моя повседневная операционная система.
  • Поскольку это мультиплатформенный, мне нужен единый инструмент для создания графического интерфейса. Он должен иметь возможность использовать базовые типы и позволять мне создавать настраиваемые обработчики событий и настраиваемые объекты графического интерфейса.
  • Требуется обработка звука. Читайте и играйте в форматах wav и / или mp3. Также я буду использовать несколько пользовательских алгоритмов для определения особых свойств аудиофайлов; такие вещи, как темп, паттерны и так далее.
  • Я бы хотел, но не нуждаюсь в поддержке SDL / OpenGL.

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
651
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Выбирайте C++. Таймеры, многопоточность, аудио, SDL, wxwidgets - это все, что Perl может делать, но не особо в этом преуспевает. Кроме того, PAR или perl2exe - неуклюжие механизмы для распространения. Они работают, но не идеальны. Между тем, C++ (и я настоятельно рекомендую вам взглянуть на использование Способствовать росту) прекрасно вписался бы в эту роль.

Ответ принят как подходящий

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

Я бы предложил комбинацию Lua / C++ или Python / C++ (я не уверен, насколько хорошо работает комбинация Perl / C++, но это тоже может быть хорошим вариантом).

Лично я сделал много работы с комбо Lua / C++, и это довольно фантастично.

Интересная мысль. Как вы это делаете? Извлечь зависящие от скорости и сложные вещи в C++ и обернуть их в свой код Lua / Python?

J.J. 09.10.2008 08:14

Да, это лучший способ. Также во многих случаях многие вещи, которые кажутся зависящими от скорости, в действительности не так важны. Также, если вы много занимаетесь математикой и просто меняете ядро ​​Lua на ядро ​​LuaCoCo, это может увеличить математику стороны Lua в 10 раз.

Robert Gould 09.10.2008 08:51

Я работаю над проектом, чтобы сделать комбинацию Perl / C++ более простой. Погуглите мое имя и Perl для получения дополнительной информации.

Leon Timmermans 09.10.2008 16:53

Inline :: CPP [search.cpan.org/perldoc?Inline::CPP] - это самый простой способ связать Perl и C++ вместе, очевидно, это встраивает код C++ в программу, в основном на Perl. Леон работает с противоположной стороны, встраивая Perl в программу на C++. Как всегда, есть несколько способов сделать это.

ephemient 09.10.2008 21:08

Я использую PAR, чтобы упаковать значительную программу Perl / Tk для Windows. Потребовалось немного повозиться, но это сработало.

Если у вас есть хотя бы такой же опыт работы с Perl, как и с C++, разработка на Perl должна быть быстрее. Но скорость выполнения эквивалентной программы будет ниже. Все остальные критерии могут быть удовлетворены любым из них, поэтому я бы сказал, что все сводится к личному выбору.

Лично? Я говорю, не зацикливайтесь на этом слишком долго. У любого пути есть свои плюсы и минусы, но похоже, что вы опасно близки к тому, чтобы застрять в «аналитическом параличе». Если ничего другого, подбросьте монетку или выберите ту, которая, по вашему мнению, имеет самое красивое имя.

Спасибо за содержательный комментарий. Я планировал и исследовал. Большую часть времени мы занимаемся этим вопросом и обсуждаем все за / против в течение нескольких недель.

J.J. 09.10.2008 08:36

Отличный ответ. Я сам предрасположен к аналитическому параличу, и важно начать.

Darrel 30.10.2008 16:36

Я программист на C++ и Perl. C++ - хороший язык, но всякий раз, когда у меня есть выбор, я использую Perl, поскольку разработка просто идет намного быстрее.

Пара комментариев:

  1. PAR, perlapp и perl2exe не являются компиляторами. Они упаковщики. Не существует компилятора Perl, кроме самого perl. Если вам нужна какая-то форма кода Perl в виде байт-кода, вам придется дождаться Perl 6 на Parrot.
  2. Я использовал PAR для упаковки приложения с общим количеством SLOC около 500 тыс., Не считая самого perl. Он работал нормально, работал с той же скоростью, что и сам Perl, но запуск был медленнее. Это был 2005 год. С тех пор производительность при запуске значительно улучшилась, если вы установили модуль Archive :: Unzip :: Burst на машине разработки, на которой вы упаковываете программу. Я успешно использовал PAR для различных приложений, размер которых варьировался от крошечных до вышеупомянутых 500 тыс. Строк. Если вам нужна помощь с PAR, есть активный и удобный список рассылки. Просто сделайте одолжение нам и себе, не вмешивайтесь в слова «OMG, ничего не работает, помогите мне, kthx!». Люди делают это все время (а иногда все равно получают помощь). :)
  3. Многопоточность Perl не очень хороша. Вместо этого проверьте, подходит ли вам что-то вроде POE. Я пользователь threads.pm, но не хочу им быть. Приносим извинения трудолюбивому сопровождающему Джерри Д. Хеддену.
  4. wxPerl находится в довольно хорошей форме, и вокруг него есть сообщество. Естественно, поскольку wxWidgets - это C++, он всегда немного актуальнее и полнее.
  5. SDL Perl - это прямая оболочка библиотеки. (Небольшая) документация предполагает, что вы это уже знаете. По моему опыту, чтение документации для библиотеки на другом языке может быть немного хлопотным.
  6. Таймеры в perl подойдут: Время :: HiRes
  7. Переносимость - это сложно. В большей степени в C++, чем в Perl, но на самом деле все сводится к дисциплине и возможности тестирования на многих платформах.
  8. Для Perl в Windows обязательно проверьте Strawberry Perl.

Спасибо за эту информацию. Ephimient и вы опровергли слухи, которые я слышал. Разумное лицензирование, можно ли упаковать Perl в мое коммерческое приложение? Я не возражаю против ссылки на Perl.org или PAR, но я хочу убедиться, что я в порядке.

J.J. 09.10.2008 17:49

Это абсолютно законно. По сути, это причина, по которой perl имеет двойные условия лицензирования Artistic + GPL. Еще одна вещь: не думайте, что PAR прыгает через обруч, чтобы скрыть ваш исходный код. Попробуйте распаковать foo.exe, где foo.exe - это исполняемый файл, упакованный в PAR. См. Также: Модуль Filter :: Crypto.

tsee 09.10.2008 17:57

Функция важна. Код, независимо от языка, будет делать похожие вещи, особенно при использовании одних и тех же библиотек и компонентов. Если у вас нет точной функции, разработанной с помощью библиотек и инструментов, создайте прототип на Perl.

Есть аргумент, что разработка на динамических языках займет меньше времени. В Perl и C++ есть аналогичные проблемы, связанные с получением раскрывающегося списка в нужном месте, заполнением его правильными значениями, внесением правильного изменения в состояние программы из пользовательского ввода.

Если Perl не работает на определенных платформах, преобразуйте код на C++.

Вероятно, есть несколько указателей, которые помогут в этом подходе:

  1. Это означает, что вы, вероятно, напишете прототип на OO Perl. Если у вас есть высокоуровневые функциональные возможности, прибитые к одной платформе - при условии, что вы сможете продвинуться так далеко в Perl - тогда C++ станет более или менее оптимизацией.

  2. Возможно, вы могли бы ограничить прототип более или менее родственными C++. Но я не уверен в этом, вы можете разложить map на цикл или даже просто заменить его функцией фильтра, вызываемой с помощью указателя функции для тестовой функции.

Вы можете написать роман на китайском и роман на английском, которые рассказывают одну и ту же историю, но если вы напишете его на английском и переведете на китайский, это очевидно. У каждого языка разные идиомы. OO Perl - это настолько ужасно плохой C++, что это даже не смешно. C++ также ужасен Perl. Ограничение себя подмножеством, которое оба содержат, фактически игнорирует вопрос «что лучше», пытаясь сделать оба эквивалентными, когда это не так.

Patrick Niedzielski 21.09.2012 15:13

Напишите свою основную функциональность на C++, а затем напишите интерфейс для вашего приложения в инструменте для рассматриваемой платформы, например, Cocoa для Mac OS X, .NET / Delphi / MFC для Windows и т. д.

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

Отличная причина использовать Perl - метапрограммирование.

Perl достаточно гибок, чтобы вы могли писать код для написания кода (вот как Moose творит свою магию). Вы сэкономите время и уменьшите количество ошибок, которые вам нужно устранить.

Отличная причина использовать Perl - это CPAN.

Другие вопросы по теме