Автор Тема: [Oberon-07/11] Беззнаковое целое.  (Прочитано 24489 раз)

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #15 : Декабрь 15, 2012, 04:39:43 pm »
Просто нужно тогда точнее выражаться, зачем нужно иметь именно 32 битное целое без знака.
Не понял, кому нужно точнее выражаться?

Если для индексации массива, то можно иметь 2 массива, а по старшему биту множества определять какой из этих массивов использовать...
То есть Вы предлагаете эмулировать недостающий бит?

DIzer

  • Гость
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #16 : Декабрь 15, 2012, 04:57:24 pm »
на оберонкоре это решают просто ))
С BYTE в Блэкбоксе можно сделать так:
PROCEDURE SignedToUnsigned (x: BYTE): INTEGER;
VAR ch: CHAR;
BEGIN
ch := CHR(x);
RETURN ORD(ch);
END SignedToUnsigned;
Временная переменная ch: CHAR; обязательна. Если подставить напрямую ORD(CHR(x)), то компилятор соптимизирует и возвратит отрицательное число при отрицательном x.

Какие хаки однако нужны в КП ;-) Да еще и компиляторозависимые.
ИМХО - ничего необычного.. такое встречается часто, когда ЯВУ - используется не по назначению.., я вот про что - говорить правильно это или нет можно  только в некотором контексте...

DIzer

  • Гость
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #17 : Декабрь 15, 2012, 05:07:25 pm »
Самое глупое, что можно придумать, - это пытаться утаить очевидные недостатки (темы вырезать, гнобить инакомыслящих и т.д.). На мой взгляд, Оберон - отличный язык, и я не вижу пока для себя замены ему. В то же время я признаю, что у него есть свои недостатки. Я стараюсь относиться к Оберону как к рабочему инстументу, без излишнего фанатизма.
1.Тут я могу сказать  с вероятностью 90% - это есть следствие низкого  интеллекта (позорно, конечно, диагностировать его у преподавателей .. но ..)
2. А вот насчет второго - пожалуйста, поделитесь - чего там уникального, чего нет в других в других языках.. можете просто назвать ОБЛАСТЬ ИСПОЛЬЗОВАНИЯ где, по вашему мнению, ему нет замены.
« Последнее редактирование: Декабрь 15, 2012, 05:09:07 pm от DIzer »

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #18 : Декабрь 15, 2012, 05:31:35 pm »
На мой взгляд, Оберон - отличный язык, и я не вижу пока для себя замены ему. В то же время я признаю, что у него есть свои недостатки. Я стараюсь относиться к Оберону как к рабочему инстументу, без излишнего фанатизма.
поделитесь - чего там уникального, чего нет в других в других языках.. можете просто назвать ОБЛАСТЬ ИСПОЛЬЗОВАНИЯ где, по вашему мнению, ему нет замены.
Сейчас развелось столько языков, что любому языку в любой области наверное можно найти замену. Я же написал, что не вижу ДЛЯ СЕБЯ замены. То есть другие языки субъективно мне кажутся хуже. Оберон я использую в основном для вычислительных задач в инженерной практике. Один раз по работе пришлось написать небольшую программку на Си, - изматерился весь!  :)

DIzer

  • Гость
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #19 : Декабрь 15, 2012, 05:37:57 pm »

Сейчас развелось столько языков, что любому языку в любой области наверное можно найти замену. Я же написал, что не вижу ДЛЯ СЕБЯ замены. То есть другие языки субъективно мне кажутся хуже. Оберон я использую в основном для вычислительных задач в инженерной практике. Один раз по работе пришлось написать небольшую программку на Си, - изматерился весь!  :)
какой Оберон... я спрашиваю не просто так.. история имеет тенденцию повторяться - около года назад был Rifat, сейчас Akron... а воз и ныне там, так и непонятно (мне , по крайней  мере) - нафига это нужно...- можно сделать портабельность, можно 64битность, можно хорошую IDE... - но ради  чего?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #20 : Декабрь 15, 2012, 05:41:07 pm »
На мой взгляд, Оберон - отличный язык, и я не вижу пока для себя замены ему. В то же время я признаю, что у него есть свои недостатки. Я стараюсь относиться к Оберону как к рабочему инстументу, без излишнего фанатизма.
поделитесь - чего там уникального, чего нет в других в других языках.. можете просто назвать ОБЛАСТЬ ИСПОЛЬЗОВАНИЯ где, по вашему мнению, ему нет замены.
Сейчас развелось столько языков, что любому языку в любой области наверное можно найти замену. Я же написал, что не вижу ДЛЯ СЕБЯ замены. То есть другие языки субъективно мне кажутся хуже. Оберон я использую в основном для вычислительных задач в инженерной практике. Один раз по работе пришлось написать небольшую программку на Си, - изматерился весь!  :)
Вполне верю. Для чисто инженерных рассчетов, если сидеть на конкретной реализации Оберона, то это будет в среднем выгодней чем делать то же на Сях (если не требуется эти рассчеты перетаскивать с платформы на платформу). В общем то тут вполне и какого-нибудь PL/I хватит (см. соседнюю тему про Российский PL/I, там как раз оно. причем на весьма приличном уровне).

Это не относится к С++ конечно же - С++ лучше для инженерии (всякое там dsp и численные методы) чем Си и Оберон. (но с другой стороны, чтобы на С++ было удобно и просто писать всякую инженерию, нужно инвестировать в обучение вполне осмысленное время).
Y = λf.(λx.f (x x)) (λx.f (x x))

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #21 : Декабрь 15, 2012, 06:00:51 pm »
а воз и ныне там, ...
Какой воз? Не, мне портабельность по барабану. У нас на работе лицензионная Венда - это корпоративный стандарт, изменений не предвидится.

Да, если требуется GUI, то иногда на дельфях пишу. Но после Оберона испытываю при этом дискомфорт. Особенно раздражают регистронечувствительные идентификаторы.

(Блэкбокс, кстати, забросил. Использую консольный копилятор XDS)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #22 : Декабрь 15, 2012, 06:12:52 pm »
на оберонкоре это решают просто ))
С BYTE в Блэкбоксе можно сделать так:
PROCEDURE SignedToUnsigned (x: BYTE): INTEGER;
VAR ch: CHAR;
BEGIN
ch := CHR(x);
RETURN ORD(ch);
END SignedToUnsigned;
Временная переменная ch: CHAR; обязательна. Если подставить напрямую ORD(CHR(x)), то компилятор соптимизирует и возвратит отрицательное число при отрицательном x.

Какие хаки однако нужны в КП ;-) Да еще и компиляторозависимые.
ИМХО - ничего необычного.. такое встречается часто, когда ЯВУ - используется не по назначению.., я вот про что - говорить правильно это или нет можно  только в некотором контексте...
Потому, что компилятор не имеет права оптимизировать таким образом, чтобы меналясь семантика действия. В нормальных высокоуровневых языков в описании учитывается тот факт, что в мире существует оптимизация, и поэтому там задется некий базис, набор инвариантов которые при оптимизации должны сохраняться.

Если у меня в зависимости от опций оптимизации функция:
int_least32_t s_to_us(int_least8_t a) { return (uint_least8_t)a;}
при одном и том же входном значении в диапазоне [-127;127] будет возвращать разные значения, то это будет форменным безобразием.

А в КП (точнее в случае ББ) это считается обычным делом.

В принципе теперь понятно почему там народ так боится оптимизирующих компиляторов :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #23 : Декабрь 15, 2012, 06:17:30 pm »
а воз и ныне там, ...
Какой воз? Не, мне портабельность по барабану. У нас на работе лицензионная Венда - это корпоративный стандарт, изменений не предвидится.
Ну, платформа это еще и конкретный компилятор и конкретный процессор (например потребуется 64 бита да еще с векторизацией + какая-нибудь CUDA). Ну и сама винда широка и необъятна. Иногда и под .net неплохо бы иметь возможность собрать ровно ту же прогу. А теперь еще и ARM, и тоже винда ;-)

Да, если требуется GUI, то иногда на дельфях пишу. Но после Оберона испытываю при этом дискомфорт. Особенно раздражают регистронечувствительные идентификаторы.
Странно. Это то как раз скажем в Аде меня не раздражало.

(Блэкбокс, кстати, забросил. Использую консольный копилятор XDS)
А почему, если не секрет?
Y = λf.(λx.f (x x)) (λx.f (x x))

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #24 : Декабрь 15, 2012, 07:20:47 pm »
(Блэкбокс, кстати, забросил. Использую консольный копилятор XDS)
А почему, если не секрет?
Пиши что хочешь, ныкай сырцы, и совесть при этом спокойна  :D

А вообще, о некоторых недостатках Блэкбокс я на оберонкоре писал, и дальше развивать эту тему не хочу. Напомню только некоторые: завязка на COM, хаки в компиляторе, небрежность в коде (какие-то "левые" ключевые слова, которые забыли закомментарить), неработающие опции компилятора и т.д.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #25 : Декабрь 16, 2012, 01:49:26 am »
на оберонкоре это решают просто ))
С BYTE в Блэкбоксе можно сделать так:
PROCEDURE SignedToUnsigned (x: BYTE): INTEGER;
VAR ch: CHAR;
BEGIN
ch := CHR(x);
RETURN ORD(ch);
END SignedToUnsigned;
Временная переменная ch: CHAR; обязательна. Если подставить напрямую ORD(CHR(x)), то компилятор соптимизирует и возвратит отрицательное число при отрицательном x.
Я конечно зануда, но я не поленился, и проверил. Вначале я сходил в доку по КП (cюда: http://plas.fit.qut.edu.au/gpcp/LanguageReport.aspx#Type ), выяснил, что char он таки 16ти битный в КП (вне зависимости от реализации), а байт это натурально sint8. И тут то у меня и закрались подозрения.

Сходил и пощупал что у нас выйдет на плюсах:
#include <iostream>
#include <stdint.h>

using namespace std;

int main()
{
int_least8_t b = -15;
cout << (int_least32_t)(uint_least16_t)b;
return 0;
}
Получил естественны на выходе не 241 как ожидалось, а совсем даже 65521. Оке-ей. Скачал себе ББ. Проверил:
MODULE ObxHello0;

IMPORT StdLog;

PROCEDURE SignedToUnsigned (x: BYTE): INTEGER;
VAR ch: CHAR;
BEGIN
ch := CHR(x);
RETURN ORD(ch);
END SignedToUnsigned;

PROCEDURE Do*;
BEGIN
StdLog.Int(SignedToUnsigned(-15));
END Do;

END ObxHello0.
Получил в логе те же самые 65521. Так что этот метод не позволяет засунуть в integer тот самый uint8.

Чтобы работало как надо, в КП нужно немножко допилить:
PROCEDURE SignedToUnsigned (x: BYTE): INTEGER;
VAR ch: CHAR;
BEGIN
ch := CHR(x);
RETURN ORD(BITS(ORD(ch)) * {0,1,2,3,4,5,6,7});
END SignedToUnsigned;

И тогда все хорошо.

PS. Проверил на счет оптимизации - в ББ действительно компилятор кривой, оптимизацию он делает не верно. На выходе получается -15.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #26 : Декабрь 16, 2012, 02:07:43 am »
Ну, либо вместо CHAR использовать SHORTCHAR
Y = λf.(λx.f (x x)) (λx.f (x x))

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #27 : Декабрь 16, 2012, 04:53:45 am »
Тема не удалялась, она на месте.
Вы пытаетесь пойти по ссылке на отдельное сообщение.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #28 : Декабрь 16, 2012, 05:12:07 am »
зачем нужно иметь именно 32 битное целое без знака
Как работать с памятью выше 2-х гигабайт, не имея беззнаковых целых? В А2 не смогли, поэтому решили таки эти беззнаковые там реализовать. Как обработать файл, размером больше 2-х гб, не вводя 64-х битное знаковое целое там, где оно совершенно не нужно?

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: [Oberon-07/11] Беззнаковое целое.
« Ответ #29 : Декабрь 16, 2012, 07:12:26 am »
Лично я использую в качестве аналога сишного size_t (для позиций, длин и проч.) уже пару лет как только LONGINT. Ибо придерживаюсь в своём коде "64-bit-ready".