Microsoft представила язык программирования Power Fx



    2 марта 2021 года Microsoft официально представила low-code язык программирования Power Fx, который основан на синтаксисе функций Excel.

    Язык Power Fx предназначен для настройки процессов в Power Platform — платформе Microsoft для создания бизнес-решений и автоматизации рутинных задач. Это универсальный, декларативный и функциональный язык программирования со строгими типами.

    Microsoft планирует открыть исходный код Power Fx под лицензией MIT. Cейчас на Github уже есть этот проект. В репозитории Power-Fx выложена подробная документация на язык, включая типы данных, операторы и идентификаторы, таблицы, переменные и грамматические правила. Также там есть описание возможностей применения Power Fx, например в приложениях на основе холста в Power Apps.

    Девиз языка — «Вы можете создать приложение так же легко, как электронную таблицу». Фактически, суть применения low-code как раз состоит в том, чтобы снизить порог входа до уровня продвинутого пользователя Excel.

    Power Fx обеспечивает полный спектр разработки от уровня «no code» для тех пользователей, кто никогда раньше не программировал, до «pro code» для опытных разработчиков, без дополнительного обучения или попыток перебраться через стену знаний между ними, позволяя командам с различными знаниями продуктивно сотрудничать и экономить время и деньги.

    Power Fx связывает объекты вместе декларативными формулами в виде электронных таблиц. Например, можно представить свойство Visible элемента управления пользовательского интерфейса как ячейку электронной таблицы со связанной формулой, которая вычисляет ее значение на основе свойств другого элемента управления. Логика формулы пересчитывается автоматически, аналогично тому, как это происходит в электронной таблице, что влияет на видимость элемента управления.

    Кроме того, Power Fx при необходимости предлагает императивную логику. В электронных таблицах обычно нет кнопок, которые могут отправлять изменения в базу данных, но приложения часто имеют. Один и тот же язык выражений используется как для декларативной, так и для императивной логики.

    Power Fx описывает бизнес-логику в кратких, но действенных формулах. Большую часть логики языка можно свести к однострочным формулам с достаточной выразительностью и контролем для более сложных задач. Цель языка состоит в том, чтобы свести к минимуму количество концепций, которые необходимо понять его программисту, в идеале — не больше, чем пользователь Excel уже знал бы.


    Так выглядит в преставлении Excel формула из Stack Overflow, которая ищет строку в обратном порядке.


    А вот как Power Fx работает с той же формулой, в которой ссылки на ячейки заменены ссылками на свойства элементов управления. При изменении значения элемента управления вводными данными элемент управления Label автоматически пересчитывает формулу и отображает новое значение. Здесь нет обработчиков событий OnChange, которые были бы распространены в других языках.

    Microsoft пояснила, что активно работает над интеграцией Power Fx в Microsoft Power Virtual Agents, Microsoft Dataverse и Power Apps на основе моделей.

    Microsoft уточнила, что Power Fx будет дополнять языки M и DAX в Power BI, его запуск никак не повлияет на них. Все эти три языка компания продолжит поддерживать. Фактически, M и DAX фокусируются на чтении, формировании, объединении и суммировании больших объемов данных, в то время как Power Fx фокусируется на чтении и записи небольших наборов реляционных данных.

    Microsoft будет улучшать Power Fx и приглашает присоединиться к этому проекту всех разработчиков и пользователей. В ближайших планах компании добавить в него именованные формулы, увеличить количество пользовательских функций и функций Excel, расширить типы данных, усовершенствовать обработчик ошибок, включить поддержку динамических схем и декларативных альтернатив App.OnStart.

    В конце января 2021 года Microsoft открыла исходный код Extensible Storage Engine, реализациb API JET Blue. Проект доступен на GitHub под лицензией MIT.

    В мае прошлого года Microsoft открыла исходный код интерпретатора языка программирования GW-BASIC.

    В сентябре прошлого года Microsoft опубликовала исходные коды, а также документацию и примеры, автоматизированного инструмента для разработчиков — Project OneFuzz. Это фаззинг решение в настоящее время уже заменило сервис Microsoft Security Risk Detection Service.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 53

      +8
      Девиз языка — «Вы можете создать приложение так же легко, как электронную таблицу». Фактически, суть применения low-code как раз состоит в том, чтобы снизить порог входа до уровня продвинутого пользователя Excel.

      Вот только чем ниже порог входа — тем более плохи «приложения», написанные такими «программистами».
        +51
        А чё сразу JavaScript, то?
          +26
          ПХП-шники выдохнули…
            +5

            В javascript нынче порог входа как на джаве или с#.(куча фреймворков, подходов, инструментов)

              +2

              Ничто не мешает тихонечко говнокодить на готовой конфигурации

                +1
                Текст из блокнота до сих пор можно запустить без промежуточных звеньев.
          +23
          дайте дураку инструмент, которым сможет пользоваться даже дурак, и только дурак им и будет пользоваться (с)
            0
            «Мы все дураки. Это прибавляет жизни интереса.» © Доктор Хаус
              0
              Но также было сказано «все покупали журналы для дураков, при этом уверяя, что они то не дураки, просто интересно, что там для них пишут»
              +5

              Язык в котором нет циклов… Просто прелесть.

                +1

                Видимо сделали хвостовую рекурсию, как в Лиспе.

                  +7

                  В Haskell нет циклов

                    +5
                    Haskell, так скажем, изначально заявлен как pure functional. И отнюдь не low-code. Хотя я бы с удовольствием взглянул на пример того, как в нем можно зафигачить UI, организовать работу с БД или с сетью (например, 3 повторных попытки отправки GET запроса в случае неудачи).

                    В C# я тоже могу завернуть что-то вроде
                    Enumerable.Range(0,10).ForEach(i => { });

                    вместо
                    for(i = 0; i < 10; i++)

                    но от такого извращения никому же не легче, кроме ортодоксальных функциональщиков (без обид).

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

                    Так что, как платформа для разработки приложений в 1 экран с 2 кнопками, на 10 пользователей — да норм. Как энтерпрайз инструмент — чисто для PoC. Чтобы потом концепт переписать на чем-то нормальном вроде Xamarin или Flutter.

                    У меня просто есть опыт разработки этих канвасов, и скажу я вам, ощущаешь себя в 60х годах прошлого века, как-будто программируешь на бейсике. Только в котором даже GOTO нет. Все в этом языке просто принуждает писать костыли и говнокод. В общем, для меня лично — это мрак. Но кому-то может и понравится.
                      +2
                      Я пишу на с# в первом стиле, и считаю, что так лучше.
                      1. В цикле можно ошибится с границами, очень легко, особенно если меняешь чужой код
                      2. LINQ распараллеливается одной строкой
                      3. Можно продолжить чейнинг другими операциями, и результат вернуть, не мутируя переменные или коллекции внутри цикла, что опять может привести к ошибкам.
                        +3
                        Это ваше право, но в реальности это не всегда возможно.
                        Первое что приходит в голову, как, к примеру, выйти из такого цикла на 4 итерации, не проходя по оставшимся?
                        Я уже молчу про while и do..until.

                          +4

                          В java есть stream api, вроде первого примера выше, который используется в основном для обработки коллекций. Такой код удобно читать в одном направлении, в то время как в коде с циклом возникает вопрос: нет ли break где-то в середине, или изменения условия, влияющего на продолжение цикла? Если цикл по индексу, то также ожидаешь найти зависимость результата от индекса.
                          Так что считаю рациональным использовать функциональный подход для простых условий, и использовать цикл там где условия или группировки тяжело выразить в линейном коде.

                            +1
                            Просто работая часто с LINQ постепенно начинаешь немного иначе оперировать с данными. В каком-то смысле он напоминает SQL (не зря же запросы в EF мапятся через LINQ). И в итоге получается, что всегда работаешь с некоторым набором данных, цепляя друг за другом команды LINQ. Отсюда и выходит, что варианта цикла for из комментария не такой уж и ущербный. А сам цикл for в чистом виде используется примерно тогда же, когда и CURSOR в SQL.
                              +1

                              LINQ специально придумали, чтобы мапить запросы в SQL

                              +2
                              А в чем проблема то?
                              until  :: (a -> Bool) -> (a -> a) -> a -> a
                              until p f = go
                                where
                                  go x | p x   = x
                                       | otherwise    = go (f x)
                              


                              Да и while всяких много ))
                              тут тонна кода по работе с базой
                              тут ваяют графический интерфейс
                                0
                                С лёгкостью, если это вообще нужно.
                                Есть .TakeWhile
                                Но это настолько редко нужно, что раз в год вспоминаю. Циклы иногда удобнее, но не так уж часто, раз из десяти. Вообще, в большинстве приложений лучше бы писать без мутаций, кроме тех случаев, когда это действительно удобнее или производительнее.

                                Жаль, когда создавали сишарп, это ещё не было популярно.
                                +1
                                > 2. LINQ распараллеливается одной строкой
                                Довольно часто вижу это утверждение для подобных конструкций. А кому-нибудь вообще приходилось распараллеливать что-то «одной строкой»? Вот так, чтобы просто пришел, распараллелил и ушел? Обычно ведь нужно сидеть и долго искать не thread-safe функции, расставлять мьютексы, считать профит между параллелизацией и потерей на создании потоков и синхронизации…
                                  0
                                  Когда пишу скрипты, делаю это периодически, когда надо что-то посчитать, но нет времени сильно оптизимировать. Проще один раз загрузить 8 ядер и пойти чайку попить, чем тратить полдня на оптимизацию.
                                  В реальных приложениях реже.
                                0

                                Не очень удачный пример у вас если честно — оптимизируется до «оператора точка с запятой»


                                В реальности все зависит от того что внутри цикла — если вам надо над каждым элементом выполнить какую-то операцию, то удобней обычный цикл; если вам какую-нибудь сумму преобразованных элементов посчитать — удобней LINQ и функциональный стиль.


                                Тоже самое касается и «полноценного приложения» — сильно зависит от того что вы хотите получить. Некоторым нужен экран и 2 кнопки.

                                  +1
                                  Мой посыл был в том что в Power Fx есть только 1 тип циклов — первый, и то, только лишь через костыли. Пример на С# — это просто для наглядности.
                                  +1
                                  В этом же поделии, нет процедур и функций, кроме сотни встроенных (из которых половина — математические), нет функций высшего порядка, нет модулей,… да ничего толком нет, что могло бы хоть как-то помочь более-менее опытному разработчику.

                                  Справедливости ради, недавно анонсировали, что в Excel завезли лямбды и теперь он Turing-complete: https://www.microsoft.com/en-us/research/blog/lambda-the-ultimatae-excel-worksheet-function/
                                  Если они берут функции из экселя, то и лямбды возьмут.

                                    +1
                                    Боюсь я что в этих лямбдах можно будет только чистые функции использовать без сайд эффектов, а это накладывает очень много ограничений. Ну и никак не позволяет переиспользовать код вразных проектах.
                                    0
                                    например, 3 повторных попытки отправки GET запроса в случае неудачи

                                    Если ваша функция для обращения к сети — sendMyRequest :: NetworkMonad m => Request -> m (Maybe Response), то это заклинание msum $ fmap sequence $ replicate 3 $ sendMyRequest myReq (писал с мобилы на ночь, тайпчекал в голове, мог накосячить). Если охота сделать всякие возрастающие таймауты, неблокирующие запросы, вот это все, то уже придется писать свою функцию, а не пользоваться готовыми монадическими комбинаторами, но там рекурсии достаточно.

                                  +1

                                  Электронные таблицы — это "многозадачный язык", в котором все "строки" выполняются одновременно. Это не единственный подобный язык, "лестничная логика" такая же. Не представляю, куда там можно приткнуть циклы.

                                    +1
                                    Да, но Power Fx позиционируется как язык для создания low-code бизнес-приложений, а не таблиц. Для таблиц есть эксель — и его хватает с головой. А вот для мобильного приложения (частный случай использования этого, так сказать, языка программирования), где необходимо по ненадежной сети взаимодействовать с удаленными источниками данных, циклы иногда могут пригодиться, так же как и исключения и их обработка. А ими в нем и не пахнет.
                                  0
                                  Мне кажется это они признали, что целевая аудитория PowerShell-а его не осиливает. И, естественно, перегнули палку в другом направлении.
                                    +1
                                    О да! Нам только не хватало еще одного языка! Лучше бы они внедрили C# в свои продукты, как VBA, чтобы не приходилось использовать COM interop. Больше бы толку было.
                                      +1

                                      Объясните девушке, что может этот Power Fx такого, что не мог VBA? Порог входа ещё ниже? — Вряд ли. Может было лучше проапгрейлить VBA до современного уровня, или он совсем труп?

                                        +1
                                        Те кто программировал на VBA уже начинают умирать от старости. Поэтому проще начать новый язык, чем пытаться переобучить новичков чему-то, что появилось в 1993м и чем пользуется 3.5 администратора.
                                        –1
                                        Microsoft планирует открыть исходный код Power Fx под лицензией MIT.

                                        Будет классно если его интегрируют в LibreOffice.
                                          0
                                          Что-то коментаторы упустили важный абзац
                                          Microsoft уточнила, что Power Fx будет дополнять языки M и DAX в Power BI

                                          Если кто-то в курсе вообще про Power BI то сразу понял, зачем и куда этот новый язык. Это ни разу не конкурент ни C# ни даже VBA. Это расширение Power BI возможностями для кастомизации UI и writeback функциональности. Ни больше ни меньше.
                                          Еще и уточнение есть:
                                          Power Fx фокусируется на чтении и записи небольших наборов реляционных данных.


                                            0
                                            Если кто-то в курсе вообще про Power BI то сразу понял, зачем и куда этот новый язык.
                                            Насколько я понимаю, Power Fx не для Power BI, а для Power Platform:
                                            Язык Power Fx предназначен для настройки процессов в Power Platform — платформе Microsoft для создания бизнес-решений и автоматизации рутинных задач.
                                            По этой причине он и работает с небольшим набором данных (так как там больше и не требуется).
                                              0
                                              ну да, согласен для всей PowerPlatform. Правда в ней собственно и есть только что Power BI да Power Apps и так по мелочи
                                                0
                                                А мелочи это: Power Automate, Dataverse (бывший CDS), и куча коннекторов к 100500 источникам данных, начиная от различных SQL баз и заканчивая системами документооборота. Кстати, большинство продуктов из линейки MS Dynamics теперь являются частью Power Platform (D365 for Sales (бывший CRM), D365 Finances & Operations (бывшая Axapta), и т.д.). Ну, в принципе, да, так, по мелочи.
                                                  0
                                                  В Axapta же был X++ кажется. Что с ним теперь стало тогда?
                                            0
                                            А кто может объяснить вот это:
                                            Язык Power Fx предназначен для настройки процессов в Power Platform — платформе Microsoft для создания бизнес-решений и автоматизации рутинных задач.
                                            Microsoft планирует открыть исходный код Power Fx под лицензией MIT.
                                            Это как? Язык бесплатный, но платформа (например, Power Apps), где он используется платная? И в чем смысл?
                                              0
                                              смысл в том чтобы подсадить на эту платформу всех. Как на эксель подсадили.
                                                0
                                                Power BI бесплатное приложение, пока вы его не решите использовать на корпоративном уровне. Если им пользуется один человек даже в рамках коммерческой деятельности, оно бесплатно. В общем, если у вас есть в компании аналитик и он работает один, то вам вполне хватит бесплатной версии этого продукта.
                                                0
                                                Чем это лучше, например, чем Python? Лучше бы VBA в своих офисных программах заменили на питон.
                                                  +1
                                                  Порог входа? Тут любой менеджер, хотя бы пару раз писавший формулы в экселе сможет что-то сваять простое. Как заставить сделать его то же на питоне?
                                                    0
                                                    Покажите мне такого любого менеджера, умеющего в экселе?
                                                    Внезапно, я больше встречаю тех, кто лезет в VBA, ещё не умея в ехсель, вместо того, чтобы применить правильные формулы. Внезапно, эти формулы уже на столько наворочены, что многие даже не знают, что эти формулы умеют.
                                                    Так что, я считаю, кто умеет в экселе, тот легко сумеет и в питоне. Увы, таковых очень немного.
                                                    А уж те, кто может в пандас, на общем фоне кажутся просто волшебниками!
                                                      0
                                                      Я знавал такого менеджера по продажам. Идей вагон, постоянно что-то придумывал в экселе: аналитику, визуализацию, обработку данных.
                                                      0
                                                      Тут любой менеджер, хотя бы пару раз писавший формулы в экселе сможет что-то сваять простое
                                                      А потом сказать программисту: «Я тут самое важное сделал, допиши до вечера».
                                                        0
                                                        У вас какой-то печальный опыт. Если у вас на работе такое практикуется — рекомендую поискать другую.
                                                        0

                                                        Так же как на VBA:
                                                        Жмак на красную кнопку, сделал руками что надо один раз, перешел в редактор кода и подправил конкретику на переменные. Возможно обернул в цикл.

                                                    Only users with full accounts can post comments. Log in, please.