Форум
Философия программирования
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, FDSC, Вы писали: FDS>Здравствуйте, ·, Вы писали: FDS>>>Для осуществления контроля. Грубо говоря, я запускаю какую-нибудь функцию компилятора и смотрю распечатку всех модулей, где такие функции разрешены (ввода-вывода). FDS>>>Все остальные модули компилятор сам проверяет, что в них ничего такого нет. FDS>·>В каком файле? В .exe? Тогда компилятор тут непричём. Ибо .exe после компиляции можно пропатчить, например. FDS>Причём тут exe? FDS>·>SecurityManager же гарантирует, что если код захочет обратиться к запрещённым операциям, то кинется исключение. FDS>К сожалению, Java, в любом случае, не подходит. FDS>Хотя я не очень понял, как там запрещать доступ к любым методам. Там файлы, сокеты есть. Ну я не особо разбирался. FDS>Но это, всё равно, во время выполнения делается. А не во время компиляции. FDS>Но, вообще говоря, интересно. FDS>Забавно, что это в Java нашлось :) FDS>>>Это нужно, чтобы случайно не допустить ошибку и проще было бы контролировать операции ввода-вывода. FDS>·>Такое решается управлением зависимостями. Т.е. "эти файлы завият от этих библиотек. Вот списочек библиотек". Тебе останется проверить, что среди этих библиотек нет таких, которые делают ввод-вывод. FDS>Ну кто этот списочек-то составит? FDS>Файлы не зависят от библиотек. Они зависят от других файлов. FDS>>>>> 2. Аналогичный запрет для всех функций, которые вызываются из данной функции FDS>>>·>Запрет на уровне класса. FDS>>>Как? Допустим, мне нужно точно сказать, что Class1 не осуществляет операций ввода-вывода. FDS>>>то есть мне нужно, чтобы компилятор это проконтролировал. Причём так, чтобы я сам не задумывался, куда этот Class1 обращается. FDS>·>Это происходит в runtime. Условно говоря, если Class1 (и любой код им используемый) пытается обратиться к java.io.File, то кастомизированный ClassLoader просто кинет ClassNotFound. FDS>Забавно. FDS>>>·>Это как? Если у некоего кода нет доступа к некоему состоянию, то и изменить не может, доступа к приватным данным тоже нет (кроме как через публичные методы). Или иммутабельные объекты что-ли? FDS>>>У меня есть массив данных. Я его передаю в функцию вычисления хеша. Я хочу, чтобы этот массив не был изменён этой функцией. FDS>>>Мало того, функция не должна изменять никаких объектов в программе, кроме создания и изменения новых. FDS>·>Самый простой подход - защитная копия. Ты делаешь копию этого массива и передаёшь в функцию вычисления хеша. Даже если она что-то там поменяет, то пофиг, а к оригинальному массиву у неё просто не будет доступа, т.к. нет его адреса. FDS>Тут смысл в том, что я не должен об этом думать. И тем более, копировать что-то в runtime. FDS>1. Это загрязняет код FDS>2. Это требует кодирования FDS>·>Как вариант - делать read-only интерфейс доступа к тем же данным. Т.е. у тебя будет FDS>·>public int getSize() и public byte getData(int index) - и всё. Функция может только получить размер и взять значение, а что-то поменять - тупо нечем. FDS>Я понимаю, что так можно сделать. Но мне нужна простая программа. Я же не буду каждые данные копировать и интерфейсы на них писать. FDS>Это слишком сложно. FDS>Кроме этого, функция хеширования должна работать как можно быстрее. А тут на каждый доступ куча проверок. FDS>Как раз хотелось бы в статике проверять. FDS>>>>> 4. Помечать объекты дополнительными типизационными метками (в статическом виде). Например, красная строка должна быть несовместима с зелёной строкой, но зелёная неявно приводима к красной. FDS>>>·>А чем просто типы не устраивают? [tt]class RedString {private final String content;}[/tt] FDS>>>Представим себе, что я беру один символ красной строки и его помещаю в зелёную строку. Компилятор, в идеале, должен это отловить. FDS>>>То есть он должен все производные данные пометить также красной строкой. FDS>·>Сделать RedSymbol... FDS>Опять же, сделать вручную. Тогда проще сразу написать компилятор языка, который будет делать это автоматически. FDS>>>Плюс, нужно, чтобы можно было с гарантией видеть все приведения типов, чтобы их затем отдельно просматривать. FDS>·>Не делать приведения типов. Делов-то. FDS>Если я не буду делать приведений типов, то я никогда не смогу записать красную строку в зелёную. FDS>А нужно смочь. И чтобы этих мест было как можно меньше. FDS>>>Плюс, у меня не должно быть сборщика мусора. Я как раз хочу уйти от него. FDS>·>Это почему? FDS>Во-первых, мне придётся самому его писать, если я буду делать загрузку через UEFI FDS>Во-вторых, если он уже будет под Windows/Linux, то он не будет обнулять память. FDS>А мне нужно гарантированно обнулять память. Чтобы в оперативной памяти после использования не оставалось никаких данных, которые уже не нужны. FDS>Сборщик мусора это делает только случайно. Без гарантии. Что, если он что-то не перезапишет?
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …