Может ли господь бог написать программу, которую он не сможет отладить?
Безошибочный кодировщик, вZYск SYSтем Lав. МемвеR, мIсн.
Оператор начинается с ключа-диеза (#) и является последовательностью цифр (имеет смысл значность оператора). Цифровой оператор может содержать аргумент. Нецифровые операторы передаются синтаксическими символами.
+ | оператор сложения |
- | оператор вычитания |
/ | оператор деления |
\ | оператор деления нацело |
* | оператор умножения |
= | оператор присваивания |
( | разделительный оператор |
) | |
--- | оператор комментирования строки |
` | оператор аргумента |
'text' | маркер текста (парный) |
#1 | TRUE (истина) |
#0 | FALSE (ложь) |
#2…#9 | случайная константа, которую можно задать в пределах программы/подпрограммы |
#01 | FOR (в течение) |
#02 | AND (и) |
#07 | OR (или) |
#10 | THEN (тогда) |
#11 | TO (то) |
#17 | IF (если) |
#44 | WHILE (пока) |
#000…#099 | ACTION MARKER (маркер действия) |
#100…#999 | STRING MARKER (маркер строки) |
Маркер с аргументом | |
---|---|
#100`1 | начало строки 100 |
#100`0 | конец строки 100 |
#100`10 | первый символ строки 100 |
#100`00 | последний символ строки 100 |
#100`10`n | первые n символов строки 100 |
#100`00`n | последние n символов строки 100 |
#100`11 | первый символ позиции 100 |
#100`01 | последний символ позиции 100 |
#100`11`n | первые n символов позиции 100 |
#100`01`n | первые n символов позиции 100 |
«Строка 100»: строка, имеющая уникальный номер 100. Обычно - первая строка. «Позиция 100»: 100-я строка по счёту. Аргумент позиции в основном используется для возвращения номера строки.
#0804 | RUN PROGRAM FILE (запустить внешнюю программу) |
#0548`number | CALL SUB PROGRAM`number (вызвать подпрограмму) |
#0548`number`url | CALL SUB PROGRAM`number`url (вызвать подпрограмму, находящуюся по адресу url) |
#0811`name`url | OPEN FILE`name`url (открыть файл с именем «name» по адресу url) |
#1010`number`x`y`z | CREATE MASSIVE (создать массив с именем «number» и количеством элементов матрицы x, y, z ) |
#1011`number`x`y | CREATE DATA BASE (создать базу данных с именем «number» и количеством элементов матрицы x, y) |
#1111`number`x | CREATE LIST (создать список с именем «number» и количеством элементов списка x) |
#1112`number | SUB PROGRAM`number (объявление подпрограммы с именем «number») |
#2199 | TIME (HOUR/MIN/SEC) (время) |
#2200 | DATE (DAY/MONTH/YEAR) (дата) |
#3105`name`url | CLOSE FILE`name`url (закрыть файл с именем «name» по адресу url) |
#3534`name`url | CREATE`name`url (создать файл с именем «name» по адресу url) |
#5151`name`url | SAVE FILE`name`url (сохранить файл с именем «name» по адресу url) |
#5152`name`url | SAVE AS FILE`name`url (сохранить файл под именем «name» по адресу url) |
#6134`name`url | CLEAR FILE`name`url (удалить содержимое файла с именем «name» по адресу url) |
#6144`name`url | DELETE FILE`name`url (удалить файл с именем «name» по адресу url) |
#11400`#marker | FIND`#marker (найти маркер) |
#11400`'text' | FIND`'text' (найти 'текст') |
#11500`#marker | GOTO`#marker (перейти к маркеру) |
#44444 | BR (перейти на следующую строку) |
#81114`'text' | DELETE`'text' (удалить 'текст') |
#81114`#m`1 | DELETE`#m`1 (удалить строку m) |
#81114`#m`10 | DELETE`#m`10 (удалить первый символ строки m) |
#81114`#m`00 | DELETE`#m`00 (удалить последний символ строки m) |
#81114`#m`10`n | DELETE`#m`10`n (удалить первые n символов строки m) |
#81114`#m`00`n | DELETE`#m`00`n (удалить последние n символов строки m) |
#81114`#m`11 | DELETE`#m`11 (удалить строку с позицией m) |
#81114`#m`01 | DELETE`#m`01 (удалить последний символ позиции m) |
#81114`#m`11`n | DELETE`#m`11`n (удалить первые n символов позиции m) |
#81114`#m`01`n | DELETE`#m`01`n (удалить последние n символов позиции m) |
#87114`'text' | WRITE`'text' (записать 'text') |
#87145`'text' | WRITE REPLACE`'text' (записать 'text', заменяя исходный текст целиком) |
#306080`77114 | объявление языка программирования |
#600674740 | начало программы |
#632063206 | конец программы |
#45101010='specificator' | запись спецификатора программы (выполняется компилятором - обычно на строке 102) |
#600605480 | начало подпрограммы |
#632005480 | конец подпрограммы |
#01…#10 #49 | FOR…TO NEXT (цикл for…to) |
#40…#70 | DO…LOOP (цикл do…loop) |
#40…#70 #44`action | DO…LOOP WHILE`action (цикл do…loop while) |
#17…#11(…#42)(…#43)…#77 | IF…THEN(…ELSE)(…ELSEIF)…END IF (цикл if…end if) |
Каждая строка маркируется (трёхсимвольный диезный маркер). Маркер действия не является маркером строки, поэтому выставляется отдельно. Первый маркер строки программы может быть любым, но обычно это маркер #100 и далее по строкам по порядку: #101, #102, #103 и т. д. Таким образом, листинг программы не может превышать 899 строк (одна строка 128 символов); но частично можно обойти этот запрет вызовом внешних подпрограмм и внешних исполняемых программ.
Программа может обращаться к подпрограммам (sub program) и функциям (function) через оператор #0548. Если это внешние подпрограммы, то указывается сетевой адрес. Если это внутренние подпрограммы, то текст их должен быть описан внутри самой программы после основного теста программы; оператор объявления подпрограммы #1112.
Если программа обращается к файлам, сетевым базам данных, внешним программам - обязательно прописывается их адрес. Если программа изменяет файлы и сетевые базы данных, то обязательно должна быть функция сохранения изменённых данных.
В первой строке программы объявляется язык программирования Л2: #306080`77114. Вторая оставляется свободной, так как именно сюда компилятор впишет уникальный спецификатор программы. Например, вторая строка программы может выглядеть так: #45101010='ледоруб Att. 2'. И только с третьей строки начинается непосредственно код программы.
Любой текст в программе, будь то название или адрес, пишется в одинарных кавычках ''. Имя массива, базы банных, списка, файла, подпрограммы может быть как символьным, так и числовым.
Пустая строка, если она не маркирована, компилятором не воспринимается, и он сообщает об ошибке.
#100 #306080`77114 #101 #45101010='' #102 #1 ---константа=1 #103 #0811`'711\База4\1062.dxlp' ---открыть файл 1062.dxlp #104 #17 #622`10='#' #11 #3105`'711\База4\1062.dxlp' #105 ---если первый символ строки 622 диез, то закрыть файл #106 #42 #11500`#622 #87145='#' #0 #107 ---иначе пишем первый символ строки 622 как диез #108 ---константа=0 #109 #3534`'711\Результат\результат.dat' ----создаём файл #110 #17 #1 #11 #87144`'да' #111 ---если константа=1, пишем да #112 #42 #87144`'нет' ---иначе пишем нет #113 #77 ---конец условного цикла #114 #5151`'711\Результат\результат.dat' ---сохраняем файл #115 #3105`'711\Результат\результат.dat' ---закрываем файл #116 #17 #1 #11 #3105`'711\База4\1062.dxlp' #117 ---если константа=1 закрываем файл 1062.dxlp #118 #42 #5151`'711\База4\1062.dxlp' ---иначе сохраняем #119 #3105`'711\База4\1062.dxlp' ---закрываем файл 1062.dxlp #120 #77 ---конец условного цикла #121 #632063206
Та же программа без комментариев выглядит вот так:
#100 #306080`77114 #101 #45101010='' #102 #1 #103 #0811`'711\База4\1062.dxlp' #104 #17 #622`10='#' #11 #3105`'711\База4\1062.dxlp' #105 #42 #11500`#622 #87145='#' #0 #106 #3534`'711\Результат\результат.dat' #107 #17 #1 #11 #87144`'да' #108 #42 #87144`'нет' #109 #77 #110 #5151`'711\Результат\результат.dat' #111 #3105`'711\Результат\результат.dat' #112 #17 #1 #11 #3105`'711\База4\1062.dxlp' #113 #42 #5151`'711\База4\1062.dxlp' #114 #3105`'711\База4\1062.dxlp' #115 #77 #116 #632063206
#100 #306080`77114 #101 #45101010='' #102 ---текст программы ... #999 #632063206
#100 #306080`77114 #101 #45101010='' #102 ---текст программы ... #800 #600605480 #801 #1112`number ---объявление подпрограммы 'number' #802 ---текст подпрограммы ... #998 #632005480 #999 #632063206
На капиталистическом западе как грибы после дождя разрабатываются всяческие «теории» программирования, призванные, якобы, облегчить написание, отладку и сопровождение больших программных комплексов. Очевидно, что, будучи продуктом буржуазной идеологии и выражая интересы правящего класса, эти теории призваны отвлечь широкие массы программистов от их истинных интересов. К сожалению, и у нас отдельные товарищи попали под тлетворное влияние теорий «структурного», «модульного», «нисходящего» или «восходящего» программирования, забывая, что чем дольше программист отлаживает программу, тем безошибочнее и эффективнее она когда-нибудь будет работать. Поэтому давно назрела необходимость противопоставить этим лжетеориям нашу советскую, выстраданную и вымученную методику программирования.
«Если что-нибудь можно сделать двумя способами, не пожалейте усилий и придумайте третий».
Многие западные программисты утверждают, что прежде чем начинать писать программу, необходимо время на обдумывание алгоритма, а некоторые даже призывают вникнуть в суть задачи, которую предстоит решать. Категорически не следует интересоваться постановкой задачи до момента получения объектного модуля программы. Помните, что программирование - это искусство, поэтому любые лишние знания только ограничивают вашу фантазию. Начинайте писать текст программы задолго до того, как вам сформулируют техническое задание, и вы получите прекрасную возможность сделать жизнь вашего руководителя/заказчика (и свою) гораздо разнообразнее и интереснее (например, в момент получения ТЗ вы можете возмутиться: «Представляете, сколько теперь придется переделывать?!»).
Никогда не составляйте заранее блок-схему программы. Во-первых, это
проще и быстрее сделать, когда программа уже написана, во-вторых,
неосторожно оставленная на столе блок-схема даст вашим врагам и
завистникам возможность понять, что вы собираетесь делать. Помните,
что никто кроме вас не должен разбираться в вашей программе. И если
вы никак не можете избавиться от дурной привычки рисовать блок-схемы,
то зарубите себе на носу:
Чем больше
структура программы соответствует ее логике, тем меньше вы стоите
как программист.
Этому модному словечку многие западные адепты и апологеты придают особый, чуть ли не мистический смысл. Безусловно, каждый программист или, там, композитор имеет право писать в своей манере, однако, учитывая объёмы программных разработок, необходимо считаться с реальностью. Как и всё остальное, программирование должно быть экономным!
Тратить до 50% перфокарт и объёма листинга на комментарии, пробелы, пустые операторы, звездочки и другие украшательства - совершенно недопустимая расточительность. Пишите со 102-ой по 999-ую позиции, всемерно избегая пробелов. Если комментария никак не избежать, стремитесь писать его как можно конкретнее.
При внимательном рассмотрении легко обнаруживается, что буржуазные авторы книг рассуждая о предмете, который они называют «структурным программированием», тонут в собственных противоречиях. Например, Д. Майерс, стр. 63: «Скромные по целям работающие программы лучше неотлаженных грандиозных проектов», а на стр. 58: «Если незначительное добавление сделает вашу программу пригодной для другого случая, никогда не пренебрегайте этим». Можно согласиться с последним утверждением, поскольку умелое его применение позволит вам затянуть разработку программы на любой мыслимый срок.
Более того, тот же автор через несколько страниц, вспоминает пресловутый принцип к ISS (кеер Iт SIмрLе, SтUрID - будь проще, дурачок!). Представляете, в один прекрасный день руководитель заявляет вам: «Что-то у вас очень уж просто все получается!»
Эти структурно-экстремистские тенденции, в конце концов, приводят к полному вырождению программирования как творческой деятельности. Предельная степень деградации порождает методы типа ашкрофта-манны [Э. Йодан], сводящие деятельность программиста к работе Ч. Чаплина на конвейере в к/ф «Новые времена».
Первая заповедь программиста, успешно преодолевшего барьер синтаксического контроля - не торопиться. Помните, что плохо отлаженная программа всегда менее эффективна, чем совсем не отлаженная. Не выводите на печать более одной переменной за один прогон. Полученные листинги (распечатки) немедленно уничтожайте (во избежание!..). С другой стороны, полезно хранить, в единственном экземпляре, протокол компилятора с наихудшим (это не сложно) качеством печати с тем, чтобы при незапланированном появлении руководителя можно было бы сказать: «Вот видите, в каких условиях приходится работать!» Разумеется, диагностические сообщения следует отрезать, а лучше - неаккуратно оборвать.
Когда заканчивается отладка, начинается эксплуатация! Ни один уважающий себя программист не допустит, чтобы его любимое чадо, плод его многолетних трудов и страданий эксплуатировали какие-то посторонние люди.
Несколько слов о тестировании. Никто не знает, в чем именно заключается тестирование, что является конечной целью и какие результаты следует получить. В методе «свн» принято считать тестирование законченным, если выполнение завершается с кодом возврата 0000, даже если исходные данные различаются хотя бы одним числом (или всеми - если вы максималист).
После окончания этапа тестирования уничтожьте исходный текст. Только в этом случае вы можете быть абсолютно уверены, что вашей программе никто не причинит никакого вреда, и она останется такой же эффективной, какой была всегда.
Сеть имеет сложную внутреннюю структуру. Существуют служебные и пользовательские уровни. Выход на пользовательский уровень - через виртуальный шлем в любом игровом центре. Выход на служебные уровни - только через профессиональный разъём (модели 1Ц29, 1Ч29, 2Ц28, 1ЦЦ1).
Нижний уровень - матрица, байтовая информация (подразумевается исходная кодировка на основе двоичного кода - 16-ричная, а также менее распространённых кодировок 8-ричной, 64-ричной, и 10-ричной.) Манипуляции в этом слое осуществляются внесением изменений непосредственно в исходный код. Ситуация осложняется тем, что для большей части исходного кода требуется декомпиляция и дешифровка.
Средний уровень - объектный слой. Манипуляции в этом слое упрощены благодаря объектному интерфейсу. Это основной рабочий слой. Незаконные (в основном) манипуляции в этом слое осуществляются программами-взломщиками.
Служебный уровень - оперативный слой. Своего рода смесь матрицы и объектного слоя, в который временно загружаются куски кода и объекты.
Верхний уровень - пользовательский слой. Слой вывода результатов пользовательских программ. Используется для пользовательской работы с данными, а также для размещения интерактивных виртуальных игр.
Защищённая передача данных с одного адреса на другой осуществляется через матрицу. Каналы передачи данных пользовательского слоя не шифруются, данные передаются в открытом виде. В объектном слое передача данных легко засекается.
Работу программ, изменения в сетевых хранилищах информации возможно отследить в оперативном слое. Но это практически нереально.
Все программы так или иначе отображаются в объектном слое.
Интересующие БКФ-овцев программы подразделяются на классы:
- Лёд. Активные защитные программы.
- Ледорубы. Активные атакующие программы.
- Град. Пассивные защитные программы слежения.
- Шторм. Пассивные защитные программы контрудара.
- Боевые вирусы. Пассивные атакующие программы.
- Информационные ресурсы. Сетевые информационные массивы, базы данных, списки, листы.
- Все остальные программы.
Активные программы засекаются немедленно, в момент активации, и немедленно выполняют свою задачу - зачастую грубо и напролом (всё зависит от поставленного ТЗ и способностей разработчика).
Пассивные программы засекаются по уже произведённому эффекту. Защитные пассивные программы обычно отслеживают данные атакующего; самые дорогие программы - защитные пассивные программы контрудара, которые отслеживают адрес атакующего и, применяя либо встроенный «ледоруб», либо «боевой вирус», наносят ответный удар по нападающему. Атакующие пассивные программы, т.н. «боевые вирусы» воздействуют либо на защитный «лёд», либо на сам защищённый объект, в обход «льда».
Существует понятие сильного и слабого уровня атаки/защиты. Обычно «ледоруб» не уничтожает защитный «лёд», он только минует его силовым способом. Так же и «лёд» обычно не в силах уничтожить атакующую программу. Но в исключительном случае это может произойти.
Если разница в уровне между атакующей и защитной (и наоборот) программами составляет несколько порядков, то возможно полное уничтожение более слабой программы. Кроме того, вполне возможно, что будет повреждено и оборудование, с которым была связана уничтоженная программа. Так, выйдет из строя процессор, сопроцессор, калькулятор, сгорит системное устройство и прочее подобное страшное.
Опасность для БКФ-овца состоит в том, что есть возможность потери его сетевого оборудования (имплантанты) различными способами и, шанс минимальный, но такая возможность тоже есть, возможность полной потери всех данных мозга БКФ-овца (идиот? это ещё мягко сказано! - овощ).
Сетевой разъём 1Ц29. Позволяет выходить в объектный слой сети, а, через него, на оперативный слой и матрицу. Основное устройство, без которого выход на т. н. служебные слои сети невозможен.
Программный сопроцессор ТР04Ф. Управляет вызовом сетевых ресурсов, хранит в оперативной памяти один сетевой модуль, список, базу данных или массив. Устройство расширения, используемое в основном «сетевиками» - сетевыми программистами и, иногда, БКФ-овцами. В оперативную память сопроцессора с сетевого адреса загружается программа/модуль/массив/база/список; считается, что этот объект по-прежнему находится в сети, но скорость доступа к нему во много раз больше, кроме того, если этот объект в сети будет удалён/перемещён/переименован/заблокирован, то к нему всё равно можно будет обращаться, так как он находится в оперативной памяти сопроцессора.
Сетевой разъём стандартен, все его версии унифицированы, существуют модификации 1Ц29, 1Ч29, 2Ц28, 1ЦЦ1.
Программные сопроцессоры серии ТР-Ф выпускаются с 1-й (ТР01Ф) по 17-ю (ТР17Ф) модели, все они разработаны под разные функции, имеют разные характеристики и обладают разными возможностями. Программный сопроцессор ТР17Ф только разработан, его характеристики и функции неизвестны. В открытой продаже имеются устаревшие образцы пятилетней-десятилетней давности - до 12-й модели (эту модель достать сложно). Модели, начиная с ТР13Ф, стоят на вооружении подразделений БКФ МО СССР.
Существуют игровые пользовательские сопроцессоры, улучшающие характеристики персонажа в игровой ВР. Игровые пользовательские сопроцессоры серии Х-ЦФ выпус-каются с 1-й (Х01ЦФ) по 94-ю (Х94ЦФ) модели.
Существуют боевые сопроцессоры (серии и модели неизвестны). Все данные по ним закрыты. Стоят на вооружении спецподразделений БКФ МО СССР.
Адрес для связи с мастерами: spm111@yandex.ru.
Мастера:
# Захаров Максим (т. (0872) 30-85-74) - мертвятник и новые роли, финансовая экономика, игровое взаимодействие, игровая ВР.
# Стёпин Илья (т. (0872) 30-83-34) - мир, роли и сюжет, ВР (+ бюрократия), игровое взаимодействие.
# Муханов Сергей (т. (0872) 26-38-64) - медицина и имплантанты, техника, игровое и боевое взаимодействие.