LINUX.ORG.RU

Haskell и трассировка лучей


0

1

Хочу написать маленький raytracer чтобы тестировать на нем некоторые идеи для применения их в коммерческом рейтрейсере.

Покритикуйте мой вывод о неприменимости хаскеля для этой цели.

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

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

★★★

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

Diecae8i ()

я с хаскелем не знаком, но мне казалось, что он как раз хорош для всякого матана, нет?

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

ну есть, и что?

на java вон real-time проги пытаются писать. мне интересен вопрос о том упростит мне жизнь использования хаскеля, или наоборот будет куча ненужных заморочек.

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

на первый взгляд числодробилка их хаскеля хреновая и всякие вычметоды проще писать на императивных языках.

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

> мне интересен вопрос о том упростит мне жизнь использования хаскеля

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

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

> на первый взгляд числодробилка их хаскеля хреновая и всякие вычметоды проще писать на императивных языках.

На первый взгляд ты не знаешь хаскель и не писал на нём достаточно (иначе такие вопросы у тебя бы не возникали).

Посему использовать этот язык тебе не советую - ты потратишь больше времени на его изучение. А с учётом его специфики и твоей неподготовленности - ты вряд-ли сможешь писать на нём быстрее, чем на своём любимом С++. Учитывая сложность освоения хаскеля, по сравнению с джава/Си - тем более не советую.

anonymous ()

Я бы попробовал. К минимизации ошибок получишь в нагрузку возможность лёгкого распараллеливания. Вот нагуглил по теме http://poorlytyped.blogspot.com/2010/01/haskell-ray-tracing-parallel.html

P.S. Кстати, в этом разделе в каком-то холиваре примерно годовой давности был бенчмарк цпп и хаскеля на задаче рейтресинга, я там готовую программу распараллелил и бенчил, график примерно такой же был, как по этой ссылке.

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

> Основная область применения хаскеля - решение проблем, которые в других языках программирования просто не возникают.

Это какие? Незнание теории?

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

>На первый взгляд ты не знаешь хаскель и не писал на нём достаточно (иначе такие вопросы у тебя бы не возникали).

совершенно верно.

Посему использовать этот язык тебе не советую - ты потратишь больше времени на его изучение.

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

vasaka ★★★ ()

Частично поддержу анонимуса. Можно писать быстро и даже писать быстрый код быстро. Но если возникают такие вопросы, то советую попробовать только в случае наличия желания разобраться и научиться. Скорее всего будешь писать сперва коряво и по нескольку раз потом переписывать, по пути обретая все больше и больше просвещения.

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

>бенчмарк цпп и хаскеля на задаче рейтресинга

фишка в том что сам рейтрейсинг там будет не основной задачей. там будет больше вычметодов - решение диффуров, СЛАУ, корни полиномов.

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

Ну... если так, то пробуй. Главное, чтобы время не горело.

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

>фишка в том что сам рейтрейсинг там будет не основной задачей. там будет больше вычметодов - решение диффуров, СЛАУ, корни полиномов.

Ну, мое скромное мнение заключается в том, что глупо влоб написанный код выч методов на Хаскеле не хуже С++ ного. Он не очень красивый, возможно сильно императивный, но не хуже.

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

> фишка в том что сам рейтрейсинг там будет не основной задачей. там будет больше вычметодов - решение диффуров, СЛАУ, корни полиномов.

Тогда тем более хаскель хорошо подойдёт к твоей задаче.

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

>Тогда тем более хаскель хорошо подойдёт к твоей задаче.

я как-то пробовал поискать библиотеки перемножения матриц. лучшее что нашел обращается к сишной либе для вычислений.

остальное все какое-то недоделанное и заброшенное.

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

Лучшие «сишные» библиотеки написаны практически на одном асме, так что не стоит горевать по поводу языковой ненативности реализации алгоритма.

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

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

если причина в том что язык для них не шибко подходит - то и соваться нечего.

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

Ассемблерные вставки не сделаешь, да. Может быть, заведомо большая эффективность готовых сишных библиотек и есть причина того, что на хаскеле не пишут нативные реализации такого рода алгоритмов

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

> фишка в том что сам рейтрейсинг там будет не основной задачей. там будет больше вычметодов - решение диффуров, СЛАУ, корни полиномов.

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

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

> Но на освоение так же нужно потратить время.

Пренебрежимо мало, по сравнению со временем, которое ушло бы на освоение хаскеля.

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

Я бы попробовал. К минимизации ошибок получишь в нагрузку возможность лёгкого распараллеливания.

+1. Там где map-ы легко получается распараллеливание, как в OpenMP, но только на Haskell-е ты такие конструкции будешь видеть быстрее.

Хотя я всё больше убеждаюсь, что Haskell - лучший язык для изучения ФП, но не самый лучший ФЯП для практики.

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

>матлаб или даже другие пакеты для математики, включая математеку

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

+стоит он ну уж очень много даже с минимальным набором пакетов. сама мысль что прога требует чего-то столь дорогого только для того чтобы запуститься мне не нравится.

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

Ray tracing на С/С++ распараллеливается элементарно, если писать сразу без глобальных переменных для записи и прочих глупостей.

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

>это не влом и даже прикольно, так что не проблема, вопрос в том стоит ли пытаться конкретно эту задачу хаскелем.


Нет, не стоит. Утонешь в идиомах, специфичных для чистого ФП.

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

hmatrix же и его производные. Про хацкель речь же.

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

Наглое вранье. Теоркат, например, которым принято размахивать в таких случаях, на хер не нужен.

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

Полная херня. Вчера баловался написанием прототипа dsl с семантикой simulink'а из matlab'а. Получилось очень симпатично.

Задействовав пару извилин из левой половины мозга, полиморфизм и ленивость, удалось легко и непринужденно получить быструю смену методов интегрирования цепей с аналоговым сигналом. Включая всеми любимые методы Рунге-Кутты.

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

Позвольте поинтересоваться, какие ФЯП для практики Вы использовали в проектах? Как обильно каждый из них? И в каких областях?

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

>Теоркат, например, которым принято размахивать в таких случаях

А причем тут собственно теория категорий?

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

>Полная херня. Вчера баловался написанием прототипа dsl с семантикой simulink'а из matlab'а. Получилось очень симпатично.

Задействовав пару извилин из левой половины мозга, полиморфизм и ленивость, удалось легко и непринужденно получить быструю смену методов интегрирования цепей с аналоговым сигналом. Включая всеми любимые методы Рунге-Кутты.

Что херня? Прочитай еще раз то, что написал я и что ты. Потом скажешь, где противоречия.

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

Не советую матлаб и математику для «продакшена». На них можно писать прототипы, которые потом переводятся на твой целевой язык. Работают они страшно медленно (хотя матлабом последний раз пользовался лет 7 назад, может, что поменялось с тех пор). С другой стороны, я почему-то думаю, что по количеству встроенных возможностей они оставляют Хаскель настолько далеко позади, что даже и сравнивать нечего. Особенно мощна Mathematica. Поэтому, подход, когда берёшь Mathematica, в ней делаешь упрощение выражений и всё такое, а потом переводишь это на C - это подход более-менее плодотворный (кстати, там есть автоматический генератор C выражений из M-выражений). Правда, в Mathematica (во всяком случае, 5-й версии) неудобная среда. Например, там нельзя за одно нажатие клавиши найти в исходнике определение твоей функции.

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

Кстати, в Mathematica есть и ленивость, и чистое ФП, и МП. В одном они промахнулись - у них нет такого фан-клуба, как у Хаскеля.

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

Она проприетарная. Может поэтому? Clean вон тоже не популярен.

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