Mojo
Mojo🔥 ist zugleich eine neue Programmiersprache und eine Python-Erweiterung: Es bettet CPython quasi ein, erlaubt aber, kompilierbare Python-ähnliche Programme zu schreiben und dabei auf Hardware-Datentypen zuzugreifen und native Performance zu erreichen. Es bietet Speichersicherheit (wie Rust) und Metaprogramming (wie Nim). Allerdings ist Mojo derzeit nur auf der Entwickler-Website in einer Sandbox verfügbar; es soll aber bald völlig open-sourced werden.
Die Motivation fĂĽr die Entwicklung von Mojo liegt im Bereich von KI-Anwendungen.
Vergleich mit Nim: https://forum.nim-lang.org/t/10159, https://forum.nim-lang.org/t/10270
Update 2023-09-15: Jetzt kann Mojo auch lokal installiert werden. Allerdings muss man sich auf der Webseite registrieren, und es läuft (bei mir) nicht alles reibungslos. Folgendes habe ich gemacht (auf der Webseite wird die „manuelle Installation“ beschrieben, die hätte ich durchführen sollen):
$ mkdir ~/projects/mojo && cd ~/projects/mojo $ curl https://get.modular.com | MODULAR_AUTH=<TOKEN> sh - # das TOKEN wurde auf der Webseite nach der Registrierung angezeigt # das Passwort für sudo wurde abgefragt! # eine interaktive Abfrage vom apt install blieb hängen, eine Eingabe war nicht möglich # nach ^Z und fg brach der Prozess ab, aber ein deb „modular“ war installiert $ modular auth <TOKEN> $ modular install mojo # -> error: externally-managed-environment $ python3.11 -m venv --prompt mojo venv-311 $ . venv-311/bin/activate (mojo)$ pip install -U pip wheel (mojo)$ modular install mojo # -> etliche Fehlermeldungen zu Symlinks „File exists“ (mojo)$ ~/.modular/pkg/packages.modular.com_mojo/bin/mojo Welcome to Mojo! 🔥Expressions are delimited by a blank line. Type `:mojo help` for further assistance.
Jetzt kann man tatsächlich Mojo laufenlassen:
1> var i = 0
2. while i < 11:
3. print(i, i*i)
4. i += 1
5.
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
(Int) i = {
(index) value = 11
}
5>
Achtung – das ist nicht Python, das ist Mojo, und da gelten andere Regeln!
(Und die Cursortasten funktionieren im REPL nicht.)
Mit :help bekommt man nĂĽtzliche Hinweise; z.B. kann man einen Eingabeblock mit
%%python beginnen lassen und dann „echte Python-Statements“ eingeben. Allerdings
funktioniert das erst einmal nicht
(„Unable to locate a suitable libpython, please set MOJO_PYTHON_LIBRARY“).
Also:
(mojo)$ export MOJO_PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.11.so
(mojo)$ ln -s ~/.modular/pkg/packages.modular.com_mojo/bin/mojo \
venv-311/bin/mojo
(mojo)$ mojo
Welcome to Mojo! 🔥Expressions are delimited by a blank line.
Type `:mojo help` for further assistance.
1> %%python
2. import sys
3. print(sys.version)
4.
3.11.5 (main, Aug 29 2023, 15:31:31) [GCC 13.2.0]
(PythonObject) sys = {
(PyObjectPtr) py_object = {
(pointer<scalar<si8>>) value = 0x00007fd9b9b7aca0
}
}
4> :q
Nun ein Versuch mit einem (abgespeckten) Python-Beispielprogramm:
(mojo)$ mojo iq.mojo … (mojo)$ mojo build iq.mojo (mojo)$ ./iq (mojo)$ time ./iq.py # -> 0.169s (mojo)$ time ./iq # -> 0.002s
(Seltsamerweise sind die Ergebnisse zunehmend verschieden, vermutlich durch unterschiedliche Implementation der Bibliotheksroutinen (oder unterschiedliche Datenformate??).