Re[2]: Переносимость программ
От: dad  
Дата: 31.01.04 07:21
Оценка:
E>>Посоветуйте, пожалуйста, статьи по написанию переносимых программ с использованием С++. Интересует переносимость как между компиляторами, так и между платформами.

L>Mozilla C++ portability guide


L>

L>What follows is a set of rules, guidelines, and tips that we have found to be useful in making C++ code portable across many machines and compilers.


Правда, многое морально устарело.
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re[3]: Переносимость программ
От: leper Россия  
Дата: 31.01.04 08:28
Оценка:
Здравствуйте, dad, Вы писали:

L>>Mozilla C++ portability guide


L>>

L>>What follows is a set of rules, guidelines, and tips that we have found to be useful in making C++ code portable across many machines and compilers.


dad>Правда, многое морально устарело.


Есть такое дело, документ довольно старый... Но общее представление дает. Касательно переносимости у разработчиков Мозиллы также интересно посмотреть реализацию Netscape Portable Runtime.
... << RSDN@Home 1.1.2 stable >>
Think for yourself. Question authory.
Re[12]: Переносимость программ
От: Павел Кузнецов  
Дата: 31.01.04 09:40
Оценка:
Здравствуйте, Шахтер, Вы писали:

А>> Это может быть компилятором C99, если в unsigned char значащие все 24 бита.

А>> А иначе это не C компилятор. Ну, или, конечно, Вы что-то не так
А>> рассказали о представлении типов.

Ш> Это почему?


Потому что, как и в C++, в C все биты unsigned char должны быть значащими
(6.2.6.1/3-4, сноска 40, 6.2.6.2).
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[13]: Переносимость программ
От: Шахтер Интернет  
Дата: 31.01.04 16:48
Оценка: :)
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Здравствуйте, Шахтер, Вы писали:


А>>> Это может быть компилятором C99, если в unsigned char значащие все 24 бита.

А>>> А иначе это не C компилятор. Ну, или, конечно, Вы что-то не так
А>>> рассказали о представлении типов.

Ш>> Это почему?


ПК>Потому что, как и в C++, в C все биты unsigned char должны быть значащими

ПК>(6.2.6.1/3-4, сноска 40, 6.2.6.2).

А если нет, то что это уже не C а Паскаль? Эпиграф из Страуструпа.

The first thing we do, letґs
kill all the language lawyers.
– Henry VI, part II

... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[14]: Переносимость программ
От: Павел Кузнецов  
Дата: 31.01.04 18:21
Оценка:
Здравствуйте, Шахтер, Вы писали:

ПК>>в C все биты unsigned char должны быть значащими (6.2.6.1/3-4, сноска 40, 6.2.6.2).


Ш>А если нет, то что это уже не C а Паскаль?


Не Паскаль: спецификации Паскаля этот язык тоже соответствовать не будет.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[15]: Переносимость программ
От: Шахтер Интернет  
Дата: 31.01.04 22:48
Оценка: +1
Здравствуйте, Павел Кузнецов, Вы писали:

Я, всё-таки, позволю себе напомнить, что существует огромное многообразие вычислительных систем самого разного назначения, так что неудивитнльно, что нередко C адаптируют для эффективного использования аппаратных возможностей процессора, вводя в язык элементы, не предусмотренные станддартом.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re: Переносимость программ
От: Xentrax Россия http://www.lanovets.ru
Дата: 31.01.04 22:53
Оценка:
Здравствуйте, Elifant, Вы писали:

E>Посоветуйте, пожалуйста, статьи по написанию переносимых программ с использованием С++. Интересует переносимость как между компиляторами, так и между платформами.

E>И заодно задам вопрос по теме: гарантируется ли, что sizeof(char) == 1?

Стандарт ANSI C++?


Тут ведь вот какая проблема, любая промышленная программа зачастую оказывается завязана на неперносимые вещи — СУБД, железо, GUI, разные системные сервисы. А дальше, исходя из здравого смысла, надо стремиться все зависмые вещи стараться окружить врапперами, ну а все остальное писать на как можно более стандартном С++.
Re[2]: Переносимость программ
От: Elifant  
Дата: 01.02.04 04:01
Оценка:
Здравствуйте, Xentrax, Вы писали:

E>>Посоветуйте, пожалуйста, статьи по написанию переносимых программ с использованием С++. Интересует переносимость как между компиляторами, так и между платформами.


X>Стандарт ANSI C++?


Стандарт С++ — это, конечно, хорошо, и для переносимости его нужно придерживаться. Однако этот самый стандарт вещь очень расплывчатая, тут тебе не Ява, где зафиксированы размеры типов, их внутреннее устройство и все прочее. В С++, если я не ошибаюсь, никак не зафиксированы размеры некоторых типов, а также порядок байт в их представлении. Уже даже из-за этого многие существующие программы будут непереносимы, имхо.
Это вещи известные, а мне бы хотелось прочитать про подобные, но более хитрые и неочевидные.
Проще говоря — чего делать нельзя, так как это делается (хранится, передается, трактуется...) по-разному на разных архитектурах.
Re[3]: Переносимость программ
От: dad  
Дата: 02.02.04 05:46
Оценка:
E>>>Посоветуйте, пожалуйста, статьи по написанию переносимых программ с использованием С++. Интересует переносимость как между компиляторами, так и между платформами.

X>>Стандарт ANSI C++?


E>Стандарт С++ — это, конечно, хорошо, и для переносимости его нужно придерживаться. Однако этот самый стандарт вещь очень расплывчатая, тут тебе не Ява, где зафиксированы размеры типов, их внутреннее устройство и все прочее. В С++, если я не ошибаюсь, никак не зафиксированы размеры некоторых типов, а также порядок байт в их представлении. Уже даже из-за этого многие существующие программы будут непереносимы, имхо.


Если бы только это....
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re[10]: Переносимость программ
От: Кодт Россия  
Дата: 04.02.04 19:55
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Не угадали. C компилятор.


То есть, как я понимаю, адресуемая единица — это машинное слово (24бит), а чем оно заполнено — int или char — это уже по барабану.
Значит, на этой платформе sizeof(int) = sizeof(char) = 1, зато CHAR_BITS = 24.
Да?
Чему там будет равен sizeof(short)? Вообще, по стандарту, short — это 16-битное или 2-байтное (необязательно октетное)?

А что это за машина, кстати говоря... IBM 360? БЭСМ 6?
... << RSDN@Home 1.1.0 stable >>
Перекуём баги на фичи!
Re[11]: Переносимость программ
От: folk Россия  
Дата: 04.02.04 22:42
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Шахтер, Вы писали:


Ш>>Не угадали. C компилятор.


К>То есть, как я понимаю, адресуемая единица — это машинное слово (24бит), а чем оно заполнено — int или char — это уже по барабану.

К>Значит, на этой платформе sizeof(int) = sizeof(char) = 1, зато CHAR_BITS = 24.
К>Да?
К>Чему там будет равен sizeof(short)? Вообще, по стандарту, short — это 16-битное или 2-байтное (необязательно октетное)?


По стандарту sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long), значит на той платформе sizeof(short) == 1

К>А что это за машина, кстати говоря... IBM 360? БЭСМ 6?
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Re[11]: Переносимость программ
От: Шахтер Интернет  
Дата: 05.02.04 01:47
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Шахтер, Вы писали:


Ш>>Не угадали. C компилятор.


К>То есть, как я понимаю, адресуемая единица — это машинное слово (24бит), а чем оно заполнено — int или char — это уже по барабану.

К>Значит, на этой платформе sizeof(int) = sizeof(char) = 1, зато CHAR_BITS = 24.
К>Да?
К>Чему там будет равен sizeof(short)? Вообще, по стандарту, short — это 16-битное или 2-байтное (необязательно октетное)?

К>А что это за машина, кстати говоря... IBM 360? БЭСМ 6?


Долго ржал.

Есть такое семейство DSP процессоров у Моторолы. DSP563xx.

http://www.tasking.com/products/DSP56xxx/index.html

Выдержки из документации по компилятору (процессор весьма нестандартный и C для него тоже весьма нестандартный).
Если интересны все фичи, качай мануаль.
Совместимость, совместимось ... На том свете она будет.

char, short, int and long are all integral types, supporting all implicit (automatic) conversions.

— although the char type is 8 bit, each char occupies one memory word, because the DSP56xxx has no instructions to access one byte efficiently.

— char and short are treated as 8-bit and 16-bit int respectively.


The DSP563xx supports 24 and 16-bit arithmetic modes and 24 and 16-bit addressing modes. The c563 C compiler supports the following models for these modes:

24-bit arithmetic and 24-bit addresses 24-bit model
16-bit arithmetic and 24-bit addresses 16/24-bit model
16-bit arithmetic and 16-bit addresses 16-bit model


The compiler supports the additional data type _fract to do fixed point arithmetic without the use of (expensive) special libraries. The implementation of this data type depends on the selected family member. Fractions can have values between -1 and +1 and can be used like integers and floating points, and combine little code overhead with a high dynamic range.

/* constant with value 0.3333... */

const _fract one_third = 1.0/3;

Fixed point arithmetic follows the rules for floating point calculations.


The DSP56xxx family supports circular buffers, for which no representation in C exists. A circular buffer is a linear array that can be accessed using modulo address arithmetic, i.e., a pointer that wraps-around automatically, thus creating a virtual circular buffer. To allow you to use circular buffers in C, c563 supports the data type _circ as an extended data type.

Example:

int _circ Circ_Buf[5];
int _circ *Ptr_to_Circ_Buf = Circ_Buf;

Here, Circ_Buf is declared as a circular buffer. The compiler will emit alignment directives to ensure circular buffers will start at addresses that are a multiple of the smallest power of two that is equal to or larger than the buffer size. The buffer size is kept by the compiler and will be used to control pointer arithmetic of pointers that are assigned to the buffer later.

In the above example, the circular pointer Ptr_to_circ_Buf will be stored in an R-type register and the proper modulo value will be stored in its corresponding M-type register. Operations on the circular pointers can be done using the usual C pointer arithmetic with the difference that the pointer will wrap.

When the circular buffer is accessed using a circular pointer, it will wrap at the buffer limits.

Example:

while( *Ptr_to_Circ_Buf++ );

Indexing in the circular buffer, using an integer index, is treated equally to indexing in a non-circular array.

... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[12]: Переносимость программ
От: Oval  
Дата: 05.02.04 09:50
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Здравствуйте, Кодт, Вы писали:


К>>Здравствуйте, Шахтер, Вы писали:


Ш>>>Не угадали. C компилятор.


К>>То есть, как я понимаю, адресуемая единица — это машинное слово (24бит), а чем оно заполнено — int или char — это уже по барабану.

К>>Значит, на этой платформе sizeof(int) = sizeof(char) = 1, зато CHAR_BITS = 24.
К>>Да?
К>>Чему там будет равен sizeof(short)? Вообще, по стандарту, short — это 16-битное или 2-байтное (необязательно октетное)?

К>>А что это за машина, кстати говоря... IBM 360? БЭСМ 6?


Ш>Долго ржал.


Ш>Есть такое семейство DSP процессоров у Моторолы. DSP563xx.

я бы даже расширил — DSP56xxx

Ш>http://www.tasking.com/products/DSP56xxx/index.html

А ты реально программируешь под этот DSP?
Re[13]: Переносимость программ
От: Шахтер Интернет  
Дата: 07.02.04 00:35
Оценка:
Здравствуйте, Oval, Вы писали:

O>А ты реально программируешь под этот DSP?


Программировал. Года четыре назад.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[14]: Переносимость программ
От: Oval  
Дата: 09.02.04 09:04
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Здравствуйте, Oval, Вы писали:


O>>А ты реально программируешь под этот DSP?


Ш>Программировал. Года четыре назад.

А для каких приложений?
Re[15]: Переносимость программ
От: Шахтер Интернет  
Дата: 10.02.04 04:12
Оценка:
Здравствуйте, Oval, Вы писали:

O>Здравствуйте, Шахтер, Вы писали:


Ш>>Здравствуйте, Oval, Вы писали:


O>>>А ты реально программируешь под этот DSP?


Ш>>Программировал. Года четыре назад.

O>А для каких приложений?

Это конфиденциальная информация.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.