Converted parsing from String to &str
work on SocketOpen
started moving to tokio
Free and open source implementation of the Wolfram language.
Take[TextWords[ WikipediaData["Moon"] ], 8]
will yield {"The", "Moon", "is", "an", "astronomical", "body", "orbiting", "Earth"}
.
EntityValue[
LanguageIdentify["Oh, comme ce language est beau!"],
EntityProperty["Language", "Codes"]
]
will yield {"fr"}
.
We thrive to implement Principia with as much Wolfram code as possible, because it makes maintaining the code base so much easier. Wolfram code is 10x smaller than the equivalent Rust code, which at the scale we hope to acheive with the whole language implemented, is going to make a huge difference in lines of code. It also allows us to make deep refactoring of the core of the interpreter without having to touch any of the Wolfram code.
Implementing in Wolfram is perfect for sugar such as First:
First[l_List] = Part[l, 1]
Implementing in Wolfram is also perfect for IO bound functions, such as the ones getting Entity information from Wikidata.
We need free (as in beer and speech) data sources that are also reliable to implement some functions. Here are some data sources that we use:
If for some reason you can't write in Wolfram the function that you want, you can write it in src/builtin.rs .
Each item in the list of native Rust fonction as a lambda called should_evalutate, that if it returns true, will use the other lambda to evaluate the tree.
If you have a Rust library ready to use, writing in Rust is great. Look at LanguageIdentify for an exemple of that.
If you have to do native interop, you have to use Rust. Look at URLRead for an exemple.
When in doubt, write your code in Wolfram.
There are many other important area in the interpreter, but those are much less recommended as a first contribution, as they require a deep understanding of the code base.
We do parsing in src/parse.rs using Nom.
We have the core eval loop in src/eval.rs.
We have various utility functions to transforms evaluation trees in differents ways in src/ast.rs
Clone this repo and install it. You will need rustup.
cargo install
mv ~/.cargo/bin/principia /usr/local/bin/
Do the steps above and add this to your .emacs:
(defun org-babel-execute:wolfram (body params)
"Execute a block of wolfram code with org-babel."
(message "executing Wolfram source code block")
(org-babel-eval "principia" body))
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.