Chris Lattner ผู้ก่อตั้งและหัวหน้าสถาปนิกของ LLVM และผู้สร้างภาษาโปรแกรม Swift และ Tim Davis อดีตหัวหน้าโครงการ AI ของ Google เช่น Tensorflow และ JAX ได้เปิดตัวภาษาโปรแกรม Mojo ใหม่ที่รวมการใช้งานง่ายสำหรับ R&D และการสร้างต้นแบบที่รวดเร็วเข้ากับ ความเหมาะสมสำหรับผลิตภัณฑ์ขั้นสุดท้ายที่มีประสิทธิภาพสูง อย่างแรกทำได้โดยการใช้ไวยากรณ์ที่คุ้นเคยของภาษา Python และอย่างที่สองเกิดจากความสามารถในการคอมไพล์เป็นรหัสเครื่อง กลไกสำหรับการจัดการหน่วยความจำที่ปลอดภัย และการใช้เครื่องมือสำหรับการเร่งความเร็วของฮาร์ดแวร์ในการคำนวณ
โปรเจกต์นี้เน้นการใช้งานเพื่อพัฒนาแมชชีนเลิร์นนิง แต่นำเสนอเป็นภาษาใช้งานทั่วไปที่ขยายขีดความสามารถของภาษาไพธอนด้วยการเขียนโปรแกรมระบบ และเหมาะสำหรับงานที่หลากหลาย ตัวอย่างเช่น ภาษาใช้ได้กับพื้นที่ต่างๆ เช่น การประมวลผลประสิทธิภาพสูง การประมวลผลข้อมูล และการแปลงข้อมูล คุณลักษณะที่น่าสนใจของ Mojo คือความสามารถในการระบุสัญลักษณ์อิโมจิ "🔥" เป็นส่วนขยายสำหรับไฟล์โค้ด (เช่น "helloworld.🔥") นอกเหนือจากส่วนขยายข้อความ ".mojo"
ขณะนี้ภาษาอยู่ระหว่างการพัฒนาอย่างเข้มข้นและมีเพียงอินเทอร์เฟซออนไลน์สำหรับการทดสอบเท่านั้น แอสเซมบลีที่แยกจากกันเพื่อรันบนระบบโลคัลได้รับการสัญญาว่าจะเผยแพร่ในภายหลัง หลังจากได้รับคำติชมเกี่ยวกับการทำงานของสภาพแวดล้อมเว็บแบบโต้ตอบ ซอร์สโค้ดสำหรับคอมไพเลอร์ JIT และการพัฒนาอื่น ๆ ที่เกี่ยวข้องกับโครงการมีการวางแผนที่จะเปิดหลังจากการออกแบบสถาปัตยกรรมภายในเสร็จสิ้น (รูปแบบการพัฒนาของต้นแบบการทำงานหลังประตูปิดคล้ายกับระยะเริ่มต้นของการพัฒนา LLVM, Clang และสวิฟต์) เนื่องจากไวยากรณ์ของ Mojo ใช้ Python และระบบประเภทใกล้เคียงกับ C/C++ จึงมีแผนในอนาคตที่จะพัฒนาชุดเครื่องมือเพื่ออำนวยความสะดวกในการแปลโปรเจ็กต์ที่มีอยู่ที่เขียนด้วย C/C++ และ Python เป็น Mojo ตลอดจนพัฒนา โครงการไฮบริดที่รวมรหัส Python และ Mojo
โครงการได้รับการออกแบบให้เกี่ยวข้องกับทรัพยากรฮาร์ดแวร์ของระบบที่แตกต่างกันที่มีอยู่ในระบบในการคำนวณ ตัวอย่างเช่น สามารถใช้ GPU, ตัวเร่งความเร็วการเรียนรู้ของเครื่องเฉพาะ และคำสั่งการประมวลผลแบบเวกเตอร์ (SIMD) เพื่อเรียกใช้แอปพลิเคชัน Mojo และประมวลผลแบบขนานได้ เหตุผลสำหรับการพัฒนาชุดย่อยแยกต่างหากของภาษา Python แทนที่จะเข้าร่วมการปรับให้เหมาะสมของ CPython ที่มีอยู่นั้น อ้างว่าเป็นการเน้นการคอมไพล์ การรวมความสามารถในการเขียนโปรแกรมระบบ และการใช้สถาปัตยกรรมภายในที่แตกต่างกันโดยพื้นฐานซึ่งทำให้โค้ดสามารถ ดำเนินการบน GPU และตัวเร่งฮาร์ดแวร์ต่างๆ ในขณะเดียวกัน ผู้พัฒนา Mojo ตั้งใจที่จะยึดความเข้ากันได้กับ CPython ให้ได้มากที่สุด
Mojo สามารถใช้ได้ทั้งในโหมดการตีความ JIT และสำหรับการคอมไพล์เป็นไฟล์ปฏิบัติการ (AOT, ล่วงหน้า) คอมไพเลอร์มีเทคโนโลยีที่ทันสมัยในตัวสำหรับการเพิ่มประสิทธิภาพอัตโนมัติ การแคช และการคอมไพล์แบบกระจาย ข้อความต้นฉบับในภาษา Mojo จะถูกแปลงเป็นรหัสระดับกลางระดับต่ำ MLIR (การเป็นตัวแทนระดับกลางหลายระดับ) ซึ่งพัฒนาโดยโครงการ LLVM และมีคุณสมบัติเพิ่มเติมสำหรับเพิ่มประสิทธิภาพการประมวลผลกราฟการไหลของข้อมูล คอมไพเลอร์ช่วยให้คุณใช้แบ็กเอนด์ต่างๆ ที่รองรับ MLIR เพื่อสร้างรหัสเครื่อง
การใช้กลไกฮาร์ดแวร์เพิ่มเติมเพื่อเพิ่มความเร็วในการคำนวณทำให้สามารถบรรลุประสิทธิภาพที่เหนือกว่าแอปพลิเคชัน C / C ++ ด้วยการคำนวณอย่างเข้มข้น ตัวอย่างเช่น เมื่อทดสอบแอปพลิเคชันเพื่อสร้างชุด Mandelbrot แอปพลิเคชัน Mojo ที่คอมไพล์แล้วเมื่อดำเนินการในระบบคลาวด์ AWS (r7iz.metal-16xl) จะเร็วกว่าการใช้งาน C ++ ถึง 6 เท่า (0.03 วินาที เทียบกับ 0.20 วินาที .) รวมถึงเร็วกว่าแอปพลิเคชัน Python ถึง 35 เท่าโดยใช้สต็อก CPython 3.10.9 (0.03 วินาทีเทียบกับ 1027 วินาที) และเร็วขึ้น 1500 เท่าโดยใช้ PYPY (0.03 วินาทีเทียบกับ 46.1 วินาที)
เมื่อประเมินประสิทธิภาพในด้านการแก้ปัญหาการเรียนรู้ของเครื่อง สแต็ก AI ของ Modular Inference Engine ที่เขียนด้วยภาษา Mojo เมื่อเทียบกับโซลูชันที่ใช้ไลบรารี TensorFlow นั้นเร็วกว่า 3 เท่าบนระบบที่มี Intel โปรเซสเซอร์เมื่อประมวลผลโมเดลภาษา เร็วขึ้น 6.4 เท่าเมื่อเรียกใช้โมเดลการสร้างคำแนะนำ และเร็วขึ้น 2.1 เท่าเมื่อทำงานกับโมเดลสำหรับประมวลผลข้อมูลภาพ เมื่อใช้โปรเซสเซอร์ AMD อัตราขยายเมื่อใช้ Mojo คือ 3.2, 5 และ 2.2 เท่าและเมื่อใช้โปรเซสเซอร์ ARM - 5.3, 7.5 และ 1.7 เท่าตามลำดับ โซลูชันที่ใช้ PyTorch ล้าหลัง Mojo 1.4, 1.1 และ 1.5 เท่าบน Intel CPU, 2.1, 1.2 และ 1.5 เท่าบน CPU AMD และ 4, 4.3 และ 1.3 เท่าบน ARM CPU
ภาษารองรับการพิมพ์แบบสแตติกและคุณสมบัติที่ปลอดภัยต่อหน่วยความจำระดับต่ำ ซึ่งชวนให้นึกถึงคุณสมบัติ Rust เช่น การติดตามอายุการใช้งานอ้างอิง และตัวตรวจสอบการยืมแบบผันแปร (ตัวตรวจสอบการยืม) นอกจากวิธีการทำงานที่ปลอดภัยด้วยพอยน์เตอร์แล้ว ภาษายังมีคุณสมบัติสำหรับการทำงานระดับต่ำ เช่น สามารถเข้าถึงหน่วยความจำได้โดยตรงในโหมดที่ไม่ปลอดภัยโดยใช้ประเภทพอยน์เตอร์ เรียกใช้คำสั่ง SIMD แต่ละรายการ หรือเข้าถึงส่วนขยายของฮาร์ดแวร์ เช่น เป็น TensorCores และ AMX
เพื่อลดความซับซ้อนในการแยกโค้ด Python แบบคลาสสิกและแบบเพิ่มประสิทธิภาพสำหรับฟังก์ชันที่มีการกำหนดประเภทที่ชัดเจนสำหรับตัวแปรทั้งหมด ขอเสนอให้ใช้คีย์เวิร์ด "fn" แยกต่างหากแทน "def" ในทำนองเดียวกันสำหรับคลาส หากคุณต้องการแพ็คข้อมูลแบบคงที่ในหน่วยความจำ ณ เวลาคอมไพล์ (เช่นใน C) แทนที่จะใช้ "คลาส" คุณสามารถใช้ประเภท "struct" นอกจากนี้ยังเป็นไปได้ที่จะนำเข้าโมดูลในภาษา C / C ++ เช่น หากต้องการนำเข้าฟังก์ชัน cos จากไลบรารีคณิตศาสตร์ คุณสามารถระบุ "จาก "math.h" นำเข้า cos"
ที่มา: opennet.ru