anchor.diff:  
   ROS is by far the most widespread messaging framework in the robotics research community and has been officially supported by Mathworks' https://www.mathworks.com/products/robotics.html[Robotics System Toolbox] since 2014. The MATLAB interface is implemented on top of RosJava. The Simulink code generation aspect leverages ROS C++.
   
  -So far we didn't have a chance to use the library in a project, so our impressions are purely based on a quick look at the toolbox files and the compiled Java bytecode. As far as we could tell they built a small Java library that wraps RosJava functionality and provides an interface that is easier to call from MATLAB. Most of the actual logic seems to be implemented in MATLAB code, but they make extensive use of various Java libraries. Examples include listing network interfaces and doing in-memory decompression of images, which would be difficult to do in pure MATLAB.
  -
  -The underlying Java interface is completely hidden from users as all of the Java calls happen inside of wrapping MATLAB classes. For example, there is a wrapper class for each Java message type that exposes typical MATLAB properties (get/set) that modify the state of the underlying Java object. Similarly, all Java exceptions get intercepted and wrapped in a MATLAB exception before being exposed to the user.
  +So far we didn't have a chance to use the library in a project, so our impressions are purely based on a quick look at the toolbox files and the compiled Java bytecode. As far as we could tell they built a small Java library that wraps RosJava functionality and provides an interface that is easier to call from MATLAB. Most of the actual logic seems to be implemented in MATLAB code, but they make extensive use of various Java libraries for problems that would be difficult to implement in pure MATLAB, e.g., listing networking interfaces or doing in-memory decompression of images.
  +
  +The underlying Java interface is completely hidden from users as all of the Java calls happen inside of wrapping MATLAB classes. For example, there is a wrapper class for each Java message type that exposes typical MATLAB properties (get/set) that modify the state of the underlying Java object. Similarly, all Java exceptions get intercepted and wrapped in a MATLAB exception before being exposed to the user. The code below shows a simplified example of a message wrapper.
   
   [source,matlab]
   ----
  
positive.code: lc.publish('COMMAND_CHANNEL', cmd);
  ----
  
  Incoming messages are received by subscribing to a channel and picking up messages from the aggregator's queue. Since Java is limited to a single return argument, the _getNextMessage_ call returns a Java type that contains the received byes as well as the source channel name.
  
  [source,java]
  ----
  
negative.code: 
  === ZeroMQ
  
  ZeroMQ is another asynchonous messaging library that is popular for building distributed systems. It only handles the messaging aspect, so users need to supply their own wire format.
  
  https://github.com/smcgill3/zeromq-matlab[ZeroMQ-matlab] is a MATLAB interface to ZeroMQ that was developed at UPenn between 2013-2015. It is implemented as a single MEX function that results in different actions depending on the first argument. State is maintained by using socket IDs that need to be passed in by the user at every call. The code below shows a simplified snippet of the send action.
  
  [source,c++]
  ----
  