Що таке мова програмування потоку даних? Навіщо це використовувати? І чи є від цього якісь переваги?
Що таке мова програмування потоку даних? Навіщо це використовувати? І чи є від цього якісь переваги?
Відповіді:
Мовою керування потоком у вас є потік інструкцій, які працюють із зовнішніми даними. Умовне виконання, стрибки та виклики процедур змінюють потік команд, який потрібно виконати. Це можна розглядати як інструкції, що протікають через дані (наприклад, інструкції діють на регістри, які завантажуються даними за допомогою інструкцій - дані статичні, якщо потік інструкцій не переміщує їх). Оператор потоку керування "if" переходить до правильної гілки в потоці інструкцій, але дані не переміщуються.
Мовою потоку даних у вас є потік даних, який передається від інструкції до інструкції для обробки. Умовне виконання, стрибки та виклики процедур спрямовують дані до різних інструкцій. Це можна розглядати як дані, що протікають через інші статичні інструкції, наприклад, про те, як електричні сигнали проходять по ланцюгах або вода проходить по трубах. Оператор "if" потоку даних перенаправляє дані до правильної гілки.
Кілька прикладів функцій та мов потоку даних:
Текстові мови
Візуальні мови
Продукти, які вбудовують візуальну мову потоку даних:
Мови програмування потоку даних - це ті, які фокусуються на стані програми і викликають операції, що відбуваються відповідно до будь-якої зміни стану. Мови програмування потоку даних за своєю суттю паралельні, оскільки операції покладаються на вхідні дані, які при виконанні операції призведуть до виконання. Це означає, на відміну від звичайної програми, де за однією операцією слідує наступна операція, у потоці даних програма буде виконуватися до тих пір, поки вхідні дані будуть задоволені, і, отже, немає встановленого порядку.
Часто мови програмування потоку даних використовують велику хеш-таблицю, де ключі - це дані програми, а значення таблиці - вказівники на операції програми. Це полегшує створення багатоядерних програм на мові програмування потоку даних, оскільки кожному ядру для роботи потрібен лише хеш-табл.
Поширеним прикладом мови програмування потоку даних є програма розширеного аркуша, яка має стовпці даних, на які впливають інші стовпці даних. Якщо дані в одному стовпці змінюються, інші дані в інших стовпцях, можливо, змінюватимуться разом із ним. Незважаючи на те, що програма розповсюджених листів є найпоширенішим прикладом мови програмування потоків даних, більшість із них, як правило, є графічними мовами.
Одним із видів програмування потоків даних є реактивне програмування . Коли цей стиль програмування використовується у функціональній мові, це називається функціональним реактивним програмуванням . Прикладом функціональної реактивної мови програмування для Інтернету є Flapjax .
Крім того, anic - це мова потоку даних, яку нещодавно обговорювали в Hacker News.
Інший приклад - Мартлет з Оксфорда.
Мови програмування потоку даних пропонують виділити деякі локальні способи поведінки у так званих " акторів ", які повинні працювати паралельно та обмінюватися даними за каналами "точка-точка". Немає поняття центральної пам'яті (як для коду, так і для даних), на відміну від моделі Неймана комп'ютерів .
Ці актори споживають маркери даних на своїх входах і виробляють нові дані на своїх вихідних даних.
Це визначення не накладає засобів для реалізації цього на практиці. Однак виробництво / споживання даних потрібно аналізувати з обережністю: наприклад, якщо актор B не споживає з такою ж швидкістю, як актор A, який виробляє дані, тоді між ними потрібна потенційно необмежена пам'ять (FIFO) . Багато інших проблем можуть виникнути як тупикові ситуації .
У багатьох випадках цей аналіз зазнає невдачі, оскільки чергування внутрішньої поведінки є нерозв'язним (поза межами сучасних офіційних методів).
Незважаючи на це, мови програмування потоку даних залишаються привабливими в багатьох доменах :
Excel (та інші електронні таблиці) є по суті мовами потоків даних. Мови потоків даних багато в чому нагадують мови функціонального програмування, за винятком того, що значення в аркушах цілого графіку програми - це зовсім не значення, а змінні (або потоки значень), так що коли вони змінюються, зміни пульсують і пливуть вгору по графіку .
Це насправді досить стара концепція - у 1970-х роках навіть існувала машина + мова +, побудована для ефективного програмування та виконання потоку даних ( Manchester Dataflow Machine ).
Найцікавіше в цьому - його подвійність до таких ледачих функціональних мов, як Хаскелл. Отже, якщо ваші кроки обробки є чисто функціональними, і якщо у вас є достатньо процесорних одиниць для їх оцінки та передачі результатів, ви отримуєте максимальну паралельність безкоштовно - автоматично та без будь-яких зусиль програмування!
Є певні домени, де програмування потоку даних має набагато більше сенсу. Один із прикладів - медіа в реальному часі, і два широко використовуваних графічних середовища програмування потоків даних, Pure Data та Max / MSP, зосереджені на програмуванні медіа в реальному часі. Я припускаю, що їх візуальна природа також добре відповідає програмуванню потоку даних.
Ви можете спробувати Cameleon : www.shinoe.org/cameleon, який, здається, простий у використанні. Це графічна мова для функціонального програмування, яка має підхід до потоку даних (роботи).
Він написаний на C ++, але може викликати будь-який тип локальних або віддалених програм, написаних будь-якою мовою програмування.
Він має багатомасштабний підхід, і здається, Тьюрінг завершений (це розширення мережі Петрі ).