мультиплатформенное графическое приложение на C (P) ython или D - PullRequest
3 голосов
/ 16 апреля 2011

Мне действительно нравится язык D (2), и я хотел бы использовать его для многоплатформенного приложения с графическим интерфейсом, но я вижу, что его экосистема не совсем развита. После перехода с Linux на (Free) PC-BSD я вижу, что в портах нет готового 64-битного компилятора, и никто не уверен, готов ли какой-либо из библиотек GUI (QtD, gtkD, wxD) для серьезного проекта, и мы хотели бы начать с проекта как можно скорее.

Otoh, мне ранее рекомендовалось попробовать Python, который является зрелым, со многими инструментами, библиотеками GUI и т. Д., Но был вопрос о скорости - мы должны использовать одну C lib для вычисления Ephemeris и написать несколько библиотек, которые будут использовать это С Пб.

Тем не менее, это может быть хорошей (идеальной) работой для Cython, поэтому мой вопрос в том, что вы думаете о написании GUI-части на Python (Qt, EFL) и использовании Cython для критичных для производительности вещей (связывание внешних C lib и написание наших собственных библиотек) вместо (в ожидании) D, чтобы стать готовым к серьезным проектам?

Ответы [ 4 ]

6 голосов
/ 16 апреля 2011

Это интересный вопрос для меня, так как D - мой любимый язык программирования, а Python - мой второй фаворит. Прямо сейчас, насколько мне нравится D, я должен признать, что экосистема несколько незрелая.

GtkD готов к довольно серьезным проектам, но не совсем соответствует стандартам инструментария GUI на других языках, особенно в отношении документации. Я использовал ее для библиотеки заговоров, и она работала довольно хорошо, но с небольшими отклонениями. DWT только недавно добавил поддержку D2. AFAIK WxD - это только привязка, а не D-ified обертка. У QtD все еще было несколько разных проблем, например, требовался исправленный компилятор для определенных функций. Как правило, вы можете сделать проект с графическим интерфейсом в D2 прямо сейчас, но он не будет полностью гладким.

Хотя Cython является хорошей попыткой уменьшить медлительность чистого Python, у него есть несколько существенных недостатков, которые заставляют меня предпочитать D, когда мне нужна производительность или способность выполнять работу низкого уровня:

  • Требуется явное объявление типа, если вы ожидаете получить от него C-подобную производительность. Если вы попытаетесь написать общий код, вы заплатите значительное снижение производительности. С помощью D вы можете легко написать эффективный общий код с помощью шаблонов.

  • Cython не / не реализовал должным образом некоторые интересные функции, которые делают Python интересным. Например, он только недавно получил поддержку замыканий. Я не знаю, насколько быстро эта ситуация улучшается или какие еще ограничения остаются.

  • Если используется многопоточность, у вас все еще есть глобальная блокировка интерпретатора Python.

  • Необходимость использовать как Cython, так и обычный интерпретатор CPython и хранить код Cython в отдельных модулях от обычного кода Python выглядит немного глупо. Как правило, между языками есть трения, особенно если вы заботитесь об эффективности. Например, типы Numpy не просто эффективно работают в Cython.

5 голосов
/ 16 апреля 2011

Я, очевидно, склонен как разработчик ядра Cython, но я, безусловно, могу порекомендовать его. Комбинация CPython и Cython обеспечивает труднодостижимый в других отношениях уровень скорости разработки, стабильности платформы, переносимости, низкоуровневого кодирования и возможностей FFI, а также производительности выполнения, включая очень простой путь оптимизации от быстрого и простого кода до высоко настраиваемого кода на C скорость.

Я также могу порекомендовать Qt в качестве инструментария GUI. Очень хорошо работает с Python.

2 голосов
/ 16 апреля 2011

Написание GUI на динамическом языке и написание кода, чувствительного к производительности, на другом языке - отличный способ написать приложение. Это может быть сделано в Python, это также может быть действительно легко сделано в Tcl / Tk и некоторых других языках сценариев.

1 голос
/ 16 апреля 2011

Что ж, это типичный сценарий использования, когда вы просто пишете код обработки чисел на C / C ++ или любом другом языке, который может быть связан с модулем C, и просто добавляете не критичные к производительности вещи с помощью языка сценариев. Интерфейс Python C вполне подходит для работы и использования SWIG или даже написания кода привязки вручную не так уж сложно (если вы не говорите о потоках и не должны обрабатывать CPythons idiotic GIL ...).

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