Автор Тема: Пробуем писать на O7  (Прочитано 26199 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Пробуем писать на O7
« Ответ #30 : Август 28, 2013, 12:22:35 pm »
В репорте есть некая неопределенность что именно считать const expression'ом, однако в том месте в котором у тебя заминка, разночтений быть не может:
Цитировать
A constant expression can be evaluated by a mere textual scan without actually executing the
program.
Твой пример не позволяет на этапе компиляции (без исполнения программы) вычислить 'p', а следовательно и длину массива.

Я думал это относится только к Constant declarations.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Пробуем писать на O7
« Ответ #31 : Август 28, 2013, 12:23:11 pm »
А что такое Arr и Arrs? Собственно в Обероне-07 вся фишка в работе с типами. Алгоритмы то тривиальны.
Arr не может быть массивом, так как процедура в Обероне-07 не может вернуть массив в качестве значения. С другой стороны, указателем на массив Arr тоже быть не может? По мнению компилятора akron1'а, по крайней мере...
to iterate is human, to recurse, divine

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

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Пробуем писать на O7
« Ответ #32 : Август 28, 2013, 12:57:07 pm »
считайте, что это Оберон 89 : ).
А для 07 нужен особый модуль. Для вывода данных. Например, Channels. В нём с помощью низкоуровневых средств может создаваться выходной канал (массив произвольной длины, например).

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Пробуем писать на O7
« Ответ #33 : Август 28, 2013, 12:58:15 pm »
А что такое Arr и Arrs? Собственно в Обероне-07 вся фишка в работе с типами. Алгоритмы то тривиальны.
Arr не может быть массивом, так как процедура в Обероне-07 не может вернуть массив в качестве значения. С другой стороны, указателем на массив Arr тоже быть не может? По мнению компилятора akron1'а, по крайней мере...
Arrs = POINTER TO ARRAY OF POINTER TO ARRAY OF INTEGER;
Arr = POINTER TO ARRAY OF INTEGER;

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Пробуем писать на O7
« Ответ #34 : Август 28, 2013, 01:16:55 pm »
А что такое Arr и Arrs? Собственно в Обероне-07 вся фишка в работе с типами. Алгоритмы то тривиальны.
Arr не может быть массивом, так как процедура в Обероне-07 не может вернуть массив в качестве значения. С другой стороны, указателем на массив Arr тоже быть не может? По мнению компилятора akron1'а, по крайней мере...
Arrs = POINTER TO ARRAY OF POINTER TO ARRAY OF INTEGER;
Arr = POINTER TO ARRAY OF INTEGER;

POINTER TO ARRAY OF POINTER TO ARRAY OF INTEGER; - не бывает
Arr = POINTER TO ARRAY OF INTEGER; - тоже не бывает.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Пробуем писать на O7
« Ответ #35 : Август 28, 2013, 01:29:08 pm »
POINTER TO ARRAY OF POINTER TO ARRAY OF INTEGER; - не бывает
Arr = POINTER TO ARRAY OF INTEGER; - тоже не бывает.

Вообще, какие полезные массивные типы там могут быть-то хоть?
to iterate is human, to recurse, divine

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

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Пробуем писать на O7
« Ответ #36 : Август 28, 2013, 03:32:53 pm »
Слушайте, народ, че то я не врубаюсь. А как без динамических массивов кодить то? O_o

Вот например хочу прочитать из файла массив строк. Естественно что ни длина массива ни длины строк заранее неизвестны. Как их в памяти то разместить?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Пробуем писать на O7
« Ответ #37 : Август 28, 2013, 03:51:57 pm »
Слушайте, народ, че то я не врубаюсь. А как без динамических массивов кодить то? O_o

Вот например хочу прочитать из файла массив строк. Естественно что ни длина массива ни длины строк заранее неизвестны. Как их в памяти то разместить?
Через любую динамическую структуру данных. Например список чанков, или vlist какой-нибудь.
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Пробуем писать на O7
« Ответ #38 : Август 28, 2013, 03:56:10 pm »
Т.е. окромя списка никак? Жесть однако.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Пробуем писать на O7
« Ответ #39 : Август 28, 2013, 05:07:38 pm »
function concat(input, separator)
    local result = {}
    function foo(input, result)
        for _, v in ipairs(input) do
            if type(v) == 'table' then
                foo(v, result)
            else
                result[#result+1] = v
            end
        end
    end
    foo(input, result)
    return table.concat(result, separator)
end

local arr = {{{1, 2, 3}, {4,5}}, 10}

print(concat(arr, ', '))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Пробуем писать на O7
« Ответ #40 : Август 28, 2013, 05:12:03 pm »
Тьху блин. Так там разделитель 10?
Походу я не понял задачу...

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Пробуем писать на O7
« Ответ #41 : Август 30, 2013, 05:57:39 pm »
Слушайте, народ, че то я не врубаюсь. А как без динамических массивов кодить то? O_o

Вот например хочу прочитать из файла массив строк. Естественно что ни длина массива ни длины строк заранее неизвестны. Как их в памяти то разместить?
Через любую динамическую структуру данных. Например список чанков, или vlist какой-нибудь.

Вот он минимализм. В процессорах начиная с pentium появилась технология предвыборка данных.

http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D0%BA%D0%BE%D0%B4%D0%B0

Цитировать
Предвыборка кода — это запрос процессора в оперативную память для считывания инструкций заблаговременно, до того момента как эти инструкции потребуется исполнять. В результате этого запроса, инструкции загружаются из памяти в кэш. Когда инструкции, потребуется исполнять, доступ к ним будет осуществляться значительно быстрее, т.к. задержка при обращении в кэш на порядки меньше, чем при обращении в оперативную паять.

Получается данный пласт оптимизации, не будет задействован. То есть только на статике.

Т.е. окромя списка никак? Жесть однако.

Уверен, что да, жесть. Бывает для задачи проще массив, чем список, потом следить за указателями и т.д

А ещё проще делать массив указателей.

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Пробуем писать на O7
« Ответ #42 : Август 30, 2013, 06:04:22 pm »
Стоп. А как динамические строки использовать?

CONST
  MAX_STRING = 255;


VAR
String: ARRAY MAX_STRING OF CHAR;

Или делать строки на списках. Объединение будет быстрым. А вот проход будет постоянным, кэш промахом.

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Пробуем писать на O7
« Ответ #43 : Август 30, 2013, 06:07:14 pm »
Слишком низкоуровневым язык получился. ИМХО.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Пробуем писать на O7
« Ответ #44 : Август 30, 2013, 06:16:09 pm »
Слишком низкоуровневым язык получился. ИМХО.
Ну, скажем так - без стандартной либы и дополнительного инструментария для разработки, этот язык слабо пригоден для прикладного программиста.
Y = λf.(λx.f (x x)) (λx.f (x x))