<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linuxkurs-Blog (Einträge über Mojo)</title><link>https://lannert.de/debloss/</link><description></description><atom:link href="https://lannert.de/debloss/categories/mojo.xml" rel="self" type="application/rss+xml"></atom:link><language>de</language><copyright>Contents © 2026 &lt;a href="mailto:lannert@hhu.de"&gt;Detlef Lannert&lt;/a&gt; 
&lt;a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0/"&gt;
&lt;img alt="Creative Commons License BY-NC-SA"
style="border-width:0; margin-bottom:12px;"
src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png"&gt;&lt;/a&gt;</copyright><lastBuildDate>Thu, 05 Mar 2026 12:53:42 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Mojo</title><link>https://lannert.de/debloss/posts/mojo/</link><dc:creator>Detlef Lannert</dc:creator><description>&lt;p&gt;&lt;a class="reference external" href="https://docs.modular.com/mojo/"&gt;Mojo🔥&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;Die Motivation für die Entwicklung von Mojo liegt im Bereich von KI-Anwendungen.&lt;/p&gt;
&lt;p&gt;Vergleich mit Nim: &lt;a class="reference external" href="https://forum.nim-lang.org/t/10159"&gt;https://forum.nim-lang.org/t/10159&lt;/a&gt;, &lt;a class="reference external" href="https://forum.nim-lang.org/t/10270"&gt;https://forum.nim-lang.org/t/10270&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;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):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-1" name="rest_code_42c094d87c224497b05e18641efce7e0-1" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-1"&gt;&lt;/a&gt;$&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;~/projects/mojo&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~/projects/mojo
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-2" name="rest_code_42c094d87c224497b05e18641efce7e0-2" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-2"&gt;&lt;/a&gt;$&lt;span class="w"&gt; &lt;/span&gt;curl&lt;span class="w"&gt; &lt;/span&gt;https://get.modular.com&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MODULAR_AUTH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;TOKEN&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;sh&lt;span class="w"&gt; &lt;/span&gt;-
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-3" name="rest_code_42c094d87c224497b05e18641efce7e0-3" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-3"&gt;&lt;/a&gt;&lt;span class="c1"&gt;#   das TOKEN wurde auf der Webseite nach der Registrierung angezeigt&lt;/span&gt;
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-4" name="rest_code_42c094d87c224497b05e18641efce7e0-4" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-4"&gt;&lt;/a&gt;&lt;span class="c1"&gt;#   das Passwort für sudo wurde abgefragt!&lt;/span&gt;
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-5" name="rest_code_42c094d87c224497b05e18641efce7e0-5" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-5"&gt;&lt;/a&gt;&lt;span class="c1"&gt;#   eine interaktive Abfrage vom apt install blieb hängen, eine Eingabe war nicht möglich&lt;/span&gt;
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-6" name="rest_code_42c094d87c224497b05e18641efce7e0-6" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-6"&gt;&lt;/a&gt;&lt;span class="c1"&gt;#   nach ^Z und fg brach der Prozess ab, aber ein deb „modular“ war installiert&lt;/span&gt;
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-7" name="rest_code_42c094d87c224497b05e18641efce7e0-7" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-7"&gt;&lt;/a&gt;$&lt;span class="w"&gt; &lt;/span&gt;modular&lt;span class="w"&gt; &lt;/span&gt;auth&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;TOKEN&amp;gt;
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-8" name="rest_code_42c094d87c224497b05e18641efce7e0-8" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-8"&gt;&lt;/a&gt;$&lt;span class="w"&gt; &lt;/span&gt;modular&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;mojo
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-9" name="rest_code_42c094d87c224497b05e18641efce7e0-9" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-9"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# -&amp;gt; error: externally-managed-environment&lt;/span&gt;
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-10" name="rest_code_42c094d87c224497b05e18641efce7e0-10" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-10"&gt;&lt;/a&gt;$&lt;span class="w"&gt; &lt;/span&gt;python3.11&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;venv&lt;span class="w"&gt; &lt;/span&gt;--prompt&lt;span class="w"&gt; &lt;/span&gt;mojo&lt;span class="w"&gt; &lt;/span&gt;venv-311
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-11" name="rest_code_42c094d87c224497b05e18641efce7e0-11" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-11"&gt;&lt;/a&gt;$&lt;span class="w"&gt; &lt;/span&gt;.&lt;span class="w"&gt; &lt;/span&gt;venv-311/bin/activate
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-12" name="rest_code_42c094d87c224497b05e18641efce7e0-12" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-12"&gt;&lt;/a&gt;&lt;span class="o"&gt;(&lt;/span&gt;mojo&lt;span class="o"&gt;)&lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;-U&lt;span class="w"&gt; &lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;wheel
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-13" name="rest_code_42c094d87c224497b05e18641efce7e0-13" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-13"&gt;&lt;/a&gt;&lt;span class="o"&gt;(&lt;/span&gt;mojo&lt;span class="o"&gt;)&lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;modular&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;mojo
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-14" name="rest_code_42c094d87c224497b05e18641efce7e0-14" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-14"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# -&amp;gt; etliche Fehlermeldungen zu Symlinks „File exists“&lt;/span&gt;
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-15" name="rest_code_42c094d87c224497b05e18641efce7e0-15" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-15"&gt;&lt;/a&gt;&lt;span class="o"&gt;(&lt;/span&gt;mojo&lt;span class="o"&gt;)&lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;~/.modular/pkg/packages.modular.com_mojo/bin/mojo
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-16" name="rest_code_42c094d87c224497b05e18641efce7e0-16" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-16"&gt;&lt;/a&gt;Welcome&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;Mojo!&lt;span class="w"&gt; &lt;/span&gt;🔥Expressions&lt;span class="w"&gt; &lt;/span&gt;are&lt;span class="w"&gt; &lt;/span&gt;delimited&lt;span class="w"&gt; &lt;/span&gt;by&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;blank&lt;span class="w"&gt; &lt;/span&gt;line.
&lt;a id="rest_code_42c094d87c224497b05e18641efce7e0-17" name="rest_code_42c094d87c224497b05e18641efce7e0-17" href="https://lannert.de/debloss/posts/mojo/#rest_code_42c094d87c224497b05e18641efce7e0-17"&gt;&lt;/a&gt;Type&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;:mojo&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;help&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;further&lt;span class="w"&gt; &lt;/span&gt;assistance.
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Jetzt kann man tatsächlich Mojo laufenlassen:&lt;/p&gt;
&lt;pre class="literal-block"&gt;1&amp;gt; var i = 0
2. while i &amp;lt; 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&amp;gt;&lt;/pre&gt;
&lt;p&gt;Achtung – das ist nicht Python, das ist Mojo, und da gelten andere Regeln!
(Und die Cursortasten funktionieren im REPL nicht.)
Mit &lt;code class="docutils literal"&gt;:help&lt;/code&gt; bekommt man nützliche Hinweise; z.B. kann man einen Eingabeblock mit
&lt;code class="docutils literal"&gt;%%python&lt;/code&gt; beginnen lassen und dann „echte Python-Statements“ eingeben. Allerdings
funktioniert das erst einmal nicht
(„Unable to locate a suitable libpython, please set &lt;cite&gt;MOJO_PYTHON_LIBRARY&lt;/cite&gt;“).&lt;/p&gt;
&lt;p&gt;Also:&lt;/p&gt;
&lt;pre class="literal-block"&gt;(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&amp;gt; %%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&amp;lt;scalar&amp;lt;si8&amp;gt;&amp;gt;) value = 0x00007fd9b9b7aca0
  }
}
4&amp;gt; :q&lt;/pre&gt;
&lt;p&gt;Nun ein Versuch mit einem (abgespeckten) Python-Beispielprogramm:&lt;/p&gt;
&lt;pre class="literal-block"&gt;(mojo)$ mojo iq.mojo
…
(mojo)$ mojo build iq.mojo
(mojo)$ ./iq
(mojo)$ time ./iq.py  # -&amp;gt; 0.169s
(mojo)$ time ./iq     # -&amp;gt; 0.002s&lt;/pre&gt;
&lt;p&gt;(Seltsamerweise sind die Ergebnisse zunehmend verschieden, vermutlich durch unterschiedliche
Implementation der Bibliotheksroutinen (oder unterschiedliche Datenformate??).&lt;/p&gt;</description><category>andere Programmiersprachen</category><category>Mojo</category><category>Programmieren</category><category>Python</category><guid>https://lannert.de/debloss/posts/mojo/</guid><pubDate>Wed, 20 Sep 2023 13:38:47 GMT</pubDate></item></channel></rss>