LINUX.ORG.RU

lsFusion 4

 


0

2

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

Так, в четвертой версии появились:

  • Новые представления списков объектов:
    • Группировочные (аналитические) представления, в которых пользователь сам может группировать данные и вычислять различные агрегирующие функции для этих групп. Для представления результата в свою очередь поддерживаются:
      • Сводные таблицы, с возможностью упорядочивания, клиентской фильтрации, выгрузки в Excel.
      • Графики и диаграммы (столбчатые, круговые, точечные, плоскостные и т.д.)
    • Карта и календарь.
    • Кастомизируемые представления, при помощи которых разработчик может подключать любые javascript библиотеки для отображения данных.
  • Темная тема и вообще практически полностью новый дизайн
  • OAuth-аутентификация и саморегистрация
  • Обратная интернационализация
  • Переходы по ссылке
  • Групповые изменения данных «одним запросом»
  • Вычисляемые заголовки контейнеров и форм
  • Полноэкранный режим в веб
  • Ручное обновление представлений списков объектов
  • Выполнение HTTP-запросов на клиенте
  • Расширение форм в контексте вызова
  • Существенная оптимизация работы с DOM

>>> Подробности



Проверено: Shaman007 ()
Последнее исправление: atsym (всего исправлений: 2)

Ответ на: комментарий от anonymous

1С на Метапроге?

Я так понимаю Метапрог это про визуальное программирование (а не изменение парадигмы с архитектуры ноймана на использование высокоуровневых операторов). Как раз визуального программированого в lsFusion (за исключением стандартных средств IDEA + дизайна формы в IDE и всяких графов) очень немного (скорее наоборот везде поощряется everything-as-a-code).

NitroJunkie
() автор топика
Ответ на: удаленный комментарий

Впрочем, успехов вам!

Спасибо

NitroJunkie
() автор топика
Ответ на: комментарий от NitroJunkie

Что значит какие конкретные задачи? Большинство тех же бизнес-приложений в основном на тех же ERP платформах.

Например, интеграция с провайдером данных, отдающего данные по SOAP или по самописному XML-протоколу. На C# это делать просто и приятно, на ABAP и 1С сплошная боль (делаю вывод по чтению форумов). Работу с базой тоже не сравнить: на C# куча ORM, простых мапперов и CRUD-генераторов, на ABAP и 1С сплошной синтаксический overhead и не понимание, как это сделать просто.

А все потому что у них абстракции более высокоуровневые и разработка на них существенно эффективнее.

Примеры этих абстракций? И куда они делись из Java и .Net?

Более того основные вещи там, вроде CBO или работы с транзакциями, к реляционной модели имеют весьма опосредованное отношение.

CBO – это одна из деталей реализации, его отсутствие не лишает движок звания РСУБД. Транзакции – это часть модели реляционных баз данных, но тоже не обязательны к реализации, но очень желательны.

Так чистая NoSQL это и есть Java/C#/.Net.

Может в википедию загляните? :)

amm
()
Ответ на: комментарий от NitroJunkie

Причем тут событийная модель. Смысл в том, что вы декларативно определяете как задается остаток, а платформа уже сама думает, какие запросы выполнить, как инкрементально обновить данные, чтобы проверить только то, что изменилось, только для нужных объектов и каким-то образом влияет на остаток. Чем тут очередь сообщений поможет?

Платформа думает? А если она думает не правильно, как просто ей сказать, что она ошибается?

То есть делаете вы quantity(InvoiceDetail id) <- quantity(id) * 5 WHERE date(invoice(id)) = currentDate(); а платформа сама определяет для каких объектов надо проверить ограничение (ну и само собой делает это)

По каким правилам она это делает? Насколько они просты? Как все это тестировать? Отладчик ограничений есть?

amm
()
Ответ на: комментарий от amm

Я понимаю, почему внедряют SAP, почему 1C, почему начинают делать собственные продукты на .Net и Java. Причины же внедрения малоизвестных продуктов с альтернативным взглядом на проблемы от меня ускальзывают. :)

Все продукты (тот же SQL, Tesla и т.п.) когда-то были «малоизвестными продуктами с альтернативным взглядом на проблемы». А почему внедряют все очень просто - скорость разработки / работы и стоимость разработки / оборудования. Если по этим параметрам у тебя все на порядок лучше, то это вопрос времени когда альтернативный взгляд станет основным (так например было с SQL в свое время, и точно также с ООП, хотя до сих пор многие в них «не верят», типа зачем они если можно обойтись if’ами и for’ами). Хотя да на это могут уйти (и обычно уходят) десятки лет.

Точно, бывает ситуация, что язык излишне выразителен. :)

Я лишь отвечал на ваш тезис, что эйфория уходит, когда оказывается, что по мере роста проекта язык становится ограничением, а не премуществом. Так вот ключевой момент тут «если это происходит». Пока опыт в крупных проектах, который я наблюдаю говорит об обратном. С той скоростью генерации идей (а также их сложности) у заказчика, террабайтными объемами данных и разработчиками без опыта ИТ те же SAP или .Net и близко не справились бы (ну или ИТ-бюджеты измерялись бы миллионами).

…который появился как язык для пользователей, а в итоге со всем этим приходится работать разработчикам. :)

И что это меняет? Луддизм со стороны в его отношении существует до сих пор. По мозгодробильности он уделывает всех - я писал кучу оптимизаторов для него, видел миллионы планов и у меня все равно выносит мозг, что будет если сделать LEFT JOIN таблицы и в соединении указать не все ключи (или вообще не ключи скажем). И ничего стандарт в отрасли. Именно по тому что значительно ускорил разработку и уменьшил ее стоимость.

NitroJunkie
() автор топика
Ответ на: комментарий от amm

Например, интеграция с провайдером данных, отдающего данные по SOAP или по самописному XML-протоколу. На C# это делать просто и приятно, на ABAP и 1С сплошная боль (делаю вывод по чтению форумов).

Стоп вы спросили конкретные задачи, где высокоуровневые языки уделывают низкоуровневые. Я назвал - бизнес-приложения. Но я не спорю что во многих других областях низкоуровневые языки использовать удобнее. Но кстати не знаю, что там в ABAP намудрили с интеграцией, в lsFusion все гораздо проще https://ru-documentation.lsfusion.org/pages/viewpage.action?pageId=57738034 https://ru-documentation.lsfusion.org/pages/viewpage.action?pageId=55935068

Работу с базой тоже не сравнить: на C# куча ORM, простых мапперов и CRUD-генераторов, на ABAP и 1С сплошной синтаксический overhead и не понимание, как это сделать просто.

В этои и нюанс, что ABAP, что 1С, что Axapta по факту практически не используют ORM (если вы откроете исходники их решений). По факту там все на SQL запросах, потому как на ORM а) тяжело делать сложную логику (скажем регистры), б) очень низкая производительность (N+1 все дела).

Примеры этих абстракций? И куда они делись из Java и .Net?

Я же их уже приводил выше (события, ограничения, агрегации, формы и т.п.). Да те же регистры 1Ские. Их в Java и .Net никогда и не было.

Может в википедию загляните? :)

Я имел ввиду идеологически. Нужно сделать JOIN или группировку, делайте руками и т.п.

NitroJunkie
() автор топика
Ответ на: комментарий от amm

Платформа думает? А если она думает не правильно, как просто ей сказать, что она ошибается?

Что значит думает не правильно? Вот хочу я какой-то инвариант, я просто вешаю CONSTRAINT и не парюсь. Собственно мне и в системном программировании этого не хватает, когда нужен какой-то инвариант, и ты думаешь, млин где эти assert’ы разбросать. И то где бы не разбросал абсолютно не гарантируется, что что-то не пропустил.

Ну и хинты определенные есть конечно (как и в SQL)

По каким правилам она это делает? Насколько они просты?

По сложным (для каждого оператора есть алгоритмы инкрементальности, которые скармливаются потом компилятору / оптимизатору запросов). Но эти правила не сильно сложнее того же CBO (по факту та же магия что и в SQL).

Как все это тестировать? Отладчик ограничений есть?

Отладчик есть (можно поставить например брейкпоинт на ограничение (момент его проверки, который впрочем платформа сама определяет) и в watch вводить выражения на lsFusion которые показывают текущие значения свойств в сессии). Также ограничение можно превратить в событие (по сути CONSTRAINT quantity(sku, stock) < 0 это своего рода событие WHEN SET(quantity(sku, stock) < 0) DO { MESSAGE ‘Остаток меньше 0’; CANCEL; } ), и отлаживать его более императивно.

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

NitroJunkie
() автор топика
Ответ на: комментарий от NitroJunkie

так например было с SQL в свое время, и точно также с ООП, хотя до сих пор многие в них «не верят», типа зачем они если можно обойтись if’ами и for’ами

Думаете, что на 1С и ABAP пишут с применением ООП? :) Там как раз царство if и for. Это если не касаться того, что ООП – это просто набор нескольких принципов, часть которых есть и в других парадигмах, а часть надо применять с осторожностью. :)

С той скоростью генерации идей (а также их сложности) у заказчика, террабайтными объемами данных и разработчиками без опыта ИТ те же SAP или .Net и близко не справились бы (ну или ИТ-бюджеты измерялись бы миллионами).

То есть на вашем продукте задачи решаются людьми без опыта? Никогда в это не поверю. Работа с любым инструментом требует навыков.

И что это меняет?

Ничего не меняет. Но показывает сущность маркетинга. :)

amm
()
Ответ на: комментарий от amm

То есть на вашем продукте задачи решаются людьми без опыта? Никогда в это не поверю. Работа с любым инструментом требует навыков

Любая домохозяйка знает Java, вэб технологии, СУБД и lfusion …
Что тут сложного?
И сопровождение «проще паренной репы».

Это не сарказм.

Что до самого проекта, то может быть он и хорош …

PS: Последние года новации от 1С такие же «простые» как lfusion.

Владимир 123456

anonymous
()
Ответ на: комментарий от NitroJunkie

Стоп вы спросили конкретные задачи, где высокоуровневые языки уделывают низкоуровневые. Я назвал - бизнес-приложения.

Я просил примеры, чтобы понять, почему C# и Java низкоуровневые языки и в вашей иерархии стоят на ступеньку ниже «бизнес»-языков? Пока не понял.

в lsFusion все гораздо проще

По xsd можно классы (или что там у вас) нагенерировать? Подписать xml гостом можно? Запрос типа multipart/form-data насколько сложно послать? По tcp данные послать-принять можно? Это всё инфраструктурные задачи, но все они нужны для решения бизнес-задач.

Я же их уже приводил выше (события, ограничения, агрегации, формы и т.п.). Да те же регистры 1Ские. Их в Java и .Net никогда и не было.

Я не до конца понимаю все эти термины. Например, регистры это специализированные структуры для хранения данных в 1С. Зачем для их использования придумали отдельный язык для меня остается загадкой. Это же не ради vendor-lock сделано? :)

amm
()
Ответ на: комментарий от NitroJunkie

Вот хочу я какой-то инвариант, я просто вешаю CONSTRAINT и не парюсь. Собственно мне и в системном программировании этого не хватает, когда нужен какой-то инвариант, и ты думаешь, млин где эти assert’ы разбросать. И то где бы не разбросал абсолютно не гарантируется, что что-то не пропустил.

На каком уровне эти constraint срабатывают? На клиенте? На сервере? При сохранении в базу? Что если не пропустили место, а наоборот, ограничение не в то место добавилось? Что надо сделать, чтобы для определенной сессии при определенных условиях оно не срабатывало?

amm
()
Ответ на: комментарий от amm

Точно не сарказм? :)

Суждение выражено в виде сарказма, но для того, чтобы просто высказать свое «фи».

1C много проще чем lfusion, хотя последние года она превращается …

Да мне выбирать не приходится.
Сегодня вот на 8.3 начал пилить новую конфигурацию.

Владимир 123456

anonymous
()
Ответ на: комментарий от anonymous

Сегодня вот на 8.3 начал пилить новую конфигурацию.

Одно из заданий начальника - возможность работы с конфигурацией с browser.

Для 1С 7.7 ранее разработал возможность работать с любой конфигурацией с веб без всяких доработок со стороны программиста 1С.

Кстати это был такой подход как в lfusion.

Для 1С 8.3 вполне реально разработать такой же веб интерфейс.
Будем посмотреть …

PS: Публиковать конечно проприетарное не имею право … /увы/.

Владимир 123456

anonymous
()
Ответ на: комментарий от amm

Думаете, что на 1С и ABAP пишут с применением ООП? :) Там как раз царство if и for. Это если не касаться того, что ООП – это просто набор нескольких принципов, часть которых есть и в других парадигмах, а часть надо применять с осторожностью. :)

Я ООП привел как пример высокоуровневой парадигмы с изначально неочевидными преимуществами (зачем нужно это наследование и полиморфизм, когда можно все if’ами делать), которая через какое-то время стала стандартом в отрасли. Также как и SQL (который еще более неочевиден).

То есть на вашем продукте задачи решаются людьми без опыта? Никогда в это не поверю. Работа с любым инструментом требует навыков.

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

Ничего не меняет. Но показывает сущность маркетинга. :)

Да ладно, это же ИТ, а не продукт для домохозяек. Тут маркетинг очень слабо работает (иногда даже в обратную сторону, не любят разработчики маркетинг-булшит), иначе кроме Майкрософта ничего бы не существовало.

NitroJunkie
() автор топика
Последнее исправление: NitroJunkie (всего исправлений: 1)
Ответ на: комментарий от amm

Я просил примеры, чтобы понять, почему C# и Java низкоуровневые языки и в вашей иерархии стоят на ступеньку ниже «бизнес»-языков? Пока не понял.

Потому что у них нет таких высокоуровневых абстракций (при этом кстати многие из них общего назначения), как события изменения данных, ограничения, агрегации, сессии, формы и т.п. Именно в парадигме языка. То есть грубо говоря как в Java работа с мусором (его сборка). Понятно что и для C++ есть библиотеки работы с мусором, но это не отменяет того что C++ более низкоуровневый чем Java. Точно также ООП можно через таблицу вызовов в C делать. Что не отменяет того что C более низкоуровневый чем C++. И циклы можно джампами в ассемблере делать. Что не отменяет того что ассемблер более низкоуровневый чем C. Ну дальше вы поняли.

По xsd можно классы (или что там у вас) нагенерировать? Подписать xml гостом можно? Запрос типа multipart/form-data насколько сложно послать? По tcp данные послать-принять можно? Это всё инфраструктурные задачи, но все они нужны для решения бизнес-задач.

Можно даже по примеру JSON / XML нагенерировать формы (в IDE, то есть плагине к IDEA). Про подпись не совсем понял. Multipart/form-data ставится и формируется по умолчанию, если если посылается больше 1 параметра (то есть супер элементарно). Также есть интеграция через SQL (тоже декларативно в одну строку). TCP можно спуститься на уровень Java, но мы делали на lsFusion интеграции наверное уже с несколькими сотен (если не под тысячу) разных сервисов / устройств / сторонних программ, и ни разу с интеграции TCP не сталкивались. Так бы тоже включили в язык. А так на уровень Java приходилось спускаться наверное раза 2 приходилось.

Я не до конца понимаю все эти термины. Например, регистры это специализированные структуры для хранения данных в 1С. Зачем для их использования придумали отдельный язык для меня остается загадкой. Это же не ради vendor-lock сделано? :)

Нет, Ledger это достаточно общая абстракция, конечно конкретнее событий, ограничений, классов, агрегаций и форм, но все же весьма абстрактная и достаточно важная и удобная в бизнес-приложениях. И есть в том или ином виде и в SAP и в Axapta и в lsFusion.

NitroJunkie
() автор топика
Ответ на: комментарий от anonymous

1C много проще чем lfusion

Вы 7.7 имеете ввиду? Хотя даже она если и проще то для суперпримитивных задач аля «справочник-документ-регистр». Собственно у нас много бывших 1Сков работает, они въезжают в lsFusion за неделю. Страшно представить, что было бы если бы я серьезное решение на 1С 8.3 дал бы lsFusion разработчику разрабатывать. Одни только запросы в строках чего стоят. А там список таких мозговыносов оооочень длинный https://habr.com/ru/company/lsfusion/blog/468415/.

NitroJunkie
() автор топика
Ответ на: комментарий от NitroJunkie

1C много проще чем lfusion

Этим хотел сказать, что порог входимости в 1С много меньше.
Что касается 1С 7.7, то лет шесть назад сделал так, что конфигурация выполнялась на удаленном компьютере. При этом диалоговые формы были на компьютере клиента.
Трафик был минимальный.
Еще какой путь избрать для 1С 8.3.
Вообщем то можно сделать вэб интерфейс такой же как для 1С 7.7.
И тогда 90% вашей критики уйдут в небытие.
Можно и много лучше сделать и сделаю /не конкретно для 1С, но и в ней можно будет использовать/.

В форуме маниловщины от меня нет.
Если говорю, что сделано, значит оно так и есть.

Владимир 123456

anonymous
()
Ответ на: комментарий от anonymous

Что касается 1С 7.7, то лет шесть назад сделал так, что конфигурация выполнялась на удаленном компьютере. При этом диалоговые формы были на компьютере клиента.

На стороне клиента диалоговые формы были те, которые 1С создает на стороне сервера.
Кстати этот веб интерфейс обеспечивает работу любой конфигурации для 1С 7.7.

Что касаемо 1С 7.7, то хотя объекты ее слабенькие, но для большой ниши задач использование их вполне приемлемо.
Отсюда и популярность.

Владимир 123456

anonymous
()
Ответ на: комментарий от NitroJunkie

Зря вы на https://forum.mista.ru/ «воюете».

Вы что не поняли с кем имеете дело?
«Киоскеры» и ….

С таким же успехом могли бы прийти в «столярный цех» и рассказать о lfusion.

Владимир 123456

anonymous
()
Ответ на: комментарий от anonymous

С таким же успехом могли бы прийти в «столярный цех» и рассказать о lfusion.

На ЛОР на 1С-ников смотрят как на «недочеловеков».

Разработчиков на этом форуме много, но обсуждают в основном вопросы «сопутствующие разработке».

Некоторые блоги ваши читал и «дельных мыслей» в них не мало.

Владимир 123456

anonymous
()
Ответ на: комментарий от NitroJunkie

Я ООП привел как пример высокоуровневой парадигмы с изначально неочевидными преимуществами…

В пример привели, но к чему? Бизнес-код не пишут с использованем ООП.

Также как и SQL (который еще более неочевиден).

В чем неочевидность? Читайте Дейта, у него все разложено по полочкам, и даже приведен пример QL здорового человека.

Без опыта в IT…

То есть проект идет без синьеров? А кто возникающие проблемы решает?

Тут маркетинг очень слабо работает (иногда даже в обратную сторону, не любят разработчики маркетинг-булшит)…

Вам не кажется, что это ваш случай? :)

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

amm
()
Ответ на: комментарий от amm

В пример привели, но к чему? Бизнес-код не пишут с использованем ООП.

Это потому что этот ООП ни одна существующая платформа разработки бизнес-приложений толком не поддерживает. lsFusion поддерживает, и на ней наследование и полиморфизм очень активно используют. Там деревья классов под 50 элементов бывают.

Но я пример не к тому приводил. А как пример более высокоуровневой парадигмы без очевидных преимуществ, которая со временем стала стандартом. Хотя изначально тоже я думаю было «что за птичий язык», «где найти специалистов на такую малоизвестную парадигму» и т.п.

В чем неочевидность? Читайте Дейта, у него все разложено по полочкам, и даже приведен пример QL здорового человека.

Если бы SQL был очевиден, никакого Дейта читать не надо было. И я это говорю по опыту работы со многими разработчиками, абсолютное большинство из которых я вижу SQL по шаблонам пользуются. Да даже у меня мозг выворачивается, при LEFT JOIN таблицы не со всеми ключами сделать. А уж всякие кортежи это совсем взрыв мозга.

То есть проект идет без синьеров? А кто возникающие проблемы решает?

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

Вам не кажется, что это ваш случай? :)

Нет, потому как если вы не заметили с вами разработчик с весьма большим опытом и в системном и в прикладном программировании общается, а не продажник с гуманитарным образованием :).

NitroJunkie
() автор топика
Ответ на: комментарий от anonymous

Вот честно ничего не понял. 1С 7.7 была более простая и декларативная (хотя до lsFusion далеко), но не производительная и не масштабируемая. В 1С 8.3 попытались сделать платформу более производительной и масштабируемой, но сделали это по сути за счет разработчика (после чего разработка стала более сложной и низкоуровневой чем даже .Net).

NitroJunkie
() автор топика
Ответ на: комментарий от anonymous

У мисты есть свои плюсы. Но поэтому мы и на ЛОРе и на хабре присутствуем, и сейчас еще контекстной рекламы и т.п. добавим. Ну и в бизнес-сообществе есть свои каналы (которые впрочем пока не задействовали).

NitroJunkie
() автор топика
Ответ на: комментарий от NitroJunkie

Вот честно ничего не понял.

Странно.
Конфигурация 1С 7.7 работает на удаленном сервере и диалоговые формы на нем.
На основе метаданных конфигурации 1С 7.7 на стороне клиента открывается mirrior формы 1С … и она взаимодействует с сервером.
Внешне это выглядит, как если бы вы работали с 1С на десктоп.

Владимир 123456

anonymous
()
Ответ на: комментарий от NitroJunkie

как события изменения данных, ограничения, агрегации, сессии, формы и т.п. Именно в парадигме языка.

События – Rx, ограничения – assert, куча валидаторов в виде библиотек, агрегации – linq в C#, streams в Java, pandas в Python, сессии, формы – тоже есть на уровне библиотек. Зачем это все тащить на уровень языка, если язык и так дает средства для реализации данных возможностей в виде модулей?

Про подпись не совсем понял.

Подпись – для интеграции со многими государственными ИС необходимо подписывать soap-запросы гостовскими алгоритмами.

Multipart/form-data ставится и формируется по умолчанию, если если посылается больше 1 параметра (то есть супер элементарно).

Multipart/form-data по умолчанию? Как контролируется этот процесс? А если нужен application/x-www-form-urlencoded?

Также есть интеграция через SQL (тоже декларативно в одну строку).

Она везде есть, и тоже «в одну строку».

TCP можно спуститься на уровень Java, но мы делали на lsFusion интеграции наверное уже с несколькими сотен (если не под тысячу) разных сервисов / устройств / сторонних программ, и ни разу с интеграции TCP не сталкивались. Так бы тоже включили в язык.

Голый tcp действительно редко используется. Но насколько сложно поднять http-сервер для приема данных? Или интегрировать новый протокол (например grpc)? И опять вопрос: почему эта функциональность включается в язык, а не в платформу?

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

Почему язык, а не API?

amm
()
Ответ на: комментарий от anonymous

На основе метаданных конфигурации 1С 7.7 на стороне клиента открывается mirrior формы 1С … и она взаимодействует с сервером. Внешне это выглядит, как если бы вы работали с 1С на десктоп.

Даже если код динамически добавляет/удаляет controls все ok!
Все диалоговые формы, которые 1С создает также поддержаны на клиенте.
Не стал развивать это проект так как вэб технологии ИМХО мне не нравятся и связываться с вэб вынужден лишь потому, что солдату не положено обсуждать приказы командира.

Владимир 123456

anonymous
()
Ответ на: комментарий от NitroJunkie

Это потому что этот ООП ни одна существующая платформа разработки бизнес-приложений толком не поддерживает.

Это потому что ООП надо учиться правильно применять, а разработчики, пишущие бизнес-код, оперируют другими «абстракциями». Им это просто не надо и не интересно.

lsFusion поддерживает, и на ней наследование и полиморфизм очень активно используют. Там деревья классов под 50 элементов бывают.

Иерархия наследования на 50 классов?

Если бы SQL был очевиден, никакого Дейта читать не надо было. И я это говорю по опыту работы со многими разработчиками, абсолютное большинство из которых я вижу SQL по шаблонам пользуются. Да даже у меня мозг выворачивается, при LEFT JOIN таблицы не со всеми ключами сделать. А уж всякие кортежи это совсем взрыв мозга.

В этом мире вообще мало очевидных вещей, даже таблица умножения неочевидна, только все ее знают, потому что учат в начальной школе. Реляционная модель очень простая и объясняется на пальцах, что там можно не понимать? Таблицы соединили, строки отфильтровали, столбцы выбрали, при необходимости значения сгруппировали, и затем отсортировали. Когда доходит до реализации, то да, понимание того как оно внутри работает дается нелегко.

А с кортежами в чем проблема? Достаточно воспринимать их как значимые типизированные структуры данных. Кортежи есть в любом современном языке.

Нет, потому как если вы не заметили с вами разработчик с весьма большим опытом и в системном и в прикладном программировании общается, а не продажник с гуманитарным образованием :).

Это я понял. Евангелисты всегда технически подкованы. :)

amm
()
Ответ на: комментарий от amm

События – Rx

А можно повесить событие на изменение вычисляемой функции (скажем остатка)? И Rx как я понимаю это вообще про фронтенд, а я про события изменения persistent данных.

ограничения – assert

Классно, а куда его вставлять? Можно как-то сделать assert не в control flow, а вообще?

агрегации – linq в C#, streams в Java, pandas в Python,

Не совсем понял причем тут linq. Агрегации это создание новых объектов в зависимости от значения условия (задаваемого функцией). https://ru-documentation.lsfusion.org/pages/viewpage.action?pageId=65241436 https://ru-documentation.lsfusion.org/pages/viewpage.action?pageId=4161551

К тем же streams это не имеет никакого отношения.

сессии, формы – тоже есть на уровне библиотек. Зачем это все тащить на уровень языка, если язык и так дает средства для реализации данных возможностей в виде модулей?

Ну затем же зачем JSX сделали в React. Так проще и выразительнее, особенно если это абстракции общего назначения.

Multipart/form-data по умолчанию? Как контролируется этот процесс? А если нужен application/x-www-form-urlencoded?

Указываешь опцию BODYURL и собственно url и запрос идет application/x-www-form-urlencoded. Собственно в lsFusion очень неплохо систематизирован весь тот огород в HTTP который рос годами.

Она везде есть, и тоже «в одну строку».

https://ru-documentation.lsfusion.org/pages/viewpage.action?pageId=51216541 Вот прям так (что можно даже таблицы параметрами передавать), см. exportSQL. Большая у вас строка получится.

Но насколько сложно поднять http-сервер для приема данных? Он уже встроен (и в веб-сервер и в сервер-приложений в ограниченном виде)

https://ru-documentation.lsfusion.org/pages/viewpage.action?pageId=55935068

Или интегрировать новый протокол (например grpc)? И опять вопрос: почему эта функциональность включается в язык, а не в платформу?

Можно спуститься на уровень Java всегда. Критерии включения в язык - частота использования и / или выразительность результата. Если часто используется и / или красиво выглядит в языке - включается (как более выразительный и простой способ использования), нет остается в виде библиотек / API. Или по вашему API, или использование библиотеки проще понять / выучить чем язык?

NitroJunkie
() автор топика
Последнее исправление: NitroJunkie (всего исправлений: 1)
Ответ на: комментарий от amm

Это потому что ООП надо учиться правильно применять, а разработчики, пишущие бизнес-код, оперируют другими «абстракциями». Им это просто не надо и не интересно.

Вы думаете в бизнес-приложениях нет наследования и полиморфизма? Его там часто больше чем в системном программировании. Ну и тем кто писал на C до C++ тоже не нужно было ООП (в смысле, что «не надо и не интересно»), когда были if’ы, только говнокод такой получался, что со временем C++ стал популярнее C.

Иерархия наследования на 50 классов?

Ну это в сумме элементов в графе, если построить граф наследования на каком-нибудь абстрактном Ledger или Batch.

В этом мире вообще мало очевидных вещей, даже таблица умножения неочевидна, только все ее знают, потому что учат в начальной школе. Реляционная модель очень простая и объясняется на пальцах, что там можно не понимать? Таблицы соединили, строки отфильтровали, столбцы выбрали, при необходимости значения сгруппировали, и затем отсортировали. Когда доходит до реализации, то да, понимание того как оно внутри работает дается нелегко. А с кортежами в чем проблема? Достаточно воспринимать их как значимые типизированные структуры данных. Кортежи есть в любом современном языке.

Не знаю как вы объясняете соединение. То есть я знаю как формально это объяснить, но толку от этого ноль так как на практике такое формальное объяснение не поможет ни разу. Но я к чему функции (в lsFusion) объясняются куда проще чем таблицы, так как функции гораздо чаще и привычнее людям (они их в школе изучали скажем).

NitroJunkie
() автор топика
Ответ на: комментарий от anonymous

Не стал развивать это проект так как вэб технологии ИМХО мне не нравятся и связываться с вэб вынужден лишь потому, что солдату не положено обсуждать приказы командира.

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

Не мечите бисер перед свиньями

Владимир 123456

anonymous
()
Ответ на: комментарий от anonymous

а на форумах как обычно грязью поливали через пост и передумал.

Этот форум такой же по этике как и остальные.

Владимир 123456

anonymous
()
Ответ на: комментарий от anonymous

Свиньи умные животные, знают, что бисер совершенно бесполезен.

Так разве речь о том, что на форумах глупые?
Проблема в что на форумах много

Умных СВИНЕЙ

Владимир 123456

anonymous
()
Ответ на: комментарий от NitroJunkie

А можно повесить событие на изменение вычисляемой функции (скажем остатка)? И Rx как я понимаю это вообще про фронтенд, а я про события изменения persistent данных.

Ну я не понимаю контекста ваших терминов. Rx – это реализация паттерна Observer. Какие события обрабатывать, это уже детали реализации, можно клики от мышки, а можно и приход данных из очереди сообщений.

Классно, а куда его вставлять? Можно как-то сделать assert не в control flow, а вообще?

А куда он у вас вставляется? Где отрабатывает? Я не увидел ответа на вопрос.

Не совсем понял причем тут linq. Агрегации это создание новых объектов в зависимости от значения условия (задаваемого функцией).

«Под агрегацией понимается создание уникального (агрегируемого) объекта соответствующего каждому не NULL значению некоторого агрегируемого свойства. Для такого объекта предполагается наличие свойств, которые отображают этот объект на каждый из параметров агрегируемого свойства, и наличие свойства, которое, наоборот, отображает параметры агрегируемого свойства на этот объект.»

Еще раз: я не понимаю вашей терминологии, как не понимают ее 99.(9)% разработчиков. В моем понимании агрегация это https://docs.microsoft.com/en-us/dotnet/api/system.linq.queryable.aggregate?view=netframework-4.8.

Ну затем же зачем JSX сделали в React. Так проще и выразительнее, особенно если это абстракции общего назначения.

Jsx не новый язык, это расширение касается только разметки, в итоге имеем все тот же js. Думаю, сделано, чтобы явно отделить представление от логики. В том же .net для этого есть xaml.

Вот прям так (что можно даже таблицы параметрами передавать), см. exportSQL. Большая у вас строка получится.

Таблица параметром? На каком уровне экранирование строки происходит?

По поводу одной строки: есть dapper, есть linq2db. Есть еще куча легковесных ORM.

Или по вашему API, или использование библиотеки проще понять / выучить чем язык?

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

amm
()
Ответ на: комментарий от NitroJunkie

Вы думаете в бизнес-приложениях нет наследования и полиморфизма?

В этой области, чем проще, тем лучше. Я не видел, чтобы именно бизнес-код был написан с иcпользованием принципов SOLID.

Ну и тем кто писал на C до C++ тоже не нужно было ООП

Glib, ooc.pdf.

Не знаю как вы объясняете соединение. То есть я знаю как формально это объяснить, но толку от этого ноль так как на практике такое формальное объяснение не поможет ни разу.

Декартово произведение таблиц, отфильтрованное по необходимому условию. :)

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

Вы наверное в мат. школе учились, если так считаете.

amm
()
Ответ на: комментарий от amm

Ну я не понимаю контекста ваших терминов. Rx – это реализация паттерна Observer. Какие события обрабатывать, это уже детали реализации, можно клики от мышки, а можно и приход данных из очереди сообщений.

Речь о других событиях. О событиях изменения данных. Причем что важно в том числе вычисляемых данных. Скажем написали вы функцию

class X {

List<Y> ys;

int sumX() {

   int sx=0;
   for(Y y : ys)
      if(y.x() > 5)
        sx += y.h();
   return sx;
}

}

В lsFusion вы можете повесить событие на изменение sumX, как если бы это было полем с setter’ом. И платформа сама будет вызывать событие и инкрементально (!) вычислять sumX. Как тут очередь событий поможет?

А куда он у вас вставляется? Где отрабатывает? Я не увидел ответа на вопрос.

Оно глобально отрабатывает. То есть объявляется как класс грубо говоря. Как если бы в примере выше написать.

class X {
...
   assert sumX() > 5;
...
}

Проверяет при любом изменении данных (естественно предполагается что данные изменяются блоками - сессиями / транзакциями)

Еще раз: я не понимаю вашей терминологии, как не понимают ее 99.(9)% разработчиков. В моем понимании агрегация это https://docs.microsoft.com/en-us/dotnet/api/system.linq.queryable.aggregate?view=netframework-4.8.

Нет, агрегация, это ближе к термину из классического ООП. Когда один объект (или несколько объектов) агрегирует другой. Правда при выполнении какого то условия.

class X {
...
    aggr Y y if sumX() > 5; // y - поле X,  для класса Y создается поле x с ссылкой на x; 
...

}

Jsx не новый язык, это расширение касается только разметки, в итоге имеем все тот же js. Думаю, сделано, чтобы явно отделить представление от логики. В том же .net для этого есть xaml.

Ну то есть все платформы добавляют свои языки, кто-то больше, кто-то меньше. Собственно если ты не вводишь новые абстракции нет смысла добавлять новый язык, если вводишь, то есть.

Таблица параметром? На каком уровне экранирование строки происходит?

При выполнении все табличные параметры загружаются во временные таблицы и подставляются в запрос.

По поводу одной строки: есть dapper, есть linq2db. Есть еще куча легковесных ORM.

Очень интересно посмотреть, сколько 2 строки из моего примера будут выглядеть с использованием этих библиотек и где будет выразительнее.

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

Чем проще? Какая разница учить параметры, их порядок названия, и скажем механизмы их соответствия друг другу, или простенькую LL грамматику. Собственно тот же SQL можно легко было оформить как API / библиотеку, только учить его при этом на мой взгляд было бы существенно сложнее.

На самом деле изначально lsFusion и был java-библиотекой, но разработчики (во всяком случае без опыта в ИТ) с трудом въезжали, с языком все пошло гораздо проще и легче.

NitroJunkie
() автор топика
Последнее исправление: NitroJunkie (всего исправлений: 1)
Ответ на: комментарий от amm

В этой области, чем проще, тем лучше.

Ну так с наследованием он и выглядит проще, чем с тонной императивных if’ов

Я не видел, чтобы именно бизнес-код был написан с иcпользованием принципов SOLID.

Потому что наследование и полиморфизм в платформах разработки бизнес-приложений поддерживается через одно место. В отличии от lsFusion. Где наследование и полиморфизм используются повсеместно.

Glib, ooc.pdf.

Вот тут можно чуть подробнее? Вы к чему это?

Декартово произведение таблиц, отфильтрованное по необходимому условию. :)

Не, так я тоже умею пояснять. Только толку от такого объяснения для человека разрабатывающего на SQL очень мало, так как в голове это какой-то суррогатный не имеющий ничего с практикой процесс.

Вы наверное в мат. школе учились, если так считаете.

Да нет, вроде в программу 9 класса входит: https://www.nado5.ru/e-book/matematika-9

NitroJunkie
() автор топика
Ответ на: комментарий от NitroJunkie

Ну то есть все платформы добавляют свои языки, кто-то больше, кто-то меньше. Собственно если ты не вводишь новые абстракции нет смысла добавлять новый язык, если вводишь, то есть.

Угу.

Владимир 123456

anonymous
()
Ответ на: комментарий от NitroJunkie

В lsFusion вы можете повесить событие на изменение sumX, как если бы это было полем с setter’ом. И платформа сама будет вызывать событие и инкрементально (!) вычислять sumX. Как тут очередь событий поможет?

Ээээ, почему событие вешается на sumX, если внутри нее все вычисления и происходят? Логичнее вешать событие на изменение ys.

Оно глобально отрабатывает. То есть объявляется как класс грубо говоря. Как если бы в примере выше написать.

Действительно, вариантов масса, куда это воткнуть, выбрать сложно. Но не невозможно.

Нет, агрегация, это ближе к термину из классического ООП. Когда один объект (или несколько объектов) агрегирует другой. Правда при выполнении какого то условия.

Здесь вообще из кода ничего не понял.

Очень интересно посмотреть, сколько 2 строки из моего примера будут выглядеть с использованием этих библиотек и где будет выразительнее.

Для начала тоже хотелось бы узнать что здесь происходит? :)

EXPORT TABLE FROM bc=barcode(Article a) WHERE name(a) LIKE '%Мясо%'; // получаем все штрих-коды товаров с именем мясо

Откуда и куда получаем?

EXTERNAL SQL 'jdbc:mysql://$1/test?user=root&password=' EXEC 'select price AS pc, articles.barcode AS brc from $2 x JOIN articles ON x.bc=articles.barcode' PARAMS 'localhost',exportFile() TO exportFile; // читаем цены для считанных штрих-кодов

Откуда читаем? Что такое exportFile()? И где ссылка на считанные ранее штрих-коды?

    // для всех товаров с полученными штрих-кодами записываем цены
    LOCAL price = INTEGER (INTEGER);
    LOCAL barcode = STRING[30] (INTEGER);
    IMPORT FROM exportFile() TO price=pc,barcode=brc;
    FOR barcode(Article a) = barcode(INTEGER i) DO 
        price(a) <- price(i);

Здесь тоже мало что понятно: объявили две переменные, присвоили им значения из предыдущего запроса, побежали циклом по каким-то артикулам (видимо, мясным), присвоили полю price значение из поля price переменной i типа INTEGER (серьезно?). Все что смог расшифровать.

Чем проще? Какая разница учить параметры, их порядок названия, и скажем механизмы их соответствия друг другу, или простенькую LL грамматику. Собственно тот же SQL можно легко было оформить как API / библиотеку, только учить его при этом на мой взгляд было бы существенно сложнее.

Изначально непонятно что из себя представляет новый язык: даже hello world иногда бывает проблемой. :) Какие парадигмы язык поддерживает, что у него с системой типов (типизация сильная/слабая, статическая/динамическая), ленивый он или энергичный, какие «батарейки» идут в комлекте, насколько качественная среда разработки? И еще много вопросов. Но основной – зачем он вообще нужен? :)

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

amm
()
Ответ на: комментарий от NitroJunkie

Ну так с наследованием он и выглядит проще, чем с тонной императивных if’ов

Нет. Разобраться всегда легче в программе, состоящую из простых if и for. Расширить и покрыть тестами сложнее, но когда вся кодовая база на руках и владеет ей одна команда, это не проблема.

Glib, ooc.pdf.

Вот тут можно чуть подробнее? Вы к чему это?

https://www.cs.rit.edu/~ats/books/ooc.pdf

К тому, что на C можно писать в ООП стиле, и все крупные проекты на C этим «грешат».

Да нет, вроде в программу 9 класса входит: https://www.nado5.ru/e-book/matematika-9

Объясните, как это связано с функциями в lsFusion?

amm
()
Мой дядя САМЫХ ЛУЧШИХ ПРАВИЛ, когда не в шутку занемог, он  
уважать 1С заставил и лучше выдумать не мог

Владимир 123456

anonymous
()
Ответ на: комментарий от amm

Ээээ, почему событие вешается на sumX, если внутри нее все вычисления и происходят? Логичнее вешать событие на изменение ys.

Так сама коллекция ys может не поменяться, а может поменяться функция x в одной из ее элементов и тогда событие должно сработать. Или наоборот поменяться функция z в этом элементе не имеющая отношение к sumX и тогда событие не должно сработать. Представляете что такое инкрементальные вычисления?

Действительно, вариантов масса, куда это воткнуть, выбрать сложно. Но не невозможно.

Опять таки нужно втыкать assert’ы на обновления ys, на обновление Y.x, на обновление Y.h и т.д. и т.п. Причем самому считать как инкрементально обновить sumX (скажем если к h добавилось 5, то не надо пересчитывать весь sumX, а можно к старому значению добавить 5 если x > 5).

При этом если вы измените sumX и забудете добавить assert, то будут проблемы. Спрашивается, нафига это все надо, если это может делать сама платформа.

Здесь вообще из кода ничего не понял.

Если sumX() становится больше 5, создается объект Y и заполняются соответствующие поля (в частности y в классе X) и наоборот (объект удаляется когда становится меньше). Частный случай безусловное создание - обычная агрегация, когда просто пишут class X { Y y = new Y(); }, тогда по сути y создается всегда и автоматически проставляется и y и обратная ссылка X.this. В принципе слово aggr можно убрать.

Откуда и куда получаем?

Из приложения (базы). В переменную exportFile типа табличный файл.

И где ссылка на считанные ранее штрих-коды?

x.bc видите в запросе?

Этот exportFile передается параметром как таблица (временная).

побежали циклом по каким-то артикулам

Циклом как раз по полученному результату sql запроса (он перезаписывает переменную exportFile)

Изначально непонятно что из себя представляет новый язык: даже hello world иногда бывает проблемой. :)

Ну не знаю работа с LL грамматиками в принципе одинаковая. Что Foxpro, что PL/SQL, что ABAP. То есть если умеешь каким-нибудь PL/SQL пользоваться, остальные это всего лишь его диалекты, то есть новые слова как вы говорите (грубо говоря как испанский и итальянский языки).

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

Поверьте к библиотекам вопросов не меньше. Что в каком порядке, какая связь между методами и порядками и т.п.

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

Здрасьте не будет. Вы грубо говоря просто синтаксические правила оформляете в неявные связи между параметрами / разными методами, которые описаны в лучшем случае где-то в документации. И именно по этому у всех популярных продуктов претендующих хоть на минимальный paradigm shift есть свои языки / диалекты (начиная от Jenkins, ANTLR и заканчивая всякими новомодными React’ами и .Net (со своим LINQ)).

NitroJunkie
() автор топика
Ответ на: комментарий от amm

Нет. Разобраться всегда легче в программе, состоящую из простых if и for. Расширить и покрыть тестами сложнее, но когда вся кодовая база на руках и владеет ей одна команда, это не проблема.

Тогда объясните, как ООП стал стандартом в отрасли? Когда еще никакого автоматического тестирования не было (кстати как раз говнокод из if’ов и принято покрывать тестами, с ООП архитектура обычно более прозрачна и надежна).

Но вообще тут ключевое слово расширять (!). Это чуть ли не одно из основных требований для бизнес-приложений.

К тому, что на C можно писать в ООП стиле, и все крупные проекты на C этим «грешат».

Ну круто. Что не отменяет того факта, что C++ в битве язык vs библиотека выщемил C с большей части рынка. Потом тоже самое сделали Java / .Net в отношении C++ в той же битве.

Объясните, как это связано с функциями в lsFusion?

Ну тем что самое базовое фундаментальное в lsFusion это и есть функции (свойства это по сути объединение функций и полей, также как в C# свойства - объединение полей и методов). Чисто математические функции, без переменных / состояний / потоков выполнения. И тоже задаются разными высокоуровневыми операторами - операндами, композиции, интегралы (по сути группировки в lsFusion) и т.п.

А те же таблицы и декартовым произведения, хорошо если в универе изучают (и то в редких).

NitroJunkie
() автор топика

Как к СКД и управляющим формам относитесь?

Вопрос задан не к тому, что 1С хороша …

Владимир 123456

anonymous
()
Ответ на: комментарий от anonymous

Как к СКД и управляющим формам относитесь?

СКД: https://habr.com/ru/company/lsfusion/blog/468415/#excess https://habr.com/ru/post/536080/#comment_22498394

Управляемые формы: https://habr.com/ru/company/lsfusion/blog/468415/#forms

Вкратце СКД - какой-то странный мутант. Управляемые формы - жертва простотой и функционалом ради масштабируемости. Короче очень странные решения.

NitroJunkie
() автор топика
Ответ на: комментарий от NitroJunkie

Так сама коллекция ys может не поменяться, а может поменяться функция x в одной из ее элементов и тогда событие должно сработать.

В .net всё есть для реализации данной функциональности: события, интерфейсы INotifyCollectionChanged и INotifyPropertyChanged. Да, писать надо больше, но у вас слишком много магии.

Если sumX() становится больше 5, создается объект Y и заполняются соответствующие поля (в частности y в классе X) и наоборот (объект удаляется когда становится меньше). Частный случай безусловное создание - обычная агрегация, когда просто пишут class X { Y y = new Y(); }, тогда по сути y создается всегда и автоматически проставляется и y и обратная ссылка X.this. В принципе слово aggr можно убрать.

Опять вместо простого if какие-то изыски. :)

Из приложения (базы). В переменную exportFile типа табличный файл.

EXPORT TABLE FROM bc=barcode(Article a) WHERE name(a) LIKE '%Мясо%'; // получаем все штрих-коды товаров с именем мясо

Я не вижу здесь ссылок на exportFile. Как данные с переменной связываются?

x.bc видите в запросе? Этот exportFile передается параметром как таблица (временная).

То есть данные по артикулам передаются в mysql? Не проще цены в приложение вытащить?

Циклом как раз по полученному результату sql запроса (он перезаписывает переменную exportFile)

Перезаписывает? Эта переменная первый раз появилась в sql-запросе. И опять таки я не вижу в цикле ссылки на exportFile. И конструкция price(i) остается загадкой.

Что Foxpro, что PL/SQL, что ABAP. То есть если умеешь каким-нибудь PL/SQL пользоваться, остальные это всего лишь его диалекты, то есть новые слова как вы говорите (грубо говоря как испанский и итальянский языки).

О, про PL/SQL вы хорошо вспомнили (кстати, где он находится в вашей иерархии на пару с T-SQL). Совершенно неудобный и невыразительный язык, застрявший в 80-х. Но он хотя бы понятный в отличии от lsFusion. :)

Поверьте к библиотекам вопросов не меньше. Что в каком порядке, какая связь между методами и порядками и т.п.

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

И именно по этому у всех популярных продуктов претендующих хоть на минимальный paradigm shift есть свои языки / диалекты (начиная от Jenkins, ANTLR и заканчивая всякими новомодными React’ами и .Net (со своим LINQ)).

У Jenkins какой язык расширения? Для чего он нужен?

У ANTLR отдельный язык потому что он нацелен на разные языковые платформы. На любом современном языке парсеры можно описывать синтаксисом самого языка.

Linq – это часть C#. Можно вообще не использовать ql синтаксис, а работать с linq через extension methods.

amm
()
Ответ на: комментарий от NitroJunkie

Тогда объясните, как ООП стал стандартом в отрасли? Когда еще никакого автоматического тестирования не было (кстати как раз говнокод из if’ов и принято покрывать тестами, с ООП архитектура обычно более прозрачна и надежна).

Потому что люди любят buzzwords. Всегда можно сказать, что у нас везде ООП, и продолжать писать программы на if’ах. :)

Но вообще тут ключевое слово расширять (!). Это чуть ли не одно из основных требований для бизнес-приложений.

Видимо, вы работаете с какими-то другими бизнес-приложениями и бизнес-программистами.

Ну круто. Что не отменяет того факта, что C++ в битве язык vs библиотека выщемил C с большей части рынка. Потом тоже самое сделали Java / .Net в отношении C++ в той же битве.

Они все играют совершенно в разных нишах.

Ну тем что самое базовое фундаментальное в lsFusion это и есть функции (свойства это по сути объединение функций и полей, также как в C# свойства - объединение полей и методов).

Концепция свойств проста и понятна. Концепцию ваших функций я не могу понять уже больше года (со статей на хабре). Это у меня проблемы? :)

Чисто математические функции, без переменных / состояний / потоков выполнения. И тоже задаются разными высокоуровневыми операторами - операндами, композиции, интегралы (по сути группировки в lsFusion) и т.п.

Это просто список терминов, аналогии не просматриваются.

А те же таблицы и декартовым произведения, хорошо если в универе изучают (и то в редких).

Странно, вся индустрия сидит на РСУБД, а в университетах базовые понятия не учат.

amm
()
Ответ на: комментарий от amm

В .net всё есть для реализации данной функциональности: события, интерфейсы INotifyCollectionChanged и INotifyPropertyChanged.

Это считай ничего нет.

Да, писать надо больше, но у вас слишком много магии.

Дело не только в том, чтобы писать, а еще изменять / поддерживать / гарантировать и т.п. И да, в магии и есть смысл платформ. Также как в C много магии по сравнению с ассемблером, в Java по сравнению с C++ (там G1 сборщик мусора это вообще чудо чудное), в SQL по сравнению с императивщиной (один CBO чего стоит).

Опять вместо простого if какие-то изыски. :)

Не, тут тоже простой if. Но декларативный, а не императивный (в потоке выполнения). Также как и с assert’ами.

Я не вижу здесь ссылок на exportFile. Как данные с переменной связываются?

Там TO по умолчанию кладет в предопределенное свойство (переменную) exportFile. Но это мы уже немного в дебри залезли.

То есть данные по артикулам передаются в mysql? Не проще цены в приложение вытащить?

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

О, про PL/SQL вы хорошо вспомнили (кстати, где он находится в вашей иерархии на пару с T-SQL). Совершенно неудобный и невыразительный язык, застрявший в 80-х.

Полностью согласен. Причем застрявший именно потому как парадигма так и осталась на уровне непонятной реляционной алгебры, а не доросла до функциональной как в lsFusion (заодно добавив логику представлений)

Что впрочем не мешает Oracle (с Microsoft и их T-SQL - MS SQL и SAP с ABAP’ом) быть одними из самых богатых компаний и иметь самые распространенные продукты на рынке.

У Jenkins какой язык расширения? Для чего он нужен?

Они диалект Groovy емнип используют (как и скажем Gradle). Но я возможно его с NSIS’ом (тулзой для инсталляторов спутал).

Linq – это часть C#. Можно вообще не использовать ql синтаксис, а работать с linq через extension methods.

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

NitroJunkie
() автор топика
Последнее исправление: NitroJunkie (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.