Frequently Asked Questions

Why Julia

The JuliaLang and (JuliaPro) is an open-source Just-In-Time (JIT) & optionally precompiled, strongly-typed, and high-performance programming language. The algorithmic code is implemented in Julia for many reasons, such as agile development, high level syntax, performance, type safety, multiple dispatch replacement for object oriented, parallel computing, dynamic development, cross compilable (with gcc and clang) and foundational cross-platform (LLVM) technologies. See JuliaCon2018 highlights video. Julia can be thought of as either {C+, Mex (done right), or as a modern Fortran replacement}.

Factor Graphs: why not just filter?

Why can't I just filter, or what is the connection with FGs? See the "Principles" section in the documentation.

Can Caesar.jl be used in other languages beyond Julia? Yes.

The Caesar.jl project is expressly focused on making this algorithmic code available to C/Fortran/C++/C#/Python/Java/JS. Julia itself offers many additional interops. ZMQ and HTTP/WebSockets are the standardized interfaces of choice, please see details at the multi-language section). Consider opening issues or getting in touch for more information.

Just-In-Time Compiling (i.e. why are first runs slow?)

Julia uses just-in-time compilation (unless already pre-compiled) which takes additional time the first time a new function is called. Additional calls to a function is fast from the second call onwards since the static function is now cached and ready for use.

Static, Shared Object .so Compilation

Packages are already compiled to static objects (.ji files), but can also be compiled to more common .so files. See this AOT vs JIT compiling blog post for a deeper discussion. Also see this Julia Binaries Blog.

Note recent developments announced on discourse.. Also see new brute force sysimg work at Fezzik.jl.

Can Julia be Embedded into C/C++

Yes, see the Julia embedding documentation page.

Why ZMQ Middleware Layer (multilang)?

Zero Message Queue (ZMQ) is a widely used data transport layer used to build various other multiprocess middleware with wide support among other programming languages.

ROS Integration

ROS integration is a priority for this project and will accompany the so-called 'prime time' release of the code. ROS and ZMQ interfaces are closely related.

Note the present focus (2018Q3-2019Q2) is to stabilize the ZMQ interface.

Voice Please add your voice of support or suggestions on ROS integration here.

WIP Please see work on an initial PoC (still using PyCall) via our wiki developer docs here.

What is supersolve?

When multiple numerical values/solutions exists for the (or nearly) same factor graph – then solutions, including a reference solution (ground truth) can just be stacked in that variable. See and comment on a few cases here.

Current Julia version, v1.2.x

Caesar.jl and packages are currently targeting Julia v1.2.x (4Q2019).

How does JSON-Schema work?

Caesar.jl intends to follow json-schema.org, see step-by-step guide here.

How to get Julia memory allocation points?

See discourse discussion.