Content deleted Content added
Jerryobject (talk | contribs) Template:Infobox programming language, WP:REFerence WP:CITation parameters: update-standardize-conform, reorders. WP:LINKs: needless: underscores > spaces, WP:PIPEs > WP:NOPIPEs, adds. Time MOS:CURRENT > WP:ASOF Template:As of. Small WP:COPYEDITs WP:EoS WP:TERSE. MOS:FIRSTABBReviation clarify, define before WP:ABBR in parentheses. Tag: Disambiguation links added |
m Replaced 1 bare URLs by {{Cite web}}; Replaced "Archived copy" by actual titles |
||
(22 intermediate revisions by 17 users not shown) | |||
Line 13:
}}
| family = [[Python (programming language)|Python]]
| designer = [[Chris Lattner]]<ref>{{cite web |url=https://www.fastcompany.com/91033509/modular-most-innovative-companies-2024 |title=How Modular simplified AI software infrastructure |
| developer = Modular Inc.
| latest release version =
| latest release date =
| latest preview version =
| latest preview date = {{start date and age|
| typing = {{cslist|
[[Affine type system|Affine]]|
Line 29:
}}
| operating system = [[Cross-platform software|Cross-platform]]: [[Linux]], [[macOS]]
| license = [[Apache License 2.0|Apache 2.0]] with LLVM Exceptions<ref name="opensource">{{Cite web |last=Modular Team |title=Modular: The Next Big Step in Mojo🔥 Open Source |date=28 March 2024 |url=https://www.modular.com/blog/the-next-big-step-in-mojo-open-source |access-date=2024-11-09 |publisher=Modular |language=en |archive-date=2024-10-09 |archive-url=https://web.archive.org/web/20241009144412/https://www.modular.com/blog/the-next-big-step-in-mojo-open-source |url-status=live}}</ref>
| year = {{Start date and age|2023}}
| file ext = {{Mono|.
| website = {{URL|www.modular.com/mojo}}
| wikibooks =
| implementations =
| dialects =
| influenced by = [[Python (programming language)|Python]], [[Cython]],
| influenced =
}}
'''Mojo''' is a [[programming language]] in the [[Python (programming language)|Python]] family that is currently under development.<ref name="MojoProgrammingManual_(2023)">{{cite web |url=https://docs.modular.com/mojo/programming-manual.html |title=Mojo programming manual |date=2023 |website=docs.modular.com |publisher=Modular |access-date=2023-09-26 |quote=Mojo is a programming language that is as easy to use as Python but with the performance of C++ and Rust. Furthermore, Mojo provides the ability to leverage the entire Python library ecosystem.}}</ref><ref name="Modular-WhyMojo_(2023)">{{cite web |url=https://docs.modular.com/mojo/why-mojo.html |title=Why Mojo - A language for next-generation compiler technology |date=2023 |website=docs.modular.com |publisher=Modular |access-date=2023-09-26 |quote=While many other projects now use MLIR, Mojo is the first major language designed expressly for MLIR, which makes Mojo uniquely powerful when writing systems-level code for AI workloads.}}</ref><ref name="InfoWorld">{{cite web |last1=Krill |first1=Paul |title=Mojo language marries Python and MLIR for AI development |url=https://www.infoworld.com/article/3695588/mojo-language-marries-python-and-mlir-for-ai-development.html |website=InfoWorld |language=en |date=4 May 2023}}</ref> It is available both in browsers via [[Project Jupyter#Jupyter Notebook|Jupyter notebooks]],<ref name="InfoWorld"/><ref name="IWFirst">{{cite news |last1=Yegulalp |first1=Serdar |title=A first look at the Mojo language |url=https://www.infoworld.com/article/3697739/a-first-look-at-the-mojo-language.html |work=InfoWorld |date=7 June 2023 |language=en}}</ref> and locally on [[Linux]] and [[macOS]].<ref>{{cite news |last1=Deutscher |first1=Maria |title=Modular makes its AI-optimized Mojo programming language generally available |url=https://siliconangle.com/2023/09/07/modular-makes-ai-optimized-mojo-programming-language-generally-available/ |work=Silicon Angle |date=7 September 2023 |access-date=2023-09-11 |language=en}}</ref><ref name="macOS_(2023)">{{cite web |
Mojo builds on the Multi-Level Intermediate Representation ([[MLIR (software)|MLIR]]) compiler [[software framework]], instead of directly on the lower level [[LLVM]] compiler framework
== Origin and development history ==
The Mojo programming language was created by Modular Inc, which was founded by [[Chris Lattner]], the original [[Software architect|architect]] of the [[Swift (programming language)|Swift]] programming language and [[LLVM]], and Tim Davis, a former [[Google]] employee.<ref name="claburn2023">{{cite news |last1=Claburn |first1=Thomas |date=2023-05-05 |url=https://www.theregister.com/2023/05/05/modular_struts_its_mojo_a/ |title=Modular finds its Mojo, a Python superset with C-level speed |access-date=2023-08-08 |work=The Register}}</ref>
According to public change logs, Mojo development goes back to 2022.<ref>{{cite web|url=https://docs.modular.com/mojo/changelog.html#september-2022|title=Mojo changelog|date=13 February 2025 }}</ref> In May
In March
== Features ==
Mojo was created for an easy transition from Python. The language has syntax similar to Python's, with inferred static typing,<ref>{{Cite web |title=Modular Docs - Mojo programming manual |url=https://docs.modular.com/mojo/programming-manual.html#parameterization-compile-time-metaprogramming |access-date=2023-10-19 |website=docs.modular.com |language=en}}</ref> and allows users to import Python [[Modular programming|modules]].<ref name=":0">{{Cite web |title=Modular Docs - Mojo programming manual |url=https://docs.modular.com/mojo/programming-manual.html#python-integration |access-date=2023-10-31 |website=docs.modular.com |language=en}}</ref> It uses [[LLVM]] and [[MLIR (software)|MLIR]] as its compilation backend.<ref name="InfoWorld" /><ref>{{cite tech report |last1=Lattner |first1=Chris |title=MLIR Primer: A Compiler Infrastructure for the End of Moore's Law |date=2019 |url=https://research.google/pubs/pub48035/ |access-date=2022-09-30 |last2=Pienaar |first2=Jacques}}</ref><ref>{{cite arXiv |last1=Lattner |first1=Chris |last2=Amini |first2=Mehdi |last3=Bondhugula |first3=Uday |last4=Cohen |first4=Albert |last5=Davis |first5=Andy |last6=Pienaar |first6=Jacques |last7=Riddle |first7=River |last8=Shpeisman |first8=Tatiana |last9=Vasilache |first9=Nicolas |last10=Zinenko |first10=Oleksandr |date=2020-02-29 |title=MLIR: A Compiler Infrastructure for the End of Moore's Law |class=cs.PL |eprint=2002.11054}}</ref> The language also intends to add a [[foreign function interface]] to call C/C++ and Python code. The language is not [[source-code compatibility|source-compatible]] with Python 3, only providing a [[subset]] of its [[Syntax (programming languages)|syntax]], e.g. missing the {{mono|global}} keyword, list and dictionary comprehensions, and support for classes. Further, Mojo also adds features that enable performant low-level programming: {{mono|fn}} for creating [[Type system|typed]], [[Compiled language|compiled]] [[Function (computer programming)|function]]s and "struct" for [[Memory model (programming)|memory]]-optimized alternatives to [[Class (computer programming)|classes]]. Mojo structs support [[Method (computer programming)|methods]], [[Field (computer science)|fields]], [[operator overloading]], and [[Python syntax and semantics#Decorators|decorators]].<ref name="IWFirst" />
The language also provides a [[borrow checker]], an influence from [[Rust (programming language)|Rust]].<ref>{{Cite web |title=Modular Docs: Ownership and borrowing |url=https://docs.modular.com/mojo/manual/values/ownership.html |access-date=2024-02-29 |publisher=Modular}}</ref> Mojo {{Mono|def}} functions use value semantics by default (functions receive a copy of all arguments and any modifications are not visible outside the function), while [[Python (programming language)
The language is not open source, but it is planned to be made open source in the future.<ref>{{Cite web |title=
== Programming examples ==
Line 62:
Basic arithmetic operations in Mojo with a {{mono|def}} function:
<syntaxhighlight lang="
def sub(x, y):
"""A pythonic subtraction."""
Line 71:
and with an {{mono|fn}} function:
<syntaxhighlight lang="
fn add(x: Int, y: Int) -> Int:
"""A rustacean addition."""
Line 81:
Variable declaration and usage in Mojo:
<syntaxhighlight lang="
fn main():
let x = 1
|