Программное обеспечение будущего, каким оно должно быть
В данной статье рассматривается один из возможных вариантов дальнейшего развития программного обеспечения.
По мнению автора, сама концепция «написание программ на языках высокого уровня и последующая его компиляция в исполняемый модуль на уровень машинных команд» устарела. Если мы хотим окончательно избавиться от вирусов, взломов и других вредоносных программ, необходимо чтобы готовые программы оставались составленными из более высокоуровневых элементов. Тогда создаваемое ПО будет и мультиплатформенным т.е. работать на любых процессорах и любых операционных системах.
Для этого предлагается концепция «среды программирования». Среда программирования создает эмуляцию виртуального процессора работающего на более высоком уровне, чем машинные команды реального процессора компьютера. В этой программной модели (виртуального процессора) и происходит программирование более простое и требующее меньше знаний по программированию.
Создаваемые программы в среде программирования остаются в виде псевдокода и не требуют компиляции. В таком виде они будет распространяться и выполняться. Единственным отличием программ создаваемых в среде программирования это то, что для их выполнения будет запускаться программа среды программирования, и уже в ней будет выполняться сама программа.
Точно так же как для работы с таблицами Excel, нам необходимо запустить сам Excel, и уже в нем открыть необходимую таблицу.
Псевдокод в данном варианте, подразумевает массив байт готовый для выполнения. Программа на псевдокоде состоит из отдельных команд одного и того же формата. Специальная функция может исполнять такую программу на псевдокоде. Каждая команда псевдокода представляет собой вызов определенной функции, номер которой находится в коде операции. Так же в каждой команде псевдокода есть количество входных и выходных параметров и адреса необходимые для получения входных и сохранения выходных параметров. При выполнении псевдокода не происходит никаких проверок и переводов из текстового вида. Псевдокод уже заранее готов для выполнения. В псевдокоде есть так же команды условного и безусловного переходов в пределах программы.
Среда программирования, кроме того что позволит безопасно использовать внешнее ПО, но так же облегчит и сам процесс программирования, переведя его на более высокий уровень.
Точно так же, как в свое время отказались от прямого управления внешними устройствами, так и теперь необходимо отказаться от прямого управления процессором внешним ПО. Внешнее ПО (ПО получаемое из непроверенного источника) должно быть только в виде высокоуровневого ПО, запускаемого в среде программирования, которая и будет выполнять его в виде запуска определенных функций на машинном коде.
Такой способ выполнения может оказаться даже быстрее чем обычный. Потому что отдельные функции среды программирования можно оптимизировать или даже написать на ассемблере, что на много уменьшит время их выполнения, скомпенсировав затраты на выполнение псевдокода в специальной функции.
Среда программирования кроме программирования, используя привычные типы данных (строки, числа …), позволяет очень просто использовать окна, меню, базы данных. Что позволит совершенно по другому подойти к самому процессу программирования.
Например, программирование окон программы можно свести к заполнению структуры данных окна. Окно содержит такие то дочерние элементы. У каждого дочернего элемента есть ряд параметров (размеры, место в окне, адрес отображаемых данных, отображаемые меню и т.д.). Каждому дочернему элементу окна можно назначить небольшие программы, которые будут выполняться при возникновении определенных событий (нажата кнопка, смена строки таблицы, изменение данного и т.д.)
Таким образом, программирование окон создаваемой программой это уже и не совсем программирование, а просто выбор необходимого и заполнение параметров.
То же самое и с работой с базами данных, в окнах заполняются адреса отображаемых или корректируемых данных, а все остальное сделает сама система программирования. Если в окне вы измените это данное, то оно будет записано в базу данных по указанному адресу без всякого дополнительного программирования.
Система программирования кроме обычного редактирования данных в базах данных может предоставлять и другие более сложные варианты редактирования данных. Например, «самоорганизующиеся данные».
Самоорганизующиеся данные — это механизм когда изменение одного данного вызывает автоматическое изменение других данных связанных с ним. А те в свою очередь вызывают изменение других данных связанных уже с ними и т.д.
Например, добавление новой позиции в чек в магазине, изменяет общую сумму по чеку, а та обую сумму в кассе и т.д. И это относится не только к добавлению данного, но и его редактирование, удаление так же корректно изменит все взаимосвязанные данные.
И это практически без всякого программирования, только при помощи заполнения параметров и небольших программ, если связанное данное нужно вычислять из нескольких других. Более подробнее самоорганизующиеся данные будут описаны ниже.
Что касается самого программирования всей программы в целом, то оно разбивается на создание небольших (в среднем 10–15 команд) программ псевдокода написанных при помощи диалоговых окон.
Основной принцип программ в среде программирования простой.
· Окна только отображают или редактируют данные из баз данных по указанным в параметрах адресам.
· Обеспечение целостности структуры данных в базах данных работает автоматически при помощи самоорганизующихся данных и никак не связано с работой окон.
· Окна кроме отображения и редактирования данных при возникновении определенных событий запускают небольшие программы на псевдокоде.
Например, в окне отображается список уже имеющихся документов. Для редактирования необходимого документа, дважды щелкаем на строке необходимого документа.
При программировании данного окна у органа управления типа таблица в параметрах будет заполнено, что при двойном щелчке на строке таблицы необходимо запустить такую то программу.
Данная программа и будет открывать окно редактирования выбранного документа. Так же для каждого органа управления окна можно указать номер отображаемого меню. В таком случае если курсор мыши будет на данном органе управления и нажать правую кнопку мыши, то будет отображено выбранное меню.
Для органа управления, у которого определено контекстное меню, в параметрах можно указать какую программу необходимо запускать при выборе каждого пункта меню.
Таким образом, программирование в среде программирования упрощается в несколько раз. Благодаря тому, что многое во время выполнения берет на себя сама среда программирования. И в то же время все программы, содержащиеся в создаваемой программе, будут храниться и выполняться в виде псевдокода. Т.е. в виде набора высокоуровневых команд. Которые легко проверить на наличие вредоносной составляющей.
Программное обеспечение следующих поколений не должно вести себя как маленькие дети, которые все тянут в рот. Так и современное ПО все пытается запустить (передает управление программе т.е. как бы говорит «делай со мной что хочешь»). А отследить что делает запускаемое ПО на уровне машинных команд очень сложно, а по сути и невозможно, это как отыскать иголку в стоге сена. Антивирусы смогут отыскать вирусы, только после выявления вируса и внесения его в базу поиска, а до этого они такие же обычные программы.
Распространение ПО в виде высокоуровневых команд, может существенно облегчить борьбу с вредоносным ПО. В самой среде программирования можно ограничить, что программа может делать, к каким данным обращаться, например, только к определенным папкам дисков. В запускаемых программах на псевдокоде происходит запуск только функций из самой среды программирования. Поэтому хоть вроде и выполняется программа из внешнего ПО, но тем не менее, полного управления программе не передается. Если обеспечить загрузку среды программирования из безопасного источника, то выполнение других программ для данной системы программирования, становятся практически безопасными.
То же должно относиться и к почте, интернету и видео. При открытии почтового сообщения не должно ничего запускаться, а только отображаться, даже если это видео или анимация. У каждого видео есть свой формат и его можно просмотреть при помощи своего ПО. Так же и для интернета, при открытии любой страницы не должно ничего запускаться, только отображение с помощью своего ПО.
Только так можно кардинально побороть вирусы и вредоносное ПО как класс. ПО должно распространяться в виде высокоуровневых программ.
Среды программирования могут быть интегрированы в операционную систему или поставляться отдельно. Возможно несколько вариантов сред программирования рассчитанных на работу с разными данными. Отдельно на работу с базами данных, отдельно на работу с графическими данными, отдельно с музыкой и т.д.
Кроме того, данный подход к распространению ПО позволяет создавать мультисистемное ПО, которое будет работать на любой операционной системе и на любом процессоре. Для этого только необходимо иметь среду программирования для каждой операционной системы и одинаковый формат псевдокода. Тогда любое новое ПО, созданное для этой среды программирования, будет работать со своим вариантом среды программирования. Так же данный подход позволит производителям процессоров и другого «железа» легче обеспечивать совместимость с ранее разработанным ПО. Если необходимо внести изменения в систему команд новых процессоров, то для обеспечения совместимости нужно только выпустить новую версию среды программирования. И все ранее разработанное ПО, будет работать даже лучше чем прежде.
Далее более подробнее опишем среду программирования рассчитанную на работу с базами данных.
Программы в среде программирования сохраняются и выполняются в виде псевдокода. Псевдокод в данном варианте это готовая программа, оформленная в виде массива байт. Принцип тот же, как и у машинных команд, только на более высоком уровне. Программа состоит из отдельных команд. Каждая команда имеет код операции, входные параметры и адреса для сохранения результатов.
Выполнение программы на псевдокоде происходит в три этапа:
· Подготовить входные параметры очередной команды.
· Выполнение операции
· Сохранение результатов работы
Среда программирования обеспечивает свою среду хранения данных в файлах, поэтому программисту не нужно об этом заботиться. Просто берем необходимые данные и передаем их в качестве параметров командам. Для этого будет свой формат описания операндов, который будет использоваться во всех операциях.
Выполнение команды, по сути будет выполнением функции, номер которой указан в коде операции команды.
Сохранение результатов работы, будет сохранение выходных параметров по адресам указаннм в параметрах команды.
Как видно из приведенного выше описания, выполнение псевдокода не является интерпретацией и не требует анализировать исходный код. А просто происходит выполнение команд одну за другой. Если возникают команды условного или безусловного перехода, то происходит переход к необходимой команде и продолжается выполнение дальше, пока не будет достигнут конец псевдокода, или будет команда выхода.
В качестве операндов команд псевдокода можно использовать непосредственные данные, данные из баз данных с использованием непосредственных адресов или базовых адресов.
Выполнение псевдокода очень быстрое и сопоставимо с выполнением откомпилированных программ. А если учесть, что сама система программирования будет очень маленькой (у демонстрационного варианта размер получился всего 200 кБайт), и не нужно будет загружать в виртуальную память блоки программы, то выполнение может оказаться даже быстрее, так как всегда сами исполняемые функции будут в памяти.
Для выполнения программ написанных на псевдокоде, будет специальная функция, которая будет работать в цикле. Подготовить входные параметры очередной команды, выполнить функцию соответствующую коду операции, сохранить выходные параметры, перейти к выполнению следующей команды.
Далее по тексту программы, написанные на псевдокоде, будем обозначать — пакетная программа, а отдельные команды из такой программы — пакетная команда.
Типы данных, используемых в среде программирования, должны однозначно определяться по первому байту. Размер используемых данных, то же не должен волновать программиста. Сколько нужно, столько среда программирования и выделит места. И при необходимости сама преобразует тип данных на необходимый.
Например, если в команде сложить будет один операнд десятичный, а второй двоичное данное, то двоичное данное будет преобразовано в десятичный формат, а затем будет произведена операция сложения и уже десятичный результат будет сохранен.
Таким образом, система программирования при сохранении данных всегда будет добавлять вначале тип данного и его размер. Поэтому многие пакетные команды могут работать с разными типами входных данных.
Как может показаться, добавление к данным их типов и размера, должно увеличить размеры используемых программами баз данных. На самом деле все наоборот.
В настоящий момент основным типом баз данных используемых в программах, являются реляционные базы данных. У которых, каждому данному отводится определенное количество байт. А так как размеры данных заранее не известны, то отводится максимальное количество знаков. Поэтому в каждом поле остается несколько свободных байт, и это количество чаще всего больше 4 байт. Кроме того, даже если поле вообще не заполнено, ему все равно отводится место. Ведь в реляционное базе данных, каждая запись занимает определенное количество байт.
В предлагаемой системе программирования используются древовидные базы данных. У которых каждому полю отводится место только если поле заполнено, и строго столько сколько нужно. Поэтому суммарно базы данных с использованием древовидных баз данных, будет занимать меньше места, чем аналогичные с использованием реляционных баз данных.
Древовидные базы данных.
Так как система программирования построена по принципу подобному работе процессора, только на более высоком уровне обобщения. Поэтому она, так же как и процессор обращается к содержимому ячеек памяти, должна обращаться к данным находящимся в базе данных. И оперировать не отдельными байтами как процессор, а отдельными данными (числами, строками, массивами байт).
Древовидные базы данных имеют более гибкую систему адресации и поэтому подходят лучше чем реляционные.
У реляционной базы данных всего 2 элемента адреса, а у древовидной переменное количество элементов адреса. Каждый элемент адреса в древовидный базе данных называется уровнем адреса.
Для того чтобы получить доступ к данному в древовидной базе данных необходимо заполнить его адрес (Обобщенный адрес).
В пакетных командах для указания адресов используемых операндов, используется обобщенный адрес — структура данных определенного формата, в которой указываются значения уровней адреса. Используя которые будут считаны данные, которые и будут использованы в качестве операндов и для сохранения результатов работы пакетной команды
В обобщенном адресе данного, в качестве значений одного или нескольких уровней адреса, кроме конкретных значений, могут использоваться другие данные, таким образом происходит базовая адресация данных.
Например, окно отображающее данные некоторого документа, использует в качестве значений одного уровня адреса всех отображаемых данных окна, некоторое данное, являющееся номером документа. Таким образом, для того чтобы отображать одним и тем же окном разные документы, необходимо изменить значение только этого данного, и окно будет отображать содержимое документа номер которого указан в этом данном.
По сути, обобщенный адрес является кодом, при помощи которого происходит получение реального адреса данного, а уже по нему происходит обращение к самим данным, прямо к содержимому файлов баз данных.
Поэтому пакетные команды могут обращаться для чтения и записи прямо к содержимому файлов, читая или записывая сразу полностью целое высокоуровневое данное (число, строку, массив байт). При этом без всякого программирования.
Если пакетная команда записала данное по определенному адресу, то это данное будет сохранено в файл обязательно. Так же как процессор работает с содержимым байтов памяти, так и среда программирования работает с содержимым древовидных баз данных.
Самоорганизующиеся данные
При изменении самоорганизующихся данных происходит изменение взаимосвязанных с ним данных.
Каждое данное, которое используется в самоорганизующихся данных, имеет номер описания данного. И должно изменяться только специальной командой «Записать данное по номеру описания данного».
Иначе просто произойдет запись данного по указанному адресу, без дальнейшей разноски.
Для каждого номера описания данного, есть ряд свойств, определяющих необходимые действия при изменении этого данного.
Основные два свойства:
· список номеров описаний данных, в которые необходимо разнести изменения, произошедшие с этим данным
· принадлежность данного к точкам разноски (определенной структуре данных)
Таким образом, при изменении самоорганизующегося данного, система получает по «номеру описания данного», дополнительную информацию об использовании этого данного в общей структуре данных и начинает выполнять дальнейшие изменения взаимосвязанных с ним данных.
При разноске изменившегося данного в другие данные, по списку номеров описаний данных, используется несколько вариантов разноски.
Один из вариантов разноски, это «накопительная разноска», это обозначает, что в это данное заносится не изменившееся данное, а к имеющемуся значению данного, добавляется разница между старым и новым значением изменившегося данного.
Таким образом, можно автоматически получать сумму нескольких данных. При любом изменении любого их которых (добавлении, удалении, редактировании), будет автоматически изменяться и это данное. Оно всегда будет соответствовать сумме имеющихся данных.
Кроме использования данного в разноске в другие номера описаний данных, данное может принадлежать к точке разноски.
Точка разноски — это некоторая структура данных, со своим номером, и так же имеющая ряд свойств. Одним из свойств точки разноски есть номер программы, которая запускается при изменении данного принадлежащего точке разноски.
Так осуществляется автоматическое вычисление вычисляемых данных.
Например, изменение оборотов по счету, вызывает запуск программы пересчета точки разноски. А эта программа по текущему счету берет сальдо на начало месяца и обороты за месяц и на основе их вычисляет сальдо на конец.
Таким образом, любое изменение сальдо на начало или оборотов, будет вызывать изменение сальдо на конец. А сальдо на конец, вызовет изменение сальдо на начало следующего месяца, и новый пересчет сальдо на конец уже следующего месяца и так далее до текущего месяца.
Есть и другие варианты распространения изменений на данные связанные с ним.
Это принцип описательного программирования, при помощи заполнения параметров описаний данных и точек разноски описывается общая структура данных. После чего можно специальными командами менять или добавлять необходимые данные. Поддержание целостности структуры при этом происходит автоматически и не требует никакого программирования. Причем это относится как к добавлению новых данных, так и к корректировке ранее введенных и их удалению.
Итак, самоорганизующиеся данные древовидных баз данных выполняют основную работу по созданию приложений баз данных. Но тем не менее, небольшие программки все же приходится создавать. Хотя бы для вычисления вычисляемых данных.
Для создания данных программ не нужно знание языков программирования или других знаний в программировании. Для этого используются специальное окно редактирования программы, в котором программа создается путем выбора необходимых команд из списка. К каждой команде отображаются комментарии каждого параметра и можно посмотреть справку по использованию команды. Обычно такие программки содержат не более 10–20 команд.
Нажали кнопку «сохранить» и уже программа может быть использована в работе окна или меню.
В качестве подтверждения описанного в данной статье ее автором создана демонстрационная среда программирования. В которой, в качестве демонстрационного примера, создана полностью работоспособная бухгалтерская программа.
Все желающие могут ее опробовать и удостовериться, как работают самоорганизующиеся данные, как быстро происходит выполнение псевдокода, как легко можно создавать и редактировать окна.
Данной среде программирования посвящена страница Facebook «Система диалогового программирования SDP», там же можно найти ссылки для ее скачивания и подробное описание ее работы. Программа является демонстрационным примером, и не предназначена для коммерческого использования. Поэтому содержит всего 230 команд псевдокода, количество которых может быть легко расширено для увеличения функционала среды программирования.
Бобров Александр
2023 г.