Автор Тема: Допилить массивы в O7  (Прочитано 18527 раз)

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Допилить массивы в O7
« Ответ #30 : Октябрь 16, 2013, 05:31:03 pm »
Конечно, но нельзя, как ты выше и отметил, вносить в язык нечто, что сделает её в принципе невозможной.
Можно внести это нечто в какой-нибудь хитрой форме, но это ещё придумать надо.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Допилить массивы в O7
« Ответ #31 : Октябрь 16, 2013, 05:43:42 pm »
Конечно, но нельзя, как ты выше и отметил, вносить в язык нечто, что сделает её в принципе невозможной.
Можно внести это нечто в какой-нибудь хитрой форме, но это ещё придумать надо.

Не очень понимаю. Нужна динамическая загрузка с макимальной "индивидуальностью" модулей - ну не используй дженерики. Зачем сразу ставить вопрос ребром - не включать в язык вообще все, что потом затруднит динамическую загрузку? Тем более, что подобный подход (не платишь за то, что не используешь) уже работает в C++: надо втиснуться в контрлеер в 512 байт - не используешь исключения и RTL (кстати, шаблоны при этом тебе доступны).

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

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Допилить массивы в O7
« Ответ #32 : Октябрь 16, 2013, 06:30:06 pm »
Отсутствие enum'ов действительно никак не спасает, ибо оставили константы которые намертво связывают разные модули. Вот если бы семантику констант несколько изменить... То и enum'ы можно было бы сделать :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Допилить массивы в O7
« Ответ #33 : Октябрь 16, 2013, 06:40:38 pm »
Отсутствие enum'ов действительно никак не спасает, ибо оставили константы которые намертво связывают разные модули. Вот если бы семантику констант несколько изменить... То и enum'ы можно было бы сделать :-)

Стоп. Компилятор ББ, не подставляет значение констант в код? Свёртывание констант вроде называется.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Допилить массивы в O7
« Ответ #34 : Октябрь 16, 2013, 07:12:40 pm »
Отсутствие enum'ов действительно никак не спасает, ибо оставили константы которые намертво связывают разные модули. Вот если бы семантику констант несколько изменить... То и enum'ы можно было бы сделать :-)

Стоп. Компилятор ББ, не подставляет значение констант в код? Свёртывание констант вроде называется.
Именно поэтому модули друг от друга и зависят. Изменение одного вызывает перекомпиляцию других.
Y = λf.(λx.f (x x)) (λx.f (x x))

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Допилить массивы в O7
« Ответ #35 : Октябрь 17, 2013, 08:19:36 am »
Поэтому если нужна, типа, константа, которая не вызывает перекомпиляции других модулей, делается read-only переменная, инициализируемая в BEGIN модуля.

Madzi

  • Jr. Member
  • **
  • Сообщений: 86
    • Просмотр профиля
Re: Допилить массивы в O7
« Ответ #36 : Октябрь 17, 2013, 02:54:56 pm »
Странно. По идее константы тоже должны быть ReadOnly
И потом, если судить по таким книгам как Porable Oberon 2,
При компиляции модуля нужно смотреть на ревизию модуля и символьного файла (в который записываются константы)

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Допилить массивы в O7
« Ответ #37 : Октябрь 18, 2013, 06:59:58 am »
Да что там дженерики. Те же енумы зарезали (типа) из соображений динамичесакой загрузки... Хотя это больше похоже на оправдание свершившегося факта, чем на хоть сколько-то серьезные технические трудности.
В Активном Обероне перечисления есть. И динамическая загрузка модулей при этом никуда не делась.

Madzi

  • Jr. Member
  • **
  • Сообщений: 86
    • Просмотр профиля
Re: Допилить массивы в O7
« Ответ #38 : Октябрь 18, 2013, 08:30:05 am »
В Активном Обероне чего только нет. Там и инициализация массивов по месту объявления присутствует.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Допилить массивы в O7
« Ответ #39 : Октябрь 18, 2013, 02:42:17 pm »
В Активном Обероне чего только нет. Там и инициализация массивов по месту объявления присутствует.
Ну, с классическими Обероновскими массивами такое не прокатит.

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Допилить массивы в O7
« Ответ #40 : Октябрь 20, 2013, 07:41:35 am »
Чем дженерики мешают динамике?

Из модуля торчат абстракции. Как он хранит, записывает или вычисляет, нам не нужно знать. Обращение идёт только через абстрактные функции. Те же библиотеки. Чем дин модули, лучше концепции библиотек к примеру dll?

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Допилить массивы в O7
« Ответ #41 : Октябрь 20, 2013, 09:27:07 am »
Чем дженерики мешают динамике?

Из модуля торчат абстракции. Как он хранит, записывает или вычисляет, нам не нужно знать. Обращение идёт только через абстрактные функции. Те же библиотеки. Чем дин модули, лучше концепции библиотек к примеру dll?
Дженерики/шаблоны никак не мешают динамической загрузке модулей времени выполнения. Они (дженерики) выступают лишь как схема, по которой происходит генерация обобщенного кода или в код целевого языка программирования, или сразу в промежуточное представление( если таковое используется) или в код целевого процессора. При изменения самого дженерика, равно как и при изменении любого импортированного модуля требуется перегенерация/перекомпиляция клиента, и это понятно, но на возможность/невозможность использования динамической загрузки это не влияет.
У нас в Сириусе была обобщенка и никаких проблем по этому поводу ди мы не испытывали. Отказались от  обобщёнки по совершенно другой причине - получается некоторое рассогласование исходного и скомпилированного кода, когда кода на яп как бы нет, а машинный код присутствует. Наиболее правильный подход в этом плане в Модуле-3, где система сборки, встречая имплементацию дженерика генерует модули на языке Модула-3, которые присутсвуют в каталоге проекта, и затем уже всё это компилируется, т.е. всё присутвует и все можно посмотреть и удостоверится, что там нет кода активации ядрёной бонбы.
Чтокасается dll в windows, то сама концепция мало отличается от динамической загрузки модулей в Оберонах, просто разные системы и разная реализация, и в dll может присутсвовать несколько таких "модулей". Кстати, старый компилятор Активного Оберона (paco) поддерживал экспериментальный механизм компиляции нескольких модулей в один объектный файл(dll в WinAOS).

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Допилить массивы в O7
« Ответ #42 : Октябрь 20, 2013, 08:12:48 pm »
Кемет спасибо за развёрнутый ответ.