Datgelodd Chris Lattner, sylfaenydd a phrif bensaer LLVM a chreawdwr yr iaith raglennu Swift, a Tim Davis, cyn bennaeth prosiectau AI Google fel Tensorflow a JAX, iaith raglennu newydd, Mojo, sy'n cyfuno rhwyddineb defnydd ar gyfer ymchwil a phrototeipio cyflym â'r addasrwydd ar gyfer adeiladu cynhyrchion terfynol perfformiad uchel. Cyflawnir hyn trwy gystrawen gyfarwydd Python, tra bod yr olaf yn cael ei gyflawni trwy lunio brodorol, mecanweithiau diogelwch cof, a chyflymiad caledwedd.
Mae'r prosiect yn canolbwyntio ar ddatblygu dysgu peirianyddol, ond fe'i cyflwynir hefyd fel iaith at ddibenion cyffredinol sy'n ymestyn Python gyda galluoedd rhaglennu systemau ac sy'n addas ar gyfer ystod eang o dasgau. Er enghraifft, mae'r iaith yn berthnasol i feysydd fel cyfrifiadura perfformiad uchel a phrosesu a thrawsnewid data. Nodwedd ddiddorol o Mojo yw'r gallu i nodi'r symbol emoji "🔥" fel estyniad ar gyfer ffeiliau cod (e.e., "helloworld.🔥"), yn ogystal â'r estyniad testun ".mojo".
Mae'r iaith yn cael ei datblygu'n ddwys ar hyn o bryd, a dim ond rhyngwyneb ar-lein sydd ar gael i'w brofi. Mae addewid y bydd adeiladau annibynnol ar gyfer rhedeg ar systemau lleol yn cael eu cyhoeddi yn ddiweddarach, ar ôl derbyn adborth ar yr amgylchedd gwe rhyngweithiol. Bwriedir i'r cod ffynhonnell ar gyfer y crynhoydd, JIT, a datblygiadau cysylltiedig eraill fod yn ffynhonnell agored ar ôl i'r bensaernïaeth fewnol gael ei chwblhau (mae'r model datblygu drws caeedig ar gyfer prototeip gweithredol yn atgoffa rhywun o gyfnod datblygu cychwynnol LLVM, Clang, a Swift). Gan fod cystrawen Mojo yn seiliedig ar Python, a bod ei system deipio yn debyg i C/C++, mae cynlluniau ar gyfer y dyfodol yn cynnwys datblygu offer i symleiddio mudo prosiectau C/C++ a Python presennol i Mojo, yn ogystal â hwyluso datblygiad prosiectau hybrid sy'n cyfuno cod Python a Mojo.
Mae'r prosiect wedi'i gynllunio i wneud y gorau o adnoddau caledwedd presennol systemau amrywiol ar gyfer cyfrifiadura. Er enghraifft, gellir defnyddio GPUs, cyflymyddion dysgu peirianyddol arbenigol, a phroseswyr fector cyfarwyddyd sengl (SIMD) i redeg cymwysiadau Mojo a pharaleleiddio cyfrifiadau. Mae'r rhesymau a nodwyd dros ddatblygu is-set Python ar wahân, yn hytrach na dibynnu ar y CPython presennol ar gyfer optimeiddio, yn cynnwys ffocws ar lunio, integreiddio galluoedd rhaglennu systemau, a defnyddio pensaernïaeth fewnol hollol wahanol sy'n galluogi gweithredu cod ar GPUs ac amrywiol gyflymyddion caledwedd. Ar yr un pryd, mae datblygwyr Mojo yn bwriadu cynnal cydnawsedd â CPython cymaint â phosibl.
Gellir defnyddio Mojo yn y modd JIT (just-in-time) a chyn amser (AOT). Mae'r crynhoydd yn ymgorffori technolegau modern ar gyfer optimeiddio awtomatig, storio dros dro, a chasglu dosbarthedig. Mae cod ffynhonnell Mojo yn cael ei drawsnewid yn god canolradd lefel isel (MLIR), a ddatblygwyd gan y prosiect LLVM ac sy'n cynnig galluoedd ychwanegol ar gyfer optimeiddio prosesu graffiau llif data. Mae'r crynhoydd yn cefnogi amrywiol gefn-bennau sydd wedi'u galluogi gan MLIR ar gyfer cynhyrchu cod peiriant.
Mae manteisio ar gyflymiad caledwedd ychwanegol yn galluogi enillion perfformiad ar gyfer cyfrifiadau dwys sy'n rhagori ar rai cymwysiadau C/C++. Er enghraifft, wrth brofi cymhwysiad cynhyrchu setiau Mandelbrot, roedd y cymhwysiad Mojo wedi'i lunio (r7iz.metal-16xl) 6 gwaith yn gyflymach na'r gweithrediad C++ wrth redeg yn y cwmwl AWS (0.03 eiliad yn erbyn 0.20 eiliad), 35 gwaith yn gyflymach na'r cymhwysiad Python wrth ddefnyddio'r CPython 3.10.9 safonol (0.03 eiliad yn erbyn 1027 eiliad), a 1500 gwaith yn gyflymach wrth ddefnyddio PYPY (0.03 eiliad yn erbyn 46.1 eiliad).
Wrth werthuso perfformiad dysgu peirianyddol, roedd pentwr AI y Modiwlaidd Inference Engine, a ysgrifennwyd yn Mojo, 3x yn gyflymach ar brosesydd Intel wrth brosesu model iaith, 6.4x yn gyflymach wrth redeg model argymhelliad, a 2.1x yn gyflymach wrth redeg modelau prosesu gwybodaeth weledol o'i gymharu â datrysiad seiliedig ar TensorFlow. Ar broseswyr AMD, cyflawnodd Mojo enillion perfformiad o 3.2x, 5x, a 2.2x, tra ar broseswyr ARM, cyflawnodd enillion perfformiad o 5.3x, 7.5x, ac 1.7x. Roedd y datrysiad seiliedig ar PyTorch yn llusgo y tu ôl i Mojo o 1.4x, 1.1x, ac 1.5x ar CPUau Intel, 2.1x, 1.2x, ac 1.5x ar CPUau AMD, a 4x, 4.3x, ac 1.3x ar CPUau ARM.

Mae'r iaith yn cefnogi teipio statig a nodweddion diogelwch cof lefel isel sy'n atgoffa rhywun o Rust, megis olrhain oes cyfeiriadau a gwiriwr benthyg. Yn ogystal â nodweddion diogelwch pwyntydd, mae'r iaith hefyd yn cynnig galluoedd lefel isel, megis mynediad uniongyrchol i'r cof mewn modd anniogel gan ddefnyddio'r math Pwyntydd, galw cyfarwyddiadau SIMD unigol, a chael mynediad at estyniadau caledwedd fel TensorCores ac AMX.

Er mwyn symleiddio'r gwahanu rhwng cod Python clasurol a chod Python wedi'i optimeiddio ar gyfer swyddogaethau gyda mathau wedi'u diffinio'n benodol ar gyfer pob newidyn, cynigir defnyddio allweddair "fn" ar wahân yn lle "def." Yn yr un modd, ar gyfer dosbarthiadau, os oes angen pacio data statig yn y cof ar adeg llunio (fel yn C), gellir defnyddio'r math "struct" yn lle "class." Mae mewnforio syml o fodiwlau C/C++ hefyd yn bosibl. Er enghraifft, i fewnforio'r swyddogaeth cos o'r llyfrgell fathemateg, gallwch nodi "from "math.h" import cos."
Ffynhonnell: opennet.ru
