Автор Тема: Часто замечаю за собой  (Прочитано 31077 раз)

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Часто замечаю за собой
« Ответ #45 : Февраль 25, 2012, 08:42:21 am »
Я так и знал, что Вы на это укажете :)

Можно поставить ASSERT на размер записи...
Можно плюнуть на небольшое убыстрение и затирать нулями вручную, приведя S.ADR(rec) к POINTER [untagged] TO ARRAY OF BYTE.

Я, помнится, спёр из модуля Kernel процедуру в маш. коде Erase. Но та требует чтобы размер области был кратен 4. Впрочем, для RECORD это истина, там выравнивание.

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #46 : Февраль 25, 2012, 08:56:37 am »
Я так и знал, что Вы на это укажете :)

Можно поставить ASSERT на размер записи...
Можно плюнуть на небольшое убыстрение и затирать нулями вручную, приведя S.ADR(rec) к POINTER [untagged] TO ARRAY OF BYTE.

Я, помнится, спёр из модуля Kernel процедуру в маш. коде Erase. Но та требует чтобы размер области был кратен 4. Впрочем, для RECORD это истина, там выравнивание.
 
Да это только  начало  :)  (хотя замечу Assert не решит проблему обнуления в конкретном случае):
Меня больше беспокоит другое (оговорюсь, мне лень смотреть в детали конкретной реализации ББ), из общих соображений
2. Для различный типов данных зарезервированы различные "нулевые" (дефолтные ) значения
3. Не испортится ли  внутренняя структура ПРОИЗВОЛЬНО -ДОПУСТИМОЙ записи - пример, в старых паскалях массив имел следующую структуру - последовательность байт , в первых 2 из которых  содержались значения конечного и начального индексов - представьте, что с ним будет, если по записи "проехаться" вашей процедуркой...

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #47 : Февраль 25, 2012, 09:59:22 am »

Ну, мне более-менее понятно что Оберон as is не является инструментом для прикладного программирования, это инструмент для системного программирования. Но не в том смысле в котором обычно (и, на мой взгляд неправильно) системное программирование понимают. То есть не для написания операционной системы, драйверов и вообще не для программирования хоть чего-то на самом обероне (как он есть искаропки). Оберон хорош как полуфабрикат из которого системный программист может сделать, относительно быстро и затратив относительно немного усилий, инструмент для прикладного программирования в области где еще нет удовлетворительных готовых решений.
И в этом сомневаюсь - такой язык, на мой взгляд , должен  ДЕКЛАРИРОВАТЬ внутреннюю структуру всех своих обьектов (в терминах некоторой базовой модели) не зависящую от реализации - без этого хаки , по качеству аналогичные приведенному в сообщении выше.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Часто замечаю за собой
« Ответ #48 : Февраль 25, 2012, 10:35:06 am »

Ну, мне более-менее понятно что Оберон as is не является инструментом для прикладного программирования, это инструмент для системного программирования. Но не в том смысле в котором обычно (и, на мой взгляд неправильно) системное программирование понимают. То есть не для написания операционной системы, драйверов и вообще не для программирования хоть чего-то на самом обероне (как он есть искаропки). Оберон хорош как полуфабрикат из которого системный программист может сделать, относительно быстро и затратив относительно немного усилий, инструмент для прикладного программирования в области где еще нет удовлетворительных готовых решений.
И в этом сомневаюсь - такой язык, на мой взгляд , должен  ДЕКЛАРИРОВАТЬ внутреннюю структуру всех своих обьектов (в терминах некоторой базовой модели) не зависящую от реализации - без этого хаки , по качеству аналогичные приведенному в сообщении выше.
Неа. Не должен. Он должен деклалировать что-то конкретное про потроха только если мы на нем собираемся что-то писать. Если же мы собираемся на базе вот этого базового описания слепить что-то свое (что-то поменяв, что-то конкретизировав) и уже на этом писать, то такое вот не полное описание языка как у Вирта - самое оно.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #49 : Февраль 25, 2012, 10:42:33 am »

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

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Часто замечаю за собой
« Ответ #50 : Февраль 25, 2012, 10:44:34 am »
1) Конкретно для ББ данная процедура работает корректно.
- все базовые типы КП расчитаны на нулевое дефолтное значение;
- структура RECORD и ARRAY точно также рассчитана на простое начальное зануление. Именно оно выполняется для области данных модулей.
Обсуждать её корректность вне рамок ББ бессмысленно, т.к. она явно использует Kernel ББ. Очевидно, что никакой ОБЩЕЙ реализации данной процедуры для разных реализаций КП быть не может. Будут специфичные реализации для каждой платформы. Т.е. термин "хак" непонятно, к чему. Процедура написана прозрачно, использует базовые механизмы языка и рантайма.

2) Если говорить о декларации структуры памяти. В конкретной реализации современных языков такая декларация с необходимостью будет, т.к. есть рантайм с рефлексией. Для ББ внутренняя структура задекларирована в типах и операциях Kernel. На Kernel уже давно есть полная документация, которая опубликована на OberonCore (когда-то составлена мной).

3) Если говорить о декларации структуры памяти вообще для всех реализаций. Одно из благих пожеланий, которые никуда не ведут. Унифицируйте структуру памяти, например, между ББ и GPCP. Даже между GPCP-JVM и GPCP-.NET.
(Даже в том, в чём было бы возможно... Детальные и исчерпывающие стандарты всегда идут вдогонку опыту, а не впереди. И ставить в претензию кому-то, что он не высосал их заранее из пальца, чтобы тем же пальцем в небо...)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Часто замечаю за собой
« Ответ #51 : Февраль 25, 2012, 10:47:18 am »

Неа. Не должен. Он должен деклалировать что-то конкретное про потроха только если мы на нем собираемся что-то писать. Если же мы собираемся на базе вот этого базового описания слепить что-то свое (что-то поменяв, что-то конкретизировав) и уже на этом писать, то такое вот не полное описание языка как у Вирта - самое оно.
Только если  вы  под "созданием инструмента" понимаете реализацию модификации  языка.
Реализацию языка (понятно что с уточнением и модификацией под конкретную область применения) + всю обвязку. Это и будет инструмент для прикладного программирования. Оберон as is для прикладного программирования не годится (хотя бы потому, что там нет например стандартной библиотеки - даже Hello World не написать, нет освобождения памяти и так далее).
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #52 : Февраль 25, 2012, 11:04:58 am »
1) Конкретно для ББ данная процедура работает корректно.
Возможно, не проверял(и не собираюсь - лазить по исходникам (тем более таким) мне только не хватало) .
Цитировать
- все базовые типы КП расчитаны на нулевое дефолтное значение;
Это прописано в сообщении языка?
Цитировать
- структура RECORD и ARRAY точно также рассчитана на простое начальное зануление. Именно оно выполняется для области данных модулей.
Обсуждать её корректность вне рамок ББ бессмысленно, т.к. она явно использует Kernel ББ. Очевидно, что никакой ОБЩЕЙ реализации данной процедуры для разных реализаций КП быть не может. Будут специфичные реализации для каждой платформы. Т.е. термин "хак" непонятно, к чему. Процедура написана прозрачно, использует базовые механизмы языка и рантайма.
  Так ББ или КП ? или это эквивалентно.
Цитировать
2) Если говорить о декларации структуры памяти. В конкретной реализации современных языков такая декларация с необходимостью будет, т.к. есть рантайм с рефлексией. Для ББ внутренняя структура задекларирована в типах и операциях Kernel. На Kernel уже давно есть полная документация, которая опубликована на OberonCore (когда-то составлена мной).
будет , так будет.
Цитировать
3) Если говорить о декларации структуры памяти вообще для всех реализаций. Одно из благих пожеланий, которые никуда не ведут. Унифицируйте структуру памяти, например, между ББ и GPCP. Даже между GPCP-JVM и GPCP-.NET.
(Даже в том, в чём было бы возможно... Детальные и исчерпывающие стандарты всегда идут вдогонку опыту, а не впереди. И ставить в претензию кому-то, что он не высосал их заранее из пальца, чтобы тем же пальцем в небо...)
Кчему это... я говорил про модели типа сишных

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #53 : Февраль 25, 2012, 11:17:27 am »
Т.е. термин "хак" непонятно, к чему. Процедура написана прозрачно, использует базовые механизмы языка и рантайма.

Использование  того что НАПРЯМУЮ НЕ ДЕКЛАРИРОВАНО  СОЗДАТЕЛЕМ  -ХАК (точнее , более коварная его форма -ЭКСПЛОИТ).

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #54 : Февраль 25, 2012, 11:25:28 am »
Для ББ внутренняя структура задекларирована в типах и операциях Kernel. На Kernel уже давно есть полная документация, которая опубликована на OberonCore (когда-то составлена мной).
Классика ЭКСПЛОИТА

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Часто замечаю за собой
« Ответ #55 : Февраль 25, 2012, 11:33:56 am »
Использование  того что НАПРЯМУЮ НЕ ДЕКЛАРИРОВАНО  СОЗДАТЕЛЕМ  -ХАК (точнее , более коварная его форма -ЭКСПЛОИТ).

Используйте модуль Meta вместо Kernel. И будет Вам всё задекларировано. Рассматривайте Kernel как оптимизацию.
Какая разница, что скрыто за вызовом ZeroRec.

Я выше уже упоминал, что если организовывать базовые абстракции с толком, то IMPORT SYSTEM, Kernel делается в модулях, которые можно пересчитать по пальцам одной руки.
А вся остальная системщина использует базовые безопасные средства этих модулей.

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

Цитировать
(и не собираюсь - лазить по исходникам (тем более таким) мне только не хватало) .

Господа. Нам должно быть стыдно. Мы заставляем уважаемого dizer-а лазить по исходникам, да ещё - о Боже! - каким исходникам. Мы нарушаем его свободу, покой и сон, принуждаем... показываем какой-то код....
Давайте немедленно перестанем принуждать его... лазить... :)
« Последнее редактирование: Февраль 25, 2012, 11:35:47 am от Илья Ермаков »

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #56 : Февраль 25, 2012, 11:39:24 am »
Используйте модуль Meta вместо Kernel. И будет Вам всё задекларировано. Рассматривайте Kernel как оптимизацию.
Какая разница, что скрыто за вызовом ZeroRec.

Я выше уже упоминал, что если организовывать базовые абстракции с толком, то IMPORT SYSTEM, Kernel делается в модулях, которые можно пересчитать по пальцам одной руки.
А вся остальная системщина использует базовые безопасные средства этих модулей.

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

  :) С этого НУЖНО и было начинать (этого я ожидал от вас)  - а получил - ХАК (что меня удивило, неприятно).


alexus

  • Гость
Re: Часто замечаю за собой
« Ответ #57 : Февраль 25, 2012, 12:00:03 pm »
[оспода. Нам должно быть стыдно. Мы заставляем уважаемого dizer-а лазить по исходникам, да ещё - о Боже! - каким исходникам. Мы нарушаем его свободу, покой и сон, принуждаем... показываем какой-то код....
Давайте немедленно перестанем принуждать его... лазить... :)
Читаю... и чувствую... стыдно, то как...

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #58 : Февраль 25, 2012, 12:13:10 pm »
[оспода. Нам должно быть стыдно. Мы заставляем уважаемого dizer-а лазить по исходникам, да ещё - о Боже! - каким исходникам. Мы нарушаем его свободу, покой и сон, принуждаем... показываем какой-то код....
Давайте немедленно перестанем принуждать его... лазить... :)
Читаю... и чувствую... стыдно, то как...
По разному бывает, вот мне бы, например, было стыдно соловьем в публичном месте "заливать" о  правильной "инженерии" программного кода, совершенстве ББ  -  на деле занимаясь хаканием  его.  ;).

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #59 : Февраль 25, 2012, 12:18:44 pm »

[оспода. Нам должно быть стыдно. Мы заставляем уважаемого dizer-а лазить по исходникам, да ещё - о Боже! - каким исходникам. Мы нарушаем его свободу, покой и сон, принуждаем... показываем какой-то код....
Давайте немедленно перестанем принуждать его... лазить... :)
В принципе, я вас Илья понимаю -Если долго лазить в дерьме, то перестаешь чувствовать его запах...