Как я ускорил «1С:Предприятие» в 5000 раз, переписав всё на Common Lisp
Оглавление
Как-то раз я записывал очередное видео для студентов об истории Unix. Должен отметить, студенты у меня непростые: прожженные 1С-ники с серьезным «синдромом утенка», заработанным при работе с Windows.
А ведь когда-то давно, в 2006 году, я и сам был таким. Но случайно установленный дистрибутив Linux открыл для меня совершенно иной мир - мир с богатой историей, пронизывающей компьютерные науки.
Это не какой-то идеальный мир с безупречными архитектурными решениями и безглючным софтом. Отнюдь. Тем интереснее узнать, что двигало людьми, принимавшими такие решения. Почему они прошли эволюционный отбор, дожили до текущего момента и заняли лидирующее место?
И вот, рассказывая о Unix way, подумал: «Стоп! Ведь это можно применить для связи 1С:Предприятия с любым кодом очень простым и надежным способом».
Почему в этом есть потребность #
- Замкнутость экосистемы. Намеренная отгороженность среды для увеличения прибыли вендора.
- Низкое быстродействие. Будет очень сложно найти интерпретатор медленнее чем в 1С. Попробуйте и поделитесь в комментариях результатами поисков.
Можно написать еще многое (думаю и у вас будет много пунктов в списке), но мы разберем только эти моменты. Эта статья не критика платформы «1С:Предприятие», а поиск максимально эффективных способов решения бизнес-задач. Моя цель конструктивный подход к разработке и оптимизации процессов.
По первому пункту: Интеграция #
Не далее как вчера мне потребовалось создать бота на XMPP. Это не какой-то масштабный проект, а так, небольшая прикладная задача.
У меня и моих близких несколько магазинов на Ozon. Маркетплейс ввел новые штрафы за отгрузку товаров: теперь нет паузы между заказом и отгрузкой. То есть, если заказ пришел в 11:59, а вы до 12:00 его не отгрузили - получите штраф.
Бот снимает остатки в 9:00 и возвращает их в 12:00. Управляется и отчитывается он по XMPP, который мы уже давно используем между собой взамен Telegram.
За три часа был создан бот на JavaScript, настроен и развернут на копеечном VPS. А что в 1С? В 1С вам потребуется с нуля реализовать поддержку протокола XMPP. Это возможно, но займет намного больше времени. А как говаривал господин Бенджамин Франклин: «Время - деньги».
По второму пункту: Алгоритмы и скорость #
Это вполне рядовая ситуация. Алгоритм реально используется в обмене данными между УНФ и БП, так что перед нами не абстрактная академическая задача, а сугубо практический кейс.
Условия задачи: Есть последовательность чисел X1, X2, X3, Xn и некая сумма Y. Как вычислить, какие числа из последовательности образуют сумму Y?
Эта задача известна как «Задача о сумме подмножества». Это NP-полная задача. Давайте попробуем решить ее методом полного перебора вариантов.
Мы напишем решение на нескольких языках, сравним код и быстродействие, а потом улучшим алгоритм с помощью кода Грея.
Результаты #
Можно долго говорить, просто возьмите чашку кофе, включите это видео и всё увидите сами.
Вы убедитесь, что мы улучшили быстродействие системы в «1С:Предприятии» в 5000 раз (а если внимательно посмотрите видео - увидите, что более чем в 7000 раз).
Можно сказать, что это какой-то «костыль». Но не спешите, хорошо подумайте - возможно, вы найдете этой методике достойное применение.
Если у вас остались вопросы или необходима помощь в решении задач связанных с 1С, - пишите на Email. Исходные коды к видео доступны в репозитории.