powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Почему мы используем Common Lisp в автоматизации бизнеса
94 сообщений из 94, показаны все 4 страниц
Почему мы используем Common Lisp в автоматизации бизнеса
    #38473664
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поступил вопрос в связи с открытой нами вакансией по Common Lisp:
Зачем вам функциональные языки? ... Типовая компания, ... . Знание торговли, склада, бухгалтерии. Внезапно, ... Lisp.

В вакансиях обсуждение технологий не приветствуется, поэтому пишу здесь.

Common Lisp - это "обычный", императивный язык, хотя про это не все знают.

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

1. Разработка программы происходит без остановки программы.
Можно, не выходя из приложения, добавить и удалить поля класса или поменять число параметров функции.
Уже существующие в памяти объекты при переопределении класса приводятся в соответствие с
новым определением, как при ALTER TABLE
. Стек тоже не ломается. При возникновении исключения, в
отладчике можно направить исполнение "в другое русло" на любом уровне стека с помощью команд "перезапустить
кадр стека" и "вернуть нужное значение из кадра стека". Поэтому, регулярно бывает так: "падаем" на какой-то проверке в отладчик, исправляем ошибку и продолжаем выполнение дальше. Особенно полезно для долго выполняющихся скриптов.

Я немного интересовался аналогами в других языках и пришёл к выводу, что такого больше нигде нет. Если я неправ - киньте в меня тапком, я его внимательно обнюхаю. Особенно интересно будет услышать мнения пользователей J2EE и Visual Basic.

2. Расширяемый компилятор. Можно создавать новые конструкции языка, при "компиляции" которых
компилятор может делать всё, что угодно: читать из базы данных, интернета, создавать другие файлы, использовать информацию о ранее определённых классах и функциях.

С помощью этого технологично реализуются ORM, Embedded SQL, шаблоны, RAII, pattern matching, юнит-тесты.

Других чудес вроде нет. Перечислю просто хорошее: сборка мусора, компиляция в нативный код, полноценные треды, статическая и динамическая типизация, определение методов над встроенными типами, декораторы, комплишн, рефлексия, идентификаторы на Русском языке, слабые ссылки, лямбды, удобная визуализация в отладчике, кроссплатформенный ГУЙ (в лиспворкс).

См. также http://ecovillage.narod.ru/lisp/lisp-tutorial.htm
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38473693
Гхостик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понимаю, макросы в лиспе - половина мощи языка. Вопрос - насколько они легко читаются? Приходится ли поломать голову, чтобы разобраться в нормально написанной год назад конструкции? Не приходится ли писать много комментариев?

Далее, следствия неформата - разве не сложнее найти разработчика, библиотеку, обсудить с кем-то возникающие вопросы? (хотя для последнего есть, на крайний случай, англоязычные форумы).
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474125
goorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну хоть где-то используют лисп да еще и объясняют почему )
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474150
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden,

Прекрасно. Я не буду отрицать всю озвученную вами мощь языка. Хоть и не знаю Lisp, но поверю на слово.

Вопрос один - зачем это нужно торговой компании, занимающейся продажами книг? Я бы не удивился, если бы девелоперская контора этим пользовалась. Но вы? Какие задачи вы решаете, что вам нужно делать на бою ALTER CLASS? Зачем "торговцам" создавать новые конструкции языка? Зачем вам кросс-платформенный ГУЙ?

PS Повторюсь, не воспринимайте мои слова как критику. Считайте это ликбезом для меня.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474234
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГхостикНасколько я понимаю, макросы в лиспе - половина мощи языка. Вопрос - насколько они легко читаются?
Нормально читаются. Хотя чем мощнее ружье, тем больше будет дырка в голове, если выстрелить в себя.

Какие задачи вы решаете, что вам нужно делать на бою ALTER CLASS?
Не то, что "нужно" - полезно. Для почти любых задач полезно. Я вроде расписал довольно подробно, какие выгоды.

Но если это непонятно, давайте попробуем по аналогии. Представьте себе, что у меня и у вас есть какой-то SQL сервер и система торговли книжками. Но я не знаю о конструкции ALTER TABLE и не пользуюсь ей. Убедите меня в полезности ALTER TABLE.

Один пример новой конструкции языка, используемой у нас:
def-fb-patch. Её аргументы - название, комментарий и тело - скрипт на лиспе, который осуществляет шаг эволюции базы, например, делает alter table. Все такие патчи хранятся в одном файле. Благодаря тому, что это макрос, мы можем знать, какие патчи применены к данной базе, какие нет, когда и кем они применены.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474271
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenЯ вроде расписал довольно подробно, какие выгоды.
Да, расписали. Но в общем. Есть конкретика по задачам? Какие-такие задачи (бизнесовые) требуют Lisp?

buddenНо я не знаю о конструкции ALTER TABLE и не пользуюсь ей. Убедите меня в полезности ALTER TABLE.
Чисто теоретически оно вам и не нужно ничего про неё знать, так как нет задач, требующих изменение БД на бою.

Это я к чему все. Не потому, что у вас все неправильно (я не могу об этом судить, ведь вас и не знаю). Я не вижу сферы применения у вас достаточно редкого языка. Поэтому и интересуюсь выполняемыми задачами. Ведь для скриптов можно применять кучу разных и очень популярных движков (C#, JavaScript, Lua, т.п.). Сервер приложений - ASP.NET/WCF/C# (ну или, если Delphi, DataSnap кажется). Онлайн-изменения на бою - это 1) очень неправильная идеология 2) неужели у вас настолько чувствительная к доступности система, что не допускает рестарта сервера приложений в течении условно минуты?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474336
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenCommon Lisp - это "обычный", императивный язык, хотя про это не все знают.


Это неправда!
Во-первых, это лучший в мире язык программирования, что уже делает его необычным.
Во-вторых, это гибридный язык, он не императивный, и не функциональный, он -- и такой, и такой.
Он не процедурный, и не объектно-ориентированный, он -- и такой, и такой.


buddenЯ немного интересовался аналогами в других языках и пришёл к выводу, что такого больше нигде нет. Если я неправ - киньте в меня тапком, я его внимательно обнюхаю. Особенно интересно будет услышать мнения пользователей J2EE и Visual Basic.


Ну, scheme ещё есть...
Может быть clojure, хотя я не знаю точно, есть там CONDITIONS или CONTINUATIONS.


buddenДругих чудес вроде нет. Перечислю просто хорошее: сборка мусора, компиляция в нативный код, полноценные треды, статическая и динамическая типизация, определение методов над встроенными типами, декораторы, комплишн, рефлексия, идентификаторы на Русском языке, слабые ссылки, лямбды, удобная визуализация в отладчике, кроссплатформенный ГУЙ (в лиспворкс).

См. также http://ecovillage.narod.ru/lisp/lisp-tutorial.htm

В общем-то мне это всё понятно...
Не понятно, при чём тут Delphi.
Firebird -- ещё ладно, СУБД и СУБД.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474342
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, давайте последовательно. Тема ALTER TABLE не раскрыта. У нас тут профильный форум, я вижу вы с SQL работаете. Вы что, всерьёз считаете, что ALTER TABLE не нужен?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474346
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГхостикНасколько я понимаю, макросы в лиспе - половина мощи языка. Вопрос - насколько они легко читаются?


Не всегда макросы используются и вовсе они не половина мощи языка. 1/5, я бы сказал.
Потому что во-первых есть ещё reader macros, и все остальные возможности. Во-вторых, можно
самому их вообще не использовать.

Они читаются на самом деле настолько хорошо, насколько хорошо ты их напишешь.
Примерно треть всех стандартных конструкций языка -- на самом деле макросы.
Например, IF. Ну нормально он читается, все редакторы понимают (и поймут твои макросы, если ты их нормально напишешь).

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


Зависит от обстоятельств.

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

Легче прочитать код и понять.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474347
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79budden,

Прекрасно. Я не буду отрицать всю озвученную вами мощь языка. Хоть и не знаю Lisp, но поверю на слово.

Вопрос один - зачем это нужно торговой компании, занимающейся продажами книг? Я бы не удивился, если бы девелоперская контора этим пользовалась. Но вы? Какие задачи вы решаете, что вам нужно делать на бою ALTER CLASS? Зачем "торговцам" создавать новые конструкции языка? Зачем вам кросс-платформенный ГУЙ?

PS Повторюсь, не воспринимайте мои слова как критику. Считайте это ликбезом для меня.

Потому что садится один толковый программер, или 2, и пишут всё за месяц.
А пользователям пофигу на чём, лишь бы работало...
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474363
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenArm79, давайте последовательно. Тема ALTER TABLE не раскрыта. У нас тут профильный форум, я вижу вы с SQL работаете. Вы что, всерьёз считаете, что ALTER TABLE не нужен?

Я? Я считаю, что для торговой компании нет никакой необходимости в изменении БД. Чистое ИМХО: большинство возникающих задач покрываются типовыми решениями. Типа 1С и так далее. Редкие (я подчеркиваю) хотелки вне типовых решений - аутсорс. Вот, MasterZiv тему рубит :-)

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

Может, у вас сайт есть?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474378
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, ну вот, например, меняется закон. Например, добавили в книжку поле "возрастные ограничения". Его надо вывести в прайс-листе. Наши действия?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474381
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenArm79, ну вот, например, меняется закон. Например, добавили в книжку поле "возрастные ограничения". Его надо вывести в прайс-листе. Наши действия?
Что, так неожиданно поменялся, что вы о проекте закона не знали? На фрилансе вам за 3 тысячи и поле добавят, и в прайс выведут, и так далее. Да, и тема Лиспа в этой задаче не раскрыта.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474401
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
Онлайн-изменения на бою - это 1) очень неправильная идеология
Я, в общем-то и не писал, что это всегда хорошо. Мы используем это, в основном, в разработке и отладке приложения, а в промышленной базе мы пользуемся отладчиком чаще для изучения ошибок. Исправления вносим на отладочной, проверяем и только потом переносим на боевой сервер.

В случае какого-нибудь скрипта перекачки данных из одной базы в другую, если скрипт идёт час, а ошибку исправить 1 минута, то мы экономим полчаса, по сравнению с другими скриптовыми языками. У нас каждую ночь идёт скрипт длительностью около двух часов. Он сложный и иногда в нём возникают ошибки из-за кривых входных данных или сбоев оборудования. А утром база должна быть предоставлена пользователям. Трудно сосчитать, сколько часов ночной работы сэкономлено благодаря отладчику лиспа.

что не допускает рестарта сервера приложений в течении условно минуты?
Условно минуты или точно минуты? У вас есть сервер приложений? Вы его отлаживаете? Сколько времени у вас занимает поменять одну строчку в приложении и перезапустить сервер?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474428
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, ну если у нас аутсорс-фриланс, то тогда лисп точно не нужен.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474431
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenArm79, ну вот, например, меняется закон. Например, добавили в книжку поле "возрастные ограничения". Его надо вывести в прайс-листе. Наши действия?
Забавный подход... Такие вещи (атрибуты) не делаются полями таблиц, а делаются в виде справочников (иногда плавающих).
У меня, к примеру, в ПО можно прикрутить к любому объекту любой параметр и установить/получить его значение с помощью процедур. И это делается без изменения ПО и перезапуска сервера .
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474438
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden,

При всем уважении. У вас столько разных баз, с разной структурой, что вы не можете один раз написать скрипт с учетом кривизны данных? Фраза про оборудование немного смущает. Это насколько часто оно должно ломаться, чтобы упоминать об этом?

Мои сервера приложений рестартуют в течении нескольких секунд. Если это веб-сервисы, то они хостятся IIS (который может по своему усмотрению перезапускать, да и при правках в Web.config).

Отлаживаю все приложения, естественно, на своем компьютере, прогоняю через тесты по значимым моментам.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474448
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, Delphi - по ряду причин.

С библиотеками у Дельфи ситуация в чём-то лучше, чем у CL. Поэтому
стараемся сочетать сильные стороны.

Насчёт "сядет и за два месяца напишет" - это миф. Да, разработка на лиспе идёт быстрее,
но нужно учесть, сколько тысяч человеко-лет вложено в библиотеки для того же Дельфи.
Не в 10000 раз же этот компьютерный гений быстрее работает.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474459
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, вы уж извините за вопрос. Вы мне много вопросов задали. Какие у вас задачи?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474462
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и ещё я спросил "Сколько времени у вас занимает поменять одну строчку в приложении и перезапустить сервер? ", а вы мне ответили, сколько времени сервера приложений рестартуют. Это ответ не совсем на тот вопрос.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474467
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenArm79, вы уж извините за вопрос. Вы мне много вопросов задали. Какие у вас задачи?

У меня масса задач. В основном - Server Side. Высокоскоростное общение с клиентами, ЭЦП, интеграционные задачи, SQL (в части OLTP). В последнее время Siebel ковыряю.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474470
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanbuddenArm79, ну вот, например, меняется закон. Например, добавили в книжку поле "возрастные ограничения". Его надо вывести в прайс-листе. Наши действия?
Забавный подход... Такие вещи (атрибуты) не делаются полями таблиц, а делаются в виде справочников (иногда плавающих).
У меня, к примеру, в ПО можно прикрутить к любому объекту любой параметр и установить/получить его значение с помощью процедур. И это делается без изменения ПО и перезапуска сервера .
Я рад, что у вас такое славное "ПО", только не совсем понятно, что вы под этим понимаете. А что такое "процедура"? Она находится внутри "ПО" или снаружи?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474474
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenи ещё я спросил "Сколько времени у вас занимает поменять одну строчку в приложении и перезапустить сервер? ", а вы мне ответили, сколько времени сервера приложений рестартуют. Это ответ не совсем на тот вопрос.

Одну строку? Открыть студию (секунд 20-30), поменять (минута), перекомпилировать (пару секунд), прогнать тесты (не более минуты), выложить библиотеку на сервер (минута), перезапустить сервер (несколько секунд)
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474482
Нелояльный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden, у вас бизнес-логика где-то сосредоточена или разбросана повсюду?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474485
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, вот, SQL. Хорошо. Вы alter table делаете или нет?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474493
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenчто такое "процедура"? Она находится внутри "ПО" или снаружи?
Та, что пишется на PSQL, по сути запрос, завернутый в обертку на стороне сервера (FB в данном случае).

П.С. Не завидую я тем, кто поддерживает кривое архитектурное решение...
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474496
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нелояльный, раньше была в основном на сервере БД. Теперь новую в основном пишем на лиспе, а хранимки используем там, где критична скорость.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474504
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenArm79, вот, SQL. Хорошо. Вы alter table делаете или нет?

Конечно же нет :-). SSDT наше все. Я делаю правки в проекте, а накат на сервер - другая история
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474516
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman, на вопрос вы, однако, не ответили. Являются ли процедура частью ПО?

Само то, что в FB можно написать хранимую процедуру без перезапуска сервера, как вы говорите - это проявление родства между SQL серверами и лиспом. alter table = defclass, alter procedure = defun. Потому я в начале темы и привёл аналогию между defclass и alter table (хотя это скорее будет create or alter table). А можно ли сделать alter procedure в программе на C# или Delphi? Вообще говоря, нет.

Если сравнивать FB и лисп, то возможности по отладке, управлению транзакциями, мониторингу, межпроцессному взаимодействию, чтению-записи файлов, хранению контекста, диалогу с пользователем в лиспе несравнимо лучше. Мы же не от хорошей жизни сделали третье звено. Замучались отлаживать хранимки. Возникает в хранимке где-нибудь исключение, а место ошибки не показывает. Ищи потом полдня.

Ну и PSQL - язык, конечно, убогий до слёз. Длина идентификатора недостаточная, пространств имён нет, структур нет. Ничего нет.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474520
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, ну так вы структуру таблиц меняете?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474529
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenArm79, ну так вы структуру таблиц меняете?

Sql Server Data Tool. В нем актуальное описание таблицы. Я его правлю, как мне угодно. При накате БД актуализируется со своим описанием. С любого промежуточного состояния, включая начальное - пустое.

Иными словами я руками на сервер не лезу с Alter Table, а пользуюсь проверенным инструментом.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474537
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, а SSDТ внутри себя разве не alter table вызывает, когда вы правите описание таблицы?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474538
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenЯвляются ли процедура частью ПО?
Это часть БД. Такая часть, которая годами не меняется, ибо простота - залог успеха, долговечности и универсальности. Не нужно менять таблицы, не нужно менять код, не нужно ничего перезапускать: все делается на лету и доступно мгновенно всем клиентам.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474542
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenНу и PSQL - язык, конечно, убогий до слёз. Длина идентификатора недостаточная, пространств имён нет, структур нет. Ничего нет.
Я так понимаю, что это ваше детище и вы отстаиваете свое решение, как единственное верное даже несмотря на простейшие просчеты в архитектуре?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474553
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenArm79, а SSDТ внутри себя разве не alter table вызывает, когда вы правите описание таблицы?

Уважаемый, к чему вы ведете речь? Что структура БД может меняться? Я с вами не спорю. Так же как и используемые в работе классы и так далее. Ничто в мире не статично.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474594
Нелояльный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenЗамучались отлаживать хранимки. Возникает в хранимке где-нибудь исключение, а место ошибки не показывает. Ищи потом полдня.И отладчик в IBE не показывает?buddenНу и PSQL - язык, конечно, убогий до слёз. Длина идентификатора недостаточная, пространств имён нет, структур нет. Ничего нет.Такое бывает после знакомства с 1С или подобными системами. Но это другой подход. Для структур есть и соответствующие БД, такие как Cache. Этот "убогий до слёз" превосходно работает с реляционными БД. Мне не доводилось видеть хороших решений при скрещивании этих двух парадигм.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474698
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, наконец-то началось настоящее рубилово. Извините, мне надо поработать. Чуть попозже отвечу
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474753
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, вы хотите знать куда я веду или для чего я использую лисп?
Что структура БД может меняться? Я с вами не спорю.

Мне сложно вас понять. Как не спорите, а это что вы раньше писали?
Чисто теоретически оно вам и не нужно ничего про неё знать, так как нет задач, требующих изменение БД на бою.

Что значит нет задач? Мы уже пришли к тому, что не только я, но и вы сначала меняете базу отладочную и потом накатываете изменения на промышленную. Значит, промышленная БД тоже меняется. И меняется она, я надеюсь, вы признаете, с помощью alter table, хотя ваш инструмент позволяет вам об этом не задумываться. Согласны или нет?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474771
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman, я не считаю свою архитектуру единственно правильной, но она одна из правильных. У нас реализована более-менее обычная трёхзвенка, правда, без ORM и на экзотическом языке сервера приложений.

Вы же в своём проекте фактически реализовали вторую реляционную структуру поверх уже существующей реляционной структуры СУБД. Я такое тоже делал, когда это было нужно (для ввода опросных листов переменной структуры и для ввода данных экспериментов переменной структуры). Такое решение имеет свои плюсы и минусы и у него есть своя область применения.

Кроме того, когда вы говорите, что вам не нужно менять код, из этого можно сделать только вывод о том, что ваше приложение очень простое и в нём нет изменчивой бизнес-логики. Из этого опять же не следует, что таковы все приложения.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474779
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden,

1) Я в рубилове не участвую. Я исхожу из посылки, что если у вас рабочее решение, то оно хотя бы в силу этого вполне обосновано. У меня нет желания кого-либо критиковать, особенно если учесть тот факт, что для критики нужно знать поставленные цели и архитектуру прикладного решения. Ни того, ни другого я не знаю.

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

3) Безусловно, я признаю, что промышленная БД может и будет меняться. Но я плохой образец для проведения аналогий. Несмотря на то, что я работаю не программистской конторе, выполняемые мной работы не имеют типовых решений. И я вынужден проектировать и реализовывать уникальные в своем роде решения. Но если есть возможность, я стараюсь по максимуму использовать промышленные наработки. Ибо велосипед остается велосипедом. Если участь, что организация, где я работаю, имеет интересы в огромном количестве областей, то это неудивительно. Тут и штат программистов немаленький. Но даже у нас тенденция на максимальное использование аутсорсеров.

Единственное, что я у вас хотел выяснить за все эти страницы осуждения, так это тип задач, для которых вы применяете Lisp. Это специфичный и редкий инструмент. И мне реально непонятно, зачем его использовать, если у вас уже есть Delphi, и его возможностей с лихвой хватает для почти любой прикладной задачи. Говорю, как бывший программист Delphi. Просто скажите, с чем Delphi не справилось, но с помощью Lisp вы оказались на коне.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474788
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenКроме того, когда вы говорите, что вам не нужно менять код, из этого можно сделать только вывод о том, что ваше приложение очень простое и в нём нет изменчивой бизнес-логики.
Оно как раз весьма не простое и перекомпиляция и изменение структуры бд может принести кучу сюрпризов. Я и среагировал на тот пример, когда нужно добавить возраст ограничения к книге. Один из последних примеров: понадобилось написать выгружалку данных в госреестр, а для исключения дублирования добавить признак выгрузки. Для чего был добавлен параметр и выгружалка просто проставляла этот признак. На существующее ПО это никак не повлияло.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474796
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нелояльный, я опробовал на практике достаточно много разных подходовв. Моя прошлая система на MS SQL (таблиц около 100, жила и развивалась лет 8 до прекращения бизнеса) была именно такой: вся бизнес-логика на сервере. Я был противником трёхзвенки и кричал на весь мир "вот как надо программировать, никаких трёхзвенок, sql рулит". Я и сейчас высоко ценю SQL - гениальная вещь.

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

Представьте себе такой мысленный эксперимент. Есть у вас ваш Firebird, но когда на сервере FB происходит Exception, появляется окошко "just in time debugging", можно запустить IBE и посмотреть место, где исключение возникло, глянуть переменные, вычислить что-то. Согласитесь, вот так надо бы работать в XXI веке. В FB (во всяком случае по состоянию на 2.5) такого нет, в MS SQL 2000, с которым я последним работал, этого не было. Думаю, и сейчас ещё такого там нет. Хотя если кто положит такую инфу в тапок и кинет в меня - начну копить на MS SQL :)

Вот ради такого удобства мы и перешли на трёхзвенку и теперь такое удобство у нас это есть.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474816
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, ну так и торговля бывает разная. Бывают клиенты со своими требованиями по оформлению документов, бывают хитрые управленческие отчёты, бывает просто очень большой объём данных, при котором производительность 1С не удовлетворяет. Бывают системы премирования менеджеров. Бывают филиалы. Бывает закачка документов из других систем. Бывают системы ранжирования товара. Всё это уникально для каждой организации и никак не покрывается стандартными конфигурациями 1С. И есть меняющееся законодательство, может быть, вы с этим не сталкивались. Если это 1С, то есть какая-то поддержка от вендора, а если это самописная система, то нужно успевать тянуть весь воз уже написанного кода за сменой законов. Мне казалось, это очевидно, поэтому я особо и не отвечал на это :)

По Дельфи - да справилось бы и Дельфи. Вопрос в объёме кода и сложности самого приложения. Чем сложнее приложение, тем больше преимущества лиспа за счёт возможности переопределять функцию на лету. Эти преимущества сказываются в уменьшении времени компиляции и в уменьшении времени на воссоздание ситуации, являющейся предметом изучения. Если ваши приложения компилируются за одну-две секунды, то они, видимо, довольно простые.

По сравнению с Дельфи - лисп надёжнее, т.к. он по работе с объектами больше похож на Java/C#, в нём сложнее промазать мимо памяти, хотя тоже можно. Намного сложнее добиться утечки памяти, или там Access Violation-ов. Соответственно, меньше возни с деструкторами. Это ведь само по себе, наверное, многих заставило перейти с Дельфи на C#. Настраиваемый отладчик. Например, можно сделать, чтобы в одном треде экспешн вызывал отладчик, а в другом возвращал экспешн пользователю, всё это можно программировать, а не мышью накликивать, как в Delphi. Ну и я не представляю себе какой-нибудь Delphi 2007, неделями висящий на промышленном сервере приложений. Он рухнет довольно быстро или всю память съест. А IDE лиспа у нас реально неделями крутится, т.е. все сорсы приложений и отладчик промышленной базы у нас всегда под рукой, если что.

Что ещё? Ну, допустим, хеш-таблицы по любым объектам элементарно строятся. Очень удобна работа с древовидными структурами. Я на Дельфи уже 13-й год потихоньку развиваю библиотеку работы с деревьями, но она до сих пор уступает тому, что в лиспе есть "из коробки".
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474832
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanизменение структуры бд может принести кучу сюрпризов
А мы умеем с этим справляться, потому что у нас за счёт макросов, которыми мы расширили PSQL, наборы параметров нужных нам хранимых процедур растут вместе со структурой таблицы. Система макросов для PSQL написана на лиспе. Клиентское приложение тоже в большой степени генерируется автоматически из структуры базы - генератор написан на лиспе. Оно заточено так, что редко возникают сообщения типа "field not found" или как там оно - не помню даже его текст, так давно не видел. Бывают и у нас сюрпризы с базой, они неизбежны по природе вещей, но крайне редко.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474840
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden, вы молодцы. По хорошему вам завидую.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474865
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, мы, в общем-то, готовы делиться нажитым, нам это выгодно. Хотя тут есть проблемы - не всё можно выложить в open source из-за NDA, многое нужно приводить в божеский вид, многое неудобно и т.п. Я говорю "мы", но 90% работы сделал я один, многое доведено до минимально рабочего состояния - мне же платят за решение прикладных задач, а не за развитие платформы. Если будет какой-то интерес, адрес указан в вакансии.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474877
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я в Украине, вобщем-то. Просто солидарен со стартапами в области Lisp
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474917
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonсолидарен со стартапами в области Lisp
++
s/в области/с применением/
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474937
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenЕсть у вас ваш Firebird, но когда на сервере FB происходит Exception, появляется окошко "just in time debugging", можно запустить IBE и посмотреть место, где исключение возникло, глянуть переменные, вычислить что-то. Согласитесь, вот так надо бы работать в XXI веке.
buddenНу и я не представляю себе какой-нибудь Delphi 2007, неделями висящий на промышленном сервере приложений.
Увы, я с вами не согласен. С точки зрения разработчика, это очень удобно. Но на промышленном сервере никаких IDE стоять не должно. Ибо нефиг.

buddenБывают клиенты со своими требованиями по оформлению документов, бывают хитрые управленческие отчёты
Не аргумент. 1С все это позволяет.

buddenбывает просто очень большой объём данных, при котором производительность 1С не удовлетворяет
Тут согласен.

buddenЕсли это 1С, то есть какая-то поддержка от вендора, а если это самописная система, то нужно успевать тянуть весь воз уже написанного кода за сменой законов
Не аргумент. Не вижу разницы, при изменении требований закона, тянуть за собой самописку 1С или самописку на Delphi/Lisp.

buddenЕсли ваши приложения компилируются за одну-две секунды, то они, видимо, довольно простые
Улыбнуло. Я занимаюсь в том числе и онлайн-трейдингом. Он сам по себе и непрост. Занимался почти всеми его аспектами, за исключением технического анализа.

Резюмирую: никаких особых задач, требующих именно Lisp, у вас нет. C# с его зачатками псевдофункцинальности в виде LINQ, Expressions вполне справился бы с задекларированным.

Спасибо за потраченное на меня время. Было достаточно познавательно.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474953
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenЯ и сейчас высоко ценю SQL - гениальная вещь.

Ну, я бы не стал называть его гениальным, скорее он (как кто-то сказал про Unix, не помню дословно и что-то нагуглить не получается) «просто неплохо делает свою работу».

http://airbladesoftware.com/notes/relational-databases-are-not-relational/
http://www.houseabsolute.com/presentations/sql-is-not-relational/slide16.html
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38474959
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Резюмирую: никаких особых задач, требующих именно Lisp, у вас нет. C# с его зачатками псевдофункцинальности в виде LINQ, Expressions вполне справился бы с задекларированным.

Также как и нет задач, требующих C#. Или Java. Или что угодно еще. Он просто выбрал удобный инструмент.

Arm79Я занимаюсь в том числе и онлайн-трейдингом.
Вот кстати блог человека, использовавшего CL в этой сфере: http://13-49-ru.blogspot.ru/search?q=lisp
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38475333
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79
Резюмирую: никаких особых задач, требующих именно Lisp, у вас нет. C# с его зачатками псевдофункцинальности в виде LINQ, Expressions вполне справился бы с задекларированным.

Спасибо за потраченное на меня время. Было достаточно познавательно.

Странные выводы.
Ты думаешь, lisp какой-то особый язык, что для него нужны какие-то особые задачи?
Нет, это просто прикольный язык на котором интересно и приятно писать, в отличие от, скажем, той же java или Pl/SQL.

Люди, которые на нем пишут, решают обычные проблемы, вот, скажем, продвинутый редактор кода для PostgreSQL написан на common lisp.

Ещё я видел презентаху американцев, которые делают систему бронирования авиабилетов, тоже на CL. Так вот, единственным оправданием томы, что это был именно CL, было что-то типа "common lisp - замечательный язык, почему бы нам на нем не писать?"
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38475520
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 budden. Исходя из перечисленный вами в первом посте преимуществ, обязательно посмотрите на erlang как платформу. Собственного опыта не имею, но то что о нем пишут и как хвалят, то ваши хотелки как платформа он удовлетворит. Язык вроде бы ФП, но эквивалентен ли он лиспу я не знаю.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38475525
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо Пол Грэм пишет в первых главах своей книги Ansi Common Lisp

... Изменяясь как ДНК, такой язык никогда не выйдет из моды
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38476502
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, я тоже подытожу: вы сумели меня не услышать, проявив в этом достойное настоящего воина упорство. С чего вы начали - тем и закончили.

Видимо, у вас было наготове мнение о том, что "лисп - это язык для ФП". Напрягите память и вспомните, кто вам это внушил. Может быть, у вас высшее образование в области ИТ и вы прослушали в вузе курс "Функциональное программирование на лиспе"?

Но такое название курса доказывает лишь одно: лисп пригоден для иллюстрации идей функционального программирования. Из него не следует, что лисп - это язык _только_ для ФП или что ФП - это лучшая вещь в лиспе.

Во всяком случае, это мнение вряд ли исходило от ремесленника, который сам программировал на лиспе что-то достаточно большое.
А у меня всё же такой опыт есть - я с лиспом знаком около 10 лет.

А если интересует именно ФП, то подойдёт даже ANSI C - в нём есть указатели на функции и декларация const.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38476590
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо, у вас было наготове мнение о том, что "лисп - это язык для ФП". Напрягите память и вспомните, кто вам это внушил. Может быть, у вас высшее образование в области ИТ и вы прослушали в вузе курс "Функциональное программирование на лиспе"?


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


А если интересует именно ФП, то подойдёт даже ANSI C - в нём есть указатели на функции и декларация const.


Да, причём функции высших порядков в нём таки ЕСТЬ -- qsort !
Кажется, она единственная...
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38476606
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_old,
обязательно посмотрите на erlang как платформу
Спасибо, нас лисп вполне устраивает, и, что самое важное, уже много кода на нём написано. Даже если эрланг был бы лучше, переписывание слишком дорого бы встало.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38476620
рубист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenПоступил вопрос в связи с открытой нами вакансией по Common Lisp:
Зачем вам функциональные языки? ... Типовая компания, ... . Знание торговли, склада, бухгалтерии. Внезапно, ... Lisp.

...............
Я немного интересовался аналогами в других языках и пришёл к выводу, что такого больше нигде нет. Если я неправ - киньте в меня
тапком, я его внимательно обнюхаю. Особенно интересно будет услышать мнения пользователей J2EE и Visual Basic.
...............


Все что вы пишите, за исключением статической типизации, есть в Ruby.
Но это не удивительно, так как Lisp это один из языков на котором он основан.
Успешно пользуемся всем, что вы описали ..... и сфера деятельности похожа.

авторRuby is a language of careful balance.
Its creator, Yukihiro “Matz” Matsumoto, blended parts of his favorite languages (Perl, Smalltalk, Eiffel, Ada, and Lisp)
to form a new language that balanced functional programming with imperative programming.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38476663
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рубист, спасибо. А горячая замена кода функции и определения класса есть?

Т.е., в лиспе я пишу (перевожу на бейсико-подобный синтаксис для ясности):
Код: vbnet
1.
function f (x,y) ... end 



а потом мне понадобился третий параметр и я, не останавливая приложения, пишу и выполняю в REPL:
Код: vbnet
1.
function f (x,y,z) ... end 



После чего функция сразу принимает уже три параметра.
Программа временно становится некорректной, т.к. в вызовах функции f - всё ещё два параметра, но я могу, не останавливая приложения, найти все места использования и поправить их тоже.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38476671
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я немного наврал, думал, что для ясности. На самом деле, скорее моё враньё приведёт к путанице.

На самом деле всё ещё лучше, чем я написал :) Определение f я меняю не в REPL. Я пользуюсь лисп-модой.
Т.е., я правлю прямо исходник функции f в том файле, где она определена, а потом нажимаю волшебное
сочетание клавиш "перекомпилировать функцию под курсором". С этой секунды определение изменилось.

Подобный комфорт доступен разработчикам SQL по средствам типа IBExpert, но он касается только кода SQL.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38476690
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenрубист, спасибо. А горячая замена кода функции и определения класса есть?

Т.е., в лиспе я пишу (перевожу на бейсико-подобный синтаксис для ясности):
Код: vbnet
1.
function f (x,y) ... end 



а потом мне понадобился третий параметр и я, не останавливая приложения, пишу и выполняю в REPL:
Код: vbnet
1.
function f (x,y,z) ... end 



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


budden, а можно более вдаваясь в технологию, объяснить, как это делается ?

Я могу попробовать сам ...

Работающие ветки кода нарываются на вызов этой функции, вызывается отладчик, ты туда интерактивно входишь, и переопределяешь код вызывающей функции, добавляя новый параметр в вызов, потом запускаешь рестарт, и -- всё ОК ?

А как технически дебагер на сервере организован в LispWorks ? (это же он ?)
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38476719
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenArm79, я тоже подытожу: вы сумели меня не услышать, проявив в этом достойное настоящего воина упорство. С чего вы начали - тем и закончили.

Видимо, у вас было наготове мнение о том, что "лисп - это язык для ФП". Напрягите память и вспомните, кто вам это внушил. Может быть, у вас высшее образование в области ИТ и вы прослушали в вузе курс "Функциональное программирование на лиспе"?

Вы совершенно не поняли, для чего мне это было нужно. У меня нет и не было никакого мнения, что Лисп - это только ФП. И да, естественно, у меня высшее в IT. И ФП, и ЛП - курсы были.

Я - человек прагматичный. Увидев практическое использование достаточно редкого языка я заинтересовался областью его применения в достаточно прикладной области. Если бы были какие-то сверхважные для меня плюсы, я бы попробовал пощупать его на практике. Но из того что вы перечислили, что-то мне не нужно, а что-то покрывается с лихвой возможностями C#. То есть осваивать Lisp кроме как в свое удовольствие смысла нет.

buddenА у меня всё же такой опыт есть - я с лиспом знаком около 10 лет.

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

ЗЫ Если говорить о моих задачах, то есть смысл сосредоточиться именно на Эрланге. Кстати, спасибо вам за него. Перечитав кучу статей изучил много нового.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38476734
рубист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden,

Так как вы написали, "меняю часть исходника, и функция в уже работающем скрипте принимает другой набор параметров"
сделать можно, только я слабо себе представляю, для чего?
"Рефлексия" в Ruby очень мощная и сделать в runtime можно почти что угодно .... с модулями, классам, с отдельными обьектами.
Реализовать остановку скрипта по какому-то событию с открытием интерактивной консоли,
в которой будет доступно все, что есть в данном месте программы (в данной облости видимости).
В этой консоли можно с обьектами и классами делать все, что доступно в языке, даже подключать дополнительные библиотеки
и после этого можно отдать команду на продолжение работы скрипта.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38476756
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,Работающие ветки кода нарываются на вызов этой функции, вызывается отладчик, ты туда интерактивно входишь, и переопределяешь код вызывающей функции, добавляя новый параметр в вызов, потом запускаешь рестарт, и -- всё ОК ?

Так тоже можно, но это лишняя трата времени.

Всё гораздо прозаичнее: я ищу имя этой функции по всем своим сорсам обычным грепом. Сорсы, вызывающие f, ведь могут быть и не лиспе написаны. Например, я могу из Дельфи (или, к примеру, из 1С) вызвать эту функцию так же, как я вызываю хрпр файрбёрда командой sql. Скажем, в приложении на Дельфи может быть вызов CallAppServer('f',[1,2,3]).

Далее все вхождения правлю.

На самом деле, в практике чаще всего делается ещё проще. Добавляется не обычный параметр, а параметр-ключ. Параметры-ключи всем известны по командам операционной системы, например, в команде winrar a -m4 -v100m есть два ключа: m=4 и v=100m.

В лиспе есть параметры ключи, за одно это его уже можно любить.

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

Реализовано это в лиспе достаточно дуболомно - за счёт лишней косвенности при обращении к функции и за счёт проверок корректности параметров при каждом вызове. Однако, если сравнить с тем же питоном, то лисп всё равно работает намного быстрее. Если нужна производительность, все проверки можно отключить, тогда программа станет небезопасной и сможет падать по Access Violation. Но я этого не делаю, т.к. программа тяжёлая, падение её стоит дорого, а производительности пока вполне хватает.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38476820
рубист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenMasterZiv,Работающие ветки кода нарываются на вызов этой функции, вызывается отладчик, ты туда интерактивно входишь, и переопределяешь код вызывающей функции, добавляя новый параметр в вызов, потом запускаешь рестарт, и -- всё ОК ?

Так тоже можно, но это лишняя трата времени.

Всё гораздо прозаичнее: я ищу имя этой функции по всем своим сорсам обычным грепом. Сорсы, вызывающие f, ведь могут быть и не лиспе написаны. Например, я могу из Дельфи (или, к примеру, из 1С) вызвать эту функцию так же, как я вызываю хрпр файрбёрда командой sql. Скажем, в приложении на Дельфи может быть вызов CallAppServer('f',[1,2,3]).

Далее все вхождения правлю.

На самом деле, в практике чаще всего делается ещё проще. Добавляется не обычный параметр, а параметр-ключ. Параметры-ключи всем известны по командам операционной системы, например, в команде winrar a -m4 -v100m есть два ключа: m=4 и v=100m.

В лиспе есть параметры ключи, за одно это его уже можно любить.

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

Реализовано это в лиспе достаточно дуболомно - за счёт лишней косвенности при обращении к функции и за счёт проверок корректности параметров при каждом вызове. Однако, если сравнить с тем же питоном, то лисп всё равно работает намного быстрее. Если нужна производительность, все проверки можно отключить, тогда программа станет небезопасной и сможет падать по Access Violation. Но я этого не делаю, т.к. программа тяжёлая, падение её стоит дорого, а производительности пока вполне хватает.

В Ruby почти ничего "греп-ать" не надо.
Есть возможность найти исходник с помощью метода source_location (как из консоли, так и в runtime)
Например вот этот вызов User.method(:find).source_location вернет такой результат.
[".... /.rvm/gems/ruby-2.0.0-p247@rails3.2/gems/activerecord-3.2.15/lib/active_record/querying.rb", 4]

Что-то на подобиии "Параметр-ключь" в Ruby тоже есть. класс Symbol.
Он используется как в для именнованных параметров методов, так и для очень много чего еще.
Чаще всего Symbol используют как ключи хеш-массивов. В примере выше :find это тоже Symbol.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38477133
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 budden: я вам рекомендовал посмотреть на ерланг не потому, что он возможно лучше лиспа (хотя есть мнение что на данный момент он таки да лучше), а потому что:
buddenЯ немного интересовался аналогами в других языках и пришёл к выводу, что такого больше нигде нет. Если я неправ - киньте в меня тапком, я его внимательно обнюхаю.

так что исключительно в целях вашего просвящения поделился тапком :)
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38477160
antares0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рубист,
В Ruby почти ничего "греп-ать" не надо. Есть возможность найти исходник с помощью метода source_location (как из консоли, так и в runtime)
Как и в большинстве реализаций CL
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38477251
рубист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_old2 budden: я вам рекомендовал посмотреть на ерланг не потому, что он возможно лучше лиспа (хотя есть мнение что на данный момент он таки да лучше), а потому что:
buddenЯ немного интересовался аналогами в других языках и пришёл к выводу, что такого больше нигде нет. Если я неправ - киньте в меня тапком, я его внимательно обнюхаю.

так что исключительно в целях вашего просвящения поделился тапком :)

Erlang отличный язык, для тех вещей, в которых он силен (распределенные вычисления, дата стриминг),
Ruby (наверно СL-у тоже) в этом с ним трудно тягаться. У нас он частично используется (couchdb).
Серебряной пули нет, каждый язык(платформа) делает что-то лучше других
и здесь выбор больше зависит от типов задач и от личного опыта применения того или другого.

Автор топика много лет знаком с Lisp, для него это идеальный инструмент.
Для меня сейчас это Ruby, хотя за 15 лет я писал много на чём.

PS Будет немного времени, поупражняюсь на CL, все таки родство обязывает :)
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38477258
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_old, а, спасибо, я вас не понял с первого раза. Может, знаете, есть ли в эрланге такое же "горячее" переопределение функции, как в лиспе?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38477275
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_old2 budden: я вам рекомендовал посмотреть на ерланг не потому, что он возможно лучше лиспа (хотя есть мнение что на данный момент он таки да лучше),

Erlang "лучше" может быть только по одному параметру -- он чистофункциональный, а lisp -- гибридный (не чисто функциональный).
А по всем остальным параметрам Erlang сливает лиспу с громким свистом.
Ну, по крайней мене в моих глазах.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38477429
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 budden: да, в ерланге есть именно горячее переопределение. Но сила его не в самом языке, а именно в платформе, заточенной на писание распределенных, сильнонагруженных многопоточных программ, надежных к сбоям (идеалогия let it fall), в работе которых важна высокая доступность их работы (отсюда и горячий патчинг кода как в лиспе). Корни растут из телекома, но сейчас его под нагруженные веб-приложения тоже успешно приспосабливают.
Я думаю, что именно в вашем случае лисп лучше, но поизучать почти мэйнстримную платформу безусловно стоит.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38478753
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рубист, горячая замена нужна для ускорения цикла отладки. Я об этом написал в первом сообщении. Выгоды горячей замены трудно понять, пока не попробуете и у мне до сих пор не удавалось их объяснить кому-то, кто считал это ненужным. Видимо, это трансцендентальное знание, постигаемое только через личный опыт :) Горячая замена в _некоторых_ приложениях не нужна, но таких приложений достаточно мало. В большинстве случаев она полезна - экономит время и силы, снижает сложность.

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

Попробуйте пройти тем путём, с которого ушёл Arm79. Чтобы понять, насколько горячая замена помогает жить, представьте себе SQL Server без ALTER TABLE. Приятно ли будет работать с таким SQL? Как будет выглядеть процесс добавления поля в таблицу? Распишите по пунктам сценарий добавления поля в ответе на моё сообщение.

Что-то на подобиии "Параметр-ключь" в Ruby тоже есть. класс Symbol.


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

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

Например вот этот вызов User.method(:find).source_location вернет такой результат.
[".... /.rvm/gems/ruby-2.0.0-p247@rails3.2/gems/activerecord-3.2.15/lib/active_record/querying.rb", 4]

Я думаю, я говорил не про то. Это вы пишете про место определения функции f. В лиспе (в SLIME и т.п.) исходник тоже
ищется за одно нажатие кнопки на имени. Для родовых функций ( = методов) можно увидеть список всех определений.

Если мы поменяли набор параметров функции f, мы должны найти все места, где эта функция f _вызывается_. Есть принципиально два пути для этого: информация о ссылках в самой программе и поиск текста. Информация о ссылках даёт результат очень быстро, но она ненадёжна, хотя бы потому, что не весь код может быть в данный момент загружен в память или не весь код скомпилирован с записью информации о ссылках.

Поэтому единственный надёжный способ исправить вызовы функции f без падений в дебаггер - это найти именно все упоминания идентификатора f.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38478936
рубист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden,
авторрубист, горячая замена нужна для ускорения цикла отладки. Я об этом написал в первом сообщении. Выгоды горячей замены трудно понять, пока не попробуете и у мне до сих пор не удавалось их объяснить кому-то, кто считал это ненужным. Видимо, это трансцендентальное знание, постигаемое только через личный опыт :) Горячая замена в _некоторых_ приложениях не нужна, но таких приложений достаточно мало. В большинстве случаев она полезна - экономит время и силы, снижает сложность.

Горячее изменение кода в Ruby используется очень активно и о преимуществах я знаю.
У меня добавление поля в Базе данных или изменение набора параметров метода как правило тоже
не ведут к каким-то большим изменениям рабочего кода. В большинстве случаев это просто
добавление валидатора и\или разрешения использовать новое поле в так называемых mass assignment-ах.
Просто я не совсем понял, зачем этим пользоваться на стадии отладки (менять поведение методов или классов).
Наверно это потому, что я не пишу какие-то "долгоиграющие" процессы, которые дорого (по времени)
перезапускать и нужно заниматься отладкой и изменением кода на ходу.
У меня в основном это Rails\Sinatra приложения, SOA сервисы и скрипты для автоматизации и запуска по cron-у
Для отладки в полне хватает Ruby консоли.

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

И еще, у нас есть существенно различие ...
CL компилируется в машинный код, скомпилированный код может хранится отдельно.
Ruby компилируется в код виртуальной машины _на лету_ т.е. при запуске программы и не хранится отдельно.
По этому приемы отладки могут отличатся.

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

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

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

начиная с версии 1.9, в место такой записи
Код: ruby
1.
obj.method(:param1=>'value1', :param2=>'value2', :param3=>'value3')


можно писать так
Код: ruby
1.
obj.method(param1: 'value1', param2: 'value2', param3: 'value3')


это одно и тоже - param1, param2 и param3 будут являтся Symbol-ами. Просто в 2.0 расширили синтаксис.
так же можно комбинировать обычные параметры и именованные.
Код: ruby
1.
obj.method('value1', 'value2', named_param: 'value3')



авторЯ думаю, я говорил не про то. Это вы пишете про место определения функции f. В лиспе (в SLIME и т.п.) исходник тоже
ищется за одно нажатие кнопки на имени. Для родовых функций ( = методов) можно увидеть список всех определений.

Если мы поменяли набор параметров функции f, мы должны найти все места, где эта функция f _вызывается_. Есть принципиально два пути для этого: информация о ссылках в самой программе и поиск текста. Информация о ссылках даёт результат очень быстро, но она ненадёжна, хотя бы потому, что не весь код может быть в данный момент загружен в память или не весь код скомпилирован с записью информации о ссылках.

Поэтому единственный надёжный способ исправить вызовы функции f без падений в дебаггер - это найти именно все упоминания идентификатора f.

ааа, ну тогда я тоже фактически "греп-аю", пользуюсь поиском\авто заменой в IDE. У меня это Eclipse.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38478938
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenрубист, горячая замена нужна для ускорения цикла отладки. Я об этом написал в первом сообщении. Выгоды горячей замены трудно понять, пока не попробуете и у мне до сих пор не удавалось их объяснить кому-то, кто считал это ненужным. Видимо, это трансцендентальное знание, постигаемое только через личный опыт :) Горячая замена в _некоторых_ приложениях не нужна, но таких приложений достаточно мало. В большинстве случаев она полезна - экономит время и силы, снижает сложность.

Не, ну любому разработчику БД в общем это преимущество должно быть очевидно -- пересоздал процедуру или пакет -- и он уже все, работает. Никаких компиляторов, линкеров, WAR-ов и прочей фигни.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38478946
рубист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, еще добавлю .......
Если был метод
Код: ruby
1.
obj.method('value1', 'value2')


и его реализация изменена на
Код: ruby
1.
obj.method('value1', 'value2', named_param: 'value3')


то везде где он вызывается ничего не будет сломано, все будет работать.

Не именованные параметры тоже можно сделать необязательным, если им установить значение по умолчанию.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38478970
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня добавление поля в Базе данных или изменение набора параметров метода как правило тоже
не ведут к каким-то большим изменениям рабочего кода.
Не понимаю, о чём это, т.к. даже не знаю, какой базой вы пользуетесь. Давайте считать, что вот у нас есть база данных. Допустим, мы поддерживаем форум sql.ru и нам нужно добавить в таблицу сообщений новое поле "рейтинг". Причём, не рассматриваем веб-сервер и т.п. Чисто сами данные. Вот есть таблица messages и надо добавить поле rating. Как мы будем это делать с ALTER TABLE и без него, распишите в двух абзацах, если не трудно.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38478983
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
Не, ну любому разработчику БД в общем это преимущество должно быть очевидно -- пересоздал процедуру или пакет -- и он уже все, работает. Никаких компиляторов, линкеров, WAR-ов и прочей фигни.

Однако, не получить внятного подтверждения этого у Arm79 и он даже не понял, чего от него хотят. Вот теперь с рубистом посмотрим, как будет. Как только получим, далее постараюсь по аналогии объяснить, зачем нужна горячая замена. Или, может быть, дело в том, что у них экосистема оформлена в виде множества отдельных кусочков, как unix text tools? Но как это выяснить?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38478990
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рубист,
да, еще добавлю .......
Если был метод

obj.method('value1', 'value2')


и его реализация изменена на

obj.method('value1', 'value2', named_param: 'value3')


то везде где он вызывается ничего не будет сломано, все будет работать.

Да, я это и имел в виду, именно так в лиспе и можно делать.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38479012
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenвнятного подтверждения этого у Arm79 и он даже не понял, чего от него хотят

Ну, до банальных оскорблений мне кажется, опускаться не стоит. С какой это стати я не понял? Как человек, работающий с MS SQL много лет, не понимает ALTER и так далее?

Просто в отличие от вас, у меня есть опыт сопровождения больших промышленный систем. И я категорически против любых Alter на бою без предварительного тестирования, и скриптов отката. Система работы, где правки идут сразу на бою и силами разработчиков, вызывает только усмешку.

Поэтому я и заявил, что заявленных вами преимуществ языка, лично мне не хватает, чтобы начать учить CL.

Учитесь быть вежливее, я ведь вас не оскорблял.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38479013
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто в наше время - разработчик перестал принадлежать предприятию. Чаще он - сторонняя организация
и следовательно не несёт прямой ответсвтенности за последствия alter-ов. И пускать его к консоли
это всё одно што обизяне гранату дать. Песочница - другое дело.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38479055
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, я вас не оскорблял. Оскорбление - это из уголовного кодекса.

Если вас так задевает моё замечание, что вы чего-то не поняли, то давайте формулировать это так: вы поняли, что я хочу от вас формулировки нужности alter-а, но не захотели разговаривать об этом, потому что просчитали, куда дальше пойдёт тема и сочли это неинтересным. Так будет нормально?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38479060
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, все мы делаем alter table на боевом сервере, в т.ч и Arm79. Возможно, мы не пишем буквально этих слов. Возможно, у нас скрипт или какое-то средство, где мы ставим галочку мышью, чтобы поле добавилось. Возможно, мы делаем ЭТО ночью, когда никто не видит. Но мы ЭТО делаем, давайте не будем стесняться. И мы делаем ЭТО не только в песочнице, но и с боевой базой.

Нюансы, как мы это делаем не имеют значения. Я спрашиваю о том, как бы мы жили, если бы у нас _не_было_вообще_ alter table?

Могу и вам тоже намекнуть.

Вот ночь на дворе. Все спят. Сидит админ. У него таблица. В ней 22 поля и миллиард записей.
Ему надо добавить поле в таблицу. Всё уже проверено на песочнице и т.п.

Далее распишите два варианта:
вариант 1. Нормальная система с alter table.
вариант 2. Статическая система без alter table.

Как действовать в обоих случаях, какой случай удобнее и почему?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38479128
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenЯ спрашиваю о том, как бы мы жили, если бы у нас _не_было_вообще_ alter table?NoSQL?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38479214
рубист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenУ меня добавление поля в Базе данных или изменение набора параметров метода как правило тоже
не ведут к каким-то большим изменениям рабочего кода.
Не понимаю, о чём это, т.к. даже не знаю, какой базой вы пользуетесь. Давайте считать, что вот у нас есть база данных. Допустим, мы поддерживаем форум sql.ru и нам нужно добавить в таблицу сообщений новое поле "рейтинг". Причём, не рассматриваем веб-сервер и т.п. Чисто сами данные. Вот есть таблица messages и надо добавить поле rating. Как мы будем это делать с ALTER TABLE и без него, распишите в двух абзацах, если не трудно.

Сори, база конечно же SQL. Обычно MySQL или PostgreSQL. библиотека ActiveRecord, которая реализует одноименный шаблон проектирование.
С Alter Table можно тремя вариантами.
1. Сделать изменения в таблице самому, в ручную. В коде изменений не нужно.
2. Написать скрипт миграции (используется чаще всего), он позволяет автоматизировать процесс и в случае проблем откатиться.
3. Если использовать не Activerecord, а Datamapper для работы с БД, то там достаточно добавить нужное поле непосредственно в коде. Нужно уточнить по документации, я Datamapper почти не использую.
Все три способа на прямую или косвенно запускают Alter Table.

Если нужно обойтись без Alter Table, то я вижу только два способа.
1. Сериализация атрибутов в одном из выделенных для этого полей таблицы. Добавление\удаление атрибута не затронет структуру SQL базы вообще. Здесь большой минусы - такие атрибуты будет сложно использовать в запросах, и их будет невозможно индексировать.
2. Использовать связку SQL и NoSQL (или только NoSQL) для атрибутов. На счет связки я не уверен, должна быть какая-то очень острая необходимость, чтобы выбрать такой вариант.

Немного про миграции.
Типичный скрипт миграции выглядит так: add_part_number_to_products.rb
Код: ruby
1.
2.
3.
4.
5.
6.
class AddPartNumberToProducts < ActiveRecord::Migration
  def change
    add_column :products, :part_number, :string
    add_index :products, :part_number
  end
end


выполняется командой > rake db:migrate
откат > rake db:rollback
Дополнительно можно указывать еще разные параметры типа STEP= или VERSION= для выполнения или отката на какую-то стадию или версию миграции.
Система сама следит за тем, какие миграции уже выполнены, какая текущая версия и т.д.

Метод change может быть заменен на два метода up и down если нужно отдельно описать возврат к прежнему состоянию.
Обычно это делается если идет не добавление поля, а его переименование.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38479717
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рубист, я вообще-то имел в виду такой сценарий, позволяющий
добавить поле в базу SQL хотя бы без революций в программировании:

1. выгрузить данные из таблицы во внешний файл
2. уничтожить её (drop table)
3. создать её снова с новым полем (create table)
4. загрузить данные из внешнего файла

Если записей миллиард, то выгрузка-загрузка может оказаться
фатальной с точки зрения затрат времени и мы не сможем продолжать
жизнь нашей системы.

Никто меня не понял, значит, видимо, проблема на моей стороне.

Но идём дальше.

Получается, что alter table жизненно важен для приложений SQL, если не
предпринимать специальных и не вполне хороших мер.

Что есть alter table? Это и есть горячая замена определения класса (ну ладно, структуры).
Горячая не потому, что она делается на боевом сервере, а потому, что не нужно
останавливать базу и потому что сохраняются данные. Заменим мысленно слово table
на слово record, struct или class, а записи в таблице заменим мысленно на экземпляры класса.
Получится, будто бы мы в работающей программе поменяли определение типа, а данные
при этом сохранились. Новое поле заполнилось чем-то по умолчанию.

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

Это я просто отвечаю на заявления, что "горячая замена не нужна". Вот она, горячая замена,
alter table. Нужна.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38479742
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenвариант 2. Статическая система без alter table.
Я не понимаю что это такое. Что за термин?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38479942
рубист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden,
Понятно. В таком ключе "горячее" изменение кода конечно нужно.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38480258
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonbuddenвариант 2. Статическая система без alter table.
Я не понимаю что это такое. Что за термин?

Видимо, что-то вроде EAV иметься в виду...
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38480344
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, нет такого термина. Это просто антоним для "динамического", т.е. позволяющего что-то делать в рантайме. Видимо, неудачно я выразился.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38480968
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рубист, относительно миграций - мы сваяли аналогичную вещь, но мы не пытаемся делать откаты. Потому что откатить состояние базы просто-напросто не всегда возможно. Если дропнуто поле, то откатив миграцию, поле мы вернём, но данные в него - уже не вернём. Или вы хотите сказать, что эта система и данные тоже возвращает на место?
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38481010
рубист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden,

Нет конечно, автоматически данные не вернутся.
Но в принципе миграцию можно написать так, чтобы при удалении поля\таблицы данные куда-то сохранялись и на откате их можно было вернуть.
Код миграции это обычный Ruby код и там можно использовать любые языковые конструкции и библиотеки.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38481014
рубист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Справедливости ради надо заметить, что я не полагаюсь только на миграции
и при больших изменениях всегда с базы (или с ее части) снимаю дамп.
Не смотря на то, что сервера и так пишутся в бекап. В этом плане я перестраховщик :)
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38481745
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рубист, да, это ближе к сермяжной правде. Мы тоже так делаем при серьёзных изменениях. Смысл прост - при какой-то накладке можно мгновенно вернуть базу в рабочее состояние.

Касаемо "оболочек" для alter table, оформляющих их в виде классов руби - я подобными вещами в своё время переболел, но отказался от этого.

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

В итоге я пришёл к системе макросов для лиспа. Теперь пишу прямо в консоли что-нибудь такого типа
Код: sql
1.
2.
3.
4.
fse o.id, count(1) 
from M_OL_IJ_O 
where o.ref_type=M_IDOF(operation_type,'Отгрузка') 
group by o.id;



В этом запросе применено два макроса. Один - стандартный джойн между двумя таблицами, который постоянно используется.
Второй - говорящая константа. В итоге sql выполняет такой код:
Код: sql
1.
2.
3.
4.
select  o.id, count(1) 
from   operation_line as ol   inner join   OPERATION as o  on o.Id = ol.ref_operation  
where o.ref_type=36/*operation_type:'Отгрузка'*/ 
group by o.id



Стоя на слове M_OL_IJ_O, можно за одно нажатие клавиши попасть в определение.
Стоя на имени таблицы - можно попасть в описание этой таблицы с перечнем всех полей.
Когда в моём SQL коде возникает ошибка, открывается окно со сгенерированным кодом
(с расширенными макросами). Если в тексте сообщения указан номер строки и колонки,
курсор встаёт на эту строку и колонку (хотя иногда промахивается, но это уже баги).
Я нажимаю волшебную кнопку и попадаю в место исходника лиспа, откуда был
сгенерирован данный запрос. Это исключительно удобно для разработки! И когда
был слой поверх SQL, я не мог это реализовать.

На данный момент определено около 200 макросов - связки таблиц, сокращения для разного
рода операций с датами и числами, assert, вывод в логи. Часть макросов - это куски
конкретных процедур, повторяющиеся 2 или 3 раза, нужно переделать, чтобы они не светились
в общем пространстве имён макросов, это сделать можно, но нужно придумать, как это сделать
красиво, да и руки не доходят.

Интенсивно используемых - наверное, пара десятков.
...
Рейтинг: 0 / 0
Почему мы используем Common Lisp в автоматизации бизнеса
    #38481781
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторидентификаторы на Русском языке
...
Рейтинг: 0 / 0
94 сообщений из 94, показаны все 4 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Почему мы используем Common Lisp в автоматизации бизнеса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]