V8Unpack4rs: Rust, реализация v8unpack [Экспериментальный]

Альтернативная реализация распаковщика/запаковщика* файлов платформы 1С:Предприятие 8.x форматов *.cf (конфигурация), *.epf (обработка) и *.erf (отчет) на Rust.
Новая версия поддерживает распаковку и упаковкуфайлов платформы.
Для распаковки применен параллельный алгоритм.
Если хотите сравнить на Ваших данных попробуйте команды:
—parse — для параллельной распаковки;
-s —parse — для однопоточной распаковки.

Ссылка на GitHub.com

Я участвую в разработке кроссплатформенного инструмента для работы с файлами 1С:Предприятие 8.x.

Инструмент для работы с файлами 1CD за авторством Валерия Агеева с адаптацией от сообщества.

 

На данный момент описание форматов 1С:Предприятие 8.x известны и описаны в том числе на infostart.ru

//infostart.ru/public/19734/ — Краткое описание формата файлов *.1CD (файловых баз 1Сv8)

//infostart.ru/public/187832/ — Файловые базы *.1CD. Физическая структура. Восстановление.

//infostart.ru/public/536343/ — Формат баз 1CD — классические и 8.3.8

 

В процессе анализа кода проекта tool1cd меня не покидало ощущение, что я не до конца понимаю, как устроен этот самый файл, чтобы разобраться я решил попробовать написать свой распаковщик.

Для реализации я выбрал молодой язык программирования Rust.

 

Rust — язык для системного программирования без segfault’ов и с гарантиями потокобезопасности.

Более подробно о особенностях языка можно почитать

Rust (язык программирования)

The Rust Programming Language

У языка есть свой менеджер пакетов, который называется cargo, одновременно он же и занимается сборкой.

Так же есть реестр пакетов(crate) https://crates.io/.

 

Для своей разработки за основу я взял проект, который развивает Сергей Батанов  — dmpas/v8unpack

 

Результат моей работы представлен здесь andreevlex/v8unpack-rs

Проект разделен на 2 части (библиотека и консольный проект).

На данный момент

Библиотека 

Представляет основные объекты для работы с форматами 1С:Предприятие 8.x.

Пакет опубликован в реестре  https://crates.io/crates/v8unpack4rs

Консольный проект

Конкретное применение библиотеки.

Пакет опубликован в реестре https://crates.io/crates/v8unpack

История версий:

Версия 2.1

    — поддержка сборки файла контейнера из каталога;

    — поддержка сборки файла контейнера из двоичных файлов.

Версия 2.0

    — параллельная распаковка файлов контейнеров;

Версия 1.0

    — распаковка файлов контейнера

64 Comments

  1. PerlAmutor
    невероятно быстрый язык для системного программирования

    Стоит заметить, что фраза «невероятно быстрый» — если не ложь, то полу-правда. Судя по тестам, на каких-то алгоритмах он, действительно, по скорости превосходит реализации на C или C++, ровно как и наоборот, уступает им на других алгоритмах. Это еще один инструмент для решения задач, проблема лишь в сложности выбора, т.к. для этого потребуется писать сразу на нескольких языках, чтобы сделать замеры.

    Если бы Rust уверенно обходил по всем критериям другие языки, то да, временно можно было бы и воспользоваться его преимуществом. Только вот такой резкий «аномальный отрыв» от соперников привлек бы повышенное внимание разработчиков компиляторов популярных языков. И в итоге мы бы смогли получить улучшенную оптимизацию компиляторов типа msvc или gcc. А Rust после такого ушел бы в небытие.

    Спасибо за проект и публикацию. Есть над чем подумать.

    Reply
  2. TIS_08

    (1)

    Взял цитату с сайта самого языка.

    Сам уже разбираюсь с языком продолжительное время и начинаю узнавать его разные стороны.

    Есть алгоритмы, которые реализованы меленее чем в C++.

    Есть откровенные хаки, так как система владения не позволяет такого.

    Я его рассматриваю как еще один инструмент, а не панацею.

    Reply
  3. AllexSoft

    интересный проект, вот бы реализацию работы с данными не из 1С, ну к примеру выгрузку таблиц БД, редактор таблиц, статистику.. а то приходится пользоваться несколькими утилитами, так как все они не умеют все сразу..

    Reply
  4. nixel

    (4) все эти операции можно провести на чистом SQL 🙂

    Reply
  5. МихаилМ

    как запаковать с помощью Вешей итилиты в файл конфигурации ?

    вижу только опции распаковки. А в аннотации написано «Альтернативная реализация распаковщика/запаковщика«

    Reply
  6. webester

    (5)Что-то, где-то пропустил. А как работать с файловой базой на чистом SQL? И на каком именно SQL можно работать с файловой базой?

    Reply
  7. TIS_08

    (6)

    На данный момент никак.

    Моя версия не такая функциональная как оригинал и он думаю не сразу стал таким.

    Не добрался весь функционал перенести

    Это был больше эксперимент и хотелось представить минимально рабочий прототип.

    В следующих версиях постараюсь представить.

    (4)

    Для этого пилим https://github.com/dmpas/tool1cd

    Reply
  8. TIS_08

    (4)

    Одна из целей, которую мы перед собой ставим — это консолидация усилий сообщества в создании единого набора утилит для работа с форматами 1С Предприятие.

    Reply
  9. nixel

    (7) извиняюсь, запутался уже в статьях про оскрипт. Конечно же с файловой базой работать через SQL нельзя.

    Reply
  10. Evil Beaver

    (0) а у вас с Сергеем есть какой-то roadmap? Когда можно ждать релиза чего-нибудь из ваших грандиозных планов?

    P.S. EvilBeaver кается, что не помогает с проектом

    Reply
  11. МихаилМ

    (8)

    исправьте описание , что реализация анпэк в части распаковки.

    Reply
  12. ph_1984

    Кстати, коллеги уже есть инструмент для распаковки/запаковки cf файлов написанный на RUST — https://github.com/khevse/conf_robber.

    По сравнению с v8unpack имеет несколько преимуществ:

    1. не падает на больших CF

    2. быстро обрабатывает большие CF (производительность v8unpack сильно проседала из за операций с диском)

    3. умеет работать с конфигурациями 8.2/8.3 (на v8unpack ловили баги с этим)

    Инструмент не был представлен автором сообществу, но открыт для всех желающих попробовать его.

    p.s. у автора так же есть аналогичный инструмент написанный на Go, но его не пробовали.

    Reply
  13. TIS_08

    (13)

    Не опубликуй я свою поделку, может так и осталось тайной, что есть другой проект написанный на ржавчине =)

    Reply
  14. TIS_08

    (11)

    это уже в специальном частике + задачи в проекте можно обсудить.

    Reply
  15. baton_pk

    (13)

    Инструмент не был представлен автором сообществу

    в том и проблема! Пока не крикнешь «у меня есть корявый костыль», никто свою нетленку не покажет.

    Reply
  16. ph_1984

    (14) Всё так. Причем инструмент автора используется при подготовке обработки для решения https://infostart.ru/public/382398/ (в части создания обработки).

    Reply
  17. Evil Beaver

    (16) На Хабре был прикольный цикл статей, чувак сравнивал менталитет наших и омериканских программистов. У нас все стесняются и тихо пилят нетленки, у них принято кричать про каждый написанный говнобатник.

    Reply
  18. TIS_08

    (18)

    согласен =)

    Reply
  19. sulfur17

    А чем он лучше/хуже других?

    Reply
  20. AlexWhite

    Эх, коллеги! Вашу бы энергию, да в мирных целях! 🙂

    Несколько непонятностей:

    1) Зачем парсить 1CD вместо парсинга 1Cv8.cf ?

    2) Все пишут «быстро разбирает», предлагаю сравнить. Возьмите cf от 1С:КА релиза 1.1.97.1 включите возможность редактирования с сохранением поддержки (платформа 8.2.19.130), сколько времени будет потрачено на разборку и каков получается результат разборки? (мой разобрал за 3 минуты 19 секунд)

    3) собирать, жаль, ваш не умеет, но тоже хотелось бы сравнить на той же конфигурации (пункт 2) (мой собрал CF за 17 минут 28 секунд).

    4) После разборки конфигурации в пункте 2 есть вопрос по результату разборки: Отчеты, РегламентированныйОтчетРасчетПоСтраховымВзносам, ФормаОтчета2017кв1, Модуль формы

    строка 14178 колонка 74 (+/-1) — какой символ в файле, полученном после разборки?

    5) Аналогичный вопрос про строку 14180, колонку 52 — какой там символ после разборки?

    Есть у вас CF для экспериментов или напишете мне в личку, передам готовую?

    Reply
  21. herfis

    (18) Это из-за другого отличия менталитета наших и «омериканских» программистов — у нас принято закидывать какашками, а у них атмосфера намного более дружелюбная.

    Reply
  22. baton_pk

    (21)

    мой разобрал за 3 минуты 19 секунд

    а он открыт? доступен простым смертным? иначе это фаллометрия в чистейшем виде получается.

    Reply
  23. baton_pk

    (20) да ничем. Мы тут подумали, что как каждый студент должен написать свою ОС или язык программирования, так каждый одинэсник должен написать свой распаковщик на любимом языке. (это трололо, если что)

    Reply
  24. tsukanov

    (23) Вот бы кто собрал все известные распаковщики и затестил с графиками.

    Кто знает, может питон уделает и раст и плюсы )

    Reply
  25. baton_pk

    (25)

    Кто знает, может питон уделает и раст и плюсы )

    тут тонкий момент — всё зависит от среды тестирования. Можно загнать всю конфу в память — будет быстро, но если в тестовой среде мало оперативы, или предполагается одновременный запуск нескольких подобных выгрузок, или оператива хоть и есть, но тут же уходит в своп. v8unpack более-менее оптимизирован для работы в любых условиях, но он вероятнее всего проиграет на конфах до 100МБ любому распаковщику, который считывает конфу целиком в память. Однако его исходник открыт и его в крайнем случае можно оптимизировать под нужды конкретной рабочей среды.

    Reply
  26. tsukanov

    (26) Ну тестирование с графиками в разных условиях как раз и покажет плюсы и минусы. Это будет хоть какая-то объективная оценка. Такие технические оценки даже и не припомню на инфостарте. Хотя лично мне интересны только они.

    Reply
  27. AlexWhite

    (23)

    доступен простым смертным?

    Я же доступен, значит желающие смогут через меня потестить exe. А код не open source, деньги плачу за разработку и поддержку.

    Reply
  28. AlexWhite

    (25)

    Вот бы кто собрал все известные распаковщики и затестил с графиками.

    Какая в этом польза?

    Reply
  29. baton_pk

    (28) https://github.com/dmpas/v8unpack/releases/tag/v.3.0.40

    вот тут можно скачать и потестить в тех же условиях, где работала ваша распаковка.

    Reply
  30. tsukanov

    (29) Какая польза в объективном знании? Не знаю даже что ответить )

    Reply
  31. tsukanov

    (28) Выложите тут ваш cf. Народ затестит свои велосипеды при желании

    Reply
  32. AlexWhite

    (30)

    скачать и потестить в тех же условиях

    Скачал, потестил.

    v8unpack -P 1cv8.cf SRC разобрал со скоростью меньше минуты, но лишено смысла его сравнивать с моим V8Parser. Прикладываю картинку, на которой слева — дерево исходников, полученное моим парсером, справа v8unpack. Разницу видите?

    Еще, конечно, следовало бы после разборки хоть какую-то сводку выводить, иначе пришлось с секундомером сидеть 🙂

    Reply
  33. AlexWhite

    (31)

    Какая польза в объективном знании?

    Замер времени не объективен в данном случае. Смотрите картинку выше — слева парсер, с одним результатом после разбора CF, справа более «быстрый», но совершенно с другим результатом. Какой смысл сравнивать время при разных результатах?

    CF сюда не влезет (и запрещено), желающим передам через личку.

    Reply
  34. baton_pk

    (33)

    но лишено смысла его сравнивать с моим V8Parser

    а зачем предлагали сравнить? 😀

    Reply
  35. AlexWhite

    (35)

    а зачем предлагали сравнить?

    Я лишь задал несколько уточняющих вопросов, а сравнить — это ваша и Александра Цуканова идея в (25).

    А начал я с того, что вашу бы энергию, да в мирных целях! 🙂 Каждый ваяет свой велосипед вместо того, чтобы влиться в оплачиваемый проект.

    Reply
  36. TIS_08

    (36)

    А дайте ссылку на описание Вашего проекта, а мы посмотрим.

    Мой проект был изначально и был задуман как эксперимент, чтобы разобраться с форматом.

    Reply
  37. tsukanov

    (33)

    иначе пришлось с секундомером сидеть

    А сделать замер внешними средствами никак? ))

    Reply
  38. tsukanov

    (34) Кидайте в личку

    Reply
  39. baton_pk

    (36) Вы в (21) предложили сравнить.

    Сваять свой велосипед — отличный способ разобраться в вопросе. Вы же не будете ругать лабораторные в институте за их велосипедность, правда?

    Ну и влиться в оплачиваемый проект, во-первых, никто не предлагал, во-вторых, нет интереса — в опенсурсе есть сообщество, там веселее.

    Reply
  40. AlexWhite

    (37)

    А дайте ссылку на описание Вашего проекта, а мы посмотрим.

    Документация по проекту в закрытой области «Системы управления требованиями» (RMS). Доступ открывается только при сотрудничестве по разработке и развитию на коммерческой основе (я заказываю и оплачиваю, исполнитель выполняет).

    (37)

    Мой проект был изначально и был задуман как эксперимент, чтобы разобраться с форматом.

    Достигнутая цель моего проекта — использование парсера в повседневной работе (управление распределенными программными проектами на платформе 1С) в качестве одного из инструментов управления изменениями (RMS+V8Parser+CVS). Обратил внимание на вашу статью, но быстро остыл, так как ваш парсер не умеет собирать, а без сборки разборка не интересна, какой бы быстрой она не была.

    Посмотрел v8unpack, но он тоже очень далек от моих уже удовлетворенных потребностей. За статью спасибо, в любом случае.

    Reply
  41. AlexWhite

    (40)

    Сваять свой велосипед — отличный способ разобраться в вопросе.

    Разобрались? Здорово! Могли еще и заработать 🙂 Кстати, о «разобраться в формате» — v8unpack после разобрать/собрать из конфигурации размером 643М собрал конфигурацию, размером 590М.

    (40)

    никто не предлагал

    Да ладно!? Тут лет 5-10 назад обсуждался v8unpack, да и на других ресурсах были приглашения. Кто-то отреагировал, кому-то «гранаты не той системы». В общем, что теперь это обсуждать?

    Reply
  42. AlexWhite

    (38)

    А сделать замер внешними средствами никак? ))

    Я свой интерес удовлетворил, хватило секундомера 🙂

    Reply
  43. AlexWhite

    (40)

    (36) Вы в (21) предложили сравнить.

    согласен. Но сам предложил, сам сравнил. Больше не буду 🙂

    Reply
  44. tsukanov

    (42) Мне вот реально интересно на чем тут можно заработать и на кой вообще сдался распаковщик, когда платформа умеет выгружать/загружать XML

    Я могу понять опенсурс под конкретную локальную проблему (сам такое делал), но закрытый инструмент даром не нужен ))

    Reply
  45. AlexWhite

    (45)

    интересно на чем тут можно заработать

    я говорю об упущенной возможности «разобраться со структурой + заработать».

    (45)

    но закрытый инструмент даром не нужен

    Мне был нужен и за его разработку я заплатил. Открытый инструмент, увы, ирушка. До рабочего состояния вряд ли доживет.

    GComp.exe в свое время стал отличной альтернативой закрытому инструменту, но это было уже очень давно.

    (45)

    платформа умеет выгружать/загружать XML

    Умеет, но уже очень много портвейна утекло, пока она этому научилась!

    И до сих пор есть ошибки при разборке+сборке в пустую конфигурацию. Да и на некоторых конфигурациях просто валится молча и общая производительность оставляет желать.

    1C:EDT — уже более-менее реальная альтернатива, но пока тоже, увы, применима только в экспериментально-исследовательских целях далека еще от промышленного использования.

    Reply
  46. tsukanov

    (46) Сборка разборка даже правильная ничего на дает без внешней поддержки (знающей структуру файлов). Если речь о версионировании, то хранилище никто не отменял.

    Reply
  47. minimajack

    (33) не видно дерева — просто видно что разбросано по типам метаданных

    покажите что внутри =)

    Reply
  48. baton_pk

    (42)

    5-10 назад обсуждался v8unpack

    а, ну я тогда не в теме был. Но я смотрю, с тех пор мало что изменилось. В свободном доступе почти ничего, а только ходят всякие и пальцы гнут, что у них есть дорого-богато.

    Reply
  49. AlexWhite

    (48)

    не видно дерева

    Вот, например, конечная ветка для одного объекта

    CFSRCОтчетыРегламентированныйОтчетРасчетПоСтраховымВзносам­ФормаФормаОтчета2017Кв1

    По остальным аналогично.

    Reply
  50. AlexWhite

    (47)

    Сборка разборка даже правильная ничего на дает без внешней поддержки

    Про что речь?

    (47)

    то хранилище никто не отменял.

    Штатное имеешь в виду? Поработай с ним через интернет или свяжи с системой управления проектами/требованиями.

    Reply
  51. tsukanov

    (51)

    Про что речь?

    Про то чего нет ))

    Поработай с ним через интернет

    Вот именно так и работаю )

    Reply
  52. AlexWhite

    (52)

    Про то чего нет ))

    Про какую внешнюю поддержку речь?

    (52)

    Вот именно так и работаю )

    Сомневаюсь что именно через интернет. Скорее, по RDP на виртуальное рабочее место + внутри сети (NETBUI), а интеграция со средствами управления требованиями в любом случае внешняя, в крайнем случае 1С:СППР + доработки.

    В общем, ожидал от opensource упаковщиков/распаковщиков бОльшего, но понял, что напрасно. Авторы удовлетворили свой интерес к структуре и на этом проекты остановились. Но это только начало пути если говорить о разборке/сборке, до мерянья скоростью еще очень далеко 🙂

    Reply
  53. tsukanov

    (53) Не надо фантазировать. Через интернет я работаю удаленно без RDP, шлюзов и прочего. И работаю так ежедневно.

    Авторы удовлетворили свой интерес к структуре и на этом проекты остановились.

    Мной был написан велосипед за вечер (нагло содран с решения на lua): https://github.com/tsukanov-as/cf

    Работает как часы с того вечера 24/7 в одной конторе (для диффа обработок в корпоративном Gogs).

    Оно наверно тормозное, да и ошибка там одна есть (порядок вывода модулей меняется так как я в map вместо массива пихаю их), но вот удивительно — оно решает свою задачу на все 100 при смешных затратах на разработку.

    А задача конкретная: видеть гитовый дифф модулей бинарных обработок. Все.

    На текущем месте работы мне это уже не нужно, так как гит не используется вообще. Хранилище (через интернет, да) тут гораздо удобнее.

    Так чего вы там ожидали от опенсурс то? Люди решают свои локальные задачи минимальными усилиями. При этом разбавляют решение фаном (реализация на новом языке).

    Про какую внешнюю поддержку речь?

    Нужен механизм понимающий структуру файлов. И подозреваю что у вас его таки нет,

    ибо хорошо представляю о каких объемах речь: https://github.com/Lead-Bullets/Lead-Radar

    Сами по себе извлеченные файлы никакой ценности не представляют.

    Reply
  54. minimajack

    (53)

    В общем, ожидал от opensource упаковщиков/распаковщиков бОльшего, но понял, что напрасно

    Что кроме структуры может ваш распаковщик?

    Reply
  55. AlexWhite

    (54) мой парсер различает структуры файлов — тексты модулей, формы, таблицы, картинки, xml и прочие. Основная его заслуга — при помощи CVS и RMS связывать изменения (код, структура и т.д.) с требованиями.

    От open source распаковщиков ожидал аналог GComp.exe только для v8, но подобного не встретил ни разу.

    Reply
  56. tsukanov

    (56) И где больше сделано, у вас или по ссылке? )

    Reply
  57. AlexWhite

    (55) помогает управлять распределенными программными проектами на платформе 1С v8, как один из элементов системы управления требованиями.

    Reply
  58. AlexWhite

    (57) по какой ссылке?

    У меня конечно больше, как минимум, мнемоничная структура папок и файлов и различает типы. В промышленной эксплуатации уже более 10 лет.

    Reply
  59. tsukanov

    (59) Кто бы сомневался что у вас больше )

    Reply
  60. TIS_08

    Ыыыы

    Написал статью про программирование на Rust, взяв за основу реальный проект, а все превратилось в измерение у кого круче функционал. =)

    Reply
  61. МихаилМ

    (61) напишите статью про программирование на 1с на форуме про Rust. и поймете , что задачу сформулировали ошибочно.

    Reply
  62. AlexWhite

    (61)

    а все превратилось в измерение у кого круче функционал.

    Вы, ведь, сами начали с «невероятно быстрый» 🙂

    Reply
  63. buganov

    (58)

    помогает управлять распределенными программными проектами на платформе 1С v8, как один из элементов системы управления требованиями.

    Как помогает управлять проектами? В статье не нашел ничего про это. И как получение структуры конфигурации позволяет при управлении требованиями?

    Reply
  64. AlexWhite

    (64)

    Как помогает управлять проектами?

    Связывает изменения объектов конфигурации с требованиями.

    (64)

    В статье не нашел ничего про это.

    В какой статье искали?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *