Автор Тема: Online компилятор Oberon-07/11.  (Прочитано 54624 раз)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #30 : Июнь 18, 2013, 04:47:57 pm »
не понял, что я  не могу вызвать, скажем  S:=Sum(a, b, step, ABS); ?

Угу. Явно оговорено. Видимо подразумевается, что стандартные функции транслируются напрямую в инструкции машины, поэтому указателя может и не быть.

Madzi

  • Jr. Member
  • **
  • Сообщений: 86
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #31 : Июнь 18, 2013, 05:01:27 pm »
не понял, что я  не могу вызвать, скажем  S:=Sum(a, b, step, ABS); ?

Угу. Явно оговорено. Видимо подразумевается, что стандартные функции транслируются напрямую в инструкции машины, поэтому указателя может и не быть.
Это жесть. В погоне за простотой инструмента рискуют выплеснуть ребёнка вместе с водой. Всё-таки трансляцию лучше оставить оптимизирующему компилятору. Для такого статически сильного языка как Оберон, компиляторная оптимизация должна быть очень высока, а Вирт пытается её свести на нет... Почему ?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #32 : Июнь 18, 2013, 05:06:10 pm »
не понял, что я  не могу вызвать, скажем  S:=Sum(a, b, step, ABS); ?

Угу. Явно оговорено. Видимо подразумевается, что стандартные функции транслируются напрямую в инструкции машины, поэтому указателя может и не быть.
Это жесть. В погоне за простотой инструмента рискуют выплеснуть ребёнка вместе с водой. Всё-таки трансляцию лучше оставить оптимизирующему компилятору. Для такого статически сильного языка как Оберон, компиляторная оптимизация должна быть очень высока, а Вирт пытается её свести на нет... Почему ?
Чтобы не усложнять компилятор :-) У него же идея - язык который эффективно реализуется посредством простой (почти наивной) реализации компилятора. Поэтому inline функций и не предполагается.
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: Online компилятор Oberon-07/11.
« Ответ #33 : Июнь 18, 2013, 05:06:50 pm »
не понял, что я  не могу вызвать, скажем  S:=Sum(a, b, step, ABS); ?

Угу. Явно оговорено. Видимо подразумевается, что стандартные функции транслируются напрямую в инструкции машины, поэтому указателя может и не быть.
по большому счету пофигу..  с одной стороны ничего не стоит сделать обертку и вызвать S:=Sum(a, b, step, abs); , с другой стороны, предопределенных функций настолько мало и они, слишком специфичны, для того чтобы всерьез жалеть об этом.
Гораздо более гнилая проблема - отсутствие стандартной библиотеки...

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #34 : Июнь 18, 2013, 05:25:50 pm »
Угу. Явно оговорено. Видимо подразумевается, что стандартные функции транслируются напрямую в инструкции машины, поэтому указателя может и не быть.
Это жесть. В погоне за простотой инструмента рискуют выплеснуть ребёнка вместе с водой.

Ребенка уже выплеснули: oberon07/11 это ни разу не "general purpose language" (не смотря на то, что сам Вирт в репорте его так позиционирует). Это болванка для  general purpose language :) Поэтому я его и взял для экспериментов. Хотя наличие в репорте узкоспециализированных вещей типа PACK/UNPK ставят под сомнение даже такое утверждение. Т.е., это болванка, где нет ничего лишнего, но все же с хорошей поправкой на то, что было нужно Вирту для реализации его очередного проекта. Последняя более-менее успешная попытка сделать general purpose language из оберона при постулируемой максимальной простоте языка/компилятора - это КП/ББ.

Всё-таки трансляцию лучше оставить оптимизирующему компилятору.

Оптимизирующий компилятор сам по себе противорчеит идеям оберона. info21 подтвердит :) Хотя, конечно, никаких проблем с тем, чтобы генерить заглушки для стандартных функций в случае получения сслыки на них нет.
Или вот, например, отсутствие forward declaration для процедур в современном ЯВУ выглядит тоже весьма беспощадно... Хотя компилтяор усложняется совсем чуть-чуть.

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

Вирт ничего не пытается. Он решает свои задачи. С оглядкой на свой же предыдущий опыт. Оптимизирующие компилятооры, очевидно, его интересуют мало :)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #35 : Июнь 18, 2013, 05:39:31 pm »
Вирт ничего не пытается. Он решает свои задачи. С оглядкой на свой же предыдущий опыт. Оптимизирующие компилятооры, очевидно, его интересуют мало :)

Да, еще я так понимаю, он студентов учит. Разработка компилятора подмножества оберона - неплохая практика и по силам студентам.

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #36 : Июнь 18, 2013, 05:46:59 pm »
Правда вот INTEGER и прочие стандартные типы - это предопределенные идентификаторы, которые могут быть перекрыты локальными определениями.

Вообще в репорте не написано (как обычно) - могут или не могут :)

Предопределённые идентификаторы могут быть перекрыты по определению.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #37 : Июнь 18, 2013, 05:53:31 pm »
Предопределённые идентификаторы могут быть перекрыты по определению.

Ссылку на определение плз.

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #38 : Июнь 18, 2013, 06:01:25 pm »
Предопределённые идентификаторы могут быть перекрыты по определению.

Ссылку на определение плз.
А нету ссылки  :)   К тому же, наличие ссылки ещё не гарантирует её истинность.

Предопределённые идентификаторы можно представлять себе как идентификаторы, объявленные в неком гипотетическом протомодуле, в который вложены все остальные модули. В остальном они подчиняются общим правилам видимости, принятым в языках с блочной структурой. То есть могут быть перекрыты в любом блоке.

DddIzer

  • Гость
Re: Online компилятор Oberon-07/11.
« Ответ #39 : Июнь 18, 2013, 06:11:19 pm »

Предопределённые идентификаторы можно представлять себе как идентификаторы, объявленные в неком гипотетическом протомодуле, в который вложены все остальные модули
очень , очень дерьмовая аналогия (концепция модулей отличается от концепции пространства имен), кроме того , оберон 07 не имеет блочной структуры (как СИ\С++)..  а имеет  четко выраженную унифицированную секционную структуру...

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #40 : Июнь 18, 2013, 06:13:24 pm »
Предопределённые идентификаторы можно представлять себе как идентификаторы, объявленные в неком гипотетическом протомодуле, в который вложены все остальные модули.

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

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #41 : Июнь 18, 2013, 06:16:36 pm »
кроме того , оберон 07 не имеет блочной структуры
Забавно...  :)

DddIzer

  • Гость
Re: Online компилятор Oberon-07/11.
« Ответ #42 : Июнь 18, 2013, 06:18:30 pm »
кроме того , оберон 07 не имеет блочной структуры
Забавно...  :)
на здоровье  ;)

DddIzer

  • Гость
Re: Online компилятор Oberon-07/11.
« Ответ #43 : Июнь 18, 2013, 06:24:49 pm »
Предопределённые идентификаторы можно представлять себе как идентификаторы, объявленные в неком гипотетическом протомодуле, в который вложены все остальные модули.

Объясняю. Когда я реализовывал предопределенные идентификаторы я их "представил" как включенные в каждую новую область видиморсти (scope). Еще можно себе представить, что каждый scope наследуется от базового scope, в котором есть эти идентификаторы. А перекрываться могут только идентификаторы из родительского scope (впрочем даже этого у Вирта не описано, хе-хе). Почему мое "представление" противоречит определению и какому?
если это явно не запрещено и не противоречит другим явным определениям и следствиям из них то они должны перекрываться... гыыы например:
PROCEDURE ABS(X:REAL):REAL;
BEGIN
....
RETURN ABS(X)
END ABS;
должна восприниматься как нормальная рекурсия...

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #44 : Июнь 18, 2013, 06:26:42 pm »
кроме того , оберон 07 не имеет блочной структуры
Забавно...  :)

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