Автор LLVM розвиває нову мову програмування Mojo

Кріс Латнер (Chris Lattner), засновник та головний архітектор LLVM, а також творець мови програмування Swift, і Тім Девіс (Tim Davis), колишній керівник AI-проектів Google, таких як Tensorflow та JAX, представили нову мову програмування Mojo, що поєднує простоту застосування для дослідницьких розробок та швидкого створення прототипів із придатністю для формування високопродуктивних кінцевих продуктів. Перше досягається завдяки використанню звичного синтаксису мови Python, а друге за рахунок можливості компіляції в машинний код, механізмів безпечної роботи з пам'яттю та використання засобів для апаратного прискорення обчислень.

Проект сфокусований на використанні для розробок у галузі машинного навчання, але при цьому подається як мова загального призначення, що розширює можливості мови Python засобами системного програмування та підходить для широкого кола завдань. Наприклад, мова застосовується для таких областей, як високопродуктивні обчислення, обробка та перетворення даних. Цікавою особливістю Mojo є можливість вказівки emoji-символу "🔥" як розширення для файлів з кодом (наприклад, "helloworld.🔥"), крім текстового розширення ".mojo".

В даний час мова знаходиться на стадії інтенсивного розвитку та для тестування запропоновано лише online-інтерфейс. Відокремлені складання для запуску на локальних системах обіцяють опублікувати пізніше, після отримання відгуків про роботу інтерактивного веб-оточення. Вихідні тексти компілятора, JIT та інших пов'язаних із проектом напрацювань планують відкрити після завершення проектування внутрішньої архітектури (модель розвитку робочого прототипу за зачиненими дверима нагадує початкову стадію розробки LLVM, Clang та Swift). Так як синтаксис Mojo заснований мовою Python, а система типів близька до C/C++, у майбутньому планують розробити інструментарій для спрощення перекладу на Mojo існуючих проектів, написаних на C/C++ та Python, а також для розробки гібридних проектів, що поєднують код на Python та Mojo.

Проект розрахований на залучення до виконання обчислень наявних у системі апаратних ресурсів гетерогенних систем. Наприклад, для виконання програм на мові Mojo та розпаралелювання обчислень можуть залучатися GPU, спеціалізовані прискорювачі для машинного навчання та векторні процесорні інструкції (SIMD). Як причина розвитку окремого підмножини мови Python замість підключення до роботи з оптимізації існуючого CPython згадується орієнтація на компіляцію, інтеграція можливостей системного програмування та застосування фундаментально іншої внутрішньої архітектури, що дозволяє виконувати код на GPU та різних апаратних прискорювачах. При цьому розробники Mojo мають намір, наскільки це можливо, дотримуватися сумісності з CPython.

Mojo може використовуватися як в інтерпретації з використанням JIT, так і для компіляції в виконувані файли (AOT, ahead-of-time). У компілятор вбудовані сучасні технології автоматичної оптимізації, кешування та розподіленої компіляції. Вихідні тексти на мові Mojo перетворюються на низькорівневий проміжний код MLIR (Multi-Level Intermediate Representation), що розвивається проектом LLVM та надає додаткові можливості для оптимізації обробки графа потоку даних. Компілятор дозволяє застосовувати для генерації машинного коду різні бекенди, що підтримують MLIR.

Задіяння додаткових апаратних механізмів для прискорення обчислень дає можливість досягти продуктивності, при інтенсивних обчисленнях переважаючої програми C/C++. Наприклад, при тестуванні додатка для генерації безлічі Мандельброта, скомпільований додаток на мові Mojo при виконанні в хмарі AWS (r7iz.metal-16xl) виявився в 6 разів швидше реалізації на C++ (0.03 сек. проти 0.20 сек.), а також у 35 тисяч разів швидше за програму на Python при використанні штатного CPython 3.10.9 (0.03 сек. проти 1027 сек.) і в 1500 разів швидше за використання PYPY (0.03 сек. проти 46.1 сек.).

При оцінці продуктивності в галузі вирішення задач машинного навчання, AI-стек Modular Inference Engine, написаний мовою Mojo, в порівнянні з рішенням на базі бібліотеки TensorFlow виявився на системі з процесором Intel у 3 рази швидше при обробці мовної моделі, в 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 разів на CPU Intel, у 2.1, 1.2 та 1.5 разів на CPU AMD та у 4, 4.3 та 1.3 рази на CPU ARM.

Автор LLVM розвиває нову мову програмування Mojo

Мова підтримує статичну типізацію та засоби для безпечної низькорівневої роботи з пам'яттю, що нагадують можливості мови Rust, такі як відстеження часу життя посилань та перевірка запозичення змінних (borrow checker). Крім засобів для безпечної роботи з покажчиками в мові доступні і можливості для низькорівневої роботи, наприклад, можливе пряме звернення до пам'яті в unsafe з використанням типу Pointer, виклик окремих SIMD-інструкцій або доступ до апаратних розширень, таким як TensorCores і AMX.

Автор LLVM розвиває нову мову програмування Mojo

Для спрощення розділення класичного та оптимізованого Python-коду для функцій з явним визначенням типів для всіх змінних запропоновано використовувати окреме ключове слово fn замість def. Аналогічно для класів, за необхідності статичної упаковки даних у пам'яті під час компіляції (як у Сі) замість "class" можна використовувати тип "struct". Також можливий простий імпорт модулів мовами C/C++, наприклад, для імпорту функції cos з бібліотеки math можна вказати from «math.h» import cos».

Джерело: opennet.ru

Додати коментар або відгук