Mojo разработан как надстройка к Python, поэтому, если вы уже знаете Python, изучение Mojo не составит труда.
Также Mojo сочетает в себе удобство Python и производительность C. Такой синтез сделал Mojo до 35000 раз быстрее Python.
Если вы увлекаетесь искусственным интеллектом и уже знаете Python, Mojo определенно стоит попробовать.
Зачем нужен Mojo, если есть Python
Простота и универсальность Python сделали его самым популярным языком в таких областях, как Data Science, Machine Learning и AI.
У Python есть куча пакетов для работы с данными, но он проигрывает из-за отсутствия библиотек высокой производительности.
Python выступает лишь в качестве клеевого слоя и низкоуровневой привязки к C, C++ и другим языкам с лучшей производительностью.
Конечно, у Python-сообщества есть numpy и TensorFlow. Однако разработка библиотек сообществом — это долго и сложно. Разработка библиотек также требует низкоуровневого понимания внутренностей CPython, требует знания C/C++ и т.д.
Документация Mojo гласит, что проблемы Python слишком глубоки, и эти ограничения влияют на разработку ИИ.
Чтобы избавиться от проблем Python, был создан Mojo. Это язык программирования, который сочетает в себе удобство Python и производительность C.
Разработчиком Mojo стала компания Modular. Соучредитель Modular — Крис Латтнер, создатель Swift и LLVM.
Особенности Mojo
Mojo поставляется с множеством интересных функций из коробки. Вот некоторые из них.
Mojo разработан как надстройка к Python
Mojo стремится к полной совместимости с экосистемой Python.
Вы можете без всяких проблем работать на Mojo, если вы знаете Python — у языков программирования есть много общих функций, возможностей и библиотек.
Библиотеки numpy, pandas и matplotlib также доступны в Mojo.
Тем не менее, Mojo все еще находится на ранней стадии, поэтому ему не хватает многих возможностей Python (например, Mojo пока не поддерживает классы).
В будущих обновлениях Mojo станет полностью совместим с Python.
Код на Python:
def softmax(lst):
norm = np.exp(lst - np.max(lst))
return norm / norm.sum()
Код на Mojo:
def softmax(lst):
norm = np.exp(lst - np.max(lst))
return norm / norm.sum()
struct NDArray:
def max(self) -> NDArray:
return self.pmap(SIMD.max)
struct SIMD[type: DType, width: Int]:
def max(self, rhs: Self) -> Self:
return (self >= rhs).select(self, rhs)
Сильная проверка типов
Mojo использует типы для лучшей производительности и проверки ошибок.
Это поможет вам воспользоваться преимуществами безопасности памяти без шероховатостей.
def reorder_and_process(owned x: HugeArray):
sort(x) # Update in place
give_away(x^) # Transfer ownership
print(x[0]) # Error: ‘x’ moved away!
Автонастройка
У Mojo есть встроенная автонастройка, которая помогает автоматически найти наилучшие значения для параметров и использовать все преимущества вашего оборудования.
def exp_buffer[dt: DType](data: ArraySlice[dt]):
# Search for the best vector length
alias vector_len = autotune(1, 4, 8, 16, 32)
# Use it as the vectorization length
vectorize[exp[dt, vector_len]](data)
Mojo использует MLIR
Mojo использует всю мощь многоуровневого промежуточного представления (MLIR). Это значит, что разработчики могут пользоваться векторами, потоками и аппаратными блоками AI.
MLIR также помогает Mojo достичь высокой производительности, так как, в отличие от однопоточного Python, Mojo работает с параллельной обработкой на нескольких ядрах.
Это одна из причин, по которой Mojo в 35000 раз быстрее Python.
Как начать использовать Mojo
Mojo все еще находится в процессе разработки, но его можно испытать в Playground на базе JupyterHub.
Чтобы попробовать Mojo, перейдите на этот сайт для регистрации и не забудьте поставить галочку напротив Mojo в разделе «Интерес к модульным продуктам».