Unterschiede Python zu Lua?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Sprache

Lua ist vordergründig auf einen imperativen oder funktionalen Programmierstil ausgelegt und im Vergleich zu Python schwächer typisiert. In der Syntax gibt es generell einige Unterschiede (ich werde aber keinesfalls alle auflisten). Beispielsweise gibt es viel weniger Schlüsselwörter, Codeblöcke werden mit einem end abgeschlossen und die korrekte Einrückung von Code ist nur Konvention (in Python ist sie zwingend notwendig).

Beim Schreiben von Code wirst du merken, dass Lua eine größere Flexibilität auf Kosten der Stabilität (also eine fehlertolerantere Programmierung) zulässt. Die schwächere Typisierung habe ich schon benannt. Ein weiteres konkretes Beispiel wäre die Möglichkeit, Funktionsüberladungen schnell zu implementieren, indem man bei Aufruf nicht jeden Parameter explizit mit einem Argument belegt.

Python dagegen unterstützt sprachlich die objektorientierte, klassenbasierte Programmierung stärker und verfügt über mehr eingebaute Datenstrukturen (z.B. list, dict, set). Lua setzt im Vergleich dazu nur auf sogenannte Tables (Key-Value-Paarlistungen, wobei die Indizierung bei 1 beginnt, statt 0).

Performance

Wenn man einmal einen Blick auf die Performance / Benchmarks wirft, wird man feststellen, dass Lua ziemlich schnelle Ausführungszeiten vorweisen kann, mit denen Python kaum mithält. Diese lassen sich zusätzlich optimieren, wenn man den JIT-Compiler (LuaJIT) zu Rate zieht.

Die Gründe dafür liegen vor allem im Grunddesign der Sprache. Sie ist leichtgewichtig, nutzt, wie schon geschrieben, als Datenstruktur eine Tabelle, hat eine gute Direktschnittstelle zu C und die VM Runtime ist gut optimiert (bspw. an die Technologie heutiger Prozessoren angepasst; mehr dazu hier).

Standardbibliothek und externe Bibliotheken

Was die Integration von vorgefertigten Funktionen anbelangt, ist Python viel besser als das leichtgewichtige Lua aufgestellt. Die Standard API verfügt über mehrere Module und auf PyPi findet man noch viel mehr.

Für Lua müsstest du auf LuaRocks nach Modulen suchen, die von der Lua Community entwickelt wurden.

Dokumentation und Support

Python ist deutlich besser dokumentiert und hat nicht zuletzt aufgrund der stetig steigenden Popularität in den letzten Jahren eine größere Community aufgebaut. Das heißt, wenn du Support brauchst, findest du zu Python schneller Hilfe.

Lernkurve

Die Lernkurve ist bei beiden Sprachen nicht hoch. Was dich als deutschsprachigen Entwickler vielleicht etwas hindern könnte, wäre die Tatsache, dass es Lernmaterial zu Lua größtenteils nur in englischer Ausgabe gibt.

Ein Studium an einer höheren Schule nur wegen einer der beiden Sprachen lohnt sich nicht. Interessanter für ein Studium wären Entwicklungsverfahren (allgemein Softwareenwicklung). Studiengänge, die sich auf Informatik / Anwendungsentwicklung / u.ä. fokussieren, lehren im Grundstudium oft C, Java und / oder Python.

Verwendungszweck

Lua ist darauf ausgerichtet, in ein System eingebettet zu werden (weshalb es dann auch nicht mehr so schlimm ist, dass es kaum Standard-Lua-Module gibt). Demzufolge wirst du Lua öfter in Programmen auffinden, die dem Nutzer eine einfache Schnittstelle bieten wollen, mit denen er selbst Automatisierungsaufgaben, Plugins, u.ä. einbinden können soll. Beispiele dafür wären Autodesk NetFabb oder Gimp.

Das größte Anwendungsgebiet liegt allerdings beim Skripting von Computerspielen. Lua gehört überhaupt zu den beliebtesten Skriptsprachen in der Spieleentwicklung. Dementsprechend gibt es viele Engines (sowohl proprietär, als auch frei verfügbar), die Lua nutzen (Beispiele: Cocos2d-x, CryEngine, Defold, LÖVE, MOAI, ROBLOX, Solar2D, Ultra Engine - ehemals Leadwerks, WickedEngine). Auch für kleine Tools (Buildskripts u.ä.) wird Lua in der Spieleprogrammierung eingesetzt und bezogen auf Hobbyprogrammierer gern auch für Modding (Bsp.: Don't Starve, GMod, WoW).

Bei Python wiederum möchte man irgendwie mehr und so gibt es Frameworks/Bibliotheken, die tatkräftig versuchen, Pythons ursprüngliches Einsatzgebiet (Skripte für Automatisierungen/Schnittstellenkommunikation/..., Lernsprache, Embedded Scripting wie bei Lua, Rapid Prototyping, u.ä.) zu vergrößern. Man könnte da PyQt (ein Qt-Binding) und kivy anführen, mit denen sich komplexere / dynamischere / modernere Programmoberflächen, als mit tkinter bauen lassen. Ein anderes Beispiel ist das Webframework Django (und darauf aufbauend django CMS).

Bei Hobbyentwicklern ist Python ziemlich beliebt. Wenn man nur hier einmal auf GF schaut, findet man häufiger Fragen zur Discord API für Python oder Hobbyprojekten mit dem Selenium-Binding für Python.

Im wissenschaftlichen Sektor haben Tools wie Anaconda, SciPy, NumPy, u.ä. Fuß gefasst. Sie bieten eine große Funktionsvielfalt, die auf den Bereich abgestimmt ist und das mit einer geringen Einstiegshürde oder für viele Anwendungsfälle (verglichen mit anderen Programmiersprachen, wie Java, C++, ...) viel kleinerem Implementationsaufwand.

Zukunftsaussichten

Hinsichtlich der Suche nach einem späteren Job hättest du mit Python eindeutig bessere Chancen. Ich habe schon erwähnt, dass Python in den letzten Jahren zu den Trendsprachen gehörte. Dies ist zum einen mit der Einfachheit dieser Sprache begründet und zum anderen mit den Themenfeldern, auf welche sich Python-Entwicklungen fokussiert haben: AI/ML/Data Processing und allgemein IoT.

Auf Lua stößt du am ehesten bei einem Spieleentwickler, doch eine Garantie gibt es keinesfalls. In den Bewerbungsanforderungen werden öfter Kenntnisse in Programmiersprachen wie C#, Java oder C++ gefordert, die in dem Bereich ebenso eine Rolle spielen. Solltest du tatsächlich in diese Branche einsteigen wollen, solltest du darauf gefasst sein, dass die Arbeitsbedingungen meist schlechter sind, als in anderen Entwicklerberufen (weniger Gehalt, mehr - ich drücke es radikal aus - Ausbeutung).