Pull to refresh
38
2.2
Гиляровский Константин @Chaos_Optima

RnD Computer Graphics

Send message

Хорошо, постараюсь расписать. У нас есть например игровой редактор с вьюпортом на котором отрисовываются игровые объекты. И есть панель инструментов, пользователи редактора могут расширять функционал инструментов (тулов) добавляя свои инструменты. Выше два примера, один инструмент выравнивает объекты в радиусе от клика (выделение объектов в радиусе реализовано уже в базовом классе SomeTool), второй инструмент создаёт новые объекты относительно координаты. Все настройки инструментов инкапсулироованны в самих инструментах. И представьте что подобных инструментов сотни (вообще их количество не детерминировано), и их поведение может отличатся кардинально. Как это реализовать в ФП учитывая что инструмент имеет изменяемое состояние, и в процессе использования может менять состояние чего угодно (в рамках предоставленного АПИ редактора)

Это пользовательский код или код редактора? не вижу чтобы selected_object завесили от тулы, да и это не обязательно для тулы другая тула может вот такой код иметь

class InstancerTool : public ITool
{
public:
    void processPick(ScreenContext& context, int x, int y) override 
    {
        auto world_pos = context.getSorldPosition(x, y);
        SpawnNewItems(world_pos);
    }
};

А что внутри processPick? тул то пользователтский, а пользователь менять код processPick не может, или там перегрузка? И что возвращает getActiveTool?

// пример пользовательского кода
class SomeNewTool : public SomeTool
{
public:
    void processPick(ScreenContext& context, int x, int y) override 
    {
        SomeTool::processPick(context, x, y);
        Allign(selectedItems());
    }
};

Ок пример выше, тула может иметь состояние (настройки и пр) и может меняться при пикинге (например выделение объектов) очень интересно как это выглядит в ФП с сильной имутабельностью.

ок вот примитивный код

void Viewport::mouseClick(mouseEventData data)
{
    auto active_tool = ToolManager::getActiveTool();
    if (active_tool)
        active_tool->processPick(render->getScreenContext(), data.x, data.y);
}

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

Ну это как бы моё мнение, так что да отвечаю, я и правда думаю что вы не знаете ООП

Вот яркий пример

Итог: Как мы видим, полиморфизм в ФП прекрасно реализуется без классов и всех их недостатков, код более простой и лаконичный даже на классических примерах из ООП — в реальных проектах все намного сложнее, и с ростом кода разница только растет.

Вы взяли пример для обучения и сказали, смотрите всё работает шикарно и читаемо. А вот пример из жизни, вам нужно написать систему плагинов для своего продукта (возьмём например Maya) это подразумевает что пользовател должен иметь возможность написать свой класс и все системы должны с ним работать корректно, предлагаете пользователю пересобирать исходники программы для которой он пишет расширение? Искать во всех местах свитчи и добавлять свой тип? ООП это в первую очередь про архитектуру и про управление сложностью, где важно знать где создавать ограничения, а где создавать возможность для расширения. Ваш первый же пример.

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

Ну так а зачем там переиспользование? Оно вообще нужно? Потому то я и думаю что у вас либо мало опыта, либо опыт лишь в узкой сфере где ооп не особо требуется. У меня например опыт в другой сфере, где приходится думать над тем как мои классы\ интерфейсы\ функции\ типы и т.д. будут использовать другие люди для расширения функционала и взаимодействия с системой в общем. И я практически не вижу там места функциональщине. Простой пример, постройте архитектуру в функцональном стиле где бы пользователь мог бы добавить свой инструмент для редактора, который позволял бы работать с вьюпортом (например пикинг объекта и его перемещение в зависимости от соседей, авто выравнивание) , и при этом ему нельзя пересобирать исходники редактора.

Как студенты? Или использовали в продуктиве на протяжении нескольких лет? Я вот активно пишу на С++ и питоне уже больше 10 лет и не могу с уверенностью сказать что знаю их, а вот только выйдя из универа у меня в резюме стояло знание тоже примерно десятка языков. Просто судя по статье вы ооп не знаете, но умудряетесь критиковать его, может тоже самое ис языками?

Тень остаётся не из-за DLSS а из за кучи темпоральных техник, тот же люмен в 5 анриле использует темпоральные накопления для GI ну и плюс TAA, короче дело не в DLSS

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

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

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

Почему никак? Я использую overay studio там есть режим со смешанной реальностью, очень удобно, клавиатура мышь видна замечательно

Что означает «знать операции»?

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

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

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

Свою коммуникативную функцию два предложения выше выполняют?

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

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

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

Мне вам весь вывод расписать, что ли?

Естественно, желательно с доказательством и анализом, а то как я пойму математику вы мне объясняете, или же зазубренными аксиомами кидаетесь уровня grokking algorithms.

Так, чтобы соответствующий морфизм из линейных операторов в матрицы был функториальным.

Это ничего не объясняет, как говорил Фейнман "Если вы не можете что-то объяснить ребенку, то вы этого не понимаете сами" попробуйте объяснить мне почему -3 * -3 == 9 а не -9 это же база, но так как вы говорите что без выведений и доказательств это не математика, то докажите и выведите почему -3 * -3 == 9.

Как обезьянка.

Я думаю правильнее было бы 'Как обезьянке.' Ну а что поделать, вы же упорно уходите от вопроса который неудобен для вас.

Да, всё так. Будете спорить?

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

что все эти разговоры про знание математики — клоунада и попытка возвыситься за счёт тупых макак

Это ваши слова, не мои. Я считаю что математика нужна но не везде, и на разных уровнях.

Я нигде не писал этого.

Да в этом же сообщении чуть ниже

``И что если вы не выводите доказательства то вы не знаете математику.`

Да, всё так. Будете спорить?`

Я ожидаю, что будут спрашивать.

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

Собственно, я подаюсь на вакансии, где требуют знание теории типов, и ожидаю, что со мной поговорят про strong normalization у system f

Наверно потому что это непосредственно связанно с работой? Но вряд ли вас спрашивают, какой код будет сгенерирован при компиляции того или иного участка, если это не связанно непосредственно с работой. Как вы не знаете во что скомпилируется cout << "hello world" ну тогда вам ненужно программирование.

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

Это же вы долюбились до формулировки про знание математики. Если на вакансии вы увидите требование "знание линейной алгебры" у вас будут спрашивать почему перемножение матрицы это строка на столбец, или всё же вопросы будут связаны с прикладной частью?

А вы не отличаете «при каждом умножении вспоминать, как оно определяется, и почему оно коммутативно/ассоциативно» и «понимать, как вводится умножение и как доказываются его свойства»?

Да нет это вы как раз не понимаете разницу что использовать математику != прибегать каждый раз к анализу и доказательствам теорем.

Потому что у зазубрившего перемножение матриц человека нет знания математики.

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

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

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

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

Вы по прежнему не объяснили почему перемножение базисных векторов даёт преобразование, почему это в принципе работает? Ну и для начало надо в принципе объяснить как работает перемножение. Если вы не понимаете как работает перемножение то как вы можете перемножать матрицы?

Почему всегда так получается, что как поскребёшь сторонника «знание математики необходимо программисту», то там оказывается, что и не знание, и не математики, и не то чтобы необходимо? И, более того, этот сторонник сам начинает тебе доказывать, что это всё не нужно?

Эм.. не стал даже читать дальше. Если для вас прикладное знание математики в определённой области и её применение, это не знание математики и не применение её, то спорить смысла нет, у нас видимо отличается представление о том что заложено в фразе «знание математики необходимо программисту». Для меня это использование мат аппарата, мне не нужно знать почему скалярное произведение векторов это корень из суммы произведений (конечно на это можно потратить время и вывести, но зачем?) мне достаточно знать как эту операцию выполнять и свойства этой операции. Если вы не считаете что это знание математики, то у нас с вами просто не совпадают взгляды. А долюбится можно до чего угодно, вот вы дали например определение матрицы, но на вопрос почему именно строка на столбец перемножается не ответили.

Почему заученное или, тем более, скопированное?

Потому что оно не отвечает на вопрос, почему перемножается столбец на строку. Ну и ответьте всё же на вопрос, чем это знание мне поможет?

Я спросил, можете ли вы это вывести, или будете говорить, что это всё не нужно?

Могу вывести, но считаю что это ненужно. Переубедите меня, зачем это нужно?

Данный вопрос не имеет отношения к моему исходному вопросу и является попыткой увести разговор в сторону ложной аналогией.

Ой как мы запели, нуда нуда. А по моему имеет непосредственное отношение, как вы можете использовать перемножение если не понимаете что за этим лежит.

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

Information

Rating
1,243-rd
Location
Воронеж, Воронежская обл., Россия
Registered
Activity