Автор Тема: Компилятор Oberon-07/11 для x86 Windows  (Прочитано 77369 раз)

DddIzer

  • Гость
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #105 : Январь 25, 2013, 05:57:42 pm »
Хорошо, сделаю. Но только через 1-2 недели.
ок. Тогда пока попробую локализовать народными (партизанскими) способами :-)
хакать экзе?... фи а ещчо называет себя профессионалом  ;D ;D ;D ;D

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #106 : Январь 25, 2013, 06:06:41 pm »
Хорошо, сделаю. Но только через 1-2 недели.
ок. Тогда пока попробую локализовать народными (партизанскими) способами :-)
хакать экзе?... фи а ещчо называет себя профессионалом  ;D ;D ;D ;D
Цель оправдывает средства :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #107 : Январь 26, 2013, 04:20:16 am »
Для локализации приложений Delphi есть, к примеру, популярные пакеты DKLang и GetText.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #108 : Февраль 13, 2013, 04:42:40 pm »
Компилятор не позволяет такое присваивание в случае если массив передан в функцию "по значению" (не-VAR):
array[i].pointer.field := 123;

Я думаю, что это бага. Вот выдержка из обероновского репорта:
Цитировать
9.1
...
If a value parameter is structured (of array or record type), no assignment to it or to its elements are permitted. Neither may assignments be made to imported variables.

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #109 : Февраль 13, 2013, 04:45:27 pm »
И еще одна бага (присуща дельфовым прогам, точно такая же была у драконовского редактора): показываются ????? во всех менюшках на Windows7 (с русской локалью).

DddIzer

  • Гость
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #110 : Февраль 13, 2013, 04:52:42 pm »
И еще одна бага (присуща дельфовым прогам, точно такая же была у драконовского редактора): показываются ????? во всех менюшках на Windows7 (с русской локалью).
п.. здеж у меня на моих прогах на  D7  под win7-64 усе ок....

akron1

  • Jr. Member
  • **
  • Сообщений: 76
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #111 : Февраль 13, 2013, 07:39:42 pm »
Компилятор не позволяет такое присваивание в случае если массив передан в функцию "по значению" (не-VAR):
array[i].pointer.field := 123;

Я думаю, что это бага. Вот выдержка из обероновского репорта:
Цитировать
9.1
...
If a value parameter is structured (of array or record type), no assignment to it or to its elements are permitted. Neither may assignments be made to imported variables.

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

Спасибо. Надо будет исправить...

DddIzer

  • Гость
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #112 : Февраль 13, 2013, 07:52:33 pm »
Компилятор не позволяет такое присваивание в случае если массив передан в функцию "по значению" (не-VAR):
array[i].pointer.field := 123;

Я думаю, что это бага. Вот выдержка из обероновского репорта:
Цитировать
9.1
...
If a value parameter is structured (of array or record type), no assignment to it or to its elements are permitted. Neither may assignments be made to imported variables.

Рекорд, на который ссылается указатель, не является элементом массива - следовательно такое присваивание должно работать.
Странный перевод Влад.. - на мой английский это звучит так:
если параметр передаваемый по значению структурирован  (массив или имеет тип -запись), запрещаются присваивания ему или его элементам.  То же относится  к присваиваниям сделанным импортированным переменным...

akron1

  • Jr. Member
  • **
  • Сообщений: 76
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #113 : Февраль 13, 2013, 08:28:22 pm »
Очередные недосказанности в репорте...
Думается, нужно сформулировать как-то так:

Правило "только для чтения" действует до первого разыменования указателя в десигнаторе.

Потому что в случае указателей это правило все равно можно легко обойти, просто потребуется написать лишний код:

(* array[i].pointer.field := 123; *)
p := array[i].pointer;
p.field := 123;

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #114 : Февраль 13, 2013, 08:40:33 pm »
Странный перевод Влад.. - на мой английский это звучит так:
если параметр передаваемый по значению структурирован  (массив или имеет тип -запись), запрещаются присваивания ему или его элементам.  То же относится  к присваиваниям сделанным импортированным переменным...

Ну да. Т.е. для вот этих случаев все явно прописано:
array := array2; (* запрещено *)
record := record2; (* запрещено *)
array[0] := array2[0]; (* запрещено *)
record.field := record2.field; (* запрещено, если принять, что поле это "элемент" рекорда, хотя тоже желательно уточнить *)

Все. Для всех остальных случаев - не прописано. Можно только угадывать. "Из общих соображений" (кусок памяти под массив/рекорд только для чтения) можно предположить, что такое тоже запрещено:
array[0].field := array2[0].field;
record.record.field := record2.record.field;

Далее, исходя из того же принципа (кусок памяти под массив/рекорд только для чтения) вот такое должно быть разрешено:
array[0].pointer.field := array2[0].pointer.field;
record.pointer.field := record2.pointer.field;

Но это все предположения, которые неплохо было бы отразить непосредственно в репорте.
« Последнее редактирование: Февраль 13, 2013, 08:43:41 pm от vlad »

DddIzer

  • Гость
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #115 : Февраль 13, 2013, 09:10:57 pm »
Странный перевод Влад.. - на мой английский это звучит так:
если параметр передаваемый по значению структурирован  (массив или имеет тип -запись), запрещаются присваивания ему или его элементам.  То же относится  к присваиваниям сделанным импортированным переменным...

Ну да. Т.е. для вот этих случаев все явно прописано:
array := array2; (* запрещено *)
record := record2; (* запрещено *)
array[0] := array2[0]; (* запрещено *)
record.field := record2.field; (* запрещено, если принять, что поле это "элемент" рекорда, хотя тоже желательно уточнить *)

Все. Для всех остальных случаев - не прописано. Можно только угадывать. "Из общих соображений" (кусок памяти под массив/рекорд только для чтения) можно предположить, что такое тоже запрещено:
array[0].field := array2[0].field;
record.record.field := record2.record.field;

Далее, исходя из того же принципа (кусок памяти под массив/рекорд только для чтения) вот такое должно быть разрешено:
array[0].pointer.field := array2[0].pointer.field;
record.pointer.field := record2.pointer.field;

Но это все предположения, которые неплохо было бы отразить непосредственно в репорте.
хуже... не очень понятно зачем Вирт это сделал ибо никто не запрещает такой фокус
VAR   local:rec;
....

local:=valrec;(* любым полям valrec запрещены явные присваивания*)
local.a:=10; (* но кто мешает сделать это таким образом?*)
лично я привык к трактовке параметра передаваемого по значению  -  как  к локальной переменной в  которую скопировано значение из основной программы

DddIzer

  • Гость
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #116 : Февраль 13, 2013, 09:15:52 pm »
по сути дела это эквивалент автоматического const на передачу параметров структурированного типа....

DddIzer

  • Гость
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #117 : Февраль 13, 2013, 09:23:58 pm »
И на мой взгляд.. все здесь однозначно.. ибо нет понятия глубокого копирования (как в Эйфеле) в том числе и при передаче параметра по значению - то есть.. менять явно указатель запрещено, а то на что он указывает - запросто

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #118 : Февраль 13, 2013, 09:24:30 pm »
по сути дела это эквивалент автоматического const на передачу параметров структурированного типа....

Ага. "Стройности" языку такая фича не придает. Стройность принесена в жертву минималистичности (не вводить понятие константности в язык и в то же время сделать передачу структурных параметров всегда эффективной).

DddIzer

  • Гость
Re: Компилятор Oberon-07/11 для x86 Windows
« Ответ #119 : Февраль 14, 2013, 01:33:07 am »
.....(не вводить понятие константности в язык и в то же время сделать передачу структурных параметров всегда эффективной).
  Сомнительный вывод - ибо язык не определяет понятие эффективности (тем более эффективной передачи параметров по значению в произвольной реализации) - только дает возможность использовать эту особенность для оптимизации кода.