Автор Тема: Oberon-07/13: заметки  (Прочитано 83489 раз)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #120 : Июль 15, 2014, 05:43:02 pm »
Добавил возможность использовать переменную "по месту" непосредственно в FOR:
FOR i <- 0 TO 10 DO
...
END
[code]

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

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #121 : Июль 15, 2014, 06:33:35 pm »
При этом использование переменной из VAR выглядит ненужным и скорее вредным, но оставил для совместимости и в ебероне.
А совместимость-то зачем? Толпы обладателей легаси кода заклюют?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #122 : Июль 15, 2014, 06:45:12 pm »
При этом использование переменной из VAR выглядит ненужным и скорее вредным, но оставил для совместимости и в ебероне.
А совместимость-то зачем? Толпы обладателей легаси кода заклюют?

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

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #123 : Июль 16, 2014, 05:31:38 am »
При этом использование переменной из VAR выглядит ненужным и скорее вредным, но оставил для совместимости и в ебероне.
А совместимость-то зачем? Толпы обладателей легаси кода заклюют?

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

К чёрту оберонщиков -- они всё равно не оценят, делай как в Аде -- счётчик по месту, только на чтение, и за пределами цикла не виден!!!
to iterate is human, to recurse, divine

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #124 : Июль 16, 2014, 03:59:25 pm »
К чёрту оберонщиков -- они всё равно не оценят, делай как в Аде -- счётчик по месту, только на чтение, и за пределами цикла не виден!!!

В данном расширении он тоже не виден за пределами.  Только для чтения сделать легко, но пока не буду отвлекаться на косметику.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #125 : Июль 21, 2014, 05:42:56 pm »
Наткнулся на интересную проблему - получить указатель на объект в реализации метода этого объекта. В ебероне SELF - это ссылка на объект (VAR T: SELF, а не POINTER TO T: SELF). Кроме того, метод может быть вызван для стекового объекта (или статического - переменной модуля), поэтому просто кастнуть SELF в указатель нельзя (без риска получить ошибку в рантайме).

Бурно обсудили в курилке (всем участникам спасибо). В итоге я пришел к такому компромиссу:
- специальный конструкт SELF(POINTER) для получения указателя
- отсутствие проблем в рантайме гарантируется тем, что объект в методах которого используется такой конструкт не может быть объявлен на стеке (или в модуле) - т.е., может быть создан только через NEW (компилятор проверяет).

Оригинальная проблема (когда понадобился указатель): https://github.com/vladfolts/oberonjs/blob/7c63179c809490ea6c65a9842512c3ad481f95e4/src/ob/Scope.ob#L194

Решение (с помощью SELF(POINTER): https://github.com/vladfolts/oberonjs/blob/master/src/ob/Scope.ob#L192

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Oberon-07/13: заметки
« Ответ #126 : Сентябрь 19, 2014, 12:40:21 am »
Тут ещё один проект есть, наверно в чём-то похожий...
Называется LLJS

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #127 : Сентябрь 19, 2014, 02:16:40 am »
Тут ещё один проект есть, наверно в чём-то похожий...
Называется LLJS

Ну да, только там пляшут от С и сразу низкоуровневый бакенд в духе asm.js. Не очень понятно зачем оно, если у LLVM уже есть такой бакенд, но при этом и полноценный фронт (полный С/С++).

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #128 : Ноябрь 13, 2014, 03:27:34 pm »
Приделал динамические массивы: https://github.com/vladfolts/oberonjs/wiki/eberon-dynamic-arrays
Основная особенность - не ссылочный тип, может быть возвращен из процедуры и не может быть NIL.

dizer

  • Jr. Member
  • **
  • Сообщений: 80
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #129 : Ноябрь 13, 2014, 09:17:08 pm »
какое -то описание странное,Влад, или что то с моим аглицким?
начиная с
"Dynamic arrays are introduced because oberon has no option for dynamically grown sequences except linked lists (and linked lists are not efficient comparing to arrays in some cases)."  - А что Оберон разве имеет встроенную поддержку списков?
далее...
"Dynamic array can be assigned to open, static or another dynamic array but not vice versa."
то есть, пусть пусть мы имеем
VAR a,b: ARRAY * OF INTEGER;
...............
a:=b; (*Это согласно описанию возможно*)
b:=a; (*А вот это -  нет ... и чем , спрашивается, b хуже чем a?*)
далее.. не понятно как изменять емкость динамического массива в многомерном случае... , на пример в Оbj Pascal
мы вызываем SetLength(c,2,6) что бы установить емкость (6 элементов) по 2 му измерению.. что нужно сделать в ебероне для этого?



vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #130 : Ноябрь 13, 2014, 09:29:37 pm »
какое -то описание странное,Влад, или что то с моим аглицким?
начиная с
"Dynamic arrays are introduced because oberon has no option for dynamically grown sequences except linked lists (and linked lists are not efficient comparing to arrays in some cases)."  - А что Оберон разве имеет встроенную поддержку списков?

В обероне можно делать связные списки. Ручками, но можно. Динамические массивы - никак. Даже ручками. Можешь предложить более точную формулировку мысли?

b:=a; (*А вот это -  нет ... и чем , спрашивается, b хуже чем a?*)

Ага, ляп, поправлю.

далее.. не понятно как изменять емкость динамического массива в многомерном случае... , на пример в Оbj Pascal
мы вызываем SetLength(c,2,6) что бы установить емкость (6 элементов) по 2 му измерению.. что нужно сделать в ебероне для этого?

Допилить компилятор :) Нужно добавить resize/reserve. Просто пока не понадобилось.

dizer

  • Jr. Member
  • **
  • Сообщений: 80
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #131 : Ноябрь 13, 2014, 09:34:52 pm »

В обероне можно делать связные списки. Ручками, но можно. Динамические массивы - никак. Даже ручками. Можешь предложить более точную формулировку мысли?

В этом случае - просто УБРАТЬ - вы описываете новый ВСТРОЕННЫЙ тип - и это совершенно четко ясно из контекста,  по этому любое сравнение с ПОЛЬЗОВАТЕЛЬСКИМ типом как минимум не уместно (ибо оно должно апеллировать к КОНКРЕТНОЙ реализации)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #132 : Ноябрь 13, 2014, 09:37:44 pm »
В этом случае - просто УБРАТЬ - вы описываете новый ВСТРОЕННЫЙ тип - и это совершенно четко ясно из контекста,  по этому любое сравнение с ПОЛЬЗОВАТЕЛЬСКИМ типом как минимум не уместно (ибо оно должно апеллировать к КОНКРЕТНОЙ реализации)

Ну хорошо.

dizer

  • Jr. Member
  • **
  • Сообщений: 80
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #133 : Ноябрь 13, 2014, 09:43:16 pm »
Да и еще.. я так и не понял ваш динамический массив это O(1) по доступу к произвольному элементу контейнер или нет?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #134 : Ноябрь 13, 2014, 09:48:03 pm »
Да и еще.. я так и не понял ваш динамический массив это O(1) по доступу к произвольному элементу контейнер или нет?

Да, конечно. Обычно это подразумевается для массива.

P.S. Обещать конечно не могу - там же JS внизу.