Чи є Mojo найкращою мовою для розробки ШІ?

Для машинного навчання та штучного інтелекту Python завжди був домінуючою мовою програмування з такими потужними бібліотеками, як NumPy, TensorFlow і PyTorch. Але швидка перевірка сторінок GitHub цих бібліотек покаже вам, що більша частина їх вихідного коду написана мовами C і C++.

Це тому, що Python надто повільний для ШІ. Mojo — це нова мова програмування, яка намагається поєднати швидкість C/C++ з елегантністю Python.

Mojo: Огляд

Mojo — це нова мова програмування, яка синтаксично схожа на Python, але має швидкість C. Вона в першу чергу призначена для штучного інтелекту та розробки систем, обидві сфери яких вимагають високопродуктивного програмного забезпечення.

Він використовує парадигму SIMD – одна інструкція, кілька даних, щоб скористатися перевагами паралелізму. Він також своєчасно скомпільований і ефективно використовує пам’ять.

Mojo, однак, не є абсолютно новою мовою; це надмножина Python. Це означає, що це Python плюс додаткові функції. Подібно до того, як TypeScript розширює JavaScript. Це добре, тому що якщо ви вже знаєте Python, не буде надто важко підібрати Mojo.

Mojo розроблено компанією Modular, заснованою Крісом Латтнером – творцем LLVM і мови програмування Swift.

Підсумовуючи, Mojo — це нова мова програмування, яка синтаксично схожа на Python, але така ж швидка, як C/C++. Він призначений для використання в розробці ШІ та системному програмуванні. Хоча проект ще не завершений, він є неймовірно перспективним, і в наступному розділі ми обговоримо чому.

Особливості Mojo порівняно з іншими мовами програмування

Mojo став неймовірно популярним, хоча він ще не є загальнодоступним. Це пояснюється тим, що вона має кілька суттєвих переваг перед іншими мовами програмування під час виконання машинного навчання та створення програмного забезпечення системного рівня. У цьому розділі ми обговоримо ці переваги.

#1. Вбудована підтримка ШІ та завдань машинного навчання

Mojo призначений для розробки програм штучного інтелекту. Як результат, він поставляється з функціями та модулями в стандартній бібліотеці для побудови нейронних мереж, виконання комп’ютерного бачення та підготовки даних.

Для більшості мов загального призначення, таких як Python, потрібні додаткові бібліотеки, але Mojo підтримує це відразу.

#2. Спрощений синтаксис і високорівневі абстракції

Щоб написати швидке та ефективне програмне забезпечення, нам зазвичай потрібно використовувати такі мови, як C, C++ і Rust. Хоча ці мови швидкі, їх складніше вивчати та працювати з ними. Це тому, що вони змушують вас працювати на низькому рівні, щоб ви мали більше контролю.

  Як позбутися порожнистої стрілки на iPhone

Однак Mojo все ще надає абстракції вищого рівня, такі як Python, і простий синтаксис. Це полегшує роботу з іншими мовами, порівнянними за продуктивністю.

#3. Інтеграція з популярними AI Frameworks і бібліотеками

Як згадувалося раніше, Mojo не є абсолютно новою мовою – це надмножина Python. Як результат, він добре інтегрується з існуючими бібліотеками, такими як NumPy і PyTorch. Це означає, що за замовчуванням Mojo має таку ж велику екосистему, як і Python.

#4. Ефективна обробка даних і можливості маніпуляції

Mojo розроблено для ефективного одночасного маніпулювання кількома значеннями. Це найбільш корисно під час виконання лінійної алгебри, на яку так сильно покладається машинне навчання. Mojo також компілюється точно вчасно, тому байт-код оптимізовано для підвищення швидкості. Це робить роботу з даними та машинне навчання ефективними в Mojo.

#5. Масштабованість і підтримка паралельних обчислень

Як згадувалося раніше, Mojo розроблено для підтримки парадигми паралельних обчислень «Одна інструкція – кілька даних». Це вбудовано в Mojo та робить його швидшим із коробки. Він також перевершує бібліотеки Python, такі як NumPy.

Ключові елементи Mojo

У цьому розділі ми обговоримо, як писати програми в Mojo. Оскільки Mojo має бути надмножиною Python, як TypeScript є надмножиною JavaScript, увесь дійсний код Python є дійсним кодом Mojo, але не весь код Mojo є дійсним кодом Python.

Робота над Mojo ще триває, і деякі функції мови Python ще не підтримуються — наприклад, класи. Крім того, компілятор поки що недоступний, але ви можете використовувати Mojo в блокноті для ігрового майданчика. Однак спочатку вам знадобиться обліковий запис, який ви можете створити на їх веб-сайті.

На даний момент важко дати вичерпний посібник з мови, оскільки деякі функції ще потрібно додати, і не всі речі наразі підтримуються. Натомість ми обговоримо деякі ключові доповнення, які Mojo додає на додаток до того, що вже є в Python.

Синтаксис і граматика

Оскільки Mojo є надмножиною Python, їх синтаксис ідентичний. Як і Python, програма складається з операторів. Ці оператори можуть бути згруповані в блоки під функціями, циклами або умовними умовами. Оператори всередині блоку мають відступ. Ось приклад програми, написаної мовою Mojo:

def odd_or_even():
     for i in range(1, 101):
        if i % 2 == 0:
            print("Even")
        else:
            print("Odd")

odd_or_even()

Це абсолютно ідентично програмі Python. Однак Mojo пропонує додаткові функції, які ви побачите в наступних розділах.

  Як додати примітку до файлу ескізу

Оголошення змінних

З Mojo у вас є два додаткові способи оголошення змінних. Ви можете використовувати ключове слово let або var. Ключове слово let оголошує незмінну змінну. Після ініціалізації ви не можете перепризначити його значення чомусь іншому. З іншого боку, змінні, оголошені за допомогою var, можуть бути перепризначені, оскільки вони змінні.

Головною перевагою змінних, оголошених за допомогою let або var, є те, що вони підтримують специфікатори типу. Наступний приклад ілюструє, як змінні оголошуються в Mojo.

let pi: Float64 = 3.141
var greeting = "Hello, World"

# This would be impossible
# pi = 6.283

# But this is possible
greeting = "Ola"

print(pi, greeting)

Структури

На додаток до іншого способу оголошення змінних, Mojo підтримує структури. Простий спосіб перегляду структур полягає в тому, що вони схожі на класи, але більш жорсткі. На відміну від класів, ви не можете додавати/вилучати або змінювати методи під час роботи, а всі члени мають бути оголошені за допомогою ключових слів var або let. Ця більш жорстка структура дозволяє Mojo ефективніше керувати пам’яттю та продуктивністю. Ось приклад структури:

struct Person:
    var name: StringLiteral
    var age: Int32
    
    fn __init__(inout self, name: StringLiteral, age: Int32):
        self.name = name
        self.age = age


john = Person("John Doe", 32)
print(john.name, john.age)

Функції

З наведеної вище структури ви могли помітити, що ми оголосили метод __init__ за допомогою ключового слова fn замість def. Це тому, що в Mojo ви можете оголошувати функції за допомогою fn і def. Функція, оголошена за допомогою fn, є суворішою порівняно з її аналогом def.

Зокрема, функція, оголошена за допомогою fn, має незмінні аргументи за замовчуванням. Крім того, вам потрібно вказати тип даних аргументів і значення, що повертається функцією. Усі локальні змінні мають бути оголошені перед використанням.

fn say_hello(name: StringLiteral):
    print("Hello,", name)
    
# This would be invalid
# fn say_hello(name):
#     print("Hello,", name)

say_hello("John")

Якщо функція викликає виняток, це має бути явно вказано під час оголошення функції за допомогою ключового слова raises. Крім того, Mojo не використовує клас Exception, як це робить Python, натомість він використовує клас Error.

fn will_raise_error() raises:
    raise Error('Some error')
    
will_raise_error()

Перевантаження

Mojo також підтримує оператори перевантаження на основі різних типів даних. Це підтримує об’єктно-орієнтований принцип поліморфізму.

fn add_numbers(a: Int32, b: Int32) -> Int32:
    return a + b

fn add_numbers(a: Int32, b: Int32, c: Int32) -> Int32:
    return a + b + c

let first_total = add_numbers(2, 3)
let second_total = add_numbers(1, 2, 3)

print(first_total, second_total)

Як Mojo використовується в розробці ШІ

Mojo постачається з бібліотеками для створення моделей машинного навчання. До них відносяться бібліотеки для побудови нейронних мереж. Крім того, ви також можете виконувати такі завдання, як обробка природної мови та комп’ютерний зір.

  26 найкращих безкоштовних альтернатив TeamViewer

Хоча сама мова ще не завершена, а її екосистема практично відсутня, ми все ще можемо очікувати, що Mojo принесе багато функцій для виконання таких завдань, як обробка даних, створення моделей, оптимізація, керування моделями та моніторинг.

Чи є Mojo майбутнім розвитку ШІ

Важко передбачити, як технологія, ймовірно, розвиватиметься та буде прийнята. Більшість прогнозів помилкові, але це не означає, що ми не можемо спробувати. Щоб передбачити, чи може Mojo замінити Python, давайте розглянемо переваги та недоліки/обмеження Mojo:

Переваги

  • Він дуже швидкий і створений, щоб використовувати переваги паралелізму, не роблячи багато, що важливо для машинного навчання, оскільки навчання моделей може зайняти багато часу.
  • Це надмножина Python, отже, її легше освоїти та має м’яку криву навчання. Це зменшує тертя щодо усиновлення.
  • Це зменшує ймовірність отримання помилок у виробництві, оскільки такі помилки, як неправильні назви змінних або невідповідності типів, виловлюються під час компіляції. Це робить його кращим.

Недоліки

  • Наразі він не завершений. Але, звичайно, команда Modular працює над випуском мови та її перекладача.
  • Незважаючи на те, що це спрощує роботу виробників фреймворків, це може не мати особливих переваг для споживачів фреймворків, оскільки вони вже використовують фреймворки машинного навчання на Python.
  • Він ще не має великої екосистеми інструментів і навчальних ресурсів. Хоча ви можете використовувати бібліотеки Python у Mojo, ви все ще можете використовувати бібліотеки Python у Python. Щоб Mojo мав будь-яку перевагу над Python, йому потрібні бібліотеки, які забезпечують швидкість Mojo.

Заключні слова

Якщо говорити про поточний ажіотаж, Mojo, ймовірно, стане популярною мовою ШІ. Я думаю, що однієї його швидкості достатньо, щоб заохотити людей переключитися. Його простота є плюсом. Але подібно до того, як TypeScript не замінив повністю JavaScript, цілком імовірно, що Mojo не замінить повністю Python.

Mojo — це, безперечно, мова, про яку варто пам’ятати, коли вона з часом стане дорослішою.

Далі перевірте тип проти інтерфейсу в TypeScript.