Hi,

> 1. A developer would author a custom MEX function that
> uses C++ "building blocks" (i.e. classes and header files)
> from the object dispatch layer "framework". They would
> link their custom MEX function against a helper shared
> library that is built from the source code of the object
> dispatch layer and provides the symbols/implementation for
> the aforementioned C++ "building blocks".

How do we install the object dispatch layer to use it in
apache/arrow? I assumed that something like the following:

----
$ git clone https://github.com/mathworks/object-dispatch-layer.git
$ cd object-dispatch-layer
$ cmake -S . -B build ...
$ cmake --build build
$ cmake --install build
$ git clone https://github.com/apache/arrow.git
$ cd apache/matlab
$ cmake -S . -B build # This find installed object-dispatch-layer
$ cmake --build build
$ cmake --install build
----

My assumption is right?

> Essentially, for a developer to use the object dispatch
> layer, they will need to author a fair amount of custom
> code which makes use of both MATLAB and C++ "building
> blocks" from the "framework".

I think that this is a normal library usage. For example,
our S3 filesystem module implementation in C++ has about
2500 lines and uses classes provides by AWS SDK C++:
  https://github.com/apache/arrow/blob/master/cpp/src/arrow/filesystem/s3fs.cc


> If we had to go through the IP Clearance Process, would
> that mean we would need to repeatedly clear the code every
> time we wanted to sync up the git submodule with the
> latest source code from the external repository? It seems
> like this would quickly become impractical since we
> anticipate the need to iterate frequently on the object
> dispatch layer early on.

If the object dispatch layer doesn't depend on Apache Arrow
and is a general purpose framework, we can vendor it without
IP clearance.
e.g.: https://github.com/apache/arrow/tree/master/cpp/src/arrow/vendored/xxhash

BTW, why do you want to use "git submodule" to use the
object dispatch layer? Why don't you install it separately
or build by externalproject_add() in CMake?
  https://cmake.org/cmake/help/latest/module/ExternalProject.html


Thanks,
-- 
kou

In 
<byapr05mb648755bee2e0caccb0f407d9ae...@byapr05mb6487.namprd05.prod.outlook.com>
  "Re: [MATLAB] Integrating a framework for connecting MATLAB and C++ objects 
using MEX" on Wed, 8 Jun 2022 15:59:13 +0000,
  Kevin Gurney <kgur...@mathworks.com> wrote:

> Hi Kou,
> 
> ---
> 
> Note: I am replying to your email as a forward from Fiona (Cc'd) since your 
> original email was accidentally blocked by my email client).
> 
> ---
> 
> The way that we expected the object dispatch layer to be used by client code 
> is as follows:
> 
> 1. A developer would author a custom MEX function that uses C++ "building 
> blocks" (i.e. classes and header files) from the object dispatch layer 
> "framework". They would link their custom MEX function against a helper 
> shared library that is built from the source code of the object dispatch 
> layer and provides the symbols/implementation for the aforementioned C++ 
> "building blocks".
> 
> 2. The object dispatch layer expects the compiled MEX function to have a 
> specific name and be available on the MATLAB Search Path [1] so that it can 
> be used by the MATLAB side of the object dispatch layer.
> 
> 3. Once the MEX function is available on the MATLAB Search Path, client 
> MATLAB code can use a set of MATLAB "building blocks" (i.e. classes), which 
> are part of the object dispatch layer "framework", to connect a MATLAB class 
> with a corresponding C++ class.
> 
> Essentially, for a developer to use the object dispatch layer, they will need 
> to author a fair amount of custom code which makes use of both MATLAB and C++ 
> "building blocks" from the "framework".
> 
> It's not clear to me whether the steps described above classify as "library 
> usage" with regard to the IP Clearance Process.
> 
> If we had to go through the IP Clearance Process, would that mean we would 
> need to repeatedly clear the code every time we wanted to sync up the git 
> submodule with the latest source code from the external repository? It seems 
> like this would quickly become impractical since we anticipate the need to 
> iterate frequently on the object dispatch layer early on.
> 
> It's quite possible that I am not answering your questions completely, so 
> please let me know if anything is unclear. My apologies in advance for any 
> confusion.
> 
> [1] 
> https://www.mathworks.com/help/matlab/matlab_env/what-is-the-matlab-search-path.html
> 
> Best,
> 
> Kevin Gurney
> 
> ________________________________
> From: Fiona La <fion...@mathworks.com>
> Sent: Wednesday, June 8, 2022 11:24 AM
> To: Kevin Gurney <kgur...@mathworks.com>
> Subject: FW: [MATLAB] Integrating a framework for connecting MATLAB and C++ 
> objects using MEX
> 
> 
> 
> 
> 
> 
> From: Sutou Kouhei <k...@clear-code.com>
> Date: Tuesday, June 7, 2022 at 8:36 PM
> To: dev@arrow.apache.org <dev@arrow.apache.org>
> Cc: Fiona La <fion...@mathworks.com>, Jeremy Hughes <jhug...@mathworks.com>, 
> Nick Haddad <nhad...@mathworks.com>
> Subject: Re: [MATLAB] Integrating a framework for connecting MATLAB and C++ 
> objects using MEX
> 
> Hi,
> 
> Can we use the object dispatch layer as a library? Or should
> we copy (or submodule) the object dispatch layer to
> apache/arrow?
> 
> If we can use the object dispatch layer as a library, we can
> just use it as an external library like GoogleTest. We don't
> need IP clearance. You can use any Apache License 2.0
> compatible license for the object dispatch layer.
> 
> Thanks,
> --
> kou
> 
> In 
> <mn2pr05mb6496cff053c60e54c133c93cae...@mn2pr05mb6496.namprd05.prod.outlook.com>
> "[MATLAB] Integrating a framework for connecting MATLAB and C++ objects using 
> MEX" on Tue, 7 Jun 2022 18:10:43 +0000,
> Kevin Gurney <kgur...@mathworks.com> wrote:
> 
>> Hi All,
>>
>> I am reaching out to seek guidance from the community regarding a code 
>> integration puzzle.
>>
>> The architecture that we are currently pursuing for the MATLAB interface to 
>> Arrow [1] involves dispatching to the Arrow C++ libraries using MEX (a 
>> MATLAB facility for calling C/C++ code [2]). A major challenge with this 
>> approach has been keeping Arrow C++ objects (e.g. arrow::Array) alive in 
>> memory for the appropriate amount of time and making it easy to interface 
>> with them from MATLAB.
>>
>> MATLAB has a recommended solution for this problem [3]. However, we've been 
>> pursuing a MEX-based solution due to the pervasiveness of MEX and its 
>> familiarity to MATLAB users. Our hope is that using MEX will make it easy 
>> for others to contribute to the MATLAB interface.
>>
>> To help maintain the connection between MATLAB objects and C++, we've been 
>> experimenting with a MEX-based object dispatch layer. The primary goal of 
>> this work is to unblock development of the MATLAB interface to Arrow. 
>> However, this object dispatch layer is non-trivial and ultimately unrelated 
>> to the Arrow project's core mission. Therefore, submitting this code to the 
>> Arrow project doesn't seem like the optimal code integration strategy.
>>
>> We’ve been considering the possibility of creating a new open-source 
>> repository under the MathWorks GitHub organization [4] to host the object 
>> dispatch layer (a side effect of this approach is that it may help encourage 
>> reuse of this infrastructure in future open-source MATLAB projects).
>>
>> However, this approach would come with notable tradeoffs:
>>
>> 1. We would need to follow the ASF IP Clearance Process [5] to integrate 
>> this code into the Arrow project (it's possible we are mistaken about this).
>>
>> 2. It's not obvious how we should keep the code in sync. Would it be 
>> possible to use a git submodule [6] to "symlink" to the external repo?
>>
>> 3. What about licensing? Does the code need to be Apache licensed, or would 
>> it be possible to use another Apache-compatible license [7], like BSD? BSD 
>> is the default choice for new projects hosted under the MathWorks GitHub 
>> organization.
>>
>> Admittedly, we aren't sure what the best path forward is, so we appreciate 
>> the community's guidance. We welcome any suggestions.
>>
>> [1] 
>> https://github.com/apache/arrow/tree/master/matlab<https://github.com/apache/arrow/tree/master/matlab>
>> [2] https://www.mathworks.com/help/matlab/call-mex-files-1.html
>> [3] 
>> https://www.mathworks.com/help/matlab/build-matlab-interface-to-c-library.html
>> [4] https://github.com/mathworks<https://github.com/mathworks>
>> [5] 
>> https://incubator.apache.org/ip-clearance/<https://incubator.apache.org/ip-clearance>
>> [6] 
>> https://github.blog/2016-02-01-working-with-submodules/<https://github.blog/2016-02-01-working-with-submodules>
>> [7] 
>> https://www.apache.org/legal/resolved.html#category-a<https://www.apache.org/legal/resolved.html#category-a>
>>
>> Thank you,
>>
>> Kevin Gurney

Reply via email to