Table of contents

flow-based programming

%3 cluster_190a6c92_c43f_40ff_baff_f5f20f6669bc flow-based programming cluster_c05536d6_8858_4629_97af_0386f6dbfb74 FBP-inspired systems cluster_3ab93fbf_5367_4366_8a1a_f0b0d5ad8d37 Differences with classical FBP cluster_e4d781be_886b_44e2_8bab_56df4802a75e Discussions _bc6b8867_ac79_4ece_87fd_f34177a1e43a FBP tenants (non-obvious) (src) _10b81024_612b_4d16_9f43_b4d547b641e7 Classical FBP systems _cbd21a1c_3071_4e32_8e94_ded2efb9c6c2 Sources _ad39cb54_41f2_45b7_b2a0_ab5e189a5cc8 On HN _f7da081f_28fc_413a_b398_519df12db5d9 Sources _173d73ac_4cd6_4c58_ac0c_ce038bc102fe Business Data Types _0697fee2_182a_4e61_bc59_f9f0662a5003 dataflow _0697fee2_182a_4e61_bc59_f9f0662a5003->__0:cluster_190a6c92_c43f_40ff_baff_f5f20f6669bc _7415baea_799f_4b0d_ba20_7331c2c12a63 NoFlo _7415baea_799f_4b0d_ba20_7331c2c12a63->__1:cluster_190a6c92_c43f_40ff_baff_f5f20f6669bc _87179263_9066_49ae_9ca1_2a632a3a9cc5 Reactive programming _87179263_9066_49ae_9ca1_2a632a3a9cc5->__2:cluster_190a6c92_c43f_40ff_baff_f5f20f6669bc _74acad2b_6157_411b_ae84_b464d6d9e029 drawfbp _74acad2b_6157_411b_ae84_b464d6d9e029->__3:cluster_190a6c92_c43f_40ff_baff_f5f20f6669bc _63ff32dc_513e_4189_98e5_9f9c8e7b4bd5 Rete.js _63ff32dc_513e_4189_98e5_9f9c8e7b4bd5->__4:cluster_190a6c92_c43f_40ff_baff_f5f20f6669bc _75d118dc_9faf_49f4_a2cd_9babb4fd3abd FBP protocol _75d118dc_9faf_49f4_a2cd_9babb4fd3abd->_7415baea_799f_4b0d_ba20_7331c2c12a63 _75d118dc_9faf_49f4_a2cd_9babb4fd3abd->__5:cluster_190a6c92_c43f_40ff_baff_f5f20f6669bc _73bf4dd9_c714_42e8_a88c_89f119edbcf1 React 2014: Joe Armstrong - K things I know about building Resilient Reactive Systems _73bf4dd9_c714_42e8_a88c_89f119edbcf1->_87179263_9066_49ae_9ca1_2a632a3a9cc5 _73bf4dd9_c714_42e8_a88c_89f119edbcf1->__6:cluster_190a6c92_c43f_40ff_baff_f5f20f6669bc __0:cluster_190a6c92_c43f_40ff_baff_f5f20f6669bc->_0697fee2_182a_4e61_bc59_f9f0662a5003

FBP is a special case of dataflow programming characterized by asynchronous, concurrent processes "under the covers", Information Packets with defined lifetimes, named ports, "bounded buffer" connections, and definition of connections external to the components. (src)

FBP-inspired systems

  • Node-RED

  • NoFlo

  • Flowhub

Differences with classical FBP

In classical FBP, all components are autonomous. They can read from any of their input ports whenever they want to, and can write to any of their output ports whenever they want to. If the input port is empty or the output port full, the component waits transparently until things change. (src,via)

FBP tenants (non-obvious) (src)

  • The world is asynchronous

  • A process needs to be able to have more than one input port, and needs to be able to choose which one to receive from!

  • If a process's upstream connection fills up, the process feeding it will be suspended (unless the connection is marked "DropOldest") ("back pressure")