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

Программирование - Инструментарий

v8unpack

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

Ссылка на GitHub.com

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

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

 

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

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

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

- //1c-soft.it-terminal.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

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

56

Скачать файлы

Наименование Файл Версия Размер
V8Unpack4rs: Rust, реализация v8unpack [Экспериментальный]:
.rar 535,54Kb
30.05.18
2
.rar 0.2.1 535,54Kb 2 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. PerlAmutor 33 03.02.18 12:05 Сейчас в теме
невероятно быстрый язык для системного программирования

Стоит заметить, что фраза "невероятно быстрый" - если не ложь, то полу-правда. Судя по тестам, на каких-то алгоритмах он, действительно, по скорости превосходит реализации на C или C++, ровно как и наоборот, уступает им на других алгоритмах. Это еще один инструмент для решения задач, проблема лишь в сложности выбора, т.к. для этого потребуется писать сразу на нескольких языках, чтобы сделать замеры.
Если бы Rust уверенно обходил по всем критериям другие языки, то да, временно можно было бы и воспользоваться его преимуществом. Только вот такой резкий "аномальный отрыв" от соперников привлек бы повышенное внимание разработчиков компиляторов популярных языков. И в итоге мы бы смогли получить улучшенную оптимизацию компиляторов типа msvc или gcc. А Rust после такого ушел бы в небытие.

Спасибо за проект и публикацию. Есть над чем подумать.
Ziggurat; +1 Ответить
2. TIS_08 88 03.02.18 13:22 Сейчас в теме
(1)
Взял цитату с сайта самого языка.

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

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

Я его рассматриваю как еще один инструмент, а не панацею.
c1nil; Evil Beaver; +2 Ответить
4. AllexSoft 04.02.18 10:57 Сейчас в теме
интересный проект, вот бы реализацию работы с данными не из 1С, ну к примеру выгрузку таблиц БД, редактор таблиц, статистику.. а то приходится пользоваться несколькими утилитами, так как все они не умеют все сразу..
5. nixel 539 04.02.18 14:09 Сейчас в теме
(4) все эти операции можно провести на чистом SQL :)
7. webester 28 04.02.18 14:52 Сейчас в теме
(5)Что-то, где-то пропустил. А как работать с файловой базой на чистом SQL? И на каком именно SQL можно работать с файловой базой?
10. nixel 539 04.02.18 18:47 Сейчас в теме
(7) извиняюсь, запутался уже в статьях про оскрипт. Конечно же с файловой базой работать через SQL нельзя.
9. TIS_08 88 04.02.18 17:40 Сейчас в теме
(4)
Одна из целей, которую мы перед собой ставим - это консолидация усилий сообщества в создании единого набора утилит для работа с форматами 1С Предприятие.
6. МихаилМ 04.02.18 14:36 Сейчас в теме
как запаковать с помощью Вешей итилиты в файл конфигурации ?

вижу только опции распаковки. А в аннотации написано "Альтернативная реализация распаковщика/запаковщика"
8. TIS_08 88 04.02.18 17:29 Сейчас в теме
(6)
На данный момент никак.
Моя версия не такая функциональная как оригинал и он думаю не сразу стал таким.
Не добрался весь функционал перенести
Это был больше эксперимент и хотелось представить минимально рабочий прототип.

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

(4)
Для этого пилим https://github.com/dmpas/tool1cd
12. МихаилМ 05.02.18 09:26 Сейчас в теме
(8)
исправьте описание , что реализация анпэк в части распаковки.
user642047_ziborov.roman; +1 Ответить
11. Evil Beaver 5377 04.02.18 22:18 Сейчас в теме
(0) а у вас с Сергеем есть какой-то roadmap? Когда можно ждать релиза чего-нибудь из ваших грандиозных планов?

P.S. EvilBeaver кается, что не помогает с проектом
user642047_ziborov.roman; +1 Ответить
15. TIS_08 88 05.02.18 20:25 Сейчас в теме
(11)
это уже в специальном частике + задачи в проекте можно обсудить.
13. ph_1984 18 05.02.18 12:01 Сейчас в теме
Кстати, коллеги уже есть инструмент для распаковки/запаковки cf файлов написанный на RUST - https://github.com/khevse/conf_robber.
По сравнению с v8unpack имеет несколько преимуществ:
1. не падает на больших CF
2. быстро обрабатывает большие CF (производительность v8unpack сильно проседала из за операций с диском)
3. умеет работать с конфигурациями 8.2/8.3 (на v8unpack ловили баги с этим)

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

p.s. у автора так же есть аналогичный инструмент написанный на Go, но его не пробовали.
sulfur17; TIS_08; +2 Ответить
14. TIS_08 88 05.02.18 20:11 Сейчас в теме
(13)
Не опубликуй я свою поделку, может так и осталось тайной, что есть другой проект написанный на ржавчине =)
Evil Beaver; ph_1984; madonov; +3 Ответить
17. ph_1984 18 06.02.18 10:27 Сейчас в теме
(14) Всё так. Причем инструмент автора используется при подготовке обработки для решения https://infostart.ru/public/382398/ (в части создания обработки).
16. baton_pk 376 05.02.18 21:53 Сейчас в теме
(13)
Инструмент не был представлен автором сообществу

в том и проблема! Пока не крикнешь "у меня есть корявый костыль", никто свою нетленку не покажет.
artbear; Evil Beaver; ph_1984; madonov; TIS_08; +5 Ответить
18. Evil Beaver 5377 06.02.18 10:50 Сейчас в теме
(16) На Хабре был прикольный цикл статей, чувак сравнивал менталитет наших и омериканских программистов. У нас все стесняются и тихо пилят нетленки, у них принято кричать про каждый написанный говнобатник.
artbear; TIS_08; +2 Ответить
19. TIS_08 88 06.02.18 10:58 Сейчас в теме
22. herfis 270 07.02.18 10:53 Сейчас в теме
(18) Это из-за другого отличия менталитета наших и "омериканских" программистов - у нас принято закидывать какашками, а у них атмосфера намного более дружелюбная.
kote; Tavalik; Brawler; Adam12345678; Evil Beaver; blackhole321; TIS_08; +7 Ответить
20. sulfur17 07.02.18 09:42 Сейчас в теме
А чем он лучше/хуже других?
24. baton_pk 376 07.02.18 14:34 Сейчас в теме
(20) да ничем. Мы тут подумали, что как каждый студент должен написать свою ОС или язык программирования, так каждый одинэсник должен написать свой распаковщик на любимом языке. (это трололо, если что)
21. AlexWhite 188 07.02.18 10:49 Сейчас в теме
Эх, коллеги! Вашу бы энергию, да в мирных целях! :-)
Несколько непонятностей:
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 для экспериментов или напишете мне в личку, передам готовую?
23. baton_pk 376 07.02.18 14:32 Сейчас в теме
(21)
мой разобрал за 3 минуты 19 секунд

а он открыт? доступен простым смертным? иначе это фаллометрия в чистейшем виде получается.
25. tsukanov 67 07.02.18 14:44 Сейчас в теме
(23) Вот бы кто собрал все известные распаковщики и затестил с графиками.
Кто знает, может питон уделает и раст и плюсы )
26. baton_pk 376 07.02.18 18:01 Сейчас в теме
(25)
Кто знает, может питон уделает и раст и плюсы )

тут тонкий момент - всё зависит от среды тестирования. Можно загнать всю конфу в память - будет быстро, но если в тестовой среде мало оперативы, или предполагается одновременный запуск нескольких подобных выгрузок, или оператива хоть и есть, но тут же уходит в своп. v8unpack более-менее оптимизирован для работы в любых условиях, но он вероятнее всего проиграет на конфах до 100МБ любому распаковщику, который считывает конфу целиком в память. Однако его исходник открыт и его в крайнем случае можно оптимизировать под нужды конкретной рабочей среды.
27. tsukanov 67 07.02.18 18:23 Сейчас в теме
(26) Ну тестирование с графиками в разных условиях как раз и покажет плюсы и минусы. Это будет хоть какая-то объективная оценка. Такие технические оценки даже и не припомню на инфостарте. Хотя лично мне интересны только они.
29. AlexWhite 188 08.02.18 08:39 Сейчас в теме
(25)
Вот бы кто собрал все известные распаковщики и затестил с графиками.

Какая в этом польза?
baton_pk; +1 Ответить
31. tsukanov 67 08.02.18 09:24 Сейчас в теме
(29) Какая польза в объективном знании? Не знаю даже что ответить )
34. AlexWhite 188 08.02.18 11:07 Сейчас в теме
(31)
Какая польза в объективном знании?

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

CF сюда не влезет (и запрещено), желающим передам через личку.
39. tsukanov 67 08.02.18 11:43 Сейчас в теме
28. AlexWhite 188 08.02.18 08:34 Сейчас в теме
(23)
доступен простым смертным?

Я же доступен, значит желающие смогут через меня потестить exe. А код не open source, деньги плачу за разработку и поддержку.
30. baton_pk 376 08.02.18 08:53 Сейчас в теме
(28) https://github.com/dmpas/v8unpack/releases/tag/v.3.0.40
вот тут можно скачать и потестить в тех же условиях, где работала ваша распаковка.
33. AlexWhite 188 08.02.18 11:00 Сейчас в теме
(30)
скачать и потестить в тех же условиях

Скачал, потестил.
v8unpack -P 1cv8.cf SRC разобрал со скоростью меньше минуты, но лишено смысла его сравнивать с моим V8Parser. Прикладываю картинку, на которой слева - дерево исходников, полученное моим парсером, справа v8unpack. Разницу видите?
Еще, конечно, следовало бы после разборки хоть какую-то сводку выводить, иначе пришлось с секундомером сидеть :-)
Прикрепленные файлы:
35. baton_pk 376 08.02.18 11:10 Сейчас в теме
(33)
но лишено смысла его сравнивать с моим V8Parser

а зачем предлагали сравнить? :-D
36. AlexWhite 188 08.02.18 11:23 Сейчас в теме
(35)
а зачем предлагали сравнить?

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

А начал я с того, что вашу бы энергию, да в мирных целях! :-) Каждый ваяет свой велосипед вместо того, чтобы влиться в оплачиваемый проект.
37. TIS_08 88 08.02.18 11:35 Сейчас в теме
(36)
А дайте ссылку на описание Вашего проекта, а мы посмотрим.

Мой проект был изначально и был задуман как эксперимент, чтобы разобраться с форматом.
41. AlexWhite 188 08.02.18 13:03 Сейчас в теме
(37)
А дайте ссылку на описание Вашего проекта, а мы посмотрим.

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

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

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

Посмотрел v8unpack, но он тоже очень далек от моих уже удовлетворенных потребностей. За статью спасибо, в любом случае.
40. baton_pk 376 08.02.18 12:06 Сейчас в теме
(36) Вы в (21) предложили сравнить.

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

Ну и влиться в оплачиваемый проект, во-первых, никто не предлагал, во-вторых, нет интереса - в опенсурсе есть сообщество, там веселее.
42. AlexWhite 188 08.02.18 14:08 Сейчас в теме
(40)
Сваять свой велосипед - отличный способ разобраться в вопросе.

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

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

Да ладно!? Тут лет 5-10 назад обсуждался v8unpack, да и на других ресурсах были приглашения. Кто-то отреагировал, кому-то "гранаты не той системы". В общем, что теперь это обсуждать?
45. tsukanov 67 08.02.18 14:15 Сейчас в теме
(42) Мне вот реально интересно на чем тут можно заработать и на кой вообще сдался распаковщик, когда платформа умеет выгружать/загружать XML

Я могу понять опенсурс под конкретную локальную проблему (сам такое делал), но закрытый инструмент даром не нужен ))
46. AlexWhite 188 08.02.18 14:39 Сейчас в теме
(45)
интересно на чем тут можно заработать

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

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

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

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

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

1C:EDT - уже более-менее реальная альтернатива, но пока тоже, увы, применима только в экспериментально-исследовательских целях далека еще от промышленного использования.
47. tsukanov 67 08.02.18 15:11 Сейчас в теме
(46) Сборка разборка даже правильная ничего на дает без внешней поддержки (знающей структуру файлов). Если речь о версионировании, то хранилище никто не отменял.
51. AlexWhite 188 09.02.18 09:59 Сейчас в теме
(47)
Сборка разборка даже правильная ничего на дает без внешней поддержки

Про что речь?

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

Штатное имеешь в виду? Поработай с ним через интернет или свяжи с системой управления проектами/требованиями.
52. tsukanov 67 09.02.18 10:25 Сейчас в теме
(51)
Про что речь?

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

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

Вот именно так и работаю )
53. AlexWhite 188 09.02.18 17:34 Сейчас в теме
(52)
Про то чего нет ))

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

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

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

В общем, ожидал от opensource упаковщиков/распаковщиков бОльшего, но понял, что напрасно. Авторы удовлетворили свой интерес к структуре и на этом проекты остановились. Но это только начало пути если говорить о разборке/сборке, до мерянья скоростью еще очень далеко :-)
54. tsukanov 67 09.02.18 18:02 Сейчас в теме
(53) Не надо фантазировать. Через интернет я работаю удаленно без RDP, шлюзов и прочего. И работаю так ежедневно.

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

Мной был написан велосипед за вечер (нагло содран с решения на lua): https://github.com/tsukanov-as/cf
Работает как часы с того вечера 24/7 в одной конторе (для диффа обработок в корпоративном Gogs).
Оно наверно тормозное, да и ошибка там одна есть (порядок вывода модулей меняется так как я в map вместо массива пихаю их), но вот удивительно - оно решает свою задачу на все 100 при смешных затратах на разработку.
А задача конкретная: видеть гитовый дифф модулей бинарных обработок. Все.
На текущем месте работы мне это уже не нужно, так как гит не используется вообще. Хранилище (через интернет, да) тут гораздо удобнее.

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

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

Нужен механизм понимающий структуру файлов. И подозреваю что у вас его таки нет,
ибо хорошо представляю о каких объемах речь: https://github.com/Lead-Bullets/Lead-Radar

Сами по себе извлеченные файлы никакой ценности не представляют.
56. AlexWhite 188 09.02.18 18:43 Сейчас в теме
(54) мой парсер различает структуры файлов - тексты модулей, формы, таблицы, картинки, xml и прочие. Основная его заслуга - при помощи CVS и RMS связывать изменения (код, структура и т.д.) с требованиями.

От open source распаковщиков ожидал аналог GComp.exe только для v8, но подобного не встретил ни разу.
57. tsukanov 67 09.02.18 18:48 Сейчас в теме
(56) И где больше сделано, у вас или по ссылке? )
59. AlexWhite 188 09.02.18 19:22 Сейчас в теме
(57) по какой ссылке?
У меня конечно больше, как минимум, мнемоничная структура папок и файлов и различает типы. В промышленной эксплуатации уже более 10 лет.
60. tsukanov 67 09.02.18 19:48 Сейчас в теме
(59) Кто бы сомневался что у вас больше )
55. minimajack 52 09.02.18 18:26 Сейчас в теме
(53)
В общем, ожидал от opensource упаковщиков/распаковщиков бОльшего, но понял, что напрасно

Что кроме структуры может ваш распаковщик?
58. AlexWhite 188 09.02.18 19:13 Сейчас в теме
(55) помогает управлять распределенными программными проектами на платформе 1С v8, как один из элементов системы управления требованиями.
64. buganov 51 08.05.18 05:59 Сейчас в теме
(58)
помогает управлять распределенными программными проектами на платформе 1С v8, как один из элементов системы управления требованиями.

Как помогает управлять проектами? В статье не нашел ничего про это. И как получение структуры конфигурации позволяет при управлении требованиями?
66. AlexWhite 188 13.06.18 15:46 Сейчас в теме
(64)
Как помогает управлять проектами?

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

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

В какой статье искали?
49. baton_pk 376 08.02.18 16:04 Сейчас в теме
(42)
5-10 назад обсуждался v8unpack

а, ну я тогда не в теме был. Но я смотрю, с тех пор мало что изменилось. В свободном доступе почти ничего, а только ходят всякие и пальцы гнут, что у них есть дорого-богато.
44. AlexWhite 188 08.02.18 14:13 Сейчас в теме
(40)
(36) Вы в (21) предложили сравнить.

согласен. Но сам предложил, сам сравнил. Больше не буду :-)
38. tsukanov 67 08.02.18 11:41 Сейчас в теме
(33)
иначе пришлось с секундомером сидеть


А сделать замер внешними средствами никак? ))
43. AlexWhite 188 08.02.18 14:10 Сейчас в теме
(38)
А сделать замер внешними средствами никак? ))

Я свой интерес удовлетворил, хватило секундомера :-)
48. minimajack 52 08.02.18 15:51 Сейчас в теме
(33) не видно дерева - просто видно что разбросано по типам метаданных
покажите что внутри =)
Прикрепленные файлы:
50. AlexWhite 188 09.02.18 09:54 Сейчас в теме
(48)
не видно дерева

Вот, например, конечная ветка для одного объекта
CFSRC\Отчеты\РегламентированныйОтчетРасчетПоСтраховымВзносам­\Форма\ФормаОтчета2017Кв1
По остальным аналогично.
Прикрепленные файлы:
32. tsukanov 67 08.02.18 09:37 Сейчас в теме
(28) Выложите тут ваш cf. Народ затестит свои велосипеды при желании
61. TIS_08 88 09.02.18 22:30 Сейчас в теме
Ыыыы
Написал статью про программирование на Rust, взяв за основу реальный проект, а все превратилось в измерение у кого круче функционал. =)
tsukanov; +1 Ответить
62. МихаилМ 10.02.18 16:44 Сейчас в теме
(61) напишите статью про программирование на 1с на форуме про Rust. и поймете , что задачу сформулировали ошибочно.
63. AlexWhite 188 12.02.18 12:46 Сейчас в теме
(61)
а все превратилось в измерение у кого круче функционал.

Вы, ведь, сами начали с "невероятно быстрый" :-)
Оставьте свое сообщение