Ada_Ru форум

Обсуждение языка Ада

Why no to use standart lib in production?

Оставить новое сообщение

Сообщения

Alexandre
Why no to use standart lib in production?
2005-04-16 12:50:47

Объясните, пожалуйста, почему в книге "Ada distilled" сказано, что в "production" никогда не надо использовать код стандартной библиотеки (для типа Float)?

 

Имеется ввиду страница 93, абзац:

======================================================================== ============================

Warning: Do not use predefined Float from package Standard in your production programs. This type is useful for student programs but is not well-suited to portable software targeted to some actual production application.

======================================================================== ============================

 

Что не так в стандартном Float?

 

Заранее спасибо,

Удачи,

/Александр.

Здравствуйте, Alexandre.

 

Вы писали 16 апреля 2005 г., 16:50:47:

 

 

Объясните, пожалуйста, почему в книге "Ada distilled" сказано, что в "production" никогда не надо использовать код стандартной библиотеки (для типа Float)?

 

Имеется ввиду страница 93, абзац:

======================================================================== ============================

Warning: Do not use predefined Float from package Standard in your production programs. This type is useful for student programs but is not well-suited to portable software targeted to some actual production application.

======================================================================== ============================

 

Что не так в стандартном Float?

 

Во-первых я здесь вижу не про всю стандартную библиотеку, а только про Float.

Во-вторых, по моему пониманию, это касается не только Float, но и допустим Integer.

Причина - открывая Reference Manual читаем, что:

type Integer is range implementation-defined;

type Float is digits implementation-defined;

 

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

То же самое можно получить применяя тип int в С.

 

С уважением,

Николай mailto:nmaznyov@...

On Apr 16, 2005, at 22:38, Николай Мазнёв wrote:

Во-первых я здесь вижу не про всю стандартную библиотеку, а только

про

Float.

Именно это и имелось в виду.

Во-вторых, по моему пониманию, это касается не только Float, но

и допустим Integer.

Причина - открывая Reference Manual читаем, что:

type Integer is range implementation-defined;

type Float is digits implementation-defined;

т.е. перейдя на другую платформу или даже другой компилятор, можешь

вляпаться в несовпадения точности вычисления и нехватку разрядной

сетки.

То же самое можно получить применяя тип int в С.

Но тип int в C имеет некоторые гарантированные границы на которые можно

рассчитывать и, если честно, я редко встречал переопределение этого

типа (хотя не могу, конечно, похвастаться большим опытом).

А как тогда надо делать в Ada (правильно)?

Удачи,

/Александр.

Hello!

 

On Sat, 16 Apr 2005, Alexandre wrote:

 

Причина - открывая Reference Manual читаем, что:

 

type Integer is range implementation-defined;

type Float is digits implementation-defined;

 

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

То же самое можно получить применяя тип int в С.

 

Но тип int в C имеет некоторые гарантированные границы на которые можно рассчитывать и, если честно, я редко встречал переопределение этого типа (хотя не могу, конечно, похвастаться большим опытом).

 

А как тогда надо делать в Ada (правильно)?

 

type REAL is new FLOAT digits 6 ;

 

И дальше только им и пользоваться.

 

Sincerely yours Cyril Sazonov

Cyril Sazonov wrote:

 

type REAL is new FLOAT digits 6 ;

 

Не совсем корректно. При этом никогда не удасться создать тип, имеющий большую точность, чем Float. Ada предоставляет более гибкий механизм:

type Real is digits 6;

 

можно ещё и накладывать ограничения:

 

type Real is digits 6 range -1.0 .. 1.0;

 

А также использовать два других типа чисел:

 

type Fixed delta 0.01 range 0.0 .. 100.0;

 

type Decimal delta 0.01 digits 5;

 

type Decimal delta 0.01 digits 6 range 0.0 .. 100.0;

 

 

--

Vadim Godunko

Спасибо за объяснения!

 

 

Удачи,

/Александр.

 

On Apr 17, 2005, at 08:45, Vadim Godunko wrote:

On Sat, Apr 16, 2005 at 11:34:03PM +0400, Alexandre wrote:

On Apr 16, 2005, at 22:38, Николай Мазнёв wrote:

 

Во-первых я здесь вижу не про всю стандартную библиотеку, а только про

Float.

 

Именно это и имелось в виду.

 

Во-вторых, по моему пониманию, это касается не только Float, но

и допустим Integer.

Причина - открывая Reference Manual читаем, что:

 

type Integer is range implementation-defined;

type Float is digits implementation-defined;

 

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

То же самое можно получить применяя тип int в С.

 

Но тип int в C имеет некоторые гарантированные границы на которые можно рассчитывать и, если честно, я редко встречал переопределение этого типа (хотя не могу, конечно, похвастаться большим опытом).

 

Ага, типа минимуи 16 бит. А если хочешь гарантировать более точное определение - пользуйся извращениями типа ./configure :-)

 

А переопределений нет от слабой типизации в языке.

Хотя люди как-то живу с этим. Вспомнить хотя бы size_t.

 

 

 

А как тогда надо делать в Ada (правильно)?

 

 

Правильно определить свои типы, точно задавая диапазоны и

точность. Это гарантирует не только переносимость, но и

позволяет компилятору контролировать працильность операций,

чтоб случайно не сложить часы и километры.

 

 

Удачи,

/Александр.

 

 

--

Maxim Reznik

On Apr 17, 2005, at 19:23, Maxim Reznik wrote:

Ага, типа минимуи 16 бит. А если хочешь гарантировать более точное

определение - пользуйся извращениями типа ./configure :-)

Ну можно просто писать исходя из минимума... Хотя, про configure,

конечно, верно... =)

А переопределений нет от слабой типизации в языке.

Хотя люди как-то живу с этим. Вспомнить хотя бы size_t.

Кошмар, по-моему...

А как тогда надо делать в Ada (правильно)?

Правильно определить свои типы, точно задавая диапазоны и

точность. Это гарантирует не только переносимость, но и

позволяет компилятору контролировать працильность операций,

чтоб случайно не сложить часы и километры.

Да, просто принципиально другой подход к процессу у Ада программистов

(с небольшой белой завистью =) ).

Удачи,

/Александр.

Hello!

 

On Sun, 17 Apr 2005, Vadim Godunko wrote:

 

 

Cyril Sazonov wrote:

 

type REAL is new FLOAT digits 6 ;

 

Не совсем корректно. При этом никогда не удасться создать тип, имеющий большую точность, чем Float. Ada предоставляет более гибкий механизм:

type Real is digits 6;

 

можно ещё и накладывать ограничения:

 

type Real is digits 6 range -1.0 .. 1.0;

 

А также использовать два других типа чисел:

 

type Fixed delta 0.01 range 0.0 .. 100.0;

 

type Decimal delta 0.01 digits 5;

 

type Decimal delta 0.01 digits 6 range 0.0 .. 100.0;

 

Строго говоря, систему используемых типов надо проектировать в соответствие с решаемой задачей начиная со скалярных типов, используя стандартные как печку, от которой пляшут.

 

Sincerely yours Cyril Sazonov

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти