1

Тема: БД кода и горячая замена кода

Горячая замена кода
budden пишет:

Горячая замена кода - я о ней говорил в Ростове, что ж вы, не слышали? [...] Скажу коротко: это alter table и alter procedure, но не для SQL, а для обычного универсального ЯП. К сожалению, пока что маркетинговая ценность горячей замены отрицательна - нужно менять стратегию продвижения.

Я полностью убеждён: наступит день, когда Микрософт, Гугл или Эппл прикажут полюбить горячую замену и понять, что это хорошо, и все сразу тут же и поймут. Так уже произошло с лямбдами. Был совершенный С++/С# без лямбд, и лямбды были не нужны. Потом стал опять совершенный С++/C#, но уже с лямбдами, и они стали вдруг нужны. Пока что приказа полюбить горячую замену не поступало. Поэтому её не ценят даже те, кто делает alter procedure по 20 раз в день, а alter table со 100 миллионами записей - дважды в неделю  К сожалению, я не нашёл подхода, который позволил бы вдолбить хоть в одну башку эту идею. Видимо, чтобы быть услышанным, нужно сначала занять доминирующее положение в обществе, а этого у меня точно не получится за оставшееся время. Думается, приказ любить горячую замену поступит довольно скоро, потому что уже почти всё остальное из лиспа уже выгребли.

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

2 (изменено: Freeman, 29.04.2017 в 23:22)

Re: БД кода и горячая замена кода

Все эти заморочки с "горячей заменой" - это чисто программистские заморочки, непродаваемые. Из пример с ЕМИАС видно, что продаваться будет что-то типа p2p/blockchain для того, чтобы организовать резервирование данных без помощи сервера, таким образом распределив нагрузку на него во времени и обеспечив низкое время отклика АРМ-ов. Собственно, я об этом уже писал ранее.

3 (изменено: Freeman, 01.05.2017 в 1:01)

Re: БД кода и горячая замена кода

budden пишет:

это alter table и alter procedure, но не для SQL, а для обычного универсального ЯП.

Похоже, Денис делает ту же ошибку, что и Юрий: сказав "А", не говорит "Б", оставаясь во власти иллюзий.

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

Внесение СУБД в процесс разработки по значимости сродни изобретению печатного станка Гуттенбергом: БД кода имеет неограниченные возможности метапрограммирования, то есть изменения кода кодом. Если даже в обычных СУБД у администраторов частой практикой является генерация скриптов скриптами и всякие execute immdediate, что уж тут говорить про специализированную СУБД, рассчитанную на хранение кода.

После осознания важности БД следующий логичный шаг -- признание ее первичности. Поскольку целостность модели (кода, данных) теперь осуществляется механизмом СУБД, программисту нет никакого смысла переживать за свои исходники, -- они всего лишь скрипты БД, часто одноразовые. Горячая замена концептуально требует обратимости кода в том или ином виде. Если сделать обратимость полной -- можно отказаться от первичности исходников. Именно так сделано в Канторе. Дополнительное преимущество -- независимость от синтаксиса, обратная совместимость с будущими улучшениями -- переписывать исходники не придется, их нет. Отекстовал новой версией -- получил все преимущества. Представьте, чтобы так механически можно было переходить с C++11 на C++17, к примеру...

Ту же ошибку с БД допустил Юрий: продвигаемое им многоязыковое программирование подразумевает отсутствие единства исходников и взаимодействие через словарь. На практике это означает, что каждые исходные тексты должны идти со своим словарем, в котором ключевые слова и идентификаторы привязаны к неким внешним ключам. Ничего не напоминает? Это та же БД, Юрию она нужна для отказа от единственности синтаксиса. Перейдя к множеству синтаксисов, он не дошел до первичности БД, и разработка ожидаемо зашла в тупик.

Программирование -- наука точная, так что любая замена кода должна отвечать неким требованиям целостности, задаваемым при проектировании БД кода, а СУБД должна их обеспечивать своей средой.

Чего я не понял в Ростове

Глядя на картинку с мостом, иллюстрирующим ремонт вместо сноса, думал про китайцев. В Китае принято не ремонтировать дома, а сносить и строить заново. Дома, построенные 10-15 лет назад, смотрятся так, будто им 50 лет. По-моему, это американский метод. Подход к строительству -- одна из множества вещей, в котором Китай отличается от нас.

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

4 (изменено: Freeman, 01.05.2017 в 14:58)

Re: БД кода и горячая замена кода

СУБД это гораздо больше, чем обработка метаданных. В этом конкретном случае можно обойтись термином "Reflection" (самоописание). В C# есть библиотека Reflection.Emit, при помощи которой можно нагенерировать код. И это без всяких СУБД.

5

Re: БД кода и горячая замена кода

Английское слово reflection переводится на русский как отражение, соответствующие термины в обоих языках имеют тот же смысл. То есть, речь тут идет просто о беспотерьной передаче данных (информации о типах) между разными языками и средами. Сама технология впервые была реализована в ActiveX/COM в виде библиотек типов (type library, TLB), для описания может использоваться язык IDL. Могу ошибаться, но IDL не покрывает всех возможностей TLB, только какое-то подмножество.

TLB в Delphi

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

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

Метапрограммирование посредством отражения, если о нем можно говорить, имеет всего один уровень. Вне библиотек типов отражение может использоваться как часть ORM, генерирующая скелеты классов по модели данных (типа как в Google Protocol Buffers), -- здесь тоже только один уровень, причем снова с потерями. Если же рассматривать метапрограммирование как основу системы, в специализированной БД число метауровней может быть любым -- больше одного, в сравнении с отражением.

6

Re: БД кода и горячая замена кода

Прообраз БД кода (по тому же принципу, что у Юрия) в языках программирования Валентина и Валентина-2:

utkin295 пишет:

Просто синтаксис нужно хранить отдельно от семантики. Это даже первая Валентина умела.
Просто я занимался этим вопросом и реализовывал в Валентине (первой и наработкой ко второй).
Сейчас синтаксис представляется обычным текстовым файлом и выглядит примерно так:

Constr
id=0
Remark=Однострочный комментарий
Word1=Описание Комментарий Ремарка #
Word2=1

Id характеризует идентификатор конструкции, привязку синтаксиса к семантике. То есть лексер когда распознает, он во внутреннем представлении в p-коде указывает уже идентификатор конструкции и ее параметры.

Описание синтаксиса примера

Remark - краткое описание, назначение оператора/команды/инструкции. Используется для автоматической генерации общего описания набора конструкций в форме, приближенной к БНФ (это первая Валентина тоже умела). Ну и можно использовать например для всплывающей подсказки в редакторе.
Word1-Word8 - лексемы. В данном случае допускается 4 варианта инструкции

  • Описание

  • Комментарий

  • Ремарка

  • и линуксный комментарий #

В Word2 записано, что следующие лексемы нужно воспринимать как первый параметр конструкции (то есть туда будет записываться собственно сам комментарий).

Теперь чтобы добавить новый комментарий, допустим // достаточно открыть файл и в word1 через пробел дописать // и возможно если Вы хотите чтобы читалось не только // привет, но и //привет, в общей секции дописать токен //. Это специальные "слова" которые если встречаются в сплошном тексте не разделенные пробелами, считаются как отдельные лексемы. Как видите если подумать и спроектировать может получиться. Не все конечно возможно, но менять синтаксис можно в некоторых пределах.

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