Правильный язык для прототипирования OpenGL UI. Питчинг питон - PullRequest
0 голосов
/ 07 февраля 2009

Итак, у меня появилась идея, что я попытаюсь создать прототип экспериментального пользовательского интерфейса с использованием OpenGL и некоторой физики. Я мало знаю об этих темах, но у меня достаточно опыта в таких языках программирования, как C ++, Java и C #. После некоторого начального исследования я решил использовать Python (с Eclipse / PyDev) и Qt, оба для меня новые, и теперь у меня есть четыре разные темы для изучения более или менее одновременно.

Я довольно далеко продвинулся и в OpenGL, и в Python, но, хотя Python и его экосистема изначально казались идеальными для этой задачи, теперь я обнаружил некоторые серьезные недостатки. Плохая документация по API и отсутствие завершения кода (из-за динамической типизации), необходимость импортировать каждый модуль, который я использую в каждом другом модуле, становится утомительной, когда для каждого модуля требуется один класс, приходится выбирать правильный модуль для запуска программы и ждать несколько секунд для запуска программы и затемнения среды IDE перед тем, как получить уведомление о многих очевидных опечатках и других ошибках. Это становится действительно раздражающим действительно быстро. Откровенно говоря, я не понимаю, о чем весь этот пух. Лямбда-функции, списки и т. Д. Хороши и все такое, но, безусловно, есть более важные вещи.

Так что, если кто-то не может решить хотя бы некоторые из этих неприятностей, Python отсутствует. C ++ также отсутствует по понятным причинам, а C # - главным образом из-за отсутствия переносимости. Это делает Java и JOGL привлекательным вариантом, но мне также интересно узнать о Ruby и Groovy. Я хотел бы, чтобы ваше мнение об этих и других, чтобы я не повторил ту же ошибку.

Требования:

  • Убирайся с моего пути.
  • Хорошее завершение кода. Полные сигнатуры методов, включая типы данных и имена параметров.
  • Хорошая поддержка OpenGL.
  • Поддержка Qt предпочтительна.
  • Объектно-ориентированный
  • Подходит для RAD, прототипирование
  • Кроссплатформенность
  • Предпочтительно с открытым исходным кодом, но, по крайней мере, бесплатно.

Ответы [ 9 ]

7 голосов
/ 08 февраля 2009

Похоже, у вас, в основном, проблемы не с самим Python, а с IDE.

"Плохая документация API"

К какому API? Сам Python, Qt или какая-то другая библиотека, которую вы используете?

"отсутствует завершение кода (из-за динамической типизации)"

Пока вы не делаете ничего волшебного, я считаю, что PyDev чертовски хорош в выяснении этих вещей. Если он потерян, вы всегда можете напечатать подсказку, выполнив:

assert isinstance(myObj, MyClass)

Затем PyDev предоставит вам завершение кода, даже если myObj происходит из динамического контекста.

«необходимость импортировать каждый модуль, который я использую в каждом другом модуле, становится утомительной, если иметь один класс на модуль»

Установите расширения PyDev, он имеет авто-импорт на лету. Или соберите весь свой импорт в отдельный модуль и выполните:

from mymodulewithallimports import *

«необходимо выбрать правильный модуль для запуска программы»

В Eclipse вы можете установить файл запуска по умолчанию или просто установить флажок «использовать последнюю конфигурацию запуска». Тогда вам никогда не придется выбирать его снова.

"до того, как вы узнаете о многих очевидных опечатках и других ошибках"

Установите расширения PyDev, он имеет более продвинутую проверку синтаксиса и с радостью уведомит вас о неиспользованных импорте / переменных, неинициализированных переменных и т. Д.

2 голосов
/ 15 июня 2009

Я не понимаю, почему никто не слышал о языке программирования D?

ЭТО ИДЕАЛЬНОЕ РЕШЕНИЕ !!!!

2 голосов
/ 07 февраля 2009

Глядя только на ваш список, я бы порекомендовал C ++; тем более, что завершение кода так важно для вас.

О Python: Хотя у меня мало опыта в программировании OpenGL на Python (для этого использовался C ++), сообщество Python предлагает ряд интересных модулей для разработки OpenGL: pyopengl , pyglew , pygpu ; просто назвать несколько.

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

1 голос
/ 08 февраля 2009

Рассмотрим Boo - он обладает многими преимуществами Python, в то же время перенося функции из других мест, и его вывод типа времени компиляции (когда переменные не имеют явного заданного типа или явно утка), позволяет вид поддержки автозаполнения, о котором вы спрашиваете.

Библиотека Tao.OpenGL предоставляет OpenGL для приложений .NET (таких как эти компиляторы Boo) с явной поддержкой Mono.

(Лично я в основном являюсь разработчиком Python, когда не занимаюсь C или Java, но мне наплевать на автозаполнение ... но, эй, это ваш вопрос; кроме того, соглашение по одному классу на модуль кажется как смехотворная боль, которую ты безнадежно переживаешь).

1 голос
/ 08 февраля 2009

Я начал заниматься программированием OpenGL с GL4Java, который был перенесен на JOGL, и вы должны обязательно попробовать его (JOGL). Java предлагает большинство функций, которые вам требуются (плюс Eclipse дает завершение кода), и специально для JOGL существует множество руководств, которые помогут вам начать работу.

1 голос
/ 07 февраля 2009

Кажется, что Pydev может предложить вам завершение кода в Eclipse.

1 голос
/ 07 февраля 2009

Я пытался использовать Java3D и Java один раз. Я понял, что Java3D - это типичный Java API ... множество объектов для выполнения простых задач, и, поскольку это Java, это переводит много кода. Затем я перешел на Jython в Eclipse, где очищал код, оставляя мне только сложность Java3D.

Итак, в конце концов, я пошел в противоположном направлении. Одно из преимуществ, которое он имеет перед чистым python - это то, что я могу использовать Java со всеми преимуществами Eclipse, такими как автозаполнение, и переносить его на python, когда части становятся громоздкими в Java.

1 голос
/ 07 февраля 2009

Текстовый редактор (даже не IDE), который я использую, позволяет импортировать определения функций API. Завершение кода не является языковой функцией, особенно в OpenGL. Просто введите gl[Ctrl+I], и вы получите варианты.

1 голос
/ 07 февраля 2009

Единственная реальная альтернатива, если вы хотите всего этого, - это использовать Java, но, честно говоря, вы немного придирчивы к функциям. Действительно ли завершение кода так важно? Все остальное, что вы перечислили, традиционно очень хорошо воспринимается с Python, поэтому я не вижу проблемы.

...