Действительно ли функциональный язык является хорошим выбором для Средства моделирования Полета? Как насчет Lisp?

В вашем коде нет синтаксической ошибки. Я протестировал его с клиентом MySQL, и он отлично работает.

Затем я скачал DBeaver и попробовал ваш запрос. Я обнаружил, что мне нужно выделить все строки в запросе, а затем выполнить, используя Ctrl-Enter.

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

Теперь я удалю DBeaver. Не похоже, что это улучшит мою производительность.

11
задан Community 23 May 2017 в 11:50
поделиться

7 ответов

Я ничего не знаю о полете sims, и Вы ничего не перечислили в особенности, что они состоят из, таким образом, это - главным образом предположение о записи FS в Lisp.

Почему нет:

  • Lisp выделяется при исследовательском программировании. Я думаю, что начиная с FSS, вокруг такого длинного, и существуют бесплатные и примеры с открытым исходным кодом, что он не извлек бы выгоду так же из этого типа программирования.

  • Полет sims главным образом (я предполагаю), записанный на статических, исходно скомпилированных языках. При поиске чистой производительности во время выполнения в Lisp это имеет тенденцию означать описания типа и другие конструкции not-so-Lispy. Если Вы не получаете производительность, Вы хотите с наивными подходами, Ваш оптимизированный Lisp мог бы закончить тем, что смотрел много как C, и Lisp не так хорош в C при записи C.

  • Много FS, я предполагаю, взаимодействует через интерфейс к графической библиотеке как OpenGL, который записан в C. В зависимости от того, как Ваш FFI / привязка OpenGL, этот мог бы, снова, заставить Ваш код быть похожим на C-Lisp. У Вас не могло бы быть большой победы, что Lisp выполняет, скажем, в веб-приложении (который состоит из генерации древовидной структуры простого текста, который Lisp силен в).

Почему:

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

  • Они используют строки для ключей повсеместно (C++ не имеет символов). Они используют XML для получеловекочитаемых файлов конфигурации (C++ не имеет читателя во время выполнения). Просто переключаясь на собственные конструкции Lisp здесь могла быть большая победа для минимального усилия.

  • Ничто не смотрит на весь комплекс, даже "AI". Это - просто вопрос хранения всего организованного, и Lisp будет силен в этом, потому что это будет намного короче.

Но аккуратная вещь о Lisp состоит в том, что это - мультипарадигма. Можно использовать OO для организации "объектов" и FP для вычисления в каждом объекте. Я говорю, только начинают писать и видят, где это берет Вас.

2
ответ дан 3 December 2019 в 02:53
поделиться

Я сначала думал бы о природе моделирования.

Некоторые моделирования требуют взаимодействия как средство моделирования полета. Я не думаю, что функциональное программирование может быть хорошим выбором для интерактивного (чтение: ЦП intensive/response-critical) applicaiton. Конечно, если у Вас есть доступ к 8 PS3, соединил проводом вместе с Linux, Вы не будете заботиться слишком много о производительности.

Для моделирований как эволюционное/генетическое программирование, где Вы настраиваете его и позволяете 'er разрыву, функциональный lauguage может помочь смоделировать проблемную область лучше, чем язык OO. Не то, чтобы я - эксперт в функциональном программировании, но простота кодирования рекурсии и идеи отложенных вычислений, распространенных в функциональных языках, кажется мне подходящим вариантом для 'позволенный ее разрыв' вид sims.

1
ответ дан 3 December 2019 в 02:53
поделиться

Смотрите на Функциональное Реактивное программирование. Существует много платформ для этого в Haskell (не знайте о других языках), большинство которых базируется вокруг стрелок. Основная идея состоит в том, чтобы представить отношения между изменяющимися во времени значениями и событиями. Так, например, Вы записали бы (в нотации стрелки Haskell, пользующейся никакой конкретной библиотекой):

   velocity <- {some expression of airspeed, heading, gravity etc.}
   position <- integrate <- velocity

Вторая строка объявляет отношения между положением и скоростью. <-операторы стрелки являются синтаксическим сахаром для набора вызовов библиотеки, которые связывают все.

Затем позже Вы могли бы сказать что-то как:

   groundLevel <- getGroundLevel <- position
   altitude <- getAltitude <- position
   crashed <- liftA2 (<) altitude groundLevel

объявить, что, если Ваша высота является меньше, чем уровень земли в Вашем положении затем, Вы отказали. Так же, как с другими переменными здесь, "разрушенный" не просто единственное значение, это - изменяющийся во времени поток значений. Именно поэтому функция "liftA2" используется для "снимания" оператора сравнения от простых значений до потоков.

IO не является проблемой в этой парадигме. Исходные данные время, варьируясь значения, такие как X и Y джойстика, в то время как изображение на экране является просто другим временем, варьируясь значение. На самой вершине выровняйтесь, Ваше все средство моделирования является стрелкой от исходных данных до выводов. Затем Вы вызываете функцию "выполнения", которая преобразовывает стрелку в действие IO, которое выполняет игру.

Если Вы запишете это в Lisp, то Вы, вероятно, создадите набор макросов, которые в основном переосмысливают стрелки, таким образом, это могло бы стоить просто узнать о стрелках для запуска с.

6
ответ дан 3 December 2019 в 02:53
поделиться

Это - частая ошибка думать о "Lisp" как о функциональном языке. Действительно это лучше всего считается языковой семьей, вероятно, но в эти дни когда люди говорят, что Lisp они обычно имеют в виду язык Common LISP.

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

Что касается Вашего вопроса это - хороший выбор? Это действительно зависит от Ваших планов. Язык Common LISP особенно имеет некоторые реальные преимущества для этого вида вещи. Это является и интерактивным и самосозерцательным на уровне, который Вы обычно видите в так называемых языках сценариев, делая это очень быстрым для разработки в. В то же время его скомпилированный и имеет эффективные компиляторы, таким образом, можно ожидать производительность на той же приблизительной оценке как другие эффективные компиляторы (с фактором двух из c, типичный ime). В то время как большой язык, это имеет намного более последовательный дизайн, чем вещи как C++, и возможности метапрограммирования могут сделать очень чистым, легким понять код для Вашего конкретного приложения. Если Вы только смотрите на эти аспекты, язык Common LISP выглядит удивительным.

Однако существуют оборотные стороны. Сообщество является малочисленным, Вы не найдете, что многие люди помогают, если это будет тем, что Вы ищете. В то время как созданный в библиотеке является большим, Вы не найдете как многие сторонние библиотеки, таким образом, можно будет закончить тем, что писали больше из нее с нуля. Наконец, в то время как это ни в коем случае не окруженный стеной сад, CL не имеет вида беспрепятственной интеграции с внешними библиотеками, которые заявляют, что Python делает. Который не означает, что Вы не можете назвать код c, существуют хорошие инструменты для этого.

Ими путь CLOS о самой мощной системе OO, о которой я могу думать, но это - совершенно другой подход, если Вы происходите из господствующей тенденции c ++/java/c#/etc. Фон OO (да, они отличаются, но вне сингла по сравнению с несколькими inh. не так очень) можно найти это немного странным сначала, почти вывернутым наизнанку.

Если Вы идете этим путем, Вы оказываетесь перед необходимостью наблюдать за некоторыми проблемами с производительностью фактического конвейера рендеринга, если Вы пишете что сами с CLOS. Система классов имеет невероятную гибкость во время выполнения (т.е. обновляющий определения классов во времени выполнения не через обезьяну, исправляющую и т.д., а через фактическое изменение класса и обновление экземпляров) однако, Вы оплачиваете некоторую стоимость отправки на этом.

Если это имеет значение я использовал CL в прошлом для кода исследования, требующего числовой эффективности, т.е. моделирований другого вида. Это работает хорошо на меня. В этом случае я не волновался по поводу использования существующего кода - это не существовало, таким образом, я писал в значительной степени все с нуля так или иначе.

Таким образом, это мог быть прекрасный выбор языка для этого проекта, но не единственный. Если Вы не используете язык и с высокоуровневыми аспектами и с хорошей производительностью (как CL, имеет, как делает OCaml и немногих других), я определенно посмотрел бы на возможность двух подходов уровня с языком как lua, или возможно Python (много из освобождает) сверху некоторого c или кода C++, делающего тяжелый подъем.

12
ответ дан 3 December 2019 в 02:53
поделиться

При рассмотрении игры или промышленности средства моделирования, Вы находите много C++ плюс, возможно, некоторые добавленный компонент сценариев. Могут также быть инструменты, записанные на других языках для дизайна пейзажа или связанных задач. Но существует только очень небольшой Lisp, используемый в том домене. Необходимо быть хорошим хакером, чтобы вытащить необходимую производительность из Lisp и смочь получить доступ или написать код низкого уровня. Как Вы получаете это ноу-хау? Попробуйте, перестаньте работать, изучите, попробуйте, перестаньте работать меньше, учитесь... Существует только написание кода и экспериментирующий с ним. Lisp действительно полезен для хороших разработчиков программного обеспечения или тех, которые имеют потенциал, чтобы быть хорошим разработчиком программного обеспечения.

Одно из основных препятствий является сборщиком "мусора". Любой у Вас есть очень простой (затем у Вас есть проблема производительности со случайными паузами) или у Вас есть сложный (затем, у Вас есть проблема при получении его работать правильно). Только немного сборщиков "мусора" существуют, который подошел бы - большинство реализаций Lisp имеет хорошие реализации GC, но все еще они не настраиваются для использования или псевдореального времени в реальном времени. Исключения действительно существуют. С C++ можно забыть GC, потому что обычно нет ни одного.

Другая альтернатива автоматическому управлению памятью со сборщиком "мусора" не должна использовать GC и управлять памятью 'вручную'. Это используется некоторыми (даже коммерческий) приложения Lisp, которые должны поддерживать некоторый ответ в режиме реального времени (например, экспертные системы управления процессом).

Ближайшей вещью, которая была разработана в той области, был Бандикут Катастрофического отказа (и также более поздние игры) игра для PlayStation I (позже, игры были для PlayStation II) от Непослушной Собаки. Так как они были куплены Sony, они переключились на C++ для PlayStation III. Их среда разработки была записана в языке Common LISP Allegro, и это включало компилятор для Схемы (диалект Lisp) вариант. В системе разработки код компилируется и затем загрузил на PlayStation во время разработки. У них был свой собственный 3-й механизм (очень впечатляющий, всегда получал превосходные обзоры из игровых журналов), возрастающая загрузка уровня, сложное управление поведением для большого количества различных агентов, и т.д. Таким образом, PlayStation действительно выполняла код Схемы, но управление памятью не было сделано через GC (afaik). Они должны были разработать всю технологию самостоятельно - никто не предлагал основанные на Lisp инструменты - но они могли, потому что их были превосходные разработчики программного обеспечения. С тех пор я не услышал о подобном проекте. Обратите внимание, что это не был просто Lisp для сценариев - это был Lisp полностью вниз.

Один сторона Схемы там является также новой интересной реализацией по имени Схема Ypsilon. Это разрабатывается для игры пинбола - это могло быть основой для других игр, также.

На стороне языка Common LISP были приложения Lisp, говорящие со средствами моделирования полета и управляющие аспектами их. Существуют некоторые игровые библиотеки, которые основаны на SDL. Существуют интерфейсы к OpenGL. Существует также что-то как 'Открытый Механизм Агента'. Существуют также некоторые 3-и графические приложения, записанные в языке Common LISP - даже некоторые сложные. Но в области моделирования полета существует очень мало предшествующего искусства.

По теме CLOS по сравнению с Функциональным программированием. Вероятно, нельзя было бы использовать ни одного. Если необходимо сжать всю возможную производительность из системы, то CLOS уже имеет некоторые издержки, которых можно было бы хотеть избежать.

8
ответ дан 3 December 2019 в 02:53
поделиться

Я не сказал бы, что функциональное программирование предоставляет себя особенно хорошо моделированию полета. В целом функциональные языки могут быть очень полезны для записи научных моделирований, хотя это - немного специализированный случай. Действительно, Вы, вероятно, были бы более обеспечены со стандартным императивом (предпочтительно ООП) язык как C++/C#/Java, поскольку они будут иметь тенденцию иметь лучшие библиотеки физики, а также графические API, оба из которых необходимо было бы использовать очень в большой степени. Кроме того, подход ООП мог бы помочь представить Вашу среду. Другой вопрос для рассмотрения - то, что (насколько я знаю) популярные средства моделирования полета на рынке сегодня записаны в значительной степени полностью в C++.

По существу моя философия, что, если нет никакого особенно серьезного основания, что необходимо должны быть использовать функциональные парадигмы, затем не используйте функциональный язык (хотя нет ничего для остановки Вас использующий функциональные конструкции на языках ООП / смешанных языках). Я подозреваю, что Вы собираетесь иметь намного менее болезненный из процесса разработки с помощью хорошо протестированных API для C++ и языков, чаще всего связываемых с разработкой игр (который имеет много общностей с полетом sim). Теперь, если Вы хотите добавить некоторый сложный AI к средству моделирования, Lisp мог бы походить на скорее более очевидный выбор, хотя даже затем я не буду при всем переходе для него. И наконец, если бы Вы действительно увлечены использованием функционального языка, я рекомендовал бы пойти с одним из более общего назначения как Python или даже F# (оба смешанных обязательно-функциональных языка действительно), в противоположность Lisp, который мог закончить тем, что стал довольно ужасным для такого проекта.

1
ответ дан 3 December 2019 в 02:53
поделиться

Существует несколько проблем с функциональными языками, и это, они не сцепляются хорошо с состоянием, но они действительно подходят к процессу. Так способом можно было сказать, что они - ориентированное действие. Это означает трату времени, моделируя плоскость что Вы хотите сделать, моделируют действия полета плоскостью. Однажды Вы мрачный, что можно, вероятно, заставить это работать.

Теперь как точка стороны, haskell не был бы хорош, по моему скромному мнению, потому что это слишком абстрактно для "игры", этот вид приложения - все о вводе/выводе, но Haskell о предотвращении IO, таким образом, это станет кошмаром монады, и Вы будете работать против языка. Lisp является лучшим выбором, или Lua или JavaScript, они также функциональны, но не чисто функциональны, таким образом, для Вашего случая пробуют Lisp. Так или иначе на любом из этих языков Ваша графика будет C или C++.

Серьезная проблема однако существует очень мало документации и меньше учебных руководств о Функциональных языках и "играх", конечно, научные моделирования академически документируются, но те бумаги довольно плотные, если Вы успешно выполняетесь, возможно, Вы могли бы записать, что испытываете для других, поскольку это - довольно пустое поле прямо сейчас

0
ответ дан 3 December 2019 в 02:53
поделиться