Макс является языком потока данных. Я больше знаком с PD, который принадлежит тому же автору.
Преимущество потока данных как стиля программирования состоит в том, что большинство зависимостей данных являются явными - вы можете буквально визуально отслеживать связи между подпрограммами, и они обычно отображаются в виде линии на экране между ними. Сложность в том, что порядок операций менее явный, потому что он двухмерный, а не одномерный, как в текстовом коде.
В настоящее время я делаю большую часть своих аудиофайлов в суперколлайдере, но для быстрого наброска звуковой идеи и построения грубой рабочей модели pd отлично работает.
Основная сложность программирования на языке визуального потока данных заключается в понимании порядка операций. Можно создать несколько соединений из одной розетки, но вам необходимо создать явный объект [trigger] для управления тем, какое из этих соединений запускается первым (линия, идущая из розетки, концептуально совпадает с вызовом подпрограммы). Кроме того, у опытных программистов есть проблема с привыканием к анонимным параметрам - у линий исправлений нет имен, они просто имеют выход, из которого они исходят, и вход, к которому они подключены, чтобы идентифицировать их.
Другой совет - использовать инкапсуляцию - на текстовом языке у вас будет библиотека или файл класса, в Max или PD вы можете загрузить внешний файл патча по имени - так что вы создаете небольшой патч с некоторыми выходами и входами, и использовать его из другого патча в нескольких местах, а не копировать и вставлять (точно так же, как вы вызываете функции, а не копировать и вставлять блоки кода).
[send] и [receive] предназначены для глобальной настройки / получения данных и имеют все те же проблемы, что и глобальные переменные - общий обходной путь, когда они необходимы, заключается в добавлении уникального идентификатора, специфичного для текущего подпатча, $ 0 токен оценивается как уникальный идентификатор текущего подпатча в именах / параметрах объекта и используется для этой цели. Это моделирует переменную области действия.
Отладка в потоке данных превосходна, потому что очень легко отсоединить набор элементов от окружающего патча и запустить их независимо, а включить трассировку для части потока так же просто, как прикрепить поле с цифрами к розетке. .