LINUX.ORG.RU

Помогите найти язык программирования

 , ,


2

9

Помогите пожалуйста найти язык программирования, в котором есть мощные средства метапрограммирования, но при этом он мог уметь генерировать высокопроизводительный код real-time приложений. Область применения - обработка видео потоков, рендеринг графики, элементы AI. Интерсуют именно возможности языка, а не наличие готовых библиотек и т.п. (приглянулся racket, но скорость...)



Последнее исправление: elf80lvl (всего исправлений: 3)
Ответ на: комментарий от unfo

Я бы еще поверил, что, например, jit-компилированное регулярное выражение работает в 10 раз быстрее интерпретируемого табличного FSM, который даже без computed goto реализован. Но такого рода задач всего ничего, и уж к реальному времени они точно никак не относятся.

psikh
()

Ясно. Никогда такого не делал, но смотрел бы на llvm в первую очередь.

dizza ★★★★★
()

мог генерировать высокопроизводительный код real-time приложений

Что ты имеешь в виду? Машинный код, или сгодится и байт-код?

Учитывая:

мощные средства метапрограммирования

Машинный код:
Lazarus (Object Pascal)

Байт-код:
Python, Ruby, Vala

Novator ★★★★★
()
Ответ на: комментарий от elf80lvl

А зачем она, если это можно выделить в DSL и его обработку ?

pylin ★★★★★
()
Ответ на: комментарий от Deleted

Всем спасибо, был выбран Common Lisp, ключевую роль сыграло http://ru.wikipedia.org/wiki/Десятое_правило_Гринспена

jollheef

Советую выбрать в качестве реализации — SBCL, IDE — GNU Emacs

а на емаксе стоит пробовать? http://bitfauna.com/projects/cusp/

elf80lvl
() автор топика
Ответ на: комментарий от elf80lvl

On to of eclipse. Эклипс не нужен, поэтому да - попробуй «на эмаксе»;)

cdshines ★★★★★
()
Ответ на: комментарий от elf80lvl

После изучения языка советую обратить особое внимание на главу 13 «Speed» книги Пола Грэма «ANSI Common Lisp» (не знаю, как перевели ее в русском издании). Там освещены вопросы оптимизации, когда ее следует применять, и тому подобное. Вообще, хорошая книга.

Касательно оптимизации я столкнулся с такой проблемой. В CL обычно происходит боксинг вещественных чисел при выходе из функций, или, говоря языком CL, происходит «приведение числа к указателю» (правда, SBCL иногда поступает умно и не приводит, но когда функция используется локально - в SBCL есть свой type inference). Не знаю, столкнешься ты с этим или нет, но решается задача тем, что передается массив единичной длины, куда и записывается выходное значение. Конечно, тип массива должен быть задекларирован. В общем, есть там нюансы с оптимизацией и декларациями типов, но многие из них решаемы в рамках стандарта CL. В крайнем случае всегда можно вызвать сишный код.

dave ★★★★★
()
Ответ на: комментарий от elf80lvl

В CL есть и структуры (defstruct) и классы (defclass), и коллекции отличные от списков (array, vector, hashtable) из коробки. Полистай оглавление ANSI Common Lisp и сразу будет понятней на что можно рассчитывать без доп. либ.

Norgat ★★★★★
()
Последнее исправление: Norgat (всего исправлений: 1)
Ответ на: комментарий от elf80lvl

Да, есть. Как ни странно, но несмотря на свой возраст, CL по фичам не уступает новым языкам, появившимся в 2000-x.

dave ★★★★★
()
Ответ на: комментарий от Norgat

Для метапрограммирования ничего кроме writeln не надо.

psikh
()
Ответ на: комментарий от psikh

Ага, ага, для обработки видео в реальном времени.

Взять/написать биндинги к готовым библиотекам, где реализованы все алгоритмы, а на Lua писать логику

annulen ★★★★★
()
Ответ на: комментарий от unfo

десятикратное превосходство luajit в realtime-задачах слишком неправдоподобно

Наличие сборки мусора вообще исключает realtime

annulen ★★★★★
()
Ответ на: комментарий от dave

я заказал... так и не прислали. всё жду. по ходу про меня забыли

BattleCoder ★★★★★
()
Ответ на: комментарий от annulen

Наличие сборки мусора вообще исключает realtime

«Вообще» - нет.

tailgunner ★★★★★
()
Ответ на: комментарий от annulen

Наличие сборки мусора вообще исключает realtime

Это может быть шоустопером для CL, хотя для AT&T в свое время была сделана специальная рилтаймовая версия LispWorks. Но главное, мы почти ничего не знаем о задаче автора топика. Поэтому может быть у него и не такой уж рилтайм.

dave ★★★★★
()

Посмотрите KDB+ вроде то что надо, должен очень быстро считат массивы.
Если не хватит скорость тогда opencl он использует GPU для расчетов.

Int0l ★★
()
Ответ на: комментарий от elf80lvl

а там возможно изменение кода на лету без компиляции всей программы и при этом чтобы скорость (интерпретатора?) была приемлемой.

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

Ты вообще как себе «это» представляешь? И не заморачивайся ты с языками! Как ты себе это представляешь на уровне машинных кодов? Вот когда ты «это» «представишь», тогда задавай вопросы.

К задаче метапрограммирования твоя «задача» не имеет никакого отношения. В общем-то классическая ловушка «общего случая»: решим сначала общий, а потом решим много частных. Так не бывает.

Macil ★★★★★
()
Ответ на: комментарий от anonymous

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

psikh
()
Ответ на: комментарий от psikh

Любая запись поверх существующего (и в данный момент исполняющегося) кода вышибет не только все пайплайны процессора, но и кэш инструкций.

ROTFL. Ну да, и что?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Ну да, и что?

И то, что по условию требуют-то высокой производительности. А вышеозначенные эффекты приведут к проседанию производительности в десятки (а в паталогических случаях - и в сотни) раз.

psikh
()
Ответ на: комментарий от anonymous

Естественно. Но если это нужно в рантайме, то, подозреваю, что это критично. Иначе бы статической кодогенерации было бы достаточно.

psikh
()
Ответ на: комментарий от anonymous

Ты просто не осилил SBCL - он такое умеет

Ты просто не осилил LLVM, она такое тоже умеет, ЧСХ.

Macil ★★★★★
()
Ответ на: комментарий от psikh

И то, что по условию требуют-то высокой производительности.

И? Сколько раз в секунду ты собираешься производить замену кода?

А вышеозначенные эффекты приведут к проседанию производительности в десятки (а в паталогических случаях - и в сотни) раз.

...на микросекунду

И кстати...

psikh> Любая запись поверх существующего (и в данный момент исполняющегося) кода вышибет не только все пайплайны процессора, но и кэш инструкций.

Кто и где так джелает (т.е. пишет _поверх_ существующего кода)?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

И? Сколько раз в секунду ты собираешься производить замену кода?

Это уже надо автора спросить.

...на микросекунду

Cash miss может и куда дороже обойтись.

Кто и где так джелает (т.е. пишет _поверх_ существующего кода)?

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

psikh
()
Ответ на: комментарий от psikh

...на микросекунду

Cash miss может и куда дороже обойтись.

Cash miss - безусловно. Cache miss - никогда.

Кто и где так джелает (т.е. пишет _поверх_ существующего кода)?

Это делается с целью избежать дополнительного уровня indirection. Jump-ы по живому пропатчить, например.

Еще раз - кто и где так делает? Известные мне реализации горячей замены кода подменяют указатели на функции.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Cash miss - безусловно.

Посыпаю кочан пеплом.

Cache miss - никогда.

Еще и MMU есть.

Еще раз - кто и где так делает?

В графике, например - при вызове функции, которая что-то тяжелое делает с bitmap-ом в определенном формате, патчатся места вызова функций для доступа к пикселям (в зависимости от формата изображения). Видел такое пару раз. Не знаю, насколько этот подход эффективен, но никаких других случаев горячей замены кода я в реальности не встречал, а потому и говорю только о том, что знаю.

Известные мне реализации горячей замены кода подменяют указатели на функции.

Может ты тогда и расскажешь, на фига это в принципе нужно?

psikh
()
Ответ на: комментарий от psikh

Cache miss - никогда.

Еще и MMU есть.

Ты cache miss не путаешь с page fault?

Известные мне реализации горячей замены кода подменяют указатели на функции.

Может ты тогда и расскажешь, на фига это в принципе нужно?

Для обновления без простоя.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Ты cache miss не путаешь с page fault?

По cache miss полезли в память - а там страницы уже нет, в результате page fault.

Для обновления без простоя.

А, ну это не интересно, я думал что серьезное. Особенно в задаче ТСа это никак не нужно.

psikh
()
Ответ на: комментарий от psikh

Для обновления без простоя.

А, ну это не интересно, я думал что серьезное.

Бгг.

Особенно в задаче ТСа это никак не нужно.

Боюсь, ты единственный понимаешь его «задачу».

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Боюсь, ты единственный понимаешь его «задачу».

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

psikh
()
Ответ на: комментарий от malbolge

получишь еще и весь .NET
как приятное дополнение

спасибо, поржал))

P.S. Раз уж ты выбрал «почти-схему», то может таки scheme? Gambit может подойти, по скорости. Да и язык приятный.

chinarulezzz ★★
()
26 июня 2014 г.

Си + препроцессор на чем пожелаешь, хоть m4, хоть racket.

anonymous
()
Ответ на: комментарий от dave

И какое отношение твои борщескобки имеют к риалтайму?

anonymous
()
Ответ на: комментарий от quiet_readonly

Llvm тормоз для рантайм кодогенерации. Смотри лучше на tcc - все ядро линукса за несколько секунд компиляет.

anonymous
()
Ответ на: комментарий от anonymous

Когда же вы суки передохните? Заколебали со своими убогими интерпретаторами.

anonymous
()
Ответ на: комментарий от unfo

Там трассирующий джит, так что ничего странного. Джит всегда быстрее обычного компилятора.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.