Автор Тема: Чем Вирту WITH не угодил?  (Прочитано 86099 раз)

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #135 : Май 03, 2012, 06:21:20 pm »
А что/зачем/кому о безопасности вообще вы "наивно пытались" объяснить? Когда речь в этой ветке идет о конкретном языке, и о возможности порчи памяти в нем...  ;)

В отсутствие вредоносных компонентов в пространстве памяти приложения вероятность совершения программистом ошибки с WITH, которая может вызвать порчу памяти, пренебрежимо мала. Вероятность совершения ошибки программистом, а не вероятность порчи памяти в работающем приложении, которая ещё меньше. Поэтому данный дефект не снижает safety языка, с точки зрения инженера, а не софиста.
Для security, если мы расчитывали его обеспечивать для компонентов, урон от данного WITH сокрушительный, поскольку кто угодно может целенаправленно обрушить наше приложение.
Вот что я пытался здесь донести. Кто хочет прочитать, тот прочитает. Всего наилучшего.

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #136 : Май 03, 2012, 06:24:45 pm »
Нет - смысл моей претензии в другом.. в том, что они именем идола -творили  непотребности ЗНАЯ о дефектности.

В 2005 г., в момент перевода данной статьи, не было известно о дефекте никому из сообщества, мне известного.

Кстати, идите покричите Sun-у (Ораклу), которая ПРОДАВАЛА "безопасную песочницу", в модели байт-кода которой потом университетские исследователи находили фатальные дыры.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #137 : Май 03, 2012, 06:39:18 pm »
...урон от данного WITH сокрушительный
В данной конкретной реализации, потому что сама по себе конструкция WITH вполне адекватная, а реализовать полностью безопасный механизм не так уж и сложно и оверхед небольшой будет, вполне терпимый, проявляющийся только при lvalue.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Чем Вирту WITH не угодил?
« Ответ #138 : Май 04, 2012, 06:22:19 am »
Где коллега ilovb, которому в РЕАЛЬНОМ проекте никогда не пришло бы в голову придавать значение этой "уязвимости", начинает разводить какие-то словеса о "ружье". Форум стерпит любую болтовню - но только вот вопрос: форум нам нужен как инструмент для обсуждения реальных вещей или как площадка для игры в слова?

Илья, посмотрите внимательно что я комментировал словесами о "ружье". Это была критика вашего утверждения об "отчетливой границе".

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #139 : Май 04, 2012, 06:32:27 am »
Не понимаю я это дурацкое выражение "герметичная система типов".
Герметичная ёмкость, в которой можно хранить воду без опасения что она вытечет -- это мне понятно.
Строгая типизация, слабая типизация и т. д. -- тоже понятно.
Но что за херня с этой вашей "герметичной системой типов"??? :o
Понавыдумывали левой терминологии, теоретики хреновы...
« Последнее редактирование: Май 04, 2012, 06:34:25 am от Geniepro »
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Чем Вирту WITH не угодил?
« Ответ #140 : Май 04, 2012, 06:50:59 am »
В отсутствие вредоносных компонентов в пространстве памяти приложения вероятность совершения программистом ошибки с WITH, которая может вызвать порчу памяти, пренебрежимо мала. Вероятность совершения ошибки программистом, а не вероятность порчи памяти в работающем приложении, которая ещё меньше. Поэтому данный дефект не снижает safety языка, с точки зрения инженера, а не софиста.

Во первых слова типа "пренебрежимо мала" ни чем не подкреплены.
Во вторых единственный софист в данной ветке - это вы. На сколько мне известно вы не являетесь специалистом в вопросах безопасности, и тем не менее "вещаете истину" без всяких "ИМХО". Я на это уже намекнул пословицей, но вы отмахнулись.

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Чем Вирту WITH не угодил?
« Ответ #141 : Май 04, 2012, 08:45:46 am »
Вот что я пытался здесь донести. Кто хочет прочитать, тот прочитает. Всего наилучшего.
Илья, а тебе не надоело постоянно ругаться с людьми? Враждовать? Вещать истину? Особенно из-за такого пустяка как Оберон?  :)

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Чем Вирту WITH не угодил?
« Ответ #142 : Май 04, 2012, 08:59:03 am »
В данной конкретной реализации, потому что сама по себе конструкция WITH вполне адекватная
Нет, не в данной конкретной реализации. Конструкция WITH всегда неадекватна когда работает со ссылкой на указатель (VAR x: POINTER TO...) потому, что значение указателя на который ссылается ссылка x всегда можно свободно менять.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #143 : Май 04, 2012, 10:05:40 am »
Нет, не в данной конкретной реализации. Конструкция WITH всегда неадекватна когда работает со ссылкой на указатель (VAR x: POINTER TO...) потому, что значение указателя на который ссылается ссылка x всегда можно свободно менять.
Никак не могу  согласиться с данным утверждением, потому как писали мы оберонистый компилятор для внутренних нужд - нет там такой проблемы, потому что дескриптор типа содержит поле guard, которое увеличивается при каждом вхождении в блок WITH и уменьшается при выходе из него, что контролируется при присваивании/создании, и в случае обращения к защищенному участку памяти вываливается исключение, но память при этом, по понятным причинам и стандартными средствами, испортить невозможно.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Чем Вирту WITH не угодил?
« Ответ #144 : Май 04, 2012, 10:23:50 am »
Ничего не понятно  :)

Можно подробнее рассказать?

Зачем поле "guard"?
Что значит "контролируется при присваивании/создании"?
Что значит "в случае обращения к защищенному участку памяти"?

В оригинальном Обероне WITH тупой до безобразия. Во время компиляции просто временно меняется тип переменной и далее соответственно разыменования контролируются с этим временным типом (контроль времени компиляции). А у вас я так понимаю в рантайме при каждом разыменовании контроль происходит?
В оригинальном Обероне опять же в рантайме контроль осуществляется ровно один раз при входе в блок WITH.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #145 : Май 04, 2012, 11:05:06 am »
Зачем поле "guard"?
Что значит "контролируется при присваивании/создании"?
Что значит "в случае обращения к защищенному участку памяти"?
Изначально данное поле предназначалось для защиты объектов. Обычно это поле равно 0, что говорит о том, что "дверь открыта" и с объектом (вернее с выделенным участком памяти, где и лежит нужный нам объект) можно делать всё что угодно и кому угодно. Если значение отлично от 0, то объект защищен и его нельзя трогать - нельзя пересоздать (что гарантирует присутствие нужного экземпляра), нельзя собрать сборщиком мусора и т.д., а WITH использует этот механизм для того, чтобы гарантировать неизменность не только типа, но и экземпляра.
В оригинальном Обероне WITH тупой до безобразия. Во время компиляции просто временно меняется тип переменной и далее соответственно разыменования контролируются с этим временным типом (контроль времени компиляции). А у вас я так понимаю в рантайме при каждом разыменовании контроль происходит?
В оригинальном Обероне опять же в рантайме контроль осуществляется ровно один раз при входе в блок WITH.
Ничего не могу сказать про оригинальный Оберон, потому что когда мы писали компилятор я видел только описание языка и никакого реального компилятора у нас не было. Возможно, я неверно интерпретировал описание WITH, потому что в моём понимании любое обращение к защищаемой переменной должно вызывать проверку типа, либо должен быть механизм, гарантирующий неизменность типа и экземпляра. Т.к. это относительно медленное дело, то мы и решили уже имеющийся у нас механизм с полем guard использовать и здесь - ведь залоченный объект гарантированно неизменен (т.е. защищен) и проверять это при каждом обращении совершенно бессмысленно, хотя это тоже поддерживается через ключи компиляции. В тоже время за 7 лет эксплуатации данные предосторожности были использованы только при разработке для отслеживания возможных казусов, и ни разу не сработали, потому что изменение защищенной переменной говорит о дыре не в языке или реализации компилятора, а в голове у программиста.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #146 : Май 04, 2012, 11:15:39 am »
ЗЫ: Почему-то не могу отредактировать свое сообщение, дополню - Под неизменностью экземпляра я имею ввиду неизменность самого экземпляра, но не его данных.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Чем Вирту WITH не угодил?
« Ответ #147 : Май 04, 2012, 11:20:41 am »
Хм... у вас какая-то иная семантика WITH получилась. Я бы даже сказал совсем не WITH  ;)
В общем примерно понятно.

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

Я наверно туплю, но фраза "и ни разу не сработали" меня совсем запутала.  :)

И еще не очень понятно как вы разыменования контролируете. Обычным кастингом, как в Оберон-07?

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Чем Вирту WITH не угодил?
« Ответ #148 : Май 04, 2012, 11:31:43 am »
ЗЫ: Почему-то не могу отредактировать свое сообщение, дополню - Под неизменностью экземпляра я имею ввиду неизменность самого экземпляра, но не его данных.

Сдается мне я поспешил с фразой "В общем примерно понятно"  :D

Постараюсь понять позже на свежую голову.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #149 : Май 04, 2012, 11:37:12 am »
Хм... у вас какая-то иная семантика WITH получилась. Я бы даже сказал совсем не WITH  ;)
В общем примерно понятно.
Как я ее тогда понял, так и реализовал )))
Но, в принципе, она примерно так и работает, как ожидается (мной )))
Я наверно туплю, но фраза "и ни разу не сработали" меня совсем запутала.  :)
Не сработала в том плане, что ни разу не встретилась ситуация, когда нужно было срабатывать ) не пишем мы такой код и всё тут.
И еще не очень понятно как вы разыменования контролируете. Обычным кастингом, как в Оберон-07?
Не понял, что подразумевается под контролем разыменования и причём здесь кастинг?
Возможно мы о разных вещах думаем, нужен пример кода.