Я начинаю свое первое независимое коммерческое предприятие. Мне сложно решить, какой язык использовать. Я хочу написать свое приложение на Perl, но не думаю, что его будет достаточно просто скомпилировать. Если я не напишу его на Perl, я напишу его на C++.
Приложение будет иметь множество функций, включая интерфейс wxwidgets, работу с SDL, таймеры, некоторые потоки и обработку звука. Сама программа будет несколько сложной, но не очень большой.
Итак, мой вопрос:
Редактировать: Некоторые из моих проектных спецификаций.
Все остальное довольно приземленное. Несколько разных классов и контейнеров. Несколько настраиваемых элементов управления графическим интерфейсом.





Выбирайте C++. Таймеры, многопоточность, аудио, SDL, wxwidgets - это все, что Perl может делать, но не особо в этом преуспевает. Кроме того, PAR или perl2exe - неуклюжие механизмы для распространения. Они работают, но не идеальны. Между тем, C++ (и я настоятельно рекомендую вам взглянуть на использование Способствовать росту) прекрасно вписался бы в эту роль.
Почему бы не использовать гибрид обоих? Как правило, в наши дни идет большая разработка.
Я бы предложил комбинацию Lua / C++ или Python / C++ (я не уверен, насколько хорошо работает комбинация Perl / C++, но это тоже может быть хорошим вариантом).
Лично я сделал много работы с комбо Lua / C++, и это довольно фантастично.
Да, это лучший способ. Также во многих случаях многие вещи, которые кажутся зависящими от скорости, в действительности не так важны. Также, если вы много занимаетесь математикой и просто меняете ядро Lua на ядро LuaCoCo, это может увеличить математику стороны Lua в 10 раз.
Я работаю над проектом, чтобы сделать комбинацию Perl / C++ более простой. Погуглите мое имя и Perl для получения дополнительной информации.
Inline :: CPP [search.cpan.org/perldoc?Inline::CPP] - это самый простой способ связать Perl и C++ вместе, очевидно, это встраивает код C++ в программу, в основном на Perl. Леон работает с противоположной стороны, встраивая Perl в программу на C++. Как всегда, есть несколько способов сделать это.
Я использую PAR, чтобы упаковать значительную программу Perl / Tk для Windows. Потребовалось немного повозиться, но это сработало.
Если у вас есть хотя бы такой же опыт работы с Perl, как и с C++, разработка на Perl должна быть быстрее. Но скорость выполнения эквивалентной программы будет ниже. Все остальные критерии могут быть удовлетворены любым из них, поэтому я бы сказал, что все сводится к личному выбору.
Лично? Я говорю, не зацикливайтесь на этом слишком долго. У любого пути есть свои плюсы и минусы, но похоже, что вы опасно близки к тому, чтобы застрять в «аналитическом параличе». Если ничего другого, подбросьте монетку или выберите ту, которая, по вашему мнению, имеет самое красивое имя.
Спасибо за содержательный комментарий. Я планировал и исследовал. Большую часть времени мы занимаемся этим вопросом и обсуждаем все за / против в течение нескольких недель.
Отличный ответ. Я сам предрасположен к аналитическому параличу, и важно начать.
Я программист на C++ и Perl. C++ - хороший язык, но всякий раз, когда у меня есть выбор, я использую Perl, поскольку разработка просто идет намного быстрее.
Пара комментариев:
Спасибо за эту информацию. Ephimient и вы опровергли слухи, которые я слышал. Разумное лицензирование, можно ли упаковать Perl в мое коммерческое приложение? Я не возражаю против ссылки на Perl.org или PAR, но я хочу убедиться, что я в порядке.
Это абсолютно законно. По сути, это причина, по которой perl имеет двойные условия лицензирования Artistic + GPL. Еще одна вещь: не думайте, что PAR прыгает через обруч, чтобы скрыть ваш исходный код. Попробуйте распаковать foo.exe, где foo.exe - это исполняемый файл, упакованный в PAR. См. Также: Модуль Filter :: Crypto.
Функция важна. Код, независимо от языка, будет делать похожие вещи, особенно при использовании одних и тех же библиотек и компонентов. Если у вас нет точной функции, разработанной с помощью библиотек и инструментов, создайте прототип на Perl.
Есть аргумент, что разработка на динамических языках займет меньше времени. В Perl и C++ есть аналогичные проблемы, связанные с получением раскрывающегося списка в нужном месте, заполнением его правильными значениями, внесением правильного изменения в состояние программы из пользовательского ввода.
Если Perl не работает на определенных платформах, преобразуйте код на C++.
Вероятно, есть несколько указателей, которые помогут в этом подходе:
Это означает, что вы, вероятно, напишете прототип на OO Perl. Если у вас есть высокоуровневые функциональные возможности, прибитые к одной платформе - при условии, что вы сможете продвинуться так далеко в Perl - тогда C++ станет более или менее оптимизацией.
Возможно, вы могли бы ограничить прототип более или менее родственными C++. Но я не уверен в этом, вы можете разложить map на цикл или даже просто заменить его функцией фильтра, вызываемой с помощью указателя функции для тестовой функции.
Вы можете написать роман на китайском и роман на английском, которые рассказывают одну и ту же историю, но если вы напишете его на английском и переведете на китайский, это очевидно. У каждого языка разные идиомы. OO Perl - это настолько ужасно плохой C++, что это даже не смешно. C++ также ужасен Perl. Ограничение себя подмножеством, которое оба содержат, фактически игнорирует вопрос «что лучше», пытаясь сделать оба эквивалентными, когда это не так.
Напишите свою основную функциональность на C++, а затем напишите интерфейс для вашего приложения в инструменте для рассматриваемой платформы, например, Cocoa для Mac OS X, .NET / Delphi / MFC для Windows и т. д.
Это мой предпочтительный способ разработки кроссплатформенных настольных приложений. Конечно, я очень мало знаю о том, чего вы пытаетесь достичь, поэтому это может показаться вам слишком жирным.
Отличная причина использовать Perl - метапрограммирование.
Perl достаточно гибок, чтобы вы могли писать код для написания кода (вот как Moose творит свою магию). Вы сэкономите время и уменьшите количество ошибок, которые вам нужно устранить.
Отличная причина использовать Perl - это CPAN.
Интересная мысль. Как вы это делаете? Извлечь зависящие от скорости и сложные вещи в C++ и обернуть их в свой код Lua / Python?