4 ms·
> the expressiveness to augment the compiler to do interesting things with a piece of code. Julia has very interesting propositions on the subject, from langua
by shakow 5y ago
> the expressiveness to augment the compiler to do interesting things with a piece of code.
Julia has very interesting propositions on the subject, from language-level autodiff (https://fluxml.ai/Zygote.jl/latest/ https://fluxml.ai/Zygote.jl/latest/) to automated probabilistic programming (https://turing.ml/dev/ https://turing.ml/dev/) through DEs (https://diffeq.sciml.ai/stable/ https://diffeq.sciml.ai/stable/) and optimization (https://jump.dev/ https://jump.dev/).
The whole ecosystem is in ebullition, and I'm very eager to see if it will be able to transform in the comping years into a solid foundation able to rival the layers of warts stacked on top of Python.
- mccoyb 5y agoJust a nit: Zygote is not technically a language level library. In fact, none of the above libraries really are language level — they are all just Julia libraries, some of which use macros. With the exception of metaprogramming with macros, none of these libraries customize inference/opt to do something funky. Zygote (for example) is based on a language level feature — generated functions which allow multistage programming in Julia — but beyond using this feature it does not configure or otherwise modify the normal compiler pipeline. With Julia, it is sometimes tough to tell — but Diffractor (for example) I would consider a language level library, as it modifies the traditional compiler pipeline to perform inference and optimization in a specific way.
- shakow 5y agoI guess it depends on what you call “language-level”; I mentioned these libraries because they all make use of macros and/or AST manipulation, which I would put somewhere in a grey area between language and compiler.