# \[ANN\] Symbolics.jl: A Modern Computer Algebra System for a Modern Language

**URL:** <https://discourse.julialang.org/t/ann-symbolics-jl-a-modern-computer-algebra-system-for-a-modern-language/56251>\
**Category:** Package Announcements\
**Created:** [March 1, 2021, 2:59pm UTC](https://discourse.julialang.org/t/ann-symbolics-jl-a-modern-computer-algebra-system-for-a-modern-language/56251 "2021-03-01T14:59:40Z")\
**Posts on this page:** 1\
**Showing post:** 92

<div class="post-metadata">

**Author:** ![certik](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/certik/32/2651_2.png) [@certik](https://discourse.julialang.org/u/certik)\
**Post date:** [March 9, 2021, 12:25pm UTC](https://discourse.julialang.org/t/ann-symbolics-jl-a-modern-computer-algebra-system-for-a-modern-language/56251/92 "2021-03-09T12:25:34Z")

</div>

I am the original author of [SymPy](https://sympy.org) and [SymEngine](https://github.com/symengine/symengine). Python is indeed too slow, so it is hard for SymPy to compete in terms of speed, but it is still very useful to a lot of people and there is a large community around it. The SymEngine project is written in C++ and it is _very_ fast (a few years ago it has been generally faster than any other computer algebra system that we tried, including Mathematica, Maple, GiNaC, Sage, SymPy, Maxima, etc.). @ChrisRackauckas have you run some benchmarks against SymEngine?

Furthermore, our vision with SymEngine is to be the “engine” that can be used in higher level languages such as Python, Ruby or Julia (it has wrappers to all those and more). That way we can all collaborate on a common codebase that can be natively used in all our languages of choice.

I noticed you wrote:

> But as we expanded beyond “build Jacobian and simplify”, SymEngine wasn’t enough. It was missing too many features.

Indeed, SymEngine is missing features compared to SymPy. We were hoping you would be interested in working with us to contribute them, especially since you were already using it. 🙂 Because if you do, then not just Julia, but every language including Python and SymPy would benefit.

It is easier for the Julia community to contribute if the code is written in Julia, just like it is easier for the Python community to contribute to SymPy since the code is in Python. That is true and growing the developer community is important.

But I believe it is important to write libraries that can be used from any language. C++ is one of the options for such a common language. Last time I tried Julia’s ahead-of-time compilation to static executables was not yet as easy as with C++ or Fortran:

> [@How to statically compile to a binary](https://discourse.julialang.org/t/how-to-statically-compile-to-a-binary/23825):
>
> The front page [https://julialang.org](https://julialang.org) says at the “General Purpose” tab that you can “[statically compile](https://github.com/JuliaLang/PackageCompiler.jl) your code”. So I have installed PackageCompiler as I described [here](https://discourse.julialang.org/t/how-to-install-packagecompiler/23824). I am able to create a dynamic binary as follows: julia ~/.julia/packages/PackageCompiler/oT98U/juliac.jl -vae --compile=all hello.jl when you examine it: $ ldd builddir/hello linux-vdso.so.1 (0x00007ffc27946000) hello.so =\> /home/certik/repos/julia\_comp/builddir/hello.so (0x0000151ddd2c7000) libjulia.so.1 =\> /home/cer…

---

_[View the full topic](https://discourse.julialang.org/t/ann-symbolics-jl-a-modern-computer-algebra-system-for-a-modern-language/56251)._
