Programování toku dat - Dataflow programming
V programování počítače , dataflow programovací je programovací paradigma , že modely program jako orientovaný graf dat proudících mezi operacemi, a tak se provádí dataflow principy a architektury. Programovací jazyky toku dat sdílejí některé funkce funkčních jazyků a byly obecně vyvinuty s cílem přinést některé funkční koncepty do jazyka vhodnějšího pro numerické zpracování. Někteří autoři používají termín datový tok místo toku dat, aby se vyhnuli záměně s výpočty toku dat nebo architekturou toku dat , založené na neurčitém strojovém paradigmatu. Programování toku dat propagoval Jack Dennis a jeho postgraduální studenti na MIT v 60. letech.
Vlastnosti programovacích jazyků toku dat
Program je tradičně modelován jako řada operací probíhajících v určitém pořadí; toto může být označováno jako sekvenční, procedurální, řídicí tok (což naznačuje, že si program vybere konkrétní cestu) nebo imperativní programování . Program se zaměřuje na příkazy, v souladu s von Neumannovou vizí sekvenčního programování, kde jsou data obvykle „v klidu“.
Naproti tomu programování toků dat zdůrazňuje pohyb dat a modeluje programy jako řadu připojení. Explicitně definované vstupy a výstupy spojují operace, které fungují jako černé skříňky . Operace se spustí, jakmile vstoupí v platnost všechny její vstupy. Jazyky toku dat jsou tedy ze své podstaty paralelní a mohou dobře fungovat ve velkých decentralizovaných systémech.
Stát
Jedním z klíčových konceptů počítačového programování je myšlenka stavu , v podstatě snímek různých podmínek v systému. Většina programovacích jazyků vyžaduje značné množství stavových informací, které jsou před programátorem obvykle skryty. Samotný počítač často netuší, která informace zakóduje trvalý stav. Jedná se o vážný problém, protože informace o stavu je třeba sdílet mezi více procesory v paralelních procesorech . Většina jazyků nutí programátora přidat další kód, který indikuje, která data a části kódu jsou pro stát důležité. Tento kód bývá nákladný jak z hlediska výkonu, tak i obtížně čitelný nebo laditelný. Explicitní paralelismus je jedním z hlavních důvodů špatného výkonu Enterprise Java Beans při budování datově náročných aplikací , které nejsou OLTP .
Tam, kde si lze sekvenční program představit jako jediného pracovníka pohybujícího se mezi úkoly (operacemi), je program toku dat spíše sérií pracovníků na montážní lince , z nichž každý provádí konkrétní úkol, kdykoli jsou k dispozici materiály. Protože se operace zabývají pouze dostupností datových vstupů, nemají žádný skrytý stav, který je možné sledovat, a všechny jsou současně „připravené“.
Reprezentace
Programy toku dat jsou zastoupeny různými způsoby. Tradiční program je obvykle reprezentován jako série textových instrukcí, což je rozumné pro popis sériového systému, který přenáší data mezi malé, jednoúčelové nástroje, které přijímají, zpracovávají a vrací. Programy toku dat začínají vstupem, možná parametry příkazového řádku , a ukazují, jak jsou tato data používána a upravována. Tok dat je explicitní, často vizuálně znázorněn jako čára nebo potrubí.
Pokud jde o kódování, program toku dat může být implementován jako hashovací tabulka s jedinečně identifikovanými vstupy jako klíči, které se používají k vyhledání ukazatelů na pokyny. Po dokončení jakékoli operace program prohledá seznam operací, dokud nenajde první operaci, kde jsou všechny vstupy aktuálně platné, a spustí ji. Když tato operace skončí, bude obvykle vydávat data, čímž se stane další operace platnou.
Pro paralelní provoz je třeba sdílet pouze seznam; je to stav celého programu. Úloha udržování stavu je tedy z programátoru odstraněna a dána době běhu jazyka . Na strojích s jedním procesorovým jádrem, kde by implementace navržená pro paralelní provoz jednoduše zavedla režii, lze tuto režii zcela odstranit pomocí jiného běhu.
Dějiny
Průkopnickým jazykem toku dat byl BLODI (BLOck DIagram), vyvinutý Johnem Larrym Kellym, Jr. , Carol Lochbaum a Victor A. Vyssotsky pro specifikaci vzorkovaných datových systémů . Specifikace BLODI funkčních jednotek (zesilovače, sčítače, zpožďovací linky atd.) A jejich propojení byla sestavena do jediné smyčky, která aktualizovala celý systém o jedno hodinové zatržítko.
V roce 1966 Ph.D. práce, On-line grafická specifikace počítačových procedur , Bert Sutherland vytvořil jeden z prvních grafických rámců programování toku dat, aby bylo paralelní programování snazší. Následné jazyky pro tok dat byly často vyvinuty ve velkých laboratořích superpočítačů . POGOL, jinak konvenční jazyk pro zpracování dat vyvinutý v NSA , kompiloval rozsáhlé aplikace složené z více operací soubor-soubor, např. Sloučil, vybral, shrnul nebo transformoval do efektivního kódu, který eliminoval vytváření nebo zápis na střední soubory v maximální možné míře. SISAL , populární jazyk pro tok dat vyvinutý v národní laboratoři Lawrence Livermore , vypadá jako většina jazyků řízených příkazy, ale proměnné by měly být přiřazeny jednou . To umožňuje kompilátoru snadno identifikovat vstupy a výstupy. Řada odnože sisalu byly vyvinuty, včetně SAC , Single přiřazení C , který se snaží zůstat co nejblíže k populárním C programovací jazyk jak je to možné.
Námořnictvo Spojených států financovalo vývoj ACOS a SPGN (zápis grafu zpracování signálu) počínaje počátkem 80. let. To se dnes používá na řadě platforem v této oblasti.
Radikálnějším konceptem je Prograph , ve kterém jsou programy konstruovány jako grafy na obrazovce a proměnné jsou zcela nahrazeny řádky spojujícími vstupy s výstupy. Mimochodem, Prograph byl původně napsán na Macintoshi , který zůstal jednoprocesorovým až do zavedení DayStar Genesis MP v roce 1996.
Existuje mnoho hardwarových architektur orientovaných na efektivní implementaci modelů programování toku dat. Architektura toku dat označených tokenů MIT navrhl Greg Papadopoulos .
Datový tok byl navržen jako abstrakce pro specifikaci globálního chování komponent distribuovaného systému: v modelu programování živých distribuovaných objektů se distribuované datové toky používají k ukládání a komunikaci stavu a jako takové hrají roli analogickou s proměnnými, poli , a parametry v programovacích jazycích podobných Javě.
Jazyky
Mezi programovací jazyky toku dat patří:
- ASCET
- Skriptovací jazyk AviSynth pro zpracování videa
- Binární modulární datový tok BMDFM
- CAL
- Klínové písmo , funkční jazyk pracovního toku.
- CMS potrubí
- Hume
- Joule
- Keysight VEE
- KNIME je bezplatná a open-source platforma pro analýzu, hlášení a integraci dat
- LabVIEW , G
- Linda
- Lucid
- Lesk
- Max/MSP
- Microsoft Visual Programming Language - Součást Microsoft Robotics Studio určená pro programování robotiky
- Orange - An open -source, vizuální programovací nástroj pro dolování dat , statistickou analýzu dat a strojové učení .
- Oz je nyní také distribuován od 1.4.0
- Pilot potrubí
- Prograph
- Čistá data
- Quartz Composer - navržený společností Apple ; používá se pro grafické animace a efekty
- SAC Jedno přiřazení C
- SIGNAL (synchronní jazyk orientovaný na tok dat umožňující vícehodinové specifikace)
- Simulink
- SISAL
- SystemVerilog - Jazyk popisu hardwaru
- Verilog - Jazyk popisu hardwaru absorbovaný do standardu SystemVerilog v roce 2009
- VHDL - jazyk popisu hardwaru
- XEE (Starlight) XML inženýrské prostředí
- XProc
Rozhraní pro programování aplikací
- Apache Beam : Java/Scala SDK, která sjednocuje streamování (a dávkové) zpracování s podporou několika exekučních motorů (Spark, Flink, Google dataflow ...)
- Apache Flink : knihovna Java/Scala, která umožňuje spouštění streamovaných (a dávkových) výpočtů na distribuovaném clusteru Hadoop (nebo jiném)
- SystemC : Knihovna pro C ++, zaměřená hlavně na návrh hardwaru.
- TensorFlow : Knihovna strojového učení založená na programování datových toků .
Viz také
- Herecký model
- Programování na základě dat
- Zpracování digitálních signálů
- Programování řízené událostmi
- Programování založené na toku
- Funkční reaktivní programování
- Glosář rekonfigurovatelných počítačů
- Vysoce výkonné rekonfigurovatelné výpočty
- Inkrementální výpočet
- Model paralelního programování
- Rozdělený globální adresní prostor
- Pipeline (Unix)
- Kvantový obvod
- Programování signálu
- Zpracování streamu
- Trubky Yahoo
Reference
externí odkazy
- Kniha: Tok dat a reaktivní programovací systémy
- Základy programování toku dat v F# a C#
- Programování toku dat - koncept, jazyky a aplikace
- Statické plánování programů synchronního toku dat pro zpracování digitálního signálu
- Manipulace s obrovskou zátěží bez přidání složitosti Základní pojmy programování toku dat, Dr. Dobb's, září 2011
- Tok dat čisté funkce kanálu