OberonCore
https://forum.oberoncore.ru/

Изменения в PureBuilder
https://forum.oberoncore.ru/viewtopic.php?f=93&t=3625
Страница 1 из 1

Автор:  Сергей Прохоренко [ Суббота, 22 Октябрь, 2011 17:29 ]
Заголовок сообщения:  Изменения в PureBuilder

В PureBuilder изменился механизм локализации. Он стал максимально гибким.

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

Автор:  Сергей Прохоренко [ Пятница, 11 Ноябрь, 2011 22:25 ]
Заголовок сообщения:  Re: Изменения в PureBuilder

Специально для циклов модифицирована скобка операторного блока (она используется вместо операторных скобок):

Вложение:
Алгоритм Эвклида в PureBuilder.png
Алгоритм Эвклида в PureBuilder.png [ 2.18 КБ | Просмотров: 8052 ]


Прежде для циклов использовалась обычная скобка операторного блока:

Вложение:
Скобка.png
Скобка.png [ 485 байт | Просмотров: 8050 ]


Новая скобка демонстрирует регулярную передачу управления заголовку цикла.

Автор:  Валерий Лаптев [ Пятница, 11 Ноябрь, 2011 22:48 ]
Заголовок сообщения:  Re: Изменения в PureBuilder

Сергей Прохоренко писал(а):
В PureBuilder изменился механизм локализации. Он стал максимально гибким.

Вот кстати, мы тоже над этим думаем. ИМХО строки не должны быть просто строками как массивы символов. Со строками обязательно должны быть связано несколько атрибутов. И один из обязательных атрибутов - кодировка.
Таким образом, строки - это ВСЕГДА отдельный библиотечный модуль среды, а не часть языка.

Автор:  Владислав Жаринов [ Суббота, 12 Ноябрь, 2011 10:03 ]
Заголовок сообщения:  Re: Изменения в PureBuilder

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

Автор:  Сергей Прохоренко [ Суббота, 12 Ноябрь, 2011 12:51 ]
Заголовок сообщения:  Re: Изменения в PureBuilder

Владислав Жаринов писал(а):
...А что за уникальная случайная строка?


Например, русское написание идентификатора складскойЗапасНаНачалоНедели, английское написание идентификатора warehouseStockOnTheWeekend, а внутреннее программное представление, созданное на основе генератора случайных чисел, - jGFT5h56fldh. Пока программа разрабатывается и отлаживается, доступны все внешние представления идентификатора с указанием на язык. После окончательной компиляции в исполнимом коде остается только внутреннее программное представление jGFT5h56fldh. "Плюсов" много:
  • Совместимость с другими программными платформами
  • Низкая вероятность конфликта имен
  • При программировании и отладке нет ограничений на длину идентификаторов и на кодировку
  • Если случайно не использовался обсфуркатор, то какая-никакая защита от взлома
  • Ничьи национальные чувства не задеваются
  • Переименование идентификаторов просто реализуется

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

Автор:  Борис Рюмшин [ Воскресенье, 13 Ноябрь, 2011 00:14 ]
Заголовок сообщения:  Re: Изменения в PureBuilder

Разборка вынесена из ветки. viewtopic.php?f=70&t=3670 (для сохранения материала)

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

Все возражения --- в ЛС, или в административную ветку.

Автор:  Владислав Жаринов [ Понедельник, 14 Ноябрь, 2011 09:06 ]
Заголовок сообщения:  Re: Изменения в PureBuilder

Сергей Прохоренко писал(а):
Владислав Жаринов писал(а):
...А что за уникальная случайная строка?

...
После окончательной компиляции в исполнимом коде остается только внутреннее программное представление jGFT5h56fldh.
...
Ну, в общем, надо понимать так, что человекочитаемое представление, ессно, содержит только "знаковые" (в терминах создателя техноязыка) имена - т.е. на естественных языках. А это ВПП есть где? В машкоде вроде как адреса везде подставлены... а исхтекст тоже человеку читать надо...

Автор:  Сергей Прохоренко [ Понедельник, 14 Ноябрь, 2011 17:47 ]
Заголовок сообщения:  Re: Изменения в PureBuilder

Владислав Жаринов писал(а):
Сергей Прохоренко писал(а):
Владислав Жаринов писал(а):
...А что за уникальная случайная строка?

...
После окончательной компиляции в исполнимом коде остается только внутреннее программное представление jGFT5h56fldh.
...
Ну, в общем, надо понимать так, что человекочитаемое представление, ессно, содержит только "знаковые" (в терминах создателя техноязыка) имена - т.е. на естественных языках. А это ВПП есть где? В машкоде вроде как адреса везде подставлены... а исхтекст тоже человеку читать надо...


При трансляции в байт-код остается внутреннее представление идентификаторов. Если помните, Валерий Лаптев предполагал использовать динамическую кодогенерацию в семантическом редакторе.

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

Автор:  Илья Ермаков [ Понедельник, 14 Ноябрь, 2011 17:51 ]
Заголовок сообщения:  Re: Изменения в PureBuilder

Насколько я понял Сергея Прохоренко, идея интересная - если исходник бинарен, то автоматический перевод за счёт прикладываемого словаря - интересная идея.
Я тоже думал как-то над этим. Чтобы можно было просматривать и вводить исходник в одном лексиконе, а потом другой человек мог переключать лексикон в соответствии со словарём идентификаторов.

Автор:  Владислав Жаринов [ Понедельник, 14 Ноябрь, 2011 18:18 ]
Заголовок сообщения:  Re: Изменения в PureBuilder

Ага. Где-то так я и понимал: случайная строка есть индекс словарной статьи в БД редактора, организованной по такому типу. И если редактор "умеет" читать бинарный исходник, то может там находить случайные строки и вызывать по их значениям словарные статьи. Конечно, если значения актуальны... ;) Так?

Автор:  Сергей Прохоренко [ Понедельник, 14 Ноябрь, 2011 18:43 ]
Заголовок сообщения:  Re: Изменения в PureBuilder

Владислав Жаринов писал(а):
Ага. Где-то так я и понимал: случайная строка есть индекс словарной статьи в БД редактора, организованной по такому типу. И если редактор "умеет" читать бинарный исходник, то может там находить случайные строки и вызывать по их значениям словарные статьи. Конечно, если значения актуальны... ;) Так?


Совершенно верно.

Автор:  Валерий Лаптев [ Понедельник, 14 Ноябрь, 2011 21:42 ]
Заголовок сообщения:  Re: Изменения в PureBuilder

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

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

Автор:  Владислав Жаринов [ Понедельник, 21 Ноябрь, 2011 09:02 ]
Заголовок сообщения:  Re: Изменения в PureBuilder

Ого! Вы уже идёте прямо в русле неоклассики применительно к прогязыкам... :)

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

Автор:  Валерий Лаптев [ Понедельник, 21 Ноябрь, 2011 22:18 ]
Заголовок сообщения:  Re: Изменения в PureBuilder

Владислав Жаринов писал(а):
Ого! Вы уже идёте прямо в русле неоклассики применительно к прогязыкам... :)

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

Почти в точности!
Пока не заморачиваемся эффективностью, реализовали чистый интерпретатор.
Пацан сейчас серьезно размышляет над понятием "тип".
В процессе предыдущей реализации у него получилось, что одной кнопочкой можно переключать ся с семантики значений на семантику ссылок. Но сейчас остановились, так как любые попытки обобщения приводят к лиспу... :))
Если посмотреть чуть глубже, то - к смешанным вычислениям Ершова

Автор:  Сергей Прохоренко [ Понедельник, 20 Февраль, 2012 14:58 ]
Заголовок сообщения:  ООП

В PureBuilder добавлен новый раздел "ООП"


Цитата:
ООП


Полиморфизм

В PureBuilder полиморфизм обеспечивается следующим образом. Для каждого метода в таблице методов класса программист указывает псевдоним, по которому вызывается этот метод. Разные методы разных классов, обладающие похожим действием, могут иметь общий (одинаковый) псевдоним. Метод не может быть вызван непосредственно по своему имени, а только по псевдониму. Всякий раз при использовании псевдонима будет вызываться тот из методов с общим псевдонимом, который содержится в классе объекта, к полям которого применяется псевдоним. По умолчанию псевдоним создается автоматически на основе имени метода и может быть отредактирован программистом разом во всей программе (рефакторинг).


Классы

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



Непосредственное добавление полей и псевдонимов методов

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



Копирование полей и псевдонимов методов из родительских классов

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


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


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


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



Постоянное связывание с родительскими интерфейсами (композиция или агрегирование)

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


Для решения проблемы «хрупкости базового класса» классы, от которых образуются объекты, не могут быть добавлены в таблицу родительских интерфейсов, а от классов, добавленных в таблицу родительских интерфейсов, нельзя непосредственно создавать объекты (экземпляры классов, переменные). Исключение составляют библиотечные классы, на которые оба этих ограничения не распространяются. Интерфейсы и библиотечные классы соответствующим образом выделяются по отношению к другим классам.



Устранение дублирования полей и псевдонимов методов

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



Сравнение классов

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



Проверки целостности классов

PureBuilder осуществляет проверки во время конструирования программы или компиляции: (1) объявлены ли в новом классе все необходимые поля, обрабатываемые при вызове всех его псевдонимов методов (выдача ошибки "нет поля или лишний псевдоним метода"); (2) есть ли в новом классе поля, не обрабатываемые ни одним из его псевдонимов методов, кроме конструктора (выдача ошибки "нет псевдонима метода или лишнее поле")?



Создание объектов (экземпляров классов)

Объекты (экземпляры классов) в куче (динамической памяти) создаются с помощью оператора new, а объекты в стеке (статической памяти) создаются путем объявления в соответствующей таблице – как и переменные базовых типов.


Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/