Îòêðûòèå èñõîäíîãî êîäà
Êîìïàíèÿ Modular âûëîæèëà â îòêðûòûé äîñòóï îñíîâíûå êîìïîíåíòû Mojo, ÿçûêà ïðîãðàììèðîâàíèÿ, ïðåäíàçíà÷åííîãî äëÿ íàïèñàíèÿ ïðîãðàìì äëÿ èñêóññòâåííîãî èíòåëëåêòà (ÈÈ).
Êîìïîíåíòû Mojo ñîñòàâëÿþò òàê íàçûâàåìóþ ñòàíäàðòíóþ áèáëèîòåêó ÿçûêà. Ýòî ÷àñòü ÿçûêà ïðîãðàììèðîâàíèÿ, êîòîðàÿ âêëþ÷àåò â ñåáÿ îñíîâíûå ýëåìåíòû ñèíòàêñèñà è äðóãèå âàæíûå ôóíêöèè. Ñòàíäàðòíàÿ áèáëèîòåêà Mojo âêëþ÷àåò â ñåáÿ ôóíêöèè äëÿ òàêèõ çàäà÷, êàê îïòèìèçàöèÿ ãèïåðïàðàìåòðîâ ÈÈ - ïàðàìåòðîâ, êîòîðûå îïðåäåëÿþò, êàê íåéðîííàÿ ñåòü îáðàáàòûâàåò äàííûå.
ßçûê Mojo ïîçèöèîíèðóåòñÿ êàê áîëåå ïðîäâèíóòàÿ àëüòåðíàòèâà Python, ñ êîòîðûì ïðàêòè÷åñêè ïîëíîñòüþ ñîâìåñòèì. Ïðè ýòîì Mojo äåìîíñòðèðóåò ãîðàçäî áîëåå âûñîêóþ ïðîèçâîäèòåëüíîñòü, àíàëîãè÷íóþ C è C++. Óòâåðæäàåòñÿ, ÷òî ïðîãðàììà, íàïèñàííàÿ íà Mojo, ìîæåò ðàáîòàòü äî 68 òûñ. ðàç áûñòðåå, ÷åì åñëè áû îíà áûëà ðåàëèçîâàíà ñ èñïîëüçîâàíèåì Python.  ðåçóëüòàòå, çíà÷èòåëüíî ïîâûøàåòñÿ ýôôåêòèâíîñòü ïðèëîæåíèé îñíîâàííûõ íà ÈÈ.
Modular èñïîëüçóåò Mojo äëÿ ðàáîòû êîììåð÷åñêîé ïëàòôîðìû MAX íà îñíîâå ÈÈ, êîòîðóþ îíà ïðåäñòàâèëà â êîíöå 2023 ã. Ïëàòôîðìà âêëþ÷àåò â ñåáÿ èíñòðóìåíòû, îáëåã÷àþùèå âûïîëíåíèå òàêèõ çàäà÷, êàê çàïóñê ïðèëîæåíèé ÈÈ â ñðåäàõ Kubernetes.  íà÷àëå àïðåëÿ 2024 ã. êîìïàíèÿ ñîîáùèëà, ÷òî ïëàíèðóåò ñäåëàòü íåêîòîðûå êîìïîíåíòû MAX äîñòóïíûìè ïîä ëèöåíçèåé ñ îòêðûòûì èñõîäíûì êîäîì.  ñâÿçè ñ ýòèì Modular ïðåäñòàâèëà íîâóþ âåðñèþ ïëàòôîðìû ñ íåñêîëüêèìè äîïîëíèòåëüíûìè ôóíêöèÿìè. Ïî ñëîâàì ïðåäñòàâèòåëåé Modular, îäíî èç óñîâåðøåíñòâîâàíèé îáëåã÷èò ñìåøèâàíèå êîäà íà Mojo è Python â îäíîì ïðîåêòå ÈÈ. Êðîìå òîãî, êîìïàíèÿ äîáàâèëà óëó÷øåíèÿ ïðîèçâîäèòåëüíîñòè, ïðèçâàííûå óñêîðèòü âû÷èñëåíèå ÈÈ.
ßçûê Mojo ÿâëÿåòñÿ áîëåå ïðàãìàòè÷íûì, ÷åì Swift.  òî âðåìÿ êàê Swift áûë ñîâåðøåííî íîâûì ÿçûêîì, ñîäåðæàùèì âñåâîçìîæíûå èíòåðåñíûå ôóíêöèè, îñíîâàííûå íà ïîñëåäíèõ èññëåäîâàíèÿõ â îáëàñòè äèçàéíà ÿçûêîâ ïðîãðàììèðîâàíèÿ, Mojo ïî ñâîåé ñóòè ÿâëÿåòñÿ ïðîñòî Python. Ýòî êàæåòñÿ ðàçóìíûì íå òîëüêî ïîòîìó, ÷òî Python óæå õîðîøî ïîíÿòåí ìèëëèîíàì ïðîãðàììèñòîâ, íî è ïîòîìó, ÷òî ïîñëå äåñÿòèëåòèé èñïîëüçîâàíèÿ åãî âîçìîæíîñòè è îãðàíè÷åíèÿ òåïåðü õîðîøî èçó÷åíû.
Êîìïàíèÿ Modular ïîëó÷èëà ôèíàíñèðîâàíèå â ðàçìåðå $130 ìëí îò ôîíäà GV Alphabet è äðóãèõ èíâåñòîðîâ. Ôèðìà àíîíñèðîâàëà Mojo â ìàå 2023 ã., à â àâãóñòå òîãî æå ãîäà ñäåëàëà ýòîò ÿçûê ïðîãðàììèðîâàíèÿ îáùåäîñòóïíûì. Ê àïðåëþ 2024 ã. ïîëüçîâàòåëüñêàÿ áàçà Mojo íàñ÷èòûâàåò áîëåå 180 òûñ. ðàçðàáîò÷èêîâ è 55 òûñ. îðãàíèçàöèé ïî âñåìó ìèðó.
Ïðîáëåìû ñ ïðîèçâîäèòåëüíîñòüþ
Ñóùåñòâóþò òàêæå íåèçáåæíûå ïðîáëåìû ñ ïðîèçâîäèòåëüíîñòüþ, äàæå åñëè äëÿ áèáëèîòåêè èñïîëüçóåòñÿ áîëåå áûñòðûé ÿçûê. Îäíîé èç îñíîâíûõ ïðîáëåì íà 2024 ã. ÿâëÿåòñÿ îòñóòñòâèå «ñëèÿíèÿ», òî åñòü âûçîâ ìíîæåñòâà ñêîìïèëèðîâàííûõ ôóíêöèé ïîäðÿä ïðèâîäèò ê áîëüøèì íàêëàäíûì ðàñõîäàì. Ïîñêîëüêó äàííûå ïðåîáðàçóþòñÿ èç ôîðìàòà Python â äðóãîé è îáðàòíî, òî çà ìíîãîêðàòíîå ïåðåêëþ÷åíèå ñ Python íà C ïðèõîäèòüñÿ ïëàòèòü. Ïîýòîìó âìåñòî ýòîãî ïðèõîäèòñÿ ïèñàòü ñïåöèàëüíûå «ñâåäåííûå» âåðñèè îáû÷íûõ êîìáèíàöèé ôóíêöèé è âûçûâàòü ýòè «ñâåäåííûå» âåðñèè èç Python. Ýòî îçíà÷àåò, ÷òî ïðîãðàììèñòàì ïðèäåòñÿ ðåàëèçîâûâàòü è çàïîìèíàòü ãîðàçäî áîëüøå áèáëèîòå÷íûõ ôóíêöèé.
Ðàçðàáîò÷èêàì òàêæå ïðèõîäèòñÿ èìåòü äåëî ñ îòñóòñòâèåì ýôôåêòèâíîé ïàðàëëåëüíîé îáðàáîòêè â Python. Íà àïðåëü 2024 ã. ó âñåõ ïðîãðàììèñòîâ åñòü êîìïüþòåðû ñ áîëüøèì êîëè÷åñòâîì ÿäåð, íî Python îáû÷íî èñïîëüçóåò òîëüêî îäíî çà ðàç. Åñòü íåñêîëüêî íåóêëþæèõ ñïîñîáîâ íàïèñàíèÿ ïàðàëëåëüíîãî êîäà, êîòîðûé èñïîëüçóåò áîëåå îäíîãî ÿäðà, íî îíè ëèáî äîëæíû ðàáîòàòü ñ ñîâåðøåííî îòäåëüíîé ïàìÿòüþ, ëèáî èì ïðèõîäèòñÿ îáðàùàòüñÿ ê îáùåé ïàìÿòè ïî î÷åðåäè.
Òàêèå áèáëèîòåêè, êàê PyTorch, ðàçðàáàòûâàþò âñå áîëåå èçîùðåííûå ñïîñîáû ðåøåíèÿ ýòèõ ïðîáëåì ñ ïðîèçâîäèòåëüíîñòüþ, à íåäàâíî âûïóùåííûé PyTorch 2 äàæå âêëþ÷àåò ôóíêöèþ compile(), êîòîðàÿ èñïîëüçóåò ñëîæíóþ áýêåíä êîìïèëÿöèþ äëÿ ñîçäàíèÿ âûñîêîïðîèçâîäèòåëüíîé ðåàëèçàöèè êîäà Python. Îäíàêî òàêàÿ ôóíêöèîíàëüíîñòü íå ìîæåò òâîðèòü ÷óäåñà: ñóùåñòâóþò ôóíäàìåíòàëüíûå îãðàíè÷åíèÿ íà òî, ÷òî âîçìîæíî ñ Python, â çàâèñèìîñòè îò òîãî, êàê óñòðîåí ñàì ÿçûê.
Îñîáåííîñòè Mojo
Êëþ÷åâîé òðþê â Mojo çàêëþ÷àåòñÿ â òîì, ÷òî ðàçðàáîò÷èê ìîæåò â ëþáîå âðåìÿ ïåðåéòè â áîëåå áûñòðûé «ðåæèì», èñïîëüçóÿ «fn» âìåñòî «def» äëÿ ñîçäàíèÿ ñâîåé ôóíêöèè.  ýòîì ðåæèìå ïðîãðàììèñòû äîëæíû òî÷íî îáúÿâèòü òèï êàæäîé ïåðåìåííîé, è â ðåçóëüòàòå Mojo ñìîæåò ñîçäàòü îïòèìèçèðîâàííûé ìàøèííûé êîä äëÿ ðåàëèçàöèè ôóíêöèè. Áîëåå òîãî, åñëè ðàçðàáîò÷èêè èñïîëüçóþò «struct» âìåñòî «class», èõ àòðèáóòû áóäóò ïëîòíî óïàêîâàíû â ïàìÿòü, òàê ÷òî èõ ìîæíî áóäåò èñïîëüçîâàòü äàæå â ñòðóêòóðàõ äàííûõ, íå ãîíÿÿñü çà óêàçàòåëÿìè. Ýòî òå ôóíêöèè, êîòîðûå ïîçâîëÿþò òàêèì ÿçûêàì, êàê C, áûòü òàêèìè áûñòðûìè, è òåïåðü îíè äîñòóïíû è äëÿ ïðîãðàììèñòîâ Python — ïðîñòî èçó÷èâ íåìíîãî íîâîãî ñèíòàêñèñà.
Êîìïîíåíòû Mojo ôîðìèðóþò òàê íàçûâàåìóþ ñòàíäàðòíóþ áèáëèîòåêó ÿçûêà ïðîãðàììèðîâàíèÿ. Ýòî íàáîð ìîäóëåé, êëàññîâ, îáúåêòîâ, êîíñòàíò, ãëîáàëüíûõ ïåðåìåííûõ, øàáëîíîâ, ìàêðîñîâ, ôóíêöèé è ïðîöåäóð, äîñòóïíûõ äëÿ âûçîâà èç ëþáîé ïðîãðàììû, íàïèñàííîé íà ýòîì ÿçûêå. Ñòàíäàðòíàÿ áèáëèîòåêà âêëþ÷àåò ôóíêöèè äëÿ òàêèõ çàäà÷, êàê îïòèìèçàöèÿ ãèïåðïàðàìåòðîâ ÈÈ - íàñòðîåê, êîòîðûå îïðåäåëÿþò, êàê íåéðîííàÿ ñåòü îáðàáàòûâàåò äàííûå.
Ðàçðàáîò÷èêè Modular ïóáëèêóþò íå òîëüêî êîä, íî è èñòîðèþ ôèêñàöèè ñòàíäàðòíîé áèáëèîòåêè. Ñîçäàòåëè Mojo ñòðåìÿòñÿ ê ïðîçðà÷íîñòè è äàþò ëþäÿì âîçìîæíîñòü óâèäåòü, êàê ôóíêöèè ðàçâèâàëèñü ñ òå÷åíèåì âðåìåíè, ÷òî äàåò äîïîëíèòåëüíûé êîíòåêñò äëÿ ðàçðàáîòêè ñòàíäàðòíûõ ôóíêöèé áèáëèîòåêè.
Ëèöåíçèÿ Apache
Ëèöåíçèÿ Apache 2.0 ñîäåðæèò ïîëîæåíèå î ïðåäîñòàâëåíèè ïàòåíòà, êîòîðîå îáåñïå÷èâàåò ïðàâîâóþ çàùèòó ïîëüçîâàòåëåé è ðàçðàáîò÷èêîâ ïðîãðàììíîãî îáåñïå÷åíèÿ (ÏÎ). Apache 2.0 íà íà÷àëî àïðåëÿ 2024 ã. øèðîêî èñïîëüçóåìàÿ è ïðîâåðåííàÿ ëèöåíçèÿ, êîòîðàÿ çíàêîìà ìíîãèì ïðîãðàììèñòàì è êîìïàíèÿì â ðàçëè÷íûõ îòðàñëÿõ.
Êîìïàíèÿ Modular ïðåäïîëàãàåò, ÷òîáû ðàçðàáîò÷èêè ìîãëè èñïîëüçîâàòü Mojo, íå òðåáóÿ îò íèõ ïîäòâåðæäåíèÿ Modular èëè Mojo è äàâàÿ ïîíÿòü, ÷òî åãî ìîæíî ñìåøèâàòü ñ êîäîì GPL2. Ïîýòîìó êîìïàíèÿ Modular âêëþ÷àåò èñêëþ÷åíèÿ LLVM, êîòîðûå áûëè ñïåöèàëüíî ðàçðàáîòàíû äëÿ ðåøåíèÿ ýòèõ ïðîáëåì.



