The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Google опубликовал язык логического программирования Logica

13.04.2021 13:24

Компания Google представила новый декларативный язык логического программирования Logica, предназначенный для манипулирования данными и транслирующий программы в язык SQL. Новый язык ориентирован на тех, кто хочет использовать синтаксис логического программирования при написании запросов к БД. В настоящее время результирующий SQL-код может выполняться в хранилище Google BigQuery или в СУБД PostgreSQL и SQLite, поддержка которых пока является экспериментальной. В будущем планируется расширить число поддерживаемых SQL-диалектов. Код проекта написан на языке Python и опубликован под лицензией Apache 2.0.

Logica продолжает развитие другого разработанного в Google языка обработки данных Yedalog и предоставляет уровень абстракции, недоступный в штатном SQL. Запросы в Logica программируются в форме набора логических утверждений. Поддерживаются модули, операции импорта и возможность использования Logica из интерактивной оболочки Jupyter Notebook. Например, для формирования сводки персон, наиболее часто упоминаемых в новостях за 2020 год, можно использовать следующую программу на языке Logica для обращения к БД GDELT:


   @OrderBy(Mentions, "mentions desc");
   @Limit(Mentions, 10);
   Mentions(person:, mentions? += 1) distinct :-
     gdelt-bq.gdeltv2.gkg(persons:, date:),
     Substr(ToString(date), 0, 4) == "2020",
     the_persons == Split(persons, ";"),
     person in the_persons;

   $ logica mentions.l run Mentions
   +----------------+----------------+
   |     person     | mentions_count |
   +----------------+----------------+
   | donald trump   |        3077130 |
   | los angeles    |        1078412 |
   | joe biden      |        1054827 |
   | george floyd   |         872919 |
   | boris johnson  |         674786 |
   | barack obama   |         438181 |
   | vladimir putin |         410587 |
   | bernie sanders |         387383 |
   | andrew cuomo   |         345462 |
   | las vegas      |         325487 |
   +----------------+----------------+

Написание сложных запросов на SQL приводит к необходимости написания громоздких многострочных цепочек, не очевидных для восприятия, мешающих повторному использованию частей запроса и затрудняющих сопровождение. Для типовых повторяющихся вычислений в SQL можно использовать представления и функции, но они не поддерживают операции импорта и не предоставляют гибкости, свойственной высокоуровневым языкам (например, невозможно передать функцию в функцию). Logica позволяет компоновать программы из небольших, понятных и доступных для повторного использования логических блоков, которые могут быть протестированы, связаны с определёнными именами и сгруппированы в пакеты, доступные для использования в составе других проектов.

  1. Главная ссылка к новости (https://opensource.googleblog....)
  2. OpenNews: Facebook представил новый язык формирования запросов GraphQL
  3. OpenNews: Google представил Grumpy, транслятор кода Python на язык Go
  4. OpenNews: Google представил фреймворк Flutter 2 и язык Dart 2.12
  5. OpenNews: Релиз языка для формирования структурированных запросов HTSQL 2.0
  6. OpenNews: eBay представил ql.io, SQL-подобный язык для взаимодействия с web-сервисами
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/54960-logica
Ключевые слова: logica, google, bigquery
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (76) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 13:54, 13/04/2021 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +3 +/
     

     ....ответы скрыты (6)

  • 1.2, Аноним (2), 13:57, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +11 +/
    Хоть он и Евгений Скворцов, но синтаксис языка получился как у сумрачного гения.... Слишком сурово для екатеринбуржца....
     
     
  • 2.8, Аноним (8), 14:01, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Синтаксис раст напоминает. Раз раст все любят, то и тут найдутся пользователи.
     
     
  • 3.18, Аноним84701 (ok), 14:58, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Синтаксис раст напоминает.




    > Here is an example of a simple aggregation counting employees per role.

    Employee(name: "Alice", role: "Product Manager", office: "SEA");
    Employee(name: "Bob", role: "Engineer", office: "SEA");
    Employee(name: "Caroline", role: "Engineer", office: "LAX");
    Employee(name: "David", role: "Data Scientist", office: "LAX");
    Employee(name: "Eve", role: "Data Scientist", office: "SEA");

    ByRoleCount(role:, count? += 1) distinct :- Employee(role:);
    ...
    role count
    0 Product Manager 1
    1 Engineer 2
    2 Data Scientist   2



    Угу. Буквы очень похожи.

     
     
  • 4.29, Аноним (8), 15:32, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    К чему эта портянка? В расте нельзя такие портянки писать?
     
     
  • 5.58, Аноним84701 (ok), 22:26, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > К чему эта портянка?

    Это для умеющих читать не только твиты (при этом еще и понимая прочитанное) и хотя бы краем глаза видевших rust.
    В общем, похоже получилась опять  дискриминация бедных анонимов по интеллектуальному признаку. Увы.

    > Синтаксис раст напоминает
    > В расте нельзя такие портянки писать?

    А разве аноним не должен сам знать, раз уж он так смело и так уверенно заявил, что "Синтаксис раст напоминает"?  

     
     
     
     
    Часть нити удалена модератором

  • 8.75, Аноним (8), 13:57, 14/04/2021 [ответить]  
  • +/
    Ну а ты с ходу начал тешить своё чсв было бы чем и перешёл к ad hominem Если ... текст свёрнут, показать
     
  • 4.33, Аноним (33), 15:50, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +6 +/
    слишком много смайликов:

    :, ? += :- :)

     
  • 3.60, погромизд (?), 00:08, 14/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Пролог же
     

  • 1.5, Аноним (5), 13:57, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +10 +/
    В чем логика, большой брат?
     
     
  • 2.41, Леголас (ok), 16:47, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Python, Python everywhere...
     

  • 1.7, Аноним (7), 14:01, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    SQL понятнее.
    Вообще все открытые гуглом коды такие - не понятно ни черта.
     
     
  • 2.72, Аноним (72), 11:57, 14/04/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Конечно понятнее. Ты же его уже выучил, а этот язык ты не знаешь.
     

  • 1.9, danonimous (?), 14:06, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Персоной Лос-Анжелеса интересовались больше, чем Путиным. Либо это баг в программе, либо заговор.
     
  • 1.10, Аноним (10), 14:15, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Какое наглое покушение на логику. Теперь у всех в головах будет каша из языка и реальной логики. Поднагадили так поднагадили.
     
     
  • 2.17, Аноним (17), 14:50, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Они ещё радугу отфидорили
     
  • 2.27, Аноним (-), 15:27, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Теперь у всех в головах будет каша

    и только иксперты опеннет не заметят никаких изменений

     
     
  • 3.90, Аноним (90), 00:23, 17/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Звучит как преимущество.
     

  • 1.11, DIO (?), 14:23, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    prolog попытка номер два?
     
     
  • 2.39, Аноним (39), 16:31, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нет, это другое
     

  • 1.12, mos87 (ok), 14:40, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    гугель и логика? ноувей)

    вообще щитаю миру нужен нормальный процедурный SQL а не это убожество псевдо-декларативное (навеяло ключевыми словами)

     
     
  • 2.14, Аноним (14), 14:44, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    К твоим услугам куча опенсорсных орм, если чего-то не хватает - добавь, исправь.
    Да, мне тоже лень
     
     
  • 3.15, mos87 (ok), 14:45, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    прослойка под названием скуль тогда зачем
    лучший ОРМ это свой есессно.
     
  • 3.46, Аноним (46), 18:34, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Хватит уже путать орм с кверибилдерами.
     
  • 2.89, adolfus (ok), 14:15, 16/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    SQL не процедурный, а декларативный. Процедурный -- это то, что поддерживает операции add, del, set, next, prev, get, put, del.
     

  • 1.16, Аноним (17), 14:48, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >> Написание сложных запросов на SQL приводит к необходимости написания громоздких многострочных цепочек

    А может оставить как есть, потому что так надо?
    Код или короткий или быстрый.
    Просто "оптимизаторы" иногда проигрывают в 20 раз ручному запросу.
    Хочешь быстро - пиши руками.
    Хочешь коротко - возьми Пролог.

    А тут "в чём смысл, где логика".

     
     
  • 2.28, Додо (?), 15:30, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Если коротко, то тогда уж KBD+/Q. И быстро заодно. Разве что код нечитаем :)
     
     
  • 3.40, Аноним (17), 16:44, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Одни и те же данные можно выбрать разными запросами
    При чем тут платформа?
     

  • 1.19, Скульщик со стажем (?), 14:59, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Тут наоборот сложнее читать, синтаксис задом наперед, а все равно перечислять все условия. И сложные аналитические запросы, которые порой только с хинтами можно вытащить, тут как...
     
  • 1.21, ptr128 (?), 15:10, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > невозможно передать функции функцию

    А динамический SQL на что? В случае же PostgreSQL, передать функции на PL/Perl (Python, R и т.п.) имя функции в параметрах - вообще проблем не представляет

     
     
  • 2.23, Аноним (23), 15:19, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +5 +/
    То не ими сделано.
     
  • 2.35, Аноним (35), 16:04, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Тот же sqlite элементарно расширяется сторонними функциями.
    Я так в одном проекте прикрутил к нему функции на лиспе (так надо было).
     
     
  • 3.70, Аноним (70), 09:53, 14/04/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Тим лид: зачем ты прикрутил к нему функции на Лиспе?!!
    Я: (так надо было)
     
     
  • 4.80, Аноним (80), 21:29, 14/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    (так (надо (было)))
     
     
  • 5.86, Аноним (86), 12:36, 15/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    (было (надо так))
     

  • 1.25, Аноним (25), 15:24, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    По крайней мере теперь понятно, на какую логику опирается гугл в своих решениях.
     
     
  • 2.36, Аноним (36), 16:12, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Чтобы только они разбирались и пилили, и их спецы. Столько спецсимволов жесть.
     

  • 1.31, Аноним (25), 15:45, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ждем первых новостей "В Logica гугла было найдено несколько уязвимостей".
     
  • 1.32, Док (?), 15:46, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Хрен редьки не слаще
     
  • 1.38, Аноним (38), 16:27, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Нафиг питон. Даешь нативную поддержку в постгрю!
     
  • 1.43, Аноним Анонимович Анонимов (?), 17:52, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    > Написание сложных запросов на SQL приводит к необходимости написания громоздких многострочных цепочек

    Вместо SQL можно подставить любую аббревиатуру. За то деньги и получают. Остальные же подрбные вещи именуют синтаксическим сахаром.

    Что забавно, sql ведь разработали специально для менеджеров. Им оказалось сложно, программистам теперь сложно... сколько лет пишем портянки запросов и ничего, как-то умудряемся ключевые слова подсвечивать, переносы делать...

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

     
     
  • 2.44, Аноним (7), 18:00, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Тогда программисты программировали на ассемблере и си, менеджеры тоже были другие. А сейчас гендерно-нейтральный менеджмент и программисты, которых учили на питоне, считающие, что это язык общего назначения.
     
     
  • 3.45, Аноним Анонимович Анонимов (?), 18:33, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Самое забавное, что наиграются, посмотрят, что не взлетает и заявят: ну, пожалуй да, лишняя абстракция ни к чему.

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

    Добрались до SQL. Не ровен час и до математических операторов доберутся. С этими символами: +*/- явно что-то не так, странно выглядят и не совсем логичные действия выполняют.

     
     
  • 4.61, Аноним (61), 00:17, 14/04/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Самое забавное, что наиграются, посмотрят, что не взлетает и заявят: ну, пожалуй да, лишняя абстракция ни к чему

    Только смузихлеб-разработчик ненужной абстракции сначала станет иконой стиля, будет колесить по миру и учить неосиляторов своей ограниченной но модной технологии, будет считаться гуру за кучу денег и сможет в гугле ничего не делать кроме своего ненужно.
    Потом он сам же заявит что его детище было ошибкой, уйдет в стартап пилить тот же ненужно за большую кучу денег, но с чуть меньшим количеством абстракций.
    Потом найдет новый модный язык и захочет все переписать на нем.
    В общем все как с nodejs.

     
  • 2.71, Аноним (70), 09:54, 14/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    и не только. Столбят и захватывают территорию, как плесень.
     
  • 2.85, Ordu (ok), 11:13, 15/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Что забавно, sql ведь разработали специально для менеджеров.

    Ну дык а logica, явно не для менеджеров, а для исследователей, чтобы тем было удобнее ковыряться в big data, которую собрал на тебя гугл.

     

  • 1.47, Маняним (?), 18:37, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    А если заменить :- на ->, то получится новый декларативный язык функционального программирования.
     
  • 1.50, kissmyass (?), 19:21, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > Написание сложных запросов на SQL приводит к необходимости написания громоздких многострочных цепочек, не очевидных для восприятия,

    @OrderBy(Mentions, "mentions desc");
       @Limit(Mentions, 10);
       Mentions(person:, mentions? += 1) distinct :-
         gdelt-bq.gdeltv2.gkg(persons:, date:),
         Substr(ToString(date), 0, 4) == "2020",
         the_persons == Split(persons, ";"),
         person in the_persons;

    А вот это все прям очевидно, да?
    Никаких улучшений нет, очередной синтаксис, требующий изучения.

     
     
  • 2.54, Урри (ok), 20:30, 13/04/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Просто очередной неосилятор решил сделать свой метаязык, чтобы не осиливать.

    Интересно другое - как гугл дал этому добро? Неужели дешевле потратиться на неосиляторов, чем выгнать их к едренефене и нанять специалиста?

     

  • 1.53, Аноним (53), 20:29, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    sql не логичный для восприятия лишь тем, кто с ним толком не работал.
     
  • 1.55, Аноним (55), 21:55, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Синтаксис SQL то ещё днище, но автор сабжего поделия умудрился сделать ещё хуже.
     
  • 1.56, Аноним (56), 22:10, 13/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Откуда взялось имя колонки "mentions_count"?
    В запросе его нет.
    Едалог такой едалог.
     
     
  • 2.63, Аноним (33), 01:05, 14/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    подозреваю, собака где-то здесь:

    (person:, mentions? += 1)

    именно тут: += 1

    А вот за такое: Substr(ToString(date), 0, 4) == "2020" надо все руки повырывать.

     
     
  • 3.64, Дмитрий (??), 06:29, 14/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Не надо.
    Потом они позовут меня для оптимизации, я оптимизирую не напрягаясь и все счастливы. :)
     

  • 1.62, kai3341 (ok), 00:32, 14/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Написание сложных запросов на SQL приводит к необходимости написания громоздких многострочных цепочек, не очевидных для восприятия, мешающих повторному использованию частей запроса и затрудняющих сопровождение.

    Когда-нибудь автор этих строк откроет для себя SQLAlchemy

     
     
  • 2.84, Гость 82 (?), 07:54, 15/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > SQLAlchemy

    Пионерское говно. До того же гибернейта/доктрины ему как до Китая раком.

     
     
  • 3.88, kai3341 (ok), 14:42, 15/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >> SQLAlchemy
    > Пионерское говно. До того же гибернейта/доктрины ему как до Китая раком.

    https://stackoverflow.com/questions/48735927/jpa-hibernate-perform-mysql-fullt
    Пнятно. Raw SQL можно и без ORM

     

  • 1.65, Аноним (-), 06:52, 14/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >   | los angeles    |        1078412 |

    У Славы Кпсс появился наконец достойный конкурент :)

     
  • 1.67, Анимус (?), 07:38, 14/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Google просто коллекционер языков какой-то.
     
     
  • 2.82, Аноним (33), 02:29, 15/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Сидят "умные" манагеры и думают: "Вот сменим язык - и заживём!".
     

  • 1.68, Аноним (70), 07:42, 14/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    т.е. вместо SQLя который практически дословно русский язык, предлагается вот такое

    @OrderBy(Mentions, "mentions desc");
       @Limit(Mentions, 10);
       Mentions(person:, mentions? += 1) distinct :-
         gdelt-bq.gdeltv2.gkg(persons:, date:),
         Substr(ToString(date), 0, 4) == "2020",
         the_persons == Split(persons, ";"),
         person in the_persons;

    ???

    Я гугль перестал уважать после протобуфа. А последующие Дарты, Го и пр. лишь подтвердили мой личный вывод

     
     
  • 2.77, Аноним (77), 16:10, 14/04/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А чем протобуф-то чем плох?
    Разве что, конечно, часто его пихают туда, где он явно избыточен
     

  • 1.69, Аноним (70), 07:44, 14/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    кстати, видно что пытаются переизобрести Datalog. Хуже программистов чем в гугле - нигде не найдешь. После божественного 365 сижу на их документах - такого г--на никогда не видел
     
  • 1.73, lockywolf (ok), 12:35, 14/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Что бы им просто miniKanren не взять?
     
  • 1.76, Anon1111nn (?), 16:01, 14/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Самая удобная прокладка по sql имхо, linq.
     
     
  • 2.78, Аноним (53), 17:37, 14/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    То ты мало работал с базами. По факту приходишь к тому что все запросы хранятся в STP, а вызывать их лучше всего из максимально легковесной прокладки типа Dapper. Уж поверь.
     

  • 1.79, Аноним (79), 18:12, 14/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Плохие новости. Я не могу сделать лексер для Logica к Sublime, к CudaText, потому что в репо языка нету файлов на языке. Там есть файлы ipynb в некоем json которые видимо для PythonNotebook, и там есть включения на Логика, но фалов Логика не нашел.
     
     
  • 2.81, Аноним (81), 23:51, 14/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    моя твоя не понимать
     
  • 2.83, Евгений (??), 04:34, 15/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Файлы на языке есть тут:
    https://github.com/EvgSkv/logica/tree/main/integration_tests
    Это файлы с расширением ".l"

    Если будут ещё какие-то вопросы, милости просим в Дискуссии:
    https://github.com/EvgSkv/logica/discussions

     

  • 1.87, PetrG (ok), 14:21, 15/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я удивился что в тексте новости Datalog вообще не упоминается.
    Хотя в описании по ссылке это есть "Logica is a language of the Datalog family."
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру