Pull to refresh

Comments 12

C-подобный язык выражений это хорошо.


Есть ссылка на С++/С# рантайм для Unity/UE?
Есть реализации рантайма/парсера CEL для других языков?

Не то, что я против google или автора, кому то зайдет, а кому нет, имеет смысл посмотреть на эти вопросы

1) Хм... а чем принципиально оно отличается от SPeL Spring ? Groovy Shell ? JSR 223 (Scripting languages for java)

Пока принципиального преимущества не увидел

2) Что там с типами данных, и рефлексией и циклами, есть ли compile time проверки по типам, до момента выполнения или о ошибке или зависании узнаем только run time / unit test ?

Большинство скриптовых языков ломаются на этапе их использования, с одной стороны они должны в гибкость... Но обычно о том, что пользователь/админ/etc... забыл переменную или указал не существующую функцию - узнаем уже постфактум

Ну и потенциально, если те же дыры в безопасности, если специально не готовили ScriptEngine

Третье, типичная задача - это редактирование и подсветка синтаксиса, а так же всякие подсказки в редакторе кода

Если for fun - то, ок

А если prod - то, я бы на эти проблемы глянул.

Свой нишевый интерпретатор пишется обычно за месяц в одного, а то и быстрее

CEL vs SPeL:

  • CEL намеренно более ограничен и "безопасен" - нет циклов, рекурсии, побочных эффектов

  • CEL оптимизирован для валидации и вычисления условий, тогда как SPeL более общего назначения

  • CEL имеет строгую типизацию, SPeL - более динамичен

  • SPeL тесно интегрирован со Spring и Java-экосистемой, CEL - язык-независим

CEL vs Groovy Shell:

  • Groovy - полноценный язык программирования с циклами, классами и т.д.

  • CEL - узкоспециализированный язык для выражений

  • Groovy менее безопасен для исполнения пользовательского кода

  • Groovy сложнее оптимизировать из-за динамической природы

CEL vs JSR 223:

  • JSR 223 - это API для выполнения скриптов, а не язык

  • Через JSR 223 можно выполнять полноценные языки (Python, JavaScript и т.д.)

  • CEL предоставляет гарантии безопасности и производительности

Типы в CEL:

  • Строгая типизация

  • Базовые типы: bool, int, uint, double, string

  • Составные типы: lists, maps

  • Null-safety встроена в язык

  • Поддержка пользовательских типов через интеграцию с хост-языком

Чучуть прояснилось,

Дополню к сказанному GroovShell - это класс который позволяет запускать groovy внутрии JVM, и он может гибко настриваться, так, что ограничить вплоть до конструкций языка, убрав циклы и ветвления или, что не нравится... - т.е. настраивается часть валидации AST перед ее компиляцией - т.е. можно получить (узкоспециализированный язык для выражений)

На счет менее безопасен, в этом случае надо бы сравнивать... тут как-то громко, но не стоит, можно вспомнить про gradle, jenkins - оба используют groovy

Хм... на счет гарантий производительности в контексте JVM - вообще... как понимаю CEL не может быть быстрее JVM, Groovy, Java, Kotlin..., Если только CEL напрямую ходит в asm, минуя JVM... что, как-то сомневаюсь

Строгая типизация больше всего интересует, под пользовательским типом надо бы глянуть что подразумевается,

Если глянуть сюда https://github.com/google/cel-spec и https://github.com/google/cel-spec/blob/master/doc/langdef.md

то видно следующее

1) null safetty +- есть, но не явно https://github.com/google/cel-spec/blob/master/doc/langdef.md#booleans-and-null

2) Про строгую типизацию тут, такое сказано https://github.com/google/cel-spec/blob/master/doc/langdef.md#gradual-type-checking

что у них есть модель и для static only и static + dynamic type checking

3) Про синтаксис - тут https://github.com/google/cel-spec вот четко сказано

CEL evaluates in linear time, is mutation free, and not Turing-complete.

А если глянуть на синтаксис, сразу становится понятно https://github.com/google/cel-spec/blob/master/doc/langdef.md#syntax

Что это это язык выражений и чем он ограничен... да, все так, как и сказано в статье, и противоречий нет

Отличное введение в Common Expression Language (CEL)! Особенно понравился акцент на безопасности и простоте использования. Примеры, приведенные в статье, четко иллюстрируют, как CEL может быть применен для решения реальных задач, таких как валидация форм и управление скидками. Было бы полезно добавить больше примеров, касающихся интеграции CEL с популярными фреймворками и системами, чтобы читатели могли видеть, как этот язык выражений может работать в реальных приложениях. Спасибо за информативный материал!

Спасибо! Насчет примеров - может напишу отдельную статью, эту хотел сделать как вводную

Вместо того чтобы жёстко прописывать эти правила в коде приложения, вы можете...

жестко прописать их в стороннем сервисе, который без пяти минут заблокирован в вашей стране, и выдумывать сложные схемы интеграции этих правил в ваше приложение (расчет суммы корзины, налогообложение, инвойсы, учет, отчеты итп)

так-то можно хоть на холодильнике написать, вызов не в этом

причем тут сторонний сервис и блокировка? вы можете у себя локально запускать и никакие блокировки вам не страшны. Ощущение, что даже не прочли статью толком

Это не туториал.

Где примеры интеграции в go, c++ или java?

Чем это лучше прописывания тех же условий в коде основного языка?

Sign up to leave a comment.

Articles