• Безымянный 222304

  • Яма плюс - справочьник - кусок 13.

  •  
    // куски справочьника ...

    // Контроль и погружэние програмиста в пучину кода.
    // ----------------- 12

    1. Програмирование библиотек // создание сборников кода как деталей (заводской уровень).
    2. Програмирование компиляцый // создание програм и версий програм.
    3. Програмирование параметров // анкеты и скриптование внутри готовых програм.
    Первый пункт самый глубокий - нужно придумывать и выполнять в коде некие механизмы,
    которые помогут "средним програмистам" делать свои "програмы".
    Третий пункт самый лёгкий - всё ужэ сделано до нас - нам только нужно выставлять
    какие-то числа в осмысленых окошках и буквально сразу видно результат.
    /*
    Ради прикола, можно называть глубоких програмистов "мастер", средних "композитор".
    А тех, кто на поверхности играется с параметрами, можно называть "вокалист".
    Мастер делает музыкальные инструменты.
    Композитор пытается лабать на инструментах и записать фанеру "минус один".
    Вокалист потом пытается прилепить свои стишки и голос к готовой фонограме ))
    */

    Для удобства работы и взаимо-действий нужны приёмы по контролю "чего-то в коде".
    Например, чтобы не ставить в пяти местах безликое литерал-число 25, мы можэм создать
    константу с неким названием и законсервировать там число 25. Так мы ничего не перепутаем
    и нам достаточьно поменять 25 в одном месте и все другие автоматически "подстроятся".

    // В языке "Яма плюс" нет подобия исключений "try/catch" (для тех кто знает с++)

    // зависимые указатели..
    Авто-помошник сканирует код. Когда он видит, что некий указатель получяет адрес
    от "квитка" или какого-то локального учястника кода, то этот указатель становится
    "опасным указателем". Авто-пом выдаст прогеру предложэние "подстраховаться" и
    добавить в спец-процэдуру выражэние, которое обнуляет этот указатель,
    если происходит удаление предмета, на который он показывает в текуший момент.
    // Тоесть, "опасные указатели" пополняют процэдуру "по факту удаления предметов".

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

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

    // Назвы (названия как номерки и наоборот)..
    (назвы - это ключевое слово - означяет "набор констант", "набор названий").
    // набор цэло-численых глобальных констант.

    Переменки для которых заготовлены "назвы" можно называть "зажатыми" (капризными).
    Такие переменки не могут получить ничего кроме учястников личьного пакета "назвы"
    (пакета значений намеченого для таких как они).

    назвы на_3_дня // ключевое слово начинает разметку набора, затем название набора.
    {
      // Далее в блоке свои правила.
      // Константы создаются без указания "типажа" и оператора создания, хотя визуально
      // перед каждым названием будет рисоваться значёк, где два восклицательных знака.

      // А такжэ нельзя ставить оператор "имя" перед названиями (если такой оператор будет).
    понедельник ко 1, // первое название //глобальная константа.
    вторник, // авто-консервирование значения "два".
    среда // здесь будет тройка. // прибавляется по единицэ
    }
    лимит 2; // Только две переменки могут пользоваться этими названиями.
    // лимит 0; // Такое тожэ можно - значит, нам нужны только "сами константы".

    на_3_дня!! _экзэмпляр = среда; //вот первая переменка из лимита.
    на_3_дня !! _22 = вторник; //а вот и вторая.

    // Если будет замечено "большэ двух", то авто-пом выдаст ошыбку и пояснит.
    на_3_дня!! _33 = вторник; // ошыбка лимита - создание третьего экзэмпляра под "на_3_дня".
    чи31 !! эн_переменка = вторник; // ошыбка - вовлечение третьей переменки (тип не важэн).
    _22 = среда; // Подобные выражэния не ограничены - ведь "_22" среди первых двух.

    Есть автоматическая огранка.. "на_3_дня.начяло"., "на_3_дня.конец".
    // Важная деталь - через одну точьку, потому-что это просто два "близких названия",
    // которые добавляют смысла, но не являются "принадлежностью" набора "на_3_дня".
    // Если назвы названы "на_3_дня.конец", то огранка будет "на_3_дня.конец.конец".

    назвы { нечьто1 ко 1, Нечьто1 ко 1, двойка, }
    // Не обязательно, чтобы все элементы хранили разные числа.
    // Последняя запятая не является ошыбкой - её проигнорируют и всё будет хорошо.

    назвы пример.хаоса { запятая ко ',', восклицалка ко '!', вопросик ко '?', бармалей }
    // 44, 33, 63, 64 //эти числа подразумеваются в строке вышэ.
    Номерки, которые выдаём под названия, могут быть в любом порядке и если у очередного
    названия не задано номерка, то ему поставят "пред-идуший плюс один".
    Подразумевается, что нам наплевать на "номерки", лиш бы во всех местах эти номерки
    совпадали с нужными действиями.

    назвы { ляля, бум, трам }
    В этом наборе три "назва" и не указано явных чисел.
    Считается, что этот и подобные наборы содержат "уникальные номерки", которые
    продолжают "глобальную линию номерков".
    Глобальная линия начинается со спец выражэния, которое можэт записать програмист..
    #назвы.старт.уникальной.линии( 555)
    // Первый "само-установленый" номерок линии будет 555 и далее "плюс один".
    Если програмист не знает про такое, то умолчянка начинается с популярного числа 100500.

    на_3_дня !! _зажатое = вторник; // Допустим, что нет "лимит 2".

    турсит( _зажатое)
    {
    лес 0.. // Авто-пом здесь выдаст ОШЫБКУ - для зажатого требуются "только названия".
    лес понедельник.. действуем_икс1()., дом., // понедельник - это валидный назв.
    лес вторник.. отдыхаем()., дом.,
    // Авто-пом здесь будет мигать-намекать "упушены варианты" (среду забыли).
    // лес .. дом., // Вот это успокоит мигание - мол все остальные не упомянутые дни.

    }

    _зажатое = среда;
    _зажатое = 3; // ошыбка // но авто-помошник предложыт вариант "среда".
    _зажатое -= понедельник; // ошыбка - попытка вычитания.

    Переменка "_зажатое" только получяет и выдаёт значение, а вычисления не для неё.
    Зажатые очень зажаты. //ха-ха.
    Однако, можно использовать "назвы" (набор констант) отдельно от зажатых переменок.

    чи31 !! свободная_переменка = на_3_дня..среда;
    свободная_переменка += 1; // число 4 выходит за границу набора "на_3_дня" (1, 2, 3)
    п( свободная_переменка вне на_3_дня) свободная_переменка = на_3_дня.конец;

    Ключевое слово "вне" просто показывает "выходит за границы".

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

    Оператор доступа "принадлежность" (две точки подряд или вертикальное двое-точие)
    можно читать как "его". // доступ к содержымому любых наборов.
    (Название_набора) (его) (Название_учястника_набора).

    Можно использовать "назвы" для именования "вагонов масива".

    Отдельная опцыя, чтобы компилятор дублировал некоторые "назвы" в "стринг-версиях"..
    #назвы.дублирование( на_3_дня)
    С этой строкой мы можэм вызывать в коде процэдуры, которые печятают на экране монитора
    названия констант из набора "на_3_дня".
    Такжэ можно от стринга("вторник") получить сыответный номерок(2).

    // ---
    Один из "гвоздей контроля" в языке "Яма плюс"..
    Спец-масивы "организацыя дна".

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

    о2 и о3 являются ключевыми словами и начинают любые имена "организацыя дна".
    Цыфра 2 означяет "масив цэлых чисел". (либо чи31, либо чи63)
    Цыфра 3 означяет "масив вешественых чисел". (либо фло32, либо фло64)
    Легкое произношэние "одва" и "отри" являются ответом для "почему такие цыфры".

    Опцыи компилирования - програмист можэт задать много вариантов для этих масивов.
    Есть возможность, чтобы авто-помошник пере-тасовал и сделал всё отдельными
    глобалками (не масив). И есть возможность, чтобы компилятор встроил самую сложную
    графическую оболочьку для этих масивов, чтобы можно было следить за этими масивами
    в ходе работы скомпилированой програмы и удобно менять там значения.
    // Полный набор опцый пока не ясен, но подобные масивы ужэ опробованы.

    Проявляем-добавляем "переменки дна" в разделе "Глобалки" проекта..
    // о2.название( номер, значение =0, сброс =0, мини =0, макс =0, звено =0, л_тригер =0)
    #о2.некое.имя( 1, 50, 50, 1, 99) // мини = 1, макс = 99
    #о2.некое2 ( 83, 33, , , 55, , 1) // сброс = 0, мини = 0, макс = 55
    #о2.последний( 120)
    // значит спец-масив цэлых чисел будет из 120 ячеек (вагонов).

    #о3.тэст.вектор.хикс( 5, 0.0, , , 1.0, 1)
    #о3.тэст.вектор.высь( 6, 0.0, , , 1.0, 2)
    #о3.тэст.вектор.даль( 7, 0.0, , , 1.0, 3)
    // если это единственые записи про "масив флоатов", то их масив будет из 7 ячеек.

    // Пример использования в коде (при написании програмы)..
    о2.некое2 += 2; // новое значение будет 35.
    о2.некое2 += 100; // будет 55 //срежут потолком - отправят весточьку в лог-файл.

    // Использование в ходе работы нашэй скомпилированой проги..
    Жмакаем спец-клавишу - появляется маленькое окошко - печятаем туда "о2.фигня" и
    видим над окошком надпись "элемент не найден". А если туда напечятать "о2.некое2",
    то появится отдельное окошко, где можно настроить текушее значение этой "переменки дна"
    и увидеть ограничители "мини-макс" (ограничители пока меняются от пере-компиляцыи).

    Вероятно, можно просто напечятать "о2(ввод)" и появится большое окно, которое как
    "база даных" по цэлым "переменкам дна" - можно этому окошку на ходу менять визуализацыю,
    чтобы была возможность наблюдать "картинку из игры" и "штук 30 переменок сбоку".

    "Звено" - это для тех соседних переменок, которые подразумеваются слитными.
    "Лог_тригер" - это пресет дополнительного поведения при особых событиях с переменкой.

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

    //
    Далее редкость, которая можэт и не пригодится програмистам.
    Один кусок оперативной памяти окупируют несколько переменок.
    Примерный смысл таков..
    Мы пользуемся названием одного из жыльцов и поручяем ему хранить некое число.
    Потом у нас есть возможность взять то число у того кому мы доверили хранить,
    либо через других жыльцов увидеть то число "другими глазами" для намереных искажэний.

    // ключевое слово начинает разметку комуналки, затем название комуналки и спец-опцыя.
    наклады две_фигни строго
    {
      // Здесь мы ничего не создаём, а только намечяем "что будет".
    фло64 _число; // здесь глупо задавать значение - оно будет размыто буквами.
    чи8 жыли<> _буквы = "тэст1"; // 6 байтов - это не превышает 8 байтов от фло64.
    }
    //лимит 0; // ошыбка - наклады не могут без "обобшяюшей переменки".
    лимит 1;

    // _число = 3.5; // ошыбка - название "_число" не является глобальным.
    // Требуется создать хотя-бы одну обобшяюшюю переменку..
    две_фигни !! две_фигни1; // Вот мы исчерпали лимит - большэ такие нельзя создавать.
    две_фигни1.._число = 3.5; // Любой вклад перебивает старый.
    // Двуточие обязательно // "_число" это принадлежность.

    чи8 !! бук = 0;
    бук = две_фигни1 .. _буквы.1 ; // ошыбка - взять можно только "_число"
    // (бук) (получяет) (две черк фигни один) (его) (черк буквы первый вагон)

    Ключевое "строго" не обязательно, но если оно упомянуто, тогда придётся считывать
    только тот "наклад", который положыли до этого. Первым вкладом считается тот наклад,
    который прописан в разметке "последним, кто получил изначяльное наполнение".
    // Если было слово "строго", но не один наклад не получил изначялки, то авто-помошник
    // заставит убрать слово или внести какую-то изначялку.
    Если в ходе работы скомпилированой проги будет попытка взять "чужой вклад", то
    эта информацыя выписывается в лог-файл и в "месэжь-бокс", а прога само-закрывается.
    //Сообшение об ошыбке уместно в центре экрана, потому-что "Лог-файл" можэт быть запрешён.

    наклады две_фигни2 строго // наклады.строго две_фигни2
    {
    фло64 _число = 8; // наклад "_число" является принадлежностью и первым вкладом.
    //чи8 жыли<> _буквы; // ошыбка - нельзя пустые угловые скобки, если нет изначялки.
    чи8 жыли< 12> _буквы; // наклад в виде масива // Можно задать сколько угодно вагонов.
    // Наибольшый наклад определяет размер комунальной оперативной памяти.
    }

    // Наклады отличяются от "union" (для тех кто знает Си плас плас)

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

    чи31 !! #имя тэст = 55; // слово "тэст" вносится в особый список.
    адр чи31 !! у.тэст = адр тэст; // обычьный указатель на цэлое число.

    чи8 жыли<>!! нечьто.бирка = "тэст"; // создан стринг.
    (чи восемь) (жыли авто-количество) (создать) (нечьто бирка) (получяет) (текст тэст)

    адр чи31 !! у.тэст2 = имя( нечьто.бирка); // эквивалент у.тэст
    (адрес типажа чи 31) (создать) (у тэст два) (получяет) (конверт имя из нечьто бирка)

    у.тэст.1 = 56;
    у.тэст2.1 = 56; // эквивалент строке вышэ.
    имя( нечьто.бирка).1 = 56; // эквивалент строке вышэ.

    // финиш кусок 12






























































































































































  • Безымянный 222304

  • Яма плюс - справочьник - кусок 13.