Мови програмування потоку даних [закрито]


77

Що таке мова програмування потоку даних? Навіщо це використовувати? І чи є від цього якісь переваги?


1
Дякую, я щойно дізнався щось нове
JoshBerke

Програми потоку даних можуть виконуватися в просторі (уявіть заводський рядок), де стандартні програми Controlflow виконуються вчасно. Для отримання додаткової інформації дивіться: openspl.org/what-is-openspl .
Неманья Трифунович

Відповіді:


106

Мовою керування потоком у вас є потік інструкцій, які працюють із зовнішніми даними. Умовне виконання, стрибки та виклики процедур змінюють потік команд, який потрібно виконати. Це можна розглядати як інструкції, що протікають через дані (наприклад, інструкції діють на регістри, які завантажуються даними за допомогою інструкцій - дані статичні, якщо потік інструкцій не переміщує їх). Оператор потоку керування "if" переходить до правильної гілки в потоці інструкцій, але дані не переміщуються.

Мовою потоку даних у вас є потік даних, який передається від інструкції до інструкції для обробки. Умовне виконання, стрибки та виклики процедур спрямовують дані до різних інструкцій. Це можна розглядати як дані, що протікають через інші статичні інструкції, наприклад, про те, як електричні сигнали проходять по ланцюгах або вода проходить по трубах. Оператор "if" потоку даних перенаправляє дані до правильної гілки.

Кілька прикладів функцій та мов потоку даних:

Текстові мови

Візуальні мови

Продукти, які вбудовують візуальну мову потоку даних:


Додавання до менш відомого списку:
Яловичина

інший називається expecco, в комплекті з графічним інтерфейсом (google та завантажте демо)
blabla999,

Що є прикладом чогось, що НЕ є потоком даних?
cuttingPuzzles

Більшість мов, не перелічених вище. C ++, Java, Python, COBOL і майже будь-яка інша імперативна мова, більшість мов OO, найбільш функціональна мова, мови програмування логіки, такі як Prolog тощо

1
Чому ніхто не згадує конвеєри Unix як загальний приклад програмування потоку даних? Навіть Вікіпедія про це не згадує. Чи є щось, що дискваліфікує це?
Шрідхар Сарнобат

27

Мови програмування потоку даних - це ті, які фокусуються на стані програми і викликають операції, що відбуваються відповідно до будь-якої зміни стану. Мови програмування потоку даних за своєю суттю паралельні, оскільки операції покладаються на вхідні дані, які при виконанні операції призведуть до виконання. Це означає, на відміну від звичайної програми, де за однією операцією слідує наступна операція, у потоці даних програма буде виконуватися до тих пір, поки вхідні дані будуть задоволені, і, отже, немає встановленого порядку.

Часто мови програмування потоку даних використовують велику хеш-таблицю, де ключі - це дані програми, а значення таблиці - вказівники на операції програми. Це полегшує створення багатоядерних програм на мові програмування потоку даних, оскільки кожному ядру для роботи потрібен лише хеш-табл.

Поширеним прикладом мови програмування потоку даних є програма розширеного аркуша, яка має стовпці даних, на які впливають інші стовпці даних. Якщо дані в одному стовпці змінюються, інші дані в інших стовпцях, можливо, змінюватимуться разом із ним. Незважаючи на те, що програма розповсюджених листів є найпоширенішим прикладом мови програмування потоків даних, більшість із них, як правило, є графічними мовами.


1
+1, оскільки ви поділилися тим, що дізналися з моменту того, як задали це запитання.
edymtt

2
Дякую. Зрозуміліше прийнятої відповіді.
tomekwi

17

Одним із видів програмування потоків даних є реактивне програмування . Коли цей стиль програмування використовується у функціональній мові, це називається функціональним реактивним програмуванням . Прикладом функціональної реактивної мови програмування для Інтернету є Flapjax .

Крім того, anic - це мова потоку даних, яку нещодавно обговорювали в Hacker News.

Інший приклад - Мартлет з Оксфорда.


1
+1 за згадку про реактивне програмування.
Jus12

Цікаво, що ця відповідь призвела до дискусії щодо SO: " stackoverflow.com/questions/30685707/… ". Від академічного визначення може залежати, чи однакове реактивне програмування та потік даних. Я можу погодитися, що це "один вид програмування потоку даних".
mihca

9

Мови програмування потоку даних пропонують виділити деякі локальні способи поведінки у так званих " акторів ", які повинні працювати паралельно та обмінюватися даними за каналами "точка-точка". Немає поняття центральної пам'яті (як для коду, так і для даних), на відміну від моделі Неймана комп'ютерів .

Ці актори споживають маркери даних на своїх входах і виробляють нові дані на своїх вихідних даних.

Це визначення не накладає засобів для реалізації цього на практиці. Однак виробництво / споживання даних потрібно аналізувати з обережністю: наприклад, якщо актор B не споживає з такою ж швидкістю, як актор A, який виробляє дані, тоді між ними потрібна потенційно необмежена пам'ять (FIFO) . Багато інших проблем можуть виникнути як тупикові ситуації .

У багатьох випадках цей аналіз зазнає невдачі, оскільки чергування внутрішньої поведінки є нерозв'язним (поза межами сучасних офіційних методів).

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

  • наприклад, для визначення еталонних моделей для кодування відео: чиста програма C не виконає цю роботу, оскільки робить припущення, що все виконується як послідовність операцій, що не відповідає дійсності в комп'ютерах (конвеєр, VLIW, мультикор і VLSI) . Можливо, ви могли б поглянути на це: нещодавня кандидатська дисертація . Мова потоку даних CAL пропонується як уніфікуюча мова для посилань кодерів / декодерів відео наступного покоління.
  • Критично важлива місія там, де потрібна безпека: якщо ви додасте деякі вагомі припущення щодо виробництва / споживання даних, то ви отримаєте мову з потужним потенціалом щодо створення коду, доказів тощо (див. Синхронні мови )

5

Excel (та інші електронні таблиці) є по суті мовами потоків даних. Мови потоків даних багато в чому нагадують мови функціонального програмування, за винятком того, що значення в аркушах цілого графіку програми - це зовсім не значення, а змінні (або потоки значень), так що коли вони змінюються, зміни пульсують і пливуть вгору по графіку .


1
Я не згоден; розв'язувачі обмежень, як правило, працюють шляхом виявлення оптимумів у просторах пошуку шляхом поширення обмежень. Електронні таблиці поширюють значення, а не обмеження.
Barry Kelly

1
Вирішити - це додаткова функція, яку більшість людей не використовують. І дерева - це теж графіки; більше того, якщо будь-які дві клітини посилаються на одну і ту ж третю клітину, вони утворюють даг і більше не є деревом.
Barry Kelly

4
"Електронні таблиці поширюють значення, а не обмеження." Так, потік значень - це те, що робить його "потоком даних".

5

Mozart підтримує синхронізацію, подібну до потоку даних, і має деякі комерційні програми. Ви також можете заперечити, що make - це мова програмування потоку даних.


Дякуємо за згадку про make. Це те, що привело мене сюди. Cunieform, здається, є його узагальненням.
masterxilo

2

Багато інструментів ETL також є в цій сфері. Завдання потоку даних у MS SSIS - хороший приклад. Графічний інструмент у цьому випадку.


2

Це насправді досить стара концепція - у 1970-х роках навіть існувала машина + мова +, побудована для ефективного програмування та виконання потоку даних ( Manchester Dataflow Machine ).

Найцікавіше в цьому - його подвійність до таких ледачих функціональних мов, як Хаскелл. Отже, якщо ваші кроки обробки є чисто функціональними, і якщо у вас є достатньо процесорних одиниць для їх оцінки та передачі результатів, ви отримуєте максимальну паралельність безкоштовно - автоматично та без будь-яких зусиль програмування!


1

Є певні домени, де програмування потоку даних має набагато більше сенсу. Один із прикладів - медіа в реальному часі, і два широко використовуваних графічних середовища програмування потоків даних, Pure Data та Max / MSP, зосереджені на програмуванні медіа в реальному часі. Я припускаю, що їх візуальна природа також добре відповідає програмуванню потоку даних.


1

Ви можете спробувати Cameleon : www.shinoe.org/cameleon, який, здається, простий у використанні. Це графічна мова для функціонального програмування, яка має підхід до потоку даних (роботи).

Він написаний на C ++, але може викликати будь-який тип локальних або віддалених програм, написаних будь-якою мовою програмування.

Він має багатомасштабний підхід, і здається, Тьюрінг завершений (це розширення мережі Петрі ).


a |> f = fa. Це потік даних у Haskell (він отримує середнє значення списку елементів від 1..200)? [1..200] |> карта (* 5) |> фільтр (> 66) |> dup (сума, довжина) |> uncurry (div) де dup (f1, f2) v = (f1 v, f2 v)
aoeu256
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.