Автор Тема: [Oberon-07/11] Array of bytes / byte stream  (Прочитано 23979 раз)

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #30 : Декабрь 13, 2012, 08:10:34 pm »
Но вообще, byte (который unsigned) в языке нужен - это ж элементарный строительный блок. Без него или System, или костыли с оверхедом диким.
В общем случае железо может не оперировать байтами. Правда, на ПК в силу повальной intelизации такого, наверно, не будет. А в других местах оно, возможно, отмирает. Чтобы всё было параллельно и перпендикулярно.

Но если исходить из предположения, что байт есть не на всех железках, то штука, манипулирующая именно байтами, доступна не везде, соответственно, работать тоже будет не везде. Поэтому загнать эти входящие и исходящие потоки в подсистему Host и при их реализации использовать System. И байт.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #31 : Декабрь 13, 2012, 08:22:33 pm »
Но вообще, byte (который unsigned) в языке нужен - это ж элементарный строительный блок. Без него или System, или костыли с оверхедом диким.
В общем случае железо может не оперировать байтами. Правда, на ПК в силу повальной intelизации такого, наверно, не будет. А в других местах оно, возможно, отмирает. Чтобы всё было параллельно и перпендикулярно.
А при чем тут Интел? Наверное имелось ввиду x86? Но ведь и он тут не при чем. Возьмем arm, ppc, mips, alpha, итаник, да и тот же intel 8051, ti msp430, pic, atmel - ни один из них и близко не x86, но у всех них есть самый обычный байт.

Но если исходить из предположения, что байт есть не на всех железках, то штука, манипулирующая именно байтами, доступна не везде, соответственно, работать тоже будет не везде. Поэтому загнать эти входящие и исходящие потоки в подсистему Host и при их реализации использовать System. И байт.
Глупости. БАЙТ - есть везде. Только он не везде был 8 бит :-)
Алсо, чтобы не быть голословным, приведи плиз примеры современных (то есть производимых и используемых ныне) архитектур где нет байта, или хотя бы где байт не равен 8ми битам.

PS. И если уж так подходить к делу, то в SYSTEM первым делом должен улететь REAL и LONGREAL, а вторым делом туда же отправляется операция умножения и деления целых - вот они то точно не на всех современных архитектурах имеются.
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #32 : Декабрь 13, 2012, 08:27:06 pm »
Но вообще, byte (который unsigned) в языке нужен - это ж элементарный строительный блок. Без него или System, или костыли с оверхедом диким.
В общем случае железо может не оперировать байтами.

Так не бывает :) Никто не говорит, что байт должен быть 8-битным как на интеле. Байт - это минимальная адресуемая ячейка памяти на данной железке (собственно char в C как-то так и определен). И valexey прав, что без такой штуки действительно трудно эффективно работать с железкой (на что всегда претендовал оберон, в отличие от всяких жабаскриптов).

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #33 : Декабрь 13, 2012, 09:24:13 pm »
Так не просто бывает. Так есть. Процессор оперирует словами. На ПК популярным становится слово в 64 бита. Где-то слово равно байту. Если слово 64 бита, а процессор разрешает обратиться к байту (интел это для обратной совместимости делает), то работа с байтом будет максимум такой же производительной, как и со словом целиком (но поговаривают, что на самом деле работать будет чуть-чуть медленнее, чем со словом).

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #34 : Декабрь 13, 2012, 09:26:17 pm »
А при чем тут Интел? Наверное имелось ввиду x86?
Нет, я не про платформу говорил, а про политику компании.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #35 : Декабрь 13, 2012, 09:30:32 pm »
Так не просто бывает. Так есть. Процессор оперирует словами. На ПК популярным становится слово в 64 бита. Где-то слово равно байту. Если слово 64 бита, а процессор разрешает обратиться к байту (интел это для обратной совместимости делает), то работа с байтом будет максимум такой же производительной, как и со словом целиком (но поговаривают, что на самом деле работать будет чуть-чуть медленнее, чем со словом).

Нет. Ты путаешь машинное слово, которое связывают с разрядностью шины данных и которое обычно отражают на сишный int, и минимально возможная адресуемая сущность в памяти (байт/char). А еще есть разрядность шины адреса, которая соответствует указательному типу ;)

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #36 : Декабрь 13, 2012, 09:37:19 pm »
примеры современных (то есть производимых и используемых ныне) архитектур где нет байта, или хотя бы где байт не равен 8ми битам.
Я же вначале сделал оговорку, из которой можно понять, что текущим положением дел не интересуюсь. Но в памяти всплывают какие-то обрывки про процессора, работающие с памятью исключительно с помощью слов в два байта (но внутри процессора их можно обрабатывать отдельно). Старьё? Возможно. Но в x64 до сих пор есть вещи, ктоторые появились в первых моделях процессора. Тоже старьё. Но существует пока. Почему бы не существовать и другому какому-нибудь архаизму в виде такого странного процессора? Потенциально.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #37 : Декабрь 13, 2012, 09:37:41 pm »
Так не просто бывает. Так есть. Процессор оперирует словами. На ПК популярным становится слово в 64 бита. Где-то слово равно байту. Если слово 64 бита, а процессор разрешает обратиться к байту (интел это для обратной совместимости делает), то работа с байтом будет максимум такой же производительной, как и со словом целиком (но поговаривают, что на самом деле работать будет чуть-чуть медленнее, чем со словом).
Это конечно здорово, однако ж что делать с файлом размер которого 5 байт? ;-) Чем его читать?

Вообще, байт это вот такая штука:
Цитировать
The byte (play /ˈbaɪt/) is a unit of digital information in computing and telecommunications that most commonly consists of eight bits. Historically, a byte was the number of bits used to encode a single character of text in a computer[1][2] and for this reason it is the basic addressable element in many computer architectures. The size of the byte has historically been hardware dependent and no definitive standards existed that mandated the size. The de facto standard of eight bits is a convenient power of two permitting the values 0 through 255 for one byte. With ISO/IEC 80000-13, this common meaning was codified in a formal standard.

И без него весьма хреново на самом деле. И уж иметь в языке только знаковые целые (которые годятся только для арифметики) и SET, который прибит гвоздями к 32битам, вообще как-то даже стыдно.

Если уж на то пошло, то и байт это не всегда удобно. Иногда нужно не bytestream а bitstream. То есть, говоря высокоуровнево, в языке нужен инструмент для удобного и эффективного разбора бинарных данных произвольной длины. В Обероне такового инструмента видимо нет (на эту роль претендует SET, но он, очевидно, совершенно не годится) и сконструировать не получается. А вот скажем в erlang'e он есть (не факт что очень эффективный, но по крайней мере до жути удобный). В сях есть bitfield'ы и все ж таки есть честный байт (начиная с C99).
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #38 : Декабрь 13, 2012, 09:38:30 pm »
Нет. Ты путаешь машинное слово, которое связывают с разрядностью шины данных и которое обычно отражают на сишный int, и минимально возможная адресуемая сущность в памяти (байт/char).

Грубо говоря, если штука по адресу 1234 никак не пересекается со штукой по адресу 1235, то это штука - машинный байт.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #39 : Декабрь 13, 2012, 09:43:49 pm »
примеры современных (то есть производимых и используемых ныне) архитектур где нет байта, или хотя бы где байт не равен 8ми битам.
Я же вначале сделал оговорку, из которой можно понять, что текущим положением дел не интересуюсь. Но в памяти всплывают какие-то обрывки про процессора, работающие с памятью исключительно с помощью слов в два байта (но внутри процессора их можно обрабатывать отдельно). Старьё? Возможно. Но в x64 до сих пор есть вещи, ктоторые появились в первых моделях процессора. Тоже старьё. Но существует пока. Почему бы не существовать и другому какому-нибудь архаизму в виде такого странного процессора? Потенциально.
А я не интересуюсь десктопными x86/amd64 процессорами. Серьезно. Я интересуюсь (и for fun, и по работе) msp430 и прочей подобной радостью (если что msp430 распространен больше чем всякие там x86). Так вот - там нет и не будет чисел с плавающей точкой, и там нет и не будет умножения и деления целых чисел. Всвязи с этим предлагаю REAL, LONGREAL а также операцию умножения и деления переместить в SYSTEM! Програмно эмулировать скажем умножение чисел с плавающей точкой - жутко не эффективно (как по памяти, так и по времени, по времени оно еще и не предсказуемо, пока-пока реалтайм!). А SET либо сделать 16ти битным, либо тоже в SYSTEM утащить (32битных целых там тоже нет). И вот ТОГДА Оберон точно станет действительно кроссплатформенным языком!

И я не издеваюсь. Это реальная проблема. И актуальная архитектура. И она такова by design и это оправдано, это не архаизмы.
Y = λf.(λx.f (x x)) (λx.f (x x))

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #40 : Декабрь 13, 2012, 09:48:14 pm »
PS. И если уж так подходить к делу, то в SYSTEM первым делом должен улететь REAL и LONGREAL, а вторым делом туда же отправляется операция умножения и деления целых - вот они то точно не на всех современных архитектурах имеются.
Насчёт реала - не имею мнения, а умножение и деление - это не команды процессора, а абстракции. Их место - в языке, их машинное представление - дело оптимизатора кода.

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #41 : Декабрь 13, 2012, 09:52:42 pm »
Нет. Ты путаешь машинное слово, которое связывают с разрядностью шины данных и которое обычно отражают на сишный int, и минимально возможная адресуемая сущность в памяти (байт/char).
Пока что эта фраза меня не убедила. С трудом себе представляю, что по 64-шине передано всего 8 бит.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #42 : Декабрь 13, 2012, 09:58:28 pm »
Нет. Ты путаешь машинное слово, которое связывают с разрядностью шины данных и которое обычно отражают на сишный int, и минимально возможная адресуемая сущность в памяти (байт/char).
Пока что эта фраза меня не убедила. С трудом себе представляю, что по 64-шине передано всего 8 бит.
Я один вещь скажу, не обижайся пожалуйста :-) Но по шине памяти передается не 64 бита. а сразу целиком cache line, То есть 64 БАЙТА. Это на современных x86. Но это не отменяет побайтной адресации ;-) Там сейчас очень хитрая многослойная интеллектуальная система. Без поллитры не разобраться.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #43 : Декабрь 13, 2012, 10:01:23 pm »
PS. И если уж так подходить к делу, то в SYSTEM первым делом должен улететь REAL и LONGREAL, а вторым делом туда же отправляется операция умножения и деления целых - вот они то точно не на всех современных архитектурах имеются.
Насчёт реала - не имею мнения, а умножение и деление - это не команды процессора, а абстракции.
В смысле абстракции? Самые что ни на есть реальные команды. Отсутствие этих команд в процессоре приводит к много бОльшим проблемам в случае их использования в программе, чем использования 8битного байта при 16ти битной адресации памяти (то есть когда минимальная адресуемая ячейка 16 бит).

Их место - в языке, их машинное представление - дело оптимизатора кода.
Точно также можно сказать, что представление байта - дело оптимизатора кода.
Y = λf.(λx.f (x x)) (λx.f (x x))

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: [Oberon-07/11] Array of bytes / byte stream
« Ответ #44 : Декабрь 13, 2012, 10:14:08 pm »
А SET либо сделать 16ти битным, либо тоже в SYSTEM утащить (32битных целых там тоже нет). И вот ТОГДА Оберон точно станет действительно кроссплатформенным языком!
Насчёт SETа тоже мнения не имею, поскольку не пользовался особо. А вот насчёт кроссплатформенного языка высказаться могу.

Я не считаю, что кроссплатформенным называется язык, содержащий в себе только те команды, которые есть на всех охватываемых платформах. А считаю, что это язык, исходный код на котором можно скомпилировать под платформы, запустить результат на платформах и получить везде одинаковый результат.

Цитировать
И я не издеваюсь. Это реальная проблема. И актуальная архитектура. И она такова by design и это оправдано, это не архаизмы.
А я и не считал это издевательством. И архаизмом назвал не байт, а нестандартные процессора.

Хотя нет, байт тоже архаизм : ). Кому он нужен? Всем нужны потоки, из которых достаются данные. Сейчас-то они представлены в виде байтов, но лучше бы уж представлялись сразу в виде данных.