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

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #30 : Январь 27, 2014, 09:23:46 am »
Извиняюсь, что то не нашел, а какой символ разделителя для многострочного ARRAY OF CHAR использовать? Или такого нету?
Обычно перенос строки CR (код 13)...
to iterate is human, to recurse, divine

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

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #31 : Январь 27, 2014, 10:20:25 am »
Спасибо
А как это представить в виде?

str := "Строка
|еще одна строка";

это в 1с так, а как в обероне?

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #32 : Январь 27, 2014, 10:34:52 am »
Если делал как для яваскрипта "\n", то строка в таком виде и остается

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #33 : Январь 27, 2014, 03:55:14 pm »
Извиняюсь, что то не нашел, а какой символ разделителя для многострочного ARRAY OF CHAR использовать? Или такого нету?

Нету. Так же как и кавычки не заэскейпить.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #34 : Январь 27, 2014, 04:07:27 pm »
Спасибо
А как это представить в виде?

str := "Строка
|еще одна строка";

это в 1с так, а как в обероне?

В обероне трудно. Особенно в свете отсутствия динамических массивов в 07. Я в компиляторе со строками работаю с помощью JsString.ob. Используя этот модуль будет выглядеть как-то так:
IMPORT JsString;
VAR str: JsString.Type;
BEGIN
    str := JsString.concat(JsString.concat(JsString.make("Cтрока"), 0AX), JsString.make("еще одна строка"))

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #35 : Январь 27, 2014, 11:36:35 pm »
В обероне трудно. Особенно в свете отсутствия динамических массивов в 07. Я в компиляторе со строками работаю с помощью JsString.ob. Используя этот модуль будет выглядеть как-то так:
Я сам почти так и делаю, пока со строками работал не плотно, вроде хватало, а сейчас хочу с sqlite поработать, достаточно напряжно оказывается. Сложно потом саму строку запроса воспринимать и обрабатывать, может еще какие варианты есть?

Кстати, почему "\n" не преобразовывается? Если его подобным образом concat делать?

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #36 : Январь 27, 2014, 11:39:37 pm »
А "\n" и заменяется получается 0AX ?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #37 : Январь 28, 2014, 02:53:26 am »
Я сам почти так и делаю, пока со строками работал не плотно, вроде хватало, а сейчас хочу с sqlite поработать, достаточно напряжно оказывается. Сложно потом саму строку запроса воспринимать и обрабатывать, может еще какие варианты есть?

Добавить в язык перегрузку операторов или строковый тип.

Кстати, почему "\n" не преобразовывается? Если его подобным образом concat делать?

"\n" не преобразовывается потому что в обероновских строках не предусмотрены специальные символы. Нужно же было уложиться в 16 страниц :)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #38 : Январь 28, 2014, 02:53:50 am »
А "\n" и заменяется получается 0AX ?

Да.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #39 : Февраль 03, 2014, 02:25:15 am »
Переписал еще один модуль: https://github.com/vladfolts/oberonjs/blob/master/src/ob/Procedure.ob
Теперь больше половины кода компилятора на обероне (если в байтах).

По совокупности секция  VAR бесит больше всего. Ко всему остальному можно пытаться привыкнуть (уже больше 100кб на обероне написал!). Но VAR банально источик ошибок - теперь уже не надо ничего предсказывать, просто ссылаюсь на свой опыт.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #40 : Февраль 03, 2014, 02:53:01 am »
По совокупности секция  VAR бесит больше всего. Ко всему остальному можно пытаться привыкнуть (уже больше 100кб на обероне написал!). Но VAR банально источик ошибок - теперь уже не надо ничего предсказывать, просто ссылаюсь на свой опыт.

Я конечно не много еще написал, и не все что писал делал на чистом обероне. Но по поводу VAR такое мнение сложилось.
Желательно, по возможности,  разбивать код большой процедуры на вложенные, и в них делать локальные VAR. Или делать ТИП, в котором максимум переменных из процедуры (вложенных) можно будет включить.

Некоторые вещи так и не разобрался, как можно биндить, например "this" для процедуры, кроме как "JS.do ('var = this')"

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #41 : Февраль 03, 2014, 07:51:21 pm »
Переписал еще один модуль: https://github.com/vladfolts/oberonjs/blob/master/src/ob/Procedure.ob
Теперь больше половины кода компилятора на обероне (если в байтах).

По совокупности секция  VAR бесит больше всего. Ко всему остальному можно пытаться привыкнуть (уже больше 100кб на обероне написал!). Но VAR банально источик ошибок - теперь уже не надо ничего предсказывать, просто ссылаюсь на свой опыт.
Какие именно ошибки провоцирует VAR-секция?
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #42 : Февраль 04, 2014, 05:06:47 am »
Какие именно ошибки провоцирует VAR-секция?

Скорее всего забывает где надо проинициализировать переменные ))
Секция VAR должна умереть!!!
to iterate is human, to recurse, divine

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #43 : Февраль 04, 2014, 05:31:39 am »
Какие именно ошибки провоцирует VAR-секция?

Использование непроинициализированных переменных. Это при том, что моя реализация гарантировано все зануляет, иначе было бы еще хуже. В моем случае это было несколько несозданных указателей (пропущен NEW) и временная переменная для хранения длины массива (всегда было 0). Ситуация усугубляется в случае локальных процедур - тогда VAR оказывается за экраном от BEGIN. Ну и переменные модуля - каждый раз боишься их не проинитить.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #44 : Февраль 04, 2014, 07:31:34 am »
Какие именно ошибки провоцирует VAR-секция?

Использование непроинициализированных переменных. Это при том, что моя реализация гарантировано все зануляет, иначе было бы еще хуже. В моем случае это было несколько несозданных указателей (пропущен NEW) и временная переменная для хранения длины массива (всегда было 0). Ситуация усугубляется в случае локальных процедур - тогда VAR оказывается за экраном от BEGIN. Ну и переменные модуля - каждый раз боишься их не проинитить.

Вообще-то компилятор должен сообщать о непроинициализированных переменных...
to iterate is human, to recurse, divine

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