Здравствуйте, Клапауций, Вы писали:
К>Привёл пример и на тебе. На eof нужно было проверять после чтения, иначе появляется дополнительный байт в конце, что и можно наблюдать.
Прости, ошибся. Действительно, на 1 байт больше читается.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>P. S. СГ>На Component Pascal можно даже без ASSERT(): СГ>
СГ>PROCEDURE guardinsert(p: ANYPTR);
СГ>BEGIN
СГ> WITH p: CorrectPtr DO insert(p) END
СГ>END guardinsert;
СГ>
СГ>В том случае если динамический тип p не CorrectPtr, выполнение будет автоматически остановлено точно также как и при использовании ASSERT().
То же самое верно и для оксфордского Оберона-2.
Такое поведение оператора WITH определено в описании языка Оберон-2.
В принципе, наверное, того, что мы "с ходу" предложили, достаточно для создания надежного кода.
Но я думаю, что проблему статического контроля типов в полиморфных контейнерах в Обероне можно решить и получше. Например, с помощью расширения типа контейнера.
Но здесь "думать надо" (обероновской практики у меня нет, я пишу на Си и Си++), а я сегодня "весь в делах".
Так что решение все-таки неокончательное.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Здравствуйте, Mamut, Вы писали:
M>Не надо. Из споров тут такие интересные подветки рождаются, что любо-дорого читать. Причем зачастую с Оберонами никак не связанные.
Т.е. Оберон позволяет узнавать новое об остальной индустрии.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Сейчас ты утверждаешь что насколько ты понял в Обероне есть JIT компилятор.
Все порой ошибаются. Все же оберон я смотрел в 97. С тех времен много воды утекло.
СГ>Я даже не могу сказать что все что ты знаешь об Обероне равно НУЛЮ. Нет не нулю, а это вообще либо отрицательное число, либо мнимая единица.
А вот это гнусная демагогия. Уж я точно больше понимаю в Обероне, чем ты в том же Шарпе.
Ты отставл от индустрии лет на 10. И постоянно начинашь обсуждать чужую компетенцию. Просто смешно.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Естественно, файлы открывал, а что?
То что их закрывать периодически надо. И если нет нормальной обриботки исключений и блоков защиты, то это превращается в сущий ад.
СГ>Естественно, на 0 не делил, я так делал: IF f > EPSILON THEN a := b/f; ...
Ну, и перед каждым делением по IF-у? И это по-твоему удобная, надежная и безопасная среда программирования?
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, GlebZ, Вы писали:
GZ>Занятно, я пишу уже 15 лет на С++, однако автором себя не считаю! GZ>Что-то случилось в датском королевстве!!!
Случилось. Первое упоминание о С++ это 85-год и компилятор CFront который был препроцессор С. В росси он вообще доступен не был. К тому же до 90-ых С++ на современный был похож очень отдоленно. Небыло шалонов и т.п.
Короче, без знакомства со Сртауструпом писать 20 лет на С++ невозможно в принципе. 15 цифра более реальная, но тоже сомнительная. Я вот с С++ знаком лет 11-12. Причем в те времена надыбал компилятор С++ с большим трудом. Если не ошибаюсь — это был Зортеч С++.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Клапауций, Вы писали:
К>>Привёл пример и на тебе. На eof нужно было проверять после чтения, иначе появляется дополнительный байт в конце, что и можно наблюдать.
СГ>Прости, ошибся. Действительно, на 1 байт больше читается.
Переделал:
PROCEDURE Test* ();
VAR L: Files.Locator; f: Files.File; r: Files.Reader; b: BYTE;
BEGIN
L := Files.dir.This("C:\");
IF L # NIL THEN
f := Files.dir.Old(L, "New Text Document.txt", FALSE);
IF f # NIL THEN
r := f.NewReader(NIL);
IF r # NIL THEN
LOOP
r.ReadByte(b);
IF r.eof THEN EXIT END;
StdLog.Char(CHR(b))
END;
END;
f.Close();
END
END
END Test;
Здравствуйте, alexeiz, Вы писали:
A>Нет. Линкер умеет объединять любой сходный код. Например vector<int> и vector<long> и vector<void*> и vector<vector<int>*> имеют один и тот же код (на 32 битной платформе). Поэтому линкер оставит только одну копию кода для всех этих template instantiations. Более того, допустим у тебя есть две функции, которые на C++ выглядят абсолютно по-разному, но после обработки компилятором и оптимизатором из них получается один и тот-же ассемблерный код. Линкер оставит только одну копию этого кода.
Я прямо весь в сомнениях. Пишу простой код (прошу прощения за стиль — нет времени),
компилирую с помощью MSVC для двух векторов целых чисел в первом случае, и для вектора целых и char*. Пока я с векторами ничего не делаю, размер и правда одинаковый. Как только добавляю хоть какую-то функциональность (sort()), сразу разница в 4K.
Ну, ничего, есть же RSDN.
Здесь каждый второй — Мюнхгаузен.
AVC>>P.S. А что такое плефора? A>Англицизм: plethora. Я был уверен, что в русском такое слово тоже есть.
Опять же вспоминается к/ф "В бой идут одни старики".
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Здравствуйте, VladD2, Вы писали:
VD>Короче, без знакомства со Сртауструпом писать 20 лет на С++ невозможно в принципе. 15 цифра более реальная, но тоже сомнительная. Я вот с С++ знаком лет 11-12. Причем в те времена надыбал компилятор С++ с большим трудом. Если не ошибаюсь — это был Зортеч С++.
Занятно, труды должны быть очень большие. На каждом углу продавались дискеты с Borland C++. C которого собственно начинал где-то 92-93 года. MFC датируется серединой 92 года. Насчет 15 извинился.
Здравствуйте, AVC, Вы писали:
AVC>Здравствуйте, alexeiz, Вы писали:
A>>Нет. Линкер умеет объединять любой сходный код. Например vector<int> и vector<long> и vector<void*> и vector<vector<int>*> имеют один и тот же код (на 32 битной платформе). Поэтому линкер оставит только одну копию кода для всех этих template instantiations. Более того, допустим у тебя есть две функции, которые на C++ выглядят абсолютно по-разному, но после обработки компилятором и оптимизатором из них получается один и тот-же ассемблерный код. Линкер оставит только одну копию этого кода.
Ну, это чересчур сильное утверждение. Боюсь, что не так всё сказочно. Оставлять единственную копию предметов, имеющих _declspec(any), — это да. А вот чтобы до побайтного сравнения кода...
AVC>Я прямо весь в сомнениях. Пишу простой код (прошу прощения за стиль — нет времени), AVC>компилирую с помощью MSVC для двух векторов целых чисел в первом случае, и для вектора целых и char*. Пока я с векторами ничего не делаю, размер и правда одинаковый. Как только добавляю хоть какую-то функциональность (sort()), сразу разница в 4K.
Потому что std::sort тащит за собой
* итераторы — std::vector<T>::iterator
* компаратор — std::less<T>
* собственно алгоритм
Кстати, сейчас повторил твой эксперимент. Эти 4К — какая-то отладочная информация. Если включить оптимизацию -Ox, то размер файла не меняется.
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, VladD2, Вы писали:
VD>>Короче, без знакомства со Сртауструпом писать 20 лет на С++ невозможно в принципе. 15 цифра более реальная, но тоже сомнительная. Я вот с С++ знаком лет 11-12. Причем в те времена надыбал компилятор С++ с большим трудом. Если не ошибаюсь — это был Зортеч С++. GZ>Занятно, труды должны быть очень большие. На каждом углу продавались дискеты с Borland C++. C которого собственно начинал где-то 92-93 года. MFC датируется серединой 92 года. Насчет 15 извинился.
Ты явно все перепутал. В 92 даже Visual C++ не было. А МФЦ вошла в его состав. 93-ий — это год появления виндовс 3.1.
Borland C++ вышел, врое как, намного позже. В те времена был Турбо С/С++. И найти компилятор С++ в 90 было ой как не просто. Лично я искал с месяц. Причем все тогдашние компиляторы были долеки от совершенства. А 90-ый — это 14 лет назад. А не как не 20.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Ты явно все перепутал. В 92 даже Visual C++ не было. А МФЦ вошла в его состав. 93-ий — это год появления виндовс 3.1. здесь
Может ты спутал, кажется в 93 году вышла Windows 3.11, наиболее глючная версия из когда либо выпущенных версий Windows 3.0. Но Windows все таки начался с Windows 3.0 в 1990 году. Кстати, была еще Windows 2.0 которая при мне упешно юзалась на всяких XT. Мужики как-то запускали на пентюхе, работает, правда со скоростью как на XT.
VD>Borland C++ вышел, врое как, намного позже. В те времена был Турбо С/С++. И найти компилятор С++ в 90 было ой как не просто. Лично я искал с месяц. Причем все тогдашние компиляторы были долеки от совершенства. А 90-ый — это 14 лет назад. А не как не 20.
Насчет совершенства, то тогда еще много чего не было, типа RTTI и шаблонов. Так их и в спецификации тогда не было.
Borland C++ 2.0 у меня лежал купленный практически с момента выхода(а это произошло еще до того как я пришел на ту работу в 1992). Затем был куплен Visual C++ 1.0 и я попрощался с OWL. Был еще Watcom, но когда он появился уже не помню (где-то 93 кажется).
Здравствуйте, AVC, Вы писали:
A>>Нет. Линкер умеет объединять любой сходный код. Например vector<int> и vector<long> и vector<void*> и vector<vector<int>*> имеют один и тот же код (на 32 битной платформе). Поэтому линкер оставит только одну копию кода для всех этих template instantiations. Более того, допустим у тебя есть две функции, которые на C++ выглядят абсолютно по-разному, но после обработки компилятором и оптимизатором из них получается один и тот-же ассемблерный код. Линкер оставит только одну копию этого кода.
AVC>Я прямо весь в сомнениях. Пишу простой код (прошу прощения за стиль — нет времени), AVC>компилирую с помощью MSVC для двух векторов целых чисел в первом случае, и для вектора целых и char*. Пока я с векторами ничего не делаю, размер и правда одинаковый. Как только добавляю хоть какую-то функциональность (sort()), сразу разница в 4K.
AVC>
...
AVC>
Увы кажется не объединяет. Попробовал на VC6.0 и 7.0 — Если запустить релиз в отладчике то видно, что вызываются разные ф-ии.
Попробовал разные опции оптимизатора....
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Прости, ошибся. Действительно, на 1 байт больше читается.
О чем тебе уже все много раз говорили... Людям свойственно ошибаться... И как следствие нужен отладчик и тд и тп...
... << RSDN@Home 1.1.4 rev. 185 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн