RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Может я не прав, но..


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : LightElf
To : Юрий Пронякин
Subj : Может я не прав, но..

> > Не компилируется. Ошибка типизации. Указатель вместо int.
>
> А у меня - компилируется. И ассемблерный листинг выдаёт, в котором видно, что программа делает именно то, что написано.

Компиляторы иногда имеют ошибки. Как и любые другие программы.

>
> > Объясни друзьям, что функции нужно описывать. Это несложно.
>
> Если компилятору недостаточно "int func(int x)", то откуда такая уверенность, что то же самое, написанное ещё раз, что-то изменит?

Из стандарта. Если функция описана как имеющая параметр int, то указатель туда не пропустит компилятор.

> Нет, если инструмент допускает такое, то его место - где-то в дальнем углу.
> (Кстати, в стандарте языка написано, что указатель не совместим с целым по присваиванию? А по подстановке параметров?)

Написано.

> Вот и я в прошлый раз говорил, что язык, зависящий от компилятора, это не язык уже, а семейство.

Язык от компилятора не зависит. Ошибки в реализации языка - да, зависят.

> > "Главная часть любого оружия - голова его владельца".
>
> Вот именно. И её, как главную часть, беречь надо, а не дуло этого же оружия к ней приставлять.

Если голова хочет это оружие к себе приставить - вольному воля.

> > Используй сишные битфилды. Очень удобно и код хороший получается.
>
> Максимальный размер их? А почему я ни разу не видел их ни в чьих в исходниках? Народ удобств не хочет? Или тоже компиляторо-специфичное изобретение?

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

> > В стандарте Паскаля не аналога для сишного interrupt.
>
> (А, ты, говоря о Паскале, имеешь в виду стандарт. Я думал - что тот язык, который борландовские компиляторы используют. Ладно, запомним это на будущее.)

Если ты про interrupt в Turbo Pascal - да, есть такое. Но не портабельное. Ни дельфя, ни VP его не понимают. Бо слишком завязано на дос.

> А с чего ты решил, что этот аналог там нужен (в Модуле, например, без него прекрасно обходятся)? Если процедура, порождаемая компилятором, на выходе оставляет неизменными все регистры кроме тех, в которых возвращается результат, то interrupt становится не нужным (обработчик ведь результата не возвращает). Если же типовая процедура какие-то регистры гробит, то что мещает на входе в обработчик вызвать процедуру SaveState, а на выходе - RestoreState?

Брр. Если процедура всегда сохраняет все регистры, то оно несколько неэффективно. Но в общем конечно тоже вариант. А вот как шепнуть им, чтобы команду выхода правильную поставили?

> Ну, а если мы имеем дело с многозадачной ОС, то тут вообще задача сохранения и восстановления контекста решается самой операционкой.

Дык вроде спич как раз об написании операционки?

> Кстати, а в стандарте Си слово interrupt предусмотрено? А как на Си решить обратную задачу - написать участок кода, который прерывать нельзя? Так, чтобы оно гарантированно скомпилировалось любым компилятором.

слово interrupt предусмотрено. Насчет непрерываемого участка кода - уел. Нет такого. Слишком сие платформоспецифично.

> > Описываешь calling convention для внешней функции и все.
>
> _Как_ описываешь? Ключевым словом pascal? А кто гарантирует, что тот паскалевский компилятор, который эту библиотеку породил, использует точно такой же способ передачи параметров в процедуры? Ведь способ передачи параметров стандартом языка не регламентируется.

Все виденные мной паскалевские компиляторы использовали один и тот же calling convention.

> > Не иначе именно поэтому в том же самом стандарте Паскаля такие функции есть. Такой вот ненадежный стандарт.
>
> Нет их там. Есть несколько операторов языка. А операторы - совсем не то же самое, что самодельные процедуры.

Гм, то есть writeln - оператор? Возможно...

> Но в данном случае навязывают именно тебе - правила раздачи имён функциям в библиотеках, при несоблюдении которых огребаешь проблемы (да и соблюдение не гарантирует - потому что соблюдать их должны все, а не только ты). А у меня в этом месте - полная свобода. Язык гарантирует.

Согласен, решение более элегантное.

> > Стандартные библиотеки в префиксах не нуждаются, именно потому что они стандартные.
>
> Не увиливай - вопрос был не стандартных библиотеках. Они были упомянуты просто потому, что откуда среднестатичтический программист узнает о каких-то там внеязыковых соглашениях? А имена стандартных функций - вот они, перед глазами. Значит, на них он и будет равняться.

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

> Ты на вопрос не ответил.

Я подумал, что он риторический :) Стандарт прямо и честно говорит, что результат такого действия не определен. Потому, что в зависит от процессора и компилятора. Соответственно использующим такие конструкции прямая дорога к терапевту. С другой стороны, сама по себе операция инкремента/декремента очень удобна и полезна. В частности - хорошо ложится на многие процессоры.




Mon 16 Jul 2007 13:47 Mozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:1.8.1.4) Gecko/200




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.