Особое мнение

05 июля 2023
Особое мнение

Глобальные задачи и новые языки, мнения экспертов и полезные инструменты. Вы на частоте Evrone, здесь мы говорим о самом интересном из мира Python-разработки. Спасибо, что вы с нами, и приятного чтения!

Привет от SkyNet

Сколько человечество существует, столько оно любит развлекать себя нерешаемыми задачами. Алхимики пытались создать магистериум, он же великий эликсир, он же философский камень. Целью было превращать любой металл в золото, быть универсальным лекарством и продлевать жизнь. Такой же привлекательной и неосуществимой была идея вечного двигателя, perpetuum mobile. И если в 1635 году первый патент на такое устройство выдали, то к 1775 заявки принимать перестали. Всем к тому времени стало очевидно, что создать такое устройство невозможно.

Современная золотая мечта — создание сильного ИИ, умеющего принимать решения и действовать в условиях неопределённости. Такой ИИ должен уметь обучаться, владеть естественным языком и обладать иными, присущими человеку способностями. Фактически, люди пытаются создать людей, только с кремниевыми мозгами, предполагая, что те будут служить инструментом для решения сложных задач.

Технологии обработки естественного языка за последние пару лет совершили качественный скачок в развитии. Это привело к созданию больших языковых моделей и проектов на их основе, что кажется дорогой к исполнению наших «мечт».

Один из таких проектов привлёк наше внимание своей необычностью. Цель Automata — создать ИИ-программиста, который будет самостоятельно проектировать, писать, тестировать и совершенствовать сложные системы. При этом он сможет самостоятельно обучаться, а также дорабатывать свой собственный код, существенно повышая свою автономность и способность к изобретению новых алгоритмов. Таким образом, если проект достигнет успеха, то Automata станет первым в мире, полностью автономным ИИ.

Automata

За основу взяты большие языковые модели, такие как GPT-4 и векторная база данных. По замыслу разработчиков этого достаточно для создания системы, способной самостоятельно искать, писать и документировать код. Авторы вдохновились теорией автоматов, гласящей, что код по своей сути может быть формой памяти и потенциально привести к созданию Общего ИИ (General AI). Станет ли это концом человечества, как нас предупреждал Стивен Хокинг, или нет — вопрос остаётся открытым. Но мы будем периодически наведываться в репозиторий. Просто так, на всякий случай.

Так ли хорош Mojo

В мае 2023 интернет вскипел от хвалебных постов в адрес нового языка программирования Mojo. Ему стали пророчить будущее величайшего достижения в Computer Science, а его релиз будет главным событием в мире разработки программного обеспечения. Демоверсия примеров кода на Mojo показала результат в 35’000 раз быстрее, чем на обычном Python. Мы не стали верить этому на слово и решили не спешить с выводами. Предлагаем посмотреть на Mojo без розовых очков, когда шумиха уже улеглась.

Mojo разрабатывается стартапом Modular, во главе которого стоит Крис Лэттнер. Ранее он был ключевым разработчиком LLVM, MLIR, Clang и языка Swift. Такой послужной список, вместе с опытом работы в Google, Tesla и Apple, говорит о крайне высокой квалификации. Второй основатель Тим Дэвис, также опытный разработчик, ранее работал над Tensorflow. Остальные участники проекта зарекомендовали себя в сфере разработки компиляторов, фреймворков и машинного обучения.

Ключевым элементом языка будет MLIR. Это компилятор, в основе которого лежит идея расширяемости и возможности переиспользования инфраструктуры. Изобретать собственный синтаксис не стали, взяв его из Python. Это решение позволит не придумывать велосипед, а сразу сделать Mojo привычным для всех, кто уже программирует на Python. Более того, используется метод Dogfooding (Eating our own dog food), при котором создание языка ведется с помощью уже созданных элементов этого языка. Примерно также, как в Julia всё построено с использованием Julia.

Вместо однозначно определённой системы типов будет гибрид между статической и динамической. Если для определения функции разработчик использует ключевое слово fn, то будет применена высокопроизводительная статическая типизация. В этом случае нужно будет определить тип каждого идентификатора, а Mojo сможет оптимизировать создаваемый машинный код. Если использовано слово def — останется обычная динамическая типизация и типы будут выбираться языком самостоятельно с возможностью их менять во время выполнения кода. Так можно будет точечно ускорять конкретные функции, не слишком усложняя код.

Поразительные итоги демоверсии, с одной стороны, выглядят чистым маркетингом. Расчёт множества Мандельброта — абсолютно синтетический бенчмарк. В реальном приложении такого феноменального ускорения достичь вряд ли получится. С другой стороны, команда, ведущая разработку Mojo, имеет опыт и экспертизу работы над сложными проектами. Это, в свою очередь, позволяет верить в успех. Волна хайпа утихла, но скорее всего мы ещё услышим о Mojo и о том, чего удалось достичь команде Modular.

Альтернативное мнение: asyncio

Asyncio решил много проблем в Python. Асинхронное программирование стало нативным, частью языка. Костыли больше не требовались, а множество разработчиков вздохнули с облегчением. Но не всем это нововведение пришлось по душе. Некоторые программисты, такие как Чарльз Лейфер, даже спустя 8 лет считают его дестабилизирующим фактором, порождающим ужасный дизайн.

Основной проблемой Чарльз называет то, что asyncio нельзя внедрять частично. Если архитектура приложения заранее предусматривала асинхронность, то особых сложностей не будет. В ином случае возникает ситуация, когда применяемые библиотеки не совместимы с asyncio или же предоставляют собственную реализацию асинхронности. Таким образом мейнтейнеру приходится или самостоятельно подружить ту или иную библиотеку с asyncio, или добавить в приложение дублирующий код. Первое приводит к появлению плеяды незрелых библиотек, а второе — не лучший вариант, с точки зрения архитектуры.

Ещё одна проблема в том, что внедрение асинхронности сильно увеличивает сложность. Повышается риск даже небольших ошибок, которые легко разделят на ноль возможный выигрыш в производительности. При этом считается, что для создания современного веб-приложения асинхронность — очевидная необходимость. Но практическая польза от этого может быть незначительной. Это скорее превратилось в тренд, заражающий всё вокруг.

Если же асинхронность именно то, что вам нужно, то есть альтернативный способ её добиться. Библиотека gevent отличается от asyncio тем, что преобразует все блокирующие вызовы в неблокирующие и возвращает управление в event loop. Интерфейс gevent сильно напоминает treading module из Python, что делает его знакомым для программистов, ранее использовавших параллелизм на основе потоков. Ну а использовать его или нет — решение, в любом случае, за вами.

Подсказываем в CLI

Закончим наш дайджест полезным инструментом — библиотекой arguably. Она помогает превратить ваши функции и строки документации в интерфейсы командной строки. С интеграцией не должно возникнуть никаких проблем. Всё, что скрипт должен преобразовать, надо задекорировать с помощью @arguably.command, а затем вызвать с помощью arguably.run().

Возьмём небольшой пример, назовём его intro.py:


#!/usr/bin/env python3
import arguably

@arguably.command
def some_function(required, not_required=2, *others: int, option: float = 3.14):
    """
    this function is on the command line!

    Args:
        required: a required argument
        not_required: this one isn't required, since it has a default value
        *others: all the other positional arguments go here
        option: [-x] keyword-only args are options, short name is in brackets
    """
    print(f"{required=}, {not_required=}, {others=}, {option=}")

if __name__ == "__main__":
    arguably.run()

Результатом выполнения кода станет следующее:

user@machine:~$ ./intro.py -h
usage: intro.py [-h] [-x OPTION] required [not-required] [others ...]

this function is on the command line!

positional arguments:
  required             a required argument (type: str)
  not-required         this one isn't required, since it has a default value (type: int, default: 2)
  others               all the other positional arguments go here (type: int)

options:
  -h, --help           show this help message and exit
  -x, --option OPTION  keyword-only args are options, short name is in brackets (type: float, default: 3.14)

Библиотека arguably автоматически создала подсказку, которая позволит пользователям сходу разобраться, какие аргументы необходимо указать и в каком формате. Отдельно отметим, что поддерживаются разные языки разметки документации: reStructuredText, Google, Numpydoc и Epydoc.

Установка производится через pip:

pip install arguably

Если эта библиотека вам понравилась, то не забудьте заглянуть в репозиторий и поставить звёздочку. Уверены, что автору будет приятно.

Интересно посмотреть

Пропустили наш предыдущий митап? Не страшно! Видеозаписи докладов уже выложены на нашем YouTube-канале в кинематографическом качестве 4K и со студийным звуком.

Александр Мещеряков из Сinimex рассказал, как развертывать модели с использованием геопространственных данных и отобразить исходную информацию на карте с помощью визуализации геоданных:

Дмитрий Савостьянов из Artifactory поделился опытом использования ML-модели прогнозов платежей клиентов и системы предсказания спроса, разработанной в компании. Монетизация в мобильных играх строится на внутриигровых продажах, обычно платят не более 10% пользователей. Поэтому очень важно удерживать платящих игроков. Для такой предиктивной аналитики геймдевы решили использовать машинное обучение:

Мария Изофатова из Мегафон объявила месяц борьбы с уязвимостями кластера Apache Hadoop: репартиционирование (проблема мелких файлов), автоочищение таблиц на кластере, настройка конфигурации PySpark, анализ запущенных Spark application и внутреннего кода:

Подписывайтесь и ставьте 🔔колокольчик, чтобы получать уведомления о будущих трансляциях и видео! А ещё присоединяйтесь к Telegram-каналу и будьте в курсе всех наших будущих мероприятий.

Митапы

Онлайн

Python meetup

11 октября 2023

Рады сообщить, что у нас запланирован осенний Python Meetup. Программа мероприятия формируется. Заявки на участие спикера принимаются до 20 сентября.

Теперь следить за митапами Evrone стало удобнее. В Telegram-канале Evrone meetups мы выкладываем анонсы с подробными описаниями докладов, а также студийные записи после мероприятий. А ещё, у нас можно выступить, мы поможем оформить вашу экспертизу в яркое выступление. Подписывайтесь и пишите @andrew_aquariuss, чтобы узнать подробности.

Регистрация

Вакансии

Удаленка / Офис

Evrone 

Мы рады новым Python-разработчикам. Удалённая работа с первого дня, помощь в подготовке выступлений на профессиональных конференциях, поощрение и оплата участия в Open-source проектах. Прозрачный способ увеличить грейд через обучение и проверку навыков под контролем ментора. Здесь есть понимание как организовать разработку комфортно и эффективно. Присоединяйтесь!

Подробнее

Подписаться
на Digest →
Важные новости и мероприятия без спама
Технологии которыми вы владеете и которые вам интересны
Ваш адрес электронной почты в безопасности - вот наша политика конфиденциальности.