Тёмный

Сверхбыстрый код 1С. Анонс функциональности 1Script.Native с JIT на борту 

Веселый1С
Подписаться 7 тыс.
Просмотров 8 тыс.
50% 1

В 1Script 2.0 появится новый компилятор, позволяющий превращать код 1С в статически типизированный байткод .NET с поддержкой JIT-трансляции в железный машинный код.
В этом видео я покажу его возможности на примере уже знакомого вам Решета Эратосфена. Это пушка, ребята!

Опубликовано:

 

28 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 68   
@shootnicktm9445
@shootnicktm9445 3 года назад
компоненты для 1с на 1с это огонь =)
@dmitryk.4286
@dmitryk.4286 3 года назад
В общем недалек тот час, когда 1Script будет обязательным в стеке программиста 1С, круто, что сказать
@maksymartomenko7633
@maksymartomenko7633 3 года назад
Очень круто! Как бы там ни было, но вк на 1С существенно сократят себестоимость разработки самих вк
@serj0peleng
@serj0peleng 3 года назад
Круто!!! Поздравляю с очередным успехом! Конечно большие алгоритмы таким путем не слишком удобно будет делать, но чаще всего это и не потребуется, только очень прожорливые куски можно будет оптимизировать... Мне кажется, что вместо специального объекта можно было бы сделать специального вида функцию... тогда не пришлось бы код строкой задавать, что было бы гораздо удобнее, особенно в части превращения обычной функции в компилируемую в случае необходимости... а в целом здорово! Скоро Односкрипт сделает мою Перфоленту совсем не нужной :), хотя мне кажется они подружатся...
@mevgen8
@mevgen8 3 года назад
Надо б такую полезную фичу в иссусы запилить
@asoneas
@asoneas 2 года назад
В браузере есть WebAssembly (WASM) , а в 1С предлагаете 1СAssembly? Жалко что само 1С ушло в JVM и совместимости подходов нельзя достичь.
@ПавелОдинцов-х3л
@ПавелОдинцов-х3л 2 года назад
WebAssembly сила, но почему-то пока никак не задействовано для серверной стороны. Впрочем JS тоже долго это обходил - а потом пришёл Node.js. А так да - для WEB'а уже однозначно надо 1С в WASM компилить
@ПавелОдинцов-х3л
@ПавелОдинцов-х3л 2 года назад
А Перфолента ещё жива? - последняя новость, как и последний релиз пробной версии Перфоленты, на сайте вендора от 2021 года! А то, вот хотел на Перфоленте фреймворк для инфраструктуры 1С написать - но застой в обновлении проекта меня отпугнул - теперь смотрю в строну C# Roslyn с апдейтом на русские ключевые слова (не ищите - такого нет - это пока фантазия)
@serj0peleng
@serj0peleng 2 года назад
@@ПавелОдинцов-х3л жива! но сначала меня подкосил ковид, а потом войнушка... когда за окном бахает, плохо думается... проверено :) а серьёзно, планы похерены больше, чем на год, но новый релиз скоро выйдет...
@korableg
@korableg 3 года назад
Браво! ждем строгую типизацию от 1С) надеюсь их это видео замотивирует.
@aleksandr_sp7721
@aleksandr_sp7721 3 года назад
Через лет 20 может будет)
@medvejonokolympic5412
@medvejonokolympic5412 3 года назад
1С - это уже лет как 18 - 20 тормозное минестерство.
@invertriver
@invertriver 2 года назад
Здорово, спасибо что ты это делаешь!)
@ПавелОдинцов-х3л
@ПавелОдинцов-х3л 2 года назад
Круто! Но ожидал от 2-ой версии всё-таки хотя бы поддержки асинхронного программирования, а лучше ещё и полноценного многопоточного программирования и Тасков .NET. А так же лямбда функций и LINQ-подобных запросов к БД (хотя бы через Entity Framework) и к объектной модели. Не говоря уже о пользовательском ООП и Кортежах. Но это я, наверное, слишком размечтался...
@Alexandr_Pu
@Alexandr_Pu 3 года назад
Очень круто! Скинул видео в несколько групп по франчайзи - разработчики заинтересовались.
@kuzja_87
@kuzja_87 3 года назад
Интересно сравнить что будет быстрее. На СУБД выполнить алгоритм или через ваш пример?
@ktoeto8094
@ktoeto8094 3 года назад
Ещё более быстрый! Куда уже)
@МихаилМаксимов-ж7т
какая область применения для 1с?
@shootnicktm9445
@shootnicktm9445 3 года назад
как ты пишешь в интернет без интернета?)
@8tshk8
@8tshk8 3 года назад
@@maxumka548 особенно внедрение маркировки (сарказм) Да. Большая часть изменений законодательства оперативно отражается в учетных системах. Но я бы не сказал что бухгалтерия. Правильней было бы сказать учет.
@Tavalik
@Tavalik 3 года назад
Вы, конечно, большие молодцы, но боюсь представить, что вы такого на ОСкрипте делаете, что вам так скорость важна? Или это все ради спортивного интереса?
@Веселый1С
@Веселый1С 3 года назад
Академический интерес, и более гладкое встраивание скриптов на 1С в процессы .net
@ДГоу
@ДГоу 3 года назад
Молодцы ребята! Так держать!
@uppinua
@uppinua 3 года назад
Очередное изобретение велосипеда от 1С. Что мешает на С++ рисовать dll и выносить логику расчетов туда? Обычно люди делающие сложные расчета (расчет окон как пример) именно так и делает
@Веселый1С
@Веселый1С 3 года назад
Это не "от 1С", в 1С такого нет
@uppinua
@uppinua 3 года назад
@@Веселый1С уже увидел, что это такое . Смутило в названии 1S. Но в любом случае прослойка для ускорения нигде не пригодится. dll рисуется на коленке быстро и после компиляции будет быстрее в сложных расчетах.
@Веселый1С
@Веселый1С 3 года назад
C++ и "на коленке" в одном предложении - быстрый путь разломать кластер. Плюсы - не очень удобный язык для написания вообще чего-либо, а уж ВК для 1с его тонной ограничений и скудным апи - и подавно.
@ilm1967
@ilm1967 3 года назад
Непонятно, но интересно.
@ЮрийКорнилов-я6д
@ЮрийКорнилов-я6д 2 года назад
У меня только один вопрос, зачем это делать? Зачем вообще что то делать на 1с? Чтобы потом придумывать такие алгоритмы? Здесь много умных людей. Поясните пожалуйста..
@Веселый1С
@Веселый1С 2 года назад
Because it's fucking awesome!
@Дмитрий-ц7д5ц
@Дмитрий-ц7д5ц 3 года назад
Вы там живы?
@yuriybylinkin
@yuriybylinkin 3 года назад
Круто!
@жек-петрушевич
@жек-петрушевич 3 года назад
не совсем понятно зачем писать на 1с для дотнета, если уж есть большая потребность в оптимизации скорости то возможно логичней разработать отдельный сервис на дотнете.
@Веселый1С
@Веселый1С 3 года назад
Чтобы реализовать отдельный сервис на дотнете, нужно знать какой-либо дотнет-язык
@жек-петрушевич
@жек-петрушевич 3 года назад
@@Веселый1С это безусловно так, но ведь и язык 1с покроет только базовые возможности дотнета. получается от 1с только текст программы.
@Веселый1С
@Веселый1С 3 года назад
Для производительной числодробилки что-то кроме языка редко нужно. Для сервиса (если мы говорим про веб-сервис) нужен веб-сервер и mvc-фрэймворк. А это в оскрипте тоже есть в виде OneScript.Web. Так что... Не такая уж и безумная идея :)
@жек-петрушевич
@жек-петрушевич 3 года назад
@@Веселый1С идея как раз интересная, продолжайте исследования, я уверен это будет полезно!
@axe-capital
@axe-capital 3 года назад
Столько дурачков пролайколо... ни чо что основная брешь 1С это СУБД????
@ТемноеБудущее-ч7ц
@ТемноеБудущее-ч7ц 3 года назад
И чё?
@8tshk8
@8tshk8 3 года назад
Это которая СУБД?
@herfishq
@herfishq 3 года назад
Такой умный, но даже не понял, что речь вообще не про платформу 1с. "Не читал, но осуждаю".
@ZloGleb
@ZloGleb Год назад
Лично мне абсолютно не понятно: зачем нужна строка "Действие = Фрагмент.Скомпилировать". Мне гораздо привычнее было бы работь с новым типом СкомпилированныйФрагмент() как с типом Запрос(): Фрагмент.УстановитьПараметр("Н", Н); Фрагмент.Выполнить();. Для чего тип параметра указывать вручную, если этот тип статичен и 1Script может сам определить тип через ТипЗнч() непосредственно перед Фрагмент.Выполнить()?
@Веселый1С
@Веселый1С Год назад
В момент вызова "Скомпилировать" типы должны быть уже известны, т.к. код, который будет внутри метода формируется с учетом этих типов. Можете привести пример кода, как бы вы хотели видеть API класса СкомпилированныйФрагмент? Пример, как вы его бы применяли в вашем случае?
@ZloGleb
@ZloGleb Год назад
@@Веселый1С Мое мнение, что нужно стремиться к единственному вызову для класса "СкомпилированныйФрагмент" функции "Фрагмент.Выполнить(Алгоритм, ПараметрыАлгоритма )". Лямбда функций пока не завезли в 1С, поэтому 2й параметр сделать исключительно с типом "[Фиксированная]Структура", что обеспечит уникальность и правильность наименований параметров в этой структуре. Пока этого нет, я бы сделал такую обертку в отдельном os файле: // Возврат результата действия алгоритма через объект СкомпилированныйФрагмент(). // // Параметры: // Алгоритм - Строка - Текст выполняемого алгоритма. // Параметры - Массив, Структура, Соответствтвие - входящие параметры алгоритма. // Если тип = массив, то элементами должны быть структурами или соответствиями. // // Возвращаемое значение: // Произвольное - Результат действия алгоритма. // Функция РезультатДействияАлгоритма(Знач Алгоритм, Знач ПараметрыАлгоритма = Неопределено) РезультатАлгоритма = Неопределено; Если НЕ ЗначениеЗаполнено(Алгоритм) Тогда Возврат РезультатАлгоритма; КонецЕсли; Фрагмент = Новый СкомпилированныйФрагмент(); Фрагмент.ФрагментКода = Алгоритм; НаборПараметров = Новый Массив; Если ЗначениеЗаполнено(ПараметрыАлгоритма) Тогда Если ТипЗнч(ПараметрыАлгоритма) = Тип("Массив") Тогда НаборПараметров = ПараметрыАлгоритма; Иначе НаборПараметров.Добавить(ПараметрыАлгоритма); КонецЕсли; КонецЕсли; СтрокаЗначенияПараметров = ""; СтрокаПараметров = ""; Индекс = 0; Для каждого ТекПараметрАлгоритма Из НаборПараметров Цикл ТипЗнчТекПараметрАлгоритма = ТипЗнч(ТекПараметрАлгоритма); Если ТипЗнчТекПараметрАлгоритма = Тип("Структура") ИЛИ ТипЗнчТекПараметрАлгоритма = Тип("Соответствие") ИЛИ ТипЗнчТекПараметрАлгоритма = Тип("ФиксированнаяСтруктура") ИЛИ ТипЗнчТекПараметрАлгоритма = Тип("ФиксированноеСоответствие") Тогда Для каждого ТекПараметрАлгоритма Из ПараметрыАлгоритма Цикл НаименованиеПараметра = Строка(ТекПараметрАлгоритма.Ключ); Если Фрагмент.Параметры.Свойство(НаименованиеПараметра) Тогда ВызватьИсключение СтрШаблон(нСтр("ru='Задублирован по имени параметр ""%1"" входящего параметра ""ПараметрыАлгоритма"".'") , НаименованиеПараметра ); Иначе Фрагмент.УстановитьЗначениеПараметра(НаименованиеПараметра, ТипЗнч(ТекПараметрАлгоритма.Значение)); СтрокаПараметров = СтрокаПараметров + НаименованиеПараметра + ", "; СтрокаЗначенияПараметров = НаименованиеПараметра + " = НаборПараметров[" + Строка(Индекс) + "].Значение; "; Индекс = Индекс + 1; КонецЕсли; КонецЦикла; // Удаление последних символов ", ". СтрокаПараметров = Лев(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 2); Иначе ВызватьИсключение СтрШаблон(нСтр("ru='Не допустимый тип ""%1"" входящего параметра ""ПараметрыАлгоритма"".'") , Строка(ТипЗнчТекПараметрАлгоритма)); КонецЕсли; КонецЦикла; Попытка // Типы параметров известны, так как были вычислены через ТипЗнч. Действие = Фрагмент.Скомпилировать(); Исключение Сообщить(нСтр("ru='Ошибка компиляции:'") + " " + ОписаниеОшибки(), СтатусСообщения.Важное); Действие = Неопределено; КонецПопытки; Если НЕ Действие = Неопределено Тогда // Восстановление значений входящих параметров в локальном контексте. Выполнить(СтрокаЗначенияПараметров); Попытка РезультатАлгоритма = Вычислить("Действие.Выполнить(" + СтрокаПараметров +");"); Исключение Сообщить(нСтр("ru='Ошибка выполнения действия:'") + " " + ОписаниеОшибки(), СтатусСообщения.Важное); КонецПопытки; КонецЕсли; Возврат РезультатАлгоритма; КонецФункции
@ИванБармин-ю1т
@ИванБармин-ю1т Год назад
осталось для ещё большего ускорения и упрощения работы заменить java на c# под капотом, чтобы не нужно было устанавливать этот мусор
@ИванБармин-ю1т
@ИванБармин-ю1т Год назад
@Андрей Овсянкин java имеет целую кучу производителей которые добавляют туда свой кривокод, дотнет разрабатывает конкретно микромягкие и свои языки достойно сопровождает
@ИванБармин-ю1т
@ИванБармин-ю1т Год назад
а вообще можно просто переписать опен сорсный компилятор roslin конкретно под onescript и вообще убрать посредников ввиде других языков
@Веселый1С
@Веселый1С Год назад
Кажется, это религия
@Asakra-irk
@Asakra-irk 3 года назад
Хех. Надо добавить директиву в начале файла и тогда все что внутри файла должно исполнятся, как внутри класса скомпилированный фрагмент. Программист естественно должен учитывать типизацию.
@pbabincev
@pbabincev 3 года назад
Красавчики!
@ПавелОдинцов-х3л
@ПавелОдинцов-х3л 2 года назад
Круто. Но, всё-таки, самое больше лукавство - это оставленное вне учета затрат - время на накладные расходы компиляции - наверное имело смысл вывести в отдельную колонку такие тесты. Слукавили и на тесте со 100 элементами - частенько как раз тут бывают самые неожиданные отличия (и именно тут 1Script уже в 5 раз проигрывал 1С Предприятие 8) - а это не какие-то редкие случаи - а вполне обыденные. Оставлена за кадром и директива #native (кстати у неё будет русский синоним?) для авто компиляции всего модуля (секция инициализации компилируется? хотелось бы отдельные и аннотации для функций) - тут бы пояснения по режиму работы - в какой момент идёт компиляция модуля - при инициализации (хотел сказать при статической компиляции скрипта - но тут же понял - что это всё-таки скрипт) или при первом (каждом) обращении к его содержимому. Странно, что проблему смены типа значения переменной не решили (по крайней мере на первой стадии) просто через приведение к единому типу object (или структуре со значением типа object и описанием типа; да и вообще можно было бы задействовать уже имеющийся тип для хранения значений в 1Script для стековой машины). И что там будет происходить, если в таком скомпилированном коде будут вызываться внешние пользовательские функции (не из модуля native) - они-то не скомпилированы в машинный код?
@ПавелОдинцов-х3л
@ПавелОдинцов-х3л 2 года назад
Тогда про #naitive стоит ещё видео записать, наверное позже (как минимум после финального релиза), с отдельным тестом. Ну а время, всё-таки компиляции никак не учтено замер времени начинается внутри компилируемого блока в после начала вызова и завершается перед окончанием вызова так же внутри текстового блока. Получается не совсем чистый замер. Понятно, что компиляцию можно выполнить один раз - а потом делать многократные вызовы - но именно в таком примере как в приведённом тест (и вероятно наиболее распространённом в случаях без #native директивы) компиляция и вызов будут идти всегда вместе. 1Script медленнее 1С в 5 раз у Вас в видео при 100 элементах массива без native-компиляции (0.005 против 0.001 у 1С, может, конечно погрешность измерений, тест то один раз запущен - а не 1000 раз с вычислением средне-статистического - лучше взять общее суммарное чистое время и поделить на количество запусков), с native - этот случай Вы вообще не замерили; неплохо было бы ещё рассмотреть 1000 или 10000 элементов - для снижения погрешности замера быстро завершающихся процессов. Ну и всё-таки нужны отдельные тесты с выполнением циклических вызовов функций - как находящихся внутри того же скомпилированного native блока (если это поддерживается), так внутри #native модуля, так и вне native-компиляции (если это всё поддерживается). И как реагирует native-блок на обращение внутри к объекту "СкомпилированныйФрагмент" (в т.ч. переданный из внешнего блока в качестве переменной)? Если позволяет - то внутри тоже можно было бы вызвать функцию из внешнего скомпилированного native-блока. Хотелось бы знать и во что обходится сам чистый вызов "Действие.Выполнить()"?
@0ut10w
@0ut10w 2 года назад
А можно будет Фрагмент.Скомпилировать() положить в Макет как двоичные данные, а затем загрузить их и Выполнить(Н, Массив); ? :-)
@Веселый1С
@Веселый1С 2 года назад
Сейчас нет, байткод не сериализуется. Потенциально можно будет прямо в dll сохранять, но это тоже не реализовано
@PupaVaskin
@PupaVaskin 3 года назад
Таки осталось не совсем понятно, код компилирутся прямо в машинный код или в код .нета, а там уже как пойдет?
@Веселый1С
@Веселый1С 3 года назад
Код компилируется в лямбда-функции дотнета. А они по сути - и есть код дотнета. А там - как и любой другой .net код - как пойдет )
@bluxer4225
@bluxer4225 3 года назад
Если не махать руками, чудо не произойдёт.
@channel30495
@channel30495 3 года назад
Молодцы парни! Не бросайте это дело
@asoneas
@asoneas 3 года назад
1C OneScript (Х)? .Net на машине требуется?
@asoneas
@asoneas 2 года назад
@Андрей Овсянкин Спасибо большое. В 1С Ваш проект как глоток свежего воздуха, хотя сам и дотнетчик ;)
Далее
КАК БОМЖУ ЗАРАБОТАТЬ НА ТАЧКУ
1:36:32
FATAL CHASE 😳 😳
00:19
Просмотров 709 тыс.
Замер производительности в 1С
10:25
КАК БОМЖУ ЗАРАБОТАТЬ НА ТАЧКУ
1:36:32