почему я предпочёл паскалю си
От: DEMON HOOD  
Дата: 06.01.05 07:26
Оценка: 1 (1) +5 :))) :))) :))) :))) :))) :)
Чегото вспомнилось сегодня, решил запостить...

Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal
потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,
но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.
... <<silent Rsdn@Home 1.1.4 beta 1 Windows XP 5.1.2600.0 >>

06.01.05 20:12: Перенесено модератором из 'C/C++' — Павел Кузнецов
17.10.05 00:28: Перенесено из 'Философия программирования'
17.10.05 21:16: Перенесено модератором из 'Священные войны' — Kupaev
Re: почему я предпочёл паскалю си
От: Вадим Никулин Россия Здесь
Дата: 06.01.05 07:34
Оценка: 1 (1) +2 -2
Здравствуйте, DEMON HOOD, Вы писали:

DH>Чегото вспомнилось сегодня, решил запостить...


DH>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal

DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,
DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.

Боюсь, что в си этого делать нельзя. Только в сиплюсплюс.
Re: почему я предпочёл паскалю си
От: Algorithmus Украина  
Дата: 06.01.05 07:50
Оценка: 1 (1) +2 :)
DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.

Мда... Это мне напоминает пользователя ZX Spectrum, пересевшего на привычный нам IBM-совместимый PC — "На PC клавиатура удобнее"

Мне, например, в свое время в паскале много всего не понравилось... Не думаю, что возможность объявлять переменные в любом месте программы — это самая главная фича. Причем, она не в С, а в С++
Re[2]: почему я предпочёл паскалю си
От: DEMON HOOD  
Дата: 06.01.05 08:10
Оценка: :)
Здравствуйте, Algorithmus, Вы писали:

A>Мне, например, в свое время в паскале много всего не понравилось... Не думаю, что возможность объявлять переменные в любом месте программы — это самая главная фича. Причем, она не в С, а в С++

мне было лень писять си++
... <<silent Rsdn@Home 1.1.4 beta 1 Windows XP 5.1.2600.0 >>
Re: почему я предпочёл паскалю си
От: Кодёнок  
Дата: 06.01.05 08:18
Оценка: +1 -3 :)
DH>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal
DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,
DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.

Ну как раз против Си Паскаль держится очень уверенно и лично я бы предпочел не очень удобный паскалевский синтаксис и ОО, чем Си и старательную эмуляцию ООП через структуры и хранимые в них указатели на функции. А вот современный C++ — совершенно другое дело.
Re[2]: почему я предпочёл паскалю си
От: slegkapjan  
Дата: 06.01.05 08:33
Оценка: :)
Кё>Ну как раз против Си Паскаль держится очень уверенно и лично я бы предпочел не очень удобный паскалевский синтаксис и ОО, чем Си и старательную эмуляцию ООП через структуры и хранимые в них указатели на функции. А вот современный C++ — совершенно другое дело
ИМХО -- не сравнивать Object Pascal и Си некорректно.
Re: почему я предпочёл паскалю си
От: slegkapjan  
Дата: 06.01.05 08:52
Оценка:
Лично я выбрал Си, потому что он мне показался наиболее естественным. Паскаль какой-то искусственный, выращенный в парнике язык. Ну и замечательная экспрессивность Си, отсутствие всяких лишних и затрудняющих программирование фич, красивый синтаксис, великолепные возможности по работу с железом... Что еще нужно начинающему программеру?
P.S. Товарищи, я вас просто умоляю, давайте не будем устраивать священных войн!
Re: почему я предпочёл паскалю си
От: slegkapjan  
Дата: 06.01.05 08:54
Оценка: 1 (1)
DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,
Borland C++ 3.1 -- это же классика!! Я до сих пор держу его и на работе и дома, просто чтоб был. Эх! Желтые буквы на синем фоне. Господа, я щас прослезюсь. Эхх!
Re: почему я предпочёл паскалю си
От: Аноним  
Дата: 06.01.05 09:02
Оценка: 4 (3) :))) :)
А я вот выбрал С потому что это круто
Совершенно серьезно.
Вы тут можете мне говорить о том, что вы сделали осознанный выбор на основании
вдумчивого анализа и сравнения. Я не такой
Когда я был студентом (больше 10 лет тому назад)
язык C и Юникс были окружены ореолом таинственности и магии.
У нас на первом курсе ходили слухи,
что программы на С быстрее всех остальных в десятки раз.
Никто этим слухам не верил, но активно их поддерживали.
Когда я первый раз что-то написал на С, то к тому времени
у меня уже был за плечами кой какой опыт на PL/1 и Паскаль.
Первая программа на С была написана чуть не с дрожащими от экстаза руками (это был hello world )
Ну а потом пришло разочарование.
Во многих вещах С сильно уступал тому же PL/1 по выразительной силе.
На препроцессор жалко смотреть.
Ввод-вывод — полное убожество.
Ну только что синтаксис более лаконичный...

Ну а С++ конечно же другое дело.
Re: почему я предпочёл паскалю си
От: yxiie Украина www.enkord.com
Дата: 06.01.05 09:36
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH>Чегото вспомнилось сегодня, решил запостить...


DH>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal

DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,
DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.

я 6 лет писал на паскале. а выбрал его потому что выбора не было
только паскаль (tpc.exe + turbo.tpl с успехом помещался на 360-килобайтнуйю дискетку и быстро работал на IBM PC XT c 640кб. оперативной памяти).
а на С++ я долго перейти не мог — синтаксис знал, но заставить себя писать никак не мог — не мог придумать достойную задачу. а потом таки придумал — начал писать JavaScript-подобный интерпретатор на С++, ну а дальше пошло-поехало
... << RSDN@Home 1.1.3 stable >>
Re[2]: почему я предпочёл паскалю си
От: Dr.Gigabit  
Дата: 06.01.05 09:46
Оценка: +2
Здравствуйте, Вадим Никулин, Вы писали:

ВН>Здравствуйте, DEMON HOOD, Вы писали:


DH>>Чегото вспомнилось сегодня, решил запостить...


DH>>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal

DH>>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,
DH>>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.

ВН>Боюсь, что в си этого делать нельзя. Только в сиплюсплюс.


По-моему, по последнему стандарту С99 можно.
... << RSDN@Home 1.1.4 @@subversion >>
Re[3]: почему я предпочёл паскалю си
От: Privalov  
Дата: 06.01.05 09:53
Оценка: +5 :))) :))) :))) :))) :))) :))) :)
Здравствуйте, DEMON HOOD, Вы писали:

DH>мне было лень писять си++


Одному моему знакомому было лень произносить и писать "Фортран", он сократил название до "Форт"... Так что будь осторожен...

Прошу прощения за оффтоп.
Re[2]: почему я предпочёл паскалю си
От: Privalov  
Дата: 06.01.05 09:57
Оценка:
Здравствуйте, slegkapjan, Вы писали:

S>Borland C++ 3.1 -- это же классика!! Я до сих пор держу его и на работе и дома, просто чтоб был. Эх! Желтые буквы на синем фоне. Господа, я щас прослезюсь. Эхх!


И у меня. Если надо по-быстрому какую-нибудь идею проверить, то BC++ 3.1 самое оно...
Re[3]: почему я предпочёл паскалю си
От: ssm Россия  
Дата: 06.01.05 10:07
Оценка: +1
Здравствуйте, Privalov, Вы писали:

P>Если надо по-быстрому какую-нибудь идею проверить, то BC++ 3.1 самое оно...


а че там вообще проверить то можно? ни шаблонов, ни исключений...
Re[2]: почему я предпочёл паскалю си
От: AndrewJD США  
Дата: 06.01.05 10:20
Оценка: +2 -2
Здравствуйте, slegkapjan, Вы писали:

S>P.S. Товарищи, я вас просто умоляю, давайте не будем устраивать священных войн!

А сам даешь провакационные ответы без обоснований

S>Ну и замечательная экспрессивность Си, отсутствие всяких лишних и затрудняющих программирование фич,

А что затрудняет программирование в паскале? Только не будем про begin end

S>красивый синтаксис,

Весьма спорно, если речь идет о Си без плюсов. Но в принципе это дело вкуса


S>великолепные возможности по работу с железом...

Какие такие возможности есть в Си и нету в Borland Pasсal?
И какие вообще есть возможности по работе с железом у Си на уровне языка?
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[3]: почему я предпочёл паскалю си
От: slegkapjan  
Дата: 06.01.05 10:30
Оценка:
Началось... Опять двадцать пять...
Re: почему я предпочёл паскалю си
От: slegkapjan  
Дата: 06.01.05 10:38
Оценка: 2 (2) +1 :))) :))
Еще ИМХО из Стивенс хорошо сказал в книге "ТЕХНИКА ПРОГРАММИРОВАНИЯ НА ТУРБО СИ":
[сорри за повтор, по-моему я где-то на рсдн это уже постил, но просто очень мне нравится как он сказал...]

В данной книге вы столкнетесь с программами, написанными на
языке Си. Это замечательный язык, и хотя некоторым он не
нравится, но все же большинство программистов его любят. На Си вы
можете создавать программы, которые делают все, что вы пожелаете.
Нет другого такого языка, который бы так же стимулировал к
программированию. Создается впечатление, что остальные языки
программирования воздвигают искусственные препятствия для
творчества, а Си — нет. Использование этого языка позволяет
сократить затраты времени на создание работающих программ. Си
позволяет программировать быстро, эффективно и предсказуемо. Еще
одно преимущество Си заключается в том, что он позволяет
использовать все возможности вашей ЭВМ. Этот язык создан
программистом для использования другими программистами, чего о
других языках программирования сказать нельзя ............
.................................................................
.................................................................
...создан таким, чтобы менеджеры могли разбираться в написанных
этом языке программах; Бэйсик был создан для непрограммистов;
Фортран — для научных работников; Ада вообще был создан
прямо-таки правительственным комитетом; Пайлот создан для
учителей; Паскаль — для студентов; Лого — для детей; АПЛ — для
марсиан; Форт, Лисп и Пролог — специализированные языки. Один Си
— это язык для программистов.
Re[4]: почему я предпочёл паскалю си
От: yxiie Украина www.enkord.com
Дата: 06.01.05 11:16
Оценка: +1 :))
Здравствуйте, ssm, Вы писали:

ssm>а че там вообще проверить то можно? ни шаблонов, ни исключений...


шаблоны как раз есть.
... << RSDN@Home 1.1.3 stable >>
Re: почему я предпочёл паскалю си
От: Algorithmus Украина  
Дата: 06.01.05 11:16
Оценка: 1 (1) -1
Как все запущено! Опять разборки...

Каждый выбирает инструмент для своих задач. Кому-то и VB достаточно...

Но если уж на то пошло...
Мне Паскаль не понравился по многим причинам:
0. В компиляторе изначально не было оптимизатора.
1. Нет арифметики указателей (я вообще прослезился, когда увидел, как в паскале делают динамические массивы).
2. И вообще — реализация указателей очень негибкая.
3. Морока с приведением типа.
4. Нет объединений, перечислений, битовых полей...
5. Негибкие операторы (for, например).
6. Нет некоторых полезных операторов (тернарный, например)
6. Скудные возможности стандартных библиотек.
7. Присваивание := ненавижу!
И т.д. и т.п.

НО! Если нужно писать прикладные программы не критичные по скорости, не затрагивающие низкоуровневое программирование — Паскаль — очень даже неплохой выбор. В Delphi многие огрехи паскаля исправили, но далеко не все.
Re[2]: почему я предпочёл паскалю си
От: pavel_turbin  
Дата: 06.01.05 11:23
Оценка: :)
A>6. Нет некоторых полезных операторов (тернарный, например)
в Perl-e столько прикольных операторов, но мрак все равно полный.
Re[2]: почему я предпочёл паскалю си
От: DangerDen  
Дата: 06.01.05 11:23
Оценка:
Здравствуйте, Аноним, Вы писали:

ПОлностью согласен!

Когда я знал более менее паскаль, мне умные люди рассказывали как круто знать С и С++. Что его могут знать лишь избранные (я жил в маленьком городе и там таких не было ). И тогда я понял надо бросать Паскаль и Дельфи и рулить к Visual Studio (тогда я думал что это тоже что и С++) — то что там нельзя написать прогу мышкой доказывало мне силу С++ .
В итоге я перешел на С++, узнал что много где заблуждался, а С++ реально крут!
Re[5]: почему я предпочёл паскалю си
От: ssm Россия  
Дата: 06.01.05 11:24
Оценка:
Здравствуйте, yxiie, Вы писали:

Y>шаблоны как раз есть.


То что там есть, находится на таком уровне развития, что
Re[3]: почему я предпочёл паскалю си
От: Algorithmus Украина  
Дата: 06.01.05 11:27
Оценка:
Мрак полный, но для обработки строк ничего круче Perl я не знаю.
Тернарный оператор на мой взгляд — очень полезная вещь.
Re[2]: почему я предпочёл паскалю си
От: ssm Россия  
Дата: 06.01.05 11:34
Оценка: 4 (1) +2
Здравствуйте, Algorithmus, Вы писали:


A>Но если уж на то пошло...

A>Мне Паскаль не понравился по многим причинам:

а мне пофиг на чем писать, абы платили

A>0. В компиляторе изначально не было оптимизатора.


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

A>1. Нет арифметики указателей (я вообще прослезился, когда увидел, как в паскале делают динамические массивы).

A>2. И вообще — реализация указателей очень негибкая.

ну в Java, C# их вообще как таковых нет

A>3. Морока с приведением типа.


опять же Java, C, C#

A>4. Нет объединений, перечислений, битовых полей...


зато есть set (или это уже в дельфине?)

A>5. Негибкие операторы (for, например).

A>6. Нет некоторых полезных операторов (тернарный, например)

замени функциями

A>6. Скудные возможности стандартных библиотек.


для прикладника один паскалевский string чего значит!

A>7. Присваивание := ненавижу!


а такое любишь?

std::vector<boost::shared_ptr<MyObj<double> > >
                                           ^ ^ 
operator+(int)
           ^

и т.д. и т.п.
Re[3]: почему я предпочёл паскалю си
От: Algorithmus Украина  
Дата: 06.01.05 11:50
Оценка:
ssm>а мне пофиг на чем писать, абы платили

А мне и за С++ и за Delphi платят

ssm>зато компилятор был очень быстрый, что для машин того времени играло не последнюю роль


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

ssm>ну в Java, C# их вообще как таковых нет


А они там и не нужны. Это языки другого плана, которые компилятся в промежуточный код, и т.д. и т.п.
В Perl их тоже нет

ssm>опять же Java, C, C#


См. выше.

ssm>зато есть set (или это уже в дельфине?)


И в паскале тоже есть. Согласен — это то, чего С/С++ и по сей день не хватает. Хотя без них можно обойтись... но временами не очень приятно.

ssm>замени функциями


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

ssm>для прикладника один паскалевский string чего значит!


Ограниченный до 255 символов

ssm>а такое любишь?


ssm>
ssm>std::vector<boost::shared_ptr<MyObj<double> > >
ssm>                                           ^ ^ 
ssm>operator+(int)
ssm>           ^
ssm>

ssm>и т.д. и т.п.

Когда как
Re[4]: почему я предпочёл паскалю си
От: ssm Россия  
Дата: 06.01.05 11:58
Оценка:
Здравствуйте, Algorithmus, Вы писали:

A>А мне и за С++ и за Delphi платят


там где я сейчас живу, на дельфистов спрос нулевой


ssm>>ну в Java, C# их вообще как таковых нет


A>А они там и не нужны. Это языки другого плана, которые компилятся в промежуточный код, и т.д. и т.п.

A>В Perl их тоже нет

а тебе не призодила мысля, что и Pascal язык другого плана?


ssm>>замени функциями


A>Не вопрос, буду писать все руками и на ассемблере, чтобы все самому реализовывать.


ну а ты когда на C под дос писал, что тоже без ассемблера обходился?
Re[5]: почему я предпочёл паскалю си
От: Algorithmus Украина  
Дата: 06.01.05 12:19
Оценка:
Во-первых, давай без агресии и наездов, пусть даже небольших. Если тебе так сильно нравится паскаль, что я своим сообщением оскорбил твои убеждения, тогда извини.

ssm>а тебе не призодила мысля, что и Pascal язык другого плана?


Я и говорю, что для каждого класса задач есть "свой" язык программирования. Но так сложилось, что С и паскаль используются для решения похожих, а то и одинаковых задач. О том и разговор.
А под языком "другого плана" я имел в виду то что C# и Java не могут быть использованы в некоторых сферах, в которых C и Pascal с успехом применяются.

ssm>>>замени функциями

ssm>ну а ты когда на C под дос писал, что тоже без ассемблера обходился?

Вопрос не в том, что я обходился без АСМа (а без него я не обходился), а в том, что некоторые моменты программирования можно упростить, чтобы программер сам не изобретал велосипед, и не воротил своих заменителей уже готовым конструкциям.
Re[4]: почему я предпочёл паскалю си
От: Privalov  
Дата: 06.01.05 12:19
Оценка:
Здравствуйте, ssm, Вы писали:

ssm>а че там вообще проверить то можно? ни шаблонов, ни исключений...


Что-то подсказывает мне, что в программе, кроме шаблонов и исключений, есть еще кое-что.

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

Кстати, в 3.1 шаблоны как раз и появились. Говорят, они были еще в 3.0, но прошла эта версия мимо.
Re[6]: почему я предпочёл паскалю си
От: ssm Россия  
Дата: 06.01.05 12:31
Оценка:
Здравствуйте, Algorithmus, Вы писали:

A>Во-первых, давай без агресии и наездов, пусть даже небольших.


непонятно, что было принято тобой за наезд

A>Если тебе так сильно нравится паскаль, что я своим сообщением оскорбил твои убеждения, тогда извини.


мне нравится рыбалка и пиво с таранкой, а если есть возможность выбора между дельфином и C++, то выбирать я буду не по предпочтению, а в соответствии с поставленной задачей и рациональностью применения того или иного инструмента применительно к решаемой задаче. можно и на XSLT положить и сделать все при помощи XML парсера, мы ведь не ищем легких путей! правда?

ssm>>а тебе не призодила мысля, что и Pascal язык другого плана?


A>Я и говорю, что для каждого класса задач есть "свой" язык программирования. Но так сложилось, что С и паскаль используются для решения похожих, а то и одинаковых задач. О том и разговор.

A>А под языком "другого плана" я имел в виду то что C# и Java не могут быть использованы в некоторых сферах, в которых C и Pascal с успехом применяются.


ладно давай завязывать, с меня таранка, с тебя пиво
Re[5]: почему я предпочёл паскалю си
От: ssm Россия  
Дата: 06.01.05 12:34
Оценка: +3
Здравствуйте, Privalov, Вы писали:


P>Что-то подсказывает мне, что в программе, кроме шаблонов и исключений, есть еще кое-что.


в современном C++

P>И потом, путь от идеи до реализации довольно долгий. Иногда быстрой прикидки "на коленке" бывает достаточно, чтобы убедиться в правильности /ошибочности выбранного направления.


P>Кстати, в 3.1 шаблоны как раз и появились. Говорят, они были еще в 3.0, но прошла эта версия мимо.


знаешь, давай не будем грешить, и называть, то что было в 3.1 шаблонами
Re[7]: почему я предпочёл паскалю си
От: Algorithmus Украина  
Дата: 06.01.05 12:50
Оценка:
>можно и на XSLT положить и сделать все при помощи XML парсера, мы ведь не ищем легких путей! правда?

Ага... Недавно учавствовал в обсуждении проекта, который взялись делать программеры, недавно закончившие читать книгу по С++
Вот там и было что-то типа "Легких путей не ищем"... Ничё, сократили раза в 4

ssm>ладно давай завязывать, с меня таранка, с тебя пиво


Не вопрос
Re[2]: почему я предпочёл паскалю си
От: AndrewJD США  
Дата: 06.01.05 13:25
Оценка:
Здравствуйте, Algorithmus, Вы писали:

A>Каждый выбирает инструмент для своих задач. Кому-то и VB достаточно...


A>Но если уж на то пошло...

A>Мне Паскаль не понравился по многим причинам:
A>0. В компиляторе изначально не было оптимизатора.
AFAIK в то время у сишных компилеров тоже не было оптимизаторов. А компилер очень быстрый

A>1. Нет арифметики указателей (я вообще прослезился, когда увидел, как в паскале делают динамические массивы).

А куда она делась?

A>2. И вообще — реализация указателей очень негибкая.

Не дает отстрелить ногу по самую шею. Но в принципе все те же возможности что и в си

A>3. Морока с приведением типа.

Это какая?

A>4. Нет объединений, перечислений, битовых полей...

есть и обьединения и перечисления и даже множества

A>5. Негибкие операторы (for, например).

A>6. Нет некоторых полезных операторов (тернарный, например)

A>6. Скудные возможности стандартных библиотек.

Вполне нормальный набор. Единственное что математики очень мало было

A>7. Присваивание := ненавижу!

"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[3]: почему я предпочёл паскалю си
От: Algorithmus Украина  
Дата: 06.01.05 13:48
Оценка:
С тобой, что ли еще поспорить...

AJD>AFAIK в то время у сишных компилеров тоже не было оптимизаторов. А компилер очень быстрый


Для меня "то время" — это время, когда я писал под ДОС (1995-1998). А в то время у всех популярных С компиляторов оптимизаторы были.

AJD> А куда она делась?


А ты хочешь сказать, что в Паскале можно свободно писать A := B + 2, где A и B — указатели?
Интересно...
А если ты имеешь в виду Inc(Longint(A)), то это никакая не арифметика указателей, а один из возможных выходов из ситуации.

AJD>Не дает отстрелить ногу по самую шею. Но в принципе все те же возможности что и в си


Да? Чтобы объявить указатель на указатель, сколько кода написать нужно? А как тебе работа с
динамическим массивом?

A>>3. Морока с приведением типа.


Нет автоматического приведения. С одной стороны, конечно, хорошо...
Но при работе с символами и их кодами, например, постоянные Ord, Chr и т.д. меня раздражают.

AJD>есть и обьединения и перечисления и даже множества


Открой глаза незнающему, пожалуйста. Как в паскале объявить объединение? Перечисление?
Множество и сам знаю как.

AJD>Вполне нормальный набор. Единственное что математики очень мало было


Смотря для каких задач, опять же...

AJD>


Постоянно нужно лезть к двоеточию... Это СУГУБО СУБЪЕКТИВНАЯ мысль. Кому-то == не нравится в сравнении...
Re[4]: почему я предпочёл паскалю си
От: AndrewJD США  
Дата: 06.01.05 14:25
Оценка:
Здравствуйте, Algorithmus, Вы писали:

A>Для меня "то время" — это время, когда я писал под ДОС (1995-1998). А в то время у всех популярных С компиляторов оптимизаторы были.


Последний паскаль от борланд был в 92 году. А в 98 был уже VS6.0 c весьма навороченым оптимизатором

A>А ты хочешь сказать, что в Паскале можно свободно писать A := B + 2, где A и B — указатели?

Ну в виде В + 2 нет
A>Интересно...
A>А если ты имеешь в виду Inc(Longint(A)), то это никакая не арифметика указателей, а один из возможных выходов из ситуации.

A>Открой глаза незнающему, пожалуйста. Как в паскале объявить объединение? Перечисление?

A>Множество и сам знаю как.


type
  Class  = (Num, Dat, Str); { перечисление }
  Date   = record
     D, M, Y: Integer;
  end;
  Facts = record
    Name: string[10];
    case Kind: Class of  { обьединение }
      Num: (N: real);
      Dat: (D: Date);
      Str: (S: string);
  end;

type WordPtr = ^word;

var
   p : WordPtr;
Begin
     p := nil;
     Inc(p, 10); { адресная арифметика  int* p = (int*)0 + 10; }
End.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[5]: почему я предпочёл паскалю си
От: Algorithmus Украина  
Дата: 06.01.05 14:52
Оценка:
AJD>Последний паскаль от борланд был в 92 году. А в 98 был уже VS6.0 c весьма навороченым оптимизатором

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

AJD>Ну в виде В + 2 нет


А как насчет вычетания указателя из указателя?
И, кстати (я конечно могу ошибаться, но если что, поправь) — при Inc(P, 10) адрес
увеличивается на 10 байт, а не на 10 * sizeof(word).
Достаточно небезопасный вариант.

AJD>
AJD>type
AJD>  Class  = (Num, Dat, Str); { перечисление }
AJD>  Date   = record
AJD>     D, M, Y: Integer;
AJD>  end;
AJD>  Facts = record
AJD>    Name: string[10];
AJD>    case Kind: Class of  { обьединение }
AJD>      Num: (N: real);
AJD>      Dat: (D: Date);
AJD>      Str: (S: string);
AJD>  end;

AJD>type WordPtr = ^word;

AJD>var
AJD>   p : WordPtr;
AJD>Begin
AJD>     p := nil;
AJD>     Inc(p, 10); { адресная арифметика  int* p = (int*)0 + 10; }
AJD>End.
AJD>


С перечислением согласен, погорячился.
Но под объединением похоже, мы разные вещи понимаем.

В понимании С объединение — структура, у которой все члены начинаются с одного и того же адреса памяти. Таким образом можно, напрмер, совместить массив char и double.
После чего записав в член типа double вещественное число, из массива его можно побайтово прочитать.
А то, что привел ты — это структура с вариантами (не помню, как она "по научному" назывется).
Re: почему я предпочёл паскалю си
От: adr Украина  
Дата: 06.01.05 15:22
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH>Чегото вспомнилось сегодня, решил запостить...


DH>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal

DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,
DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.

я просто и то и то знал хреново, поэтому спросил у старших, чего полезнее на будущее? мне сказали, что С, вот я и поверил..., прошло время (год) и я опять поверил, что Java — rulezz . потом понял сколько нормальная Java IDE гребёт памяти и понял, что PII-233, 32MB SDRAM — suxx. и на таком suxx только C++ & ASM есть rulezz, а потом пришла память и возродилась Java... так и стали друхно жить ASM, C, C++, Java
Re[6]: почему я предпочёл паскалю си
От: AndrewJD США  
Дата: 06.01.05 15:24
Оценка: +1
Здравствуйте, Algorithmus, Вы писали:

A>Это я знаю... Но речь же шла не о том, когда появились навороченные компиляторы.

Речь о том, что для своего времени это был продвинутый компилятор. И пункт об отсутствии оптимизатора не может приниматься во внимание

A>И, кстати (я конечно могу ошибаться, но если что, поправь) — при Inc(P, 10) адрес

A>увеличивается на 10 байт, а не на 10 * sizeof(word).
A>Достаточно небезопасный вариант.
прибаляется на sizeof(word)


A>С перечислением согласен, погорячился.

A>Но под объединением похоже, мы разные вещи понимаем.

A>В понимании С объединение — структура, у которой все члены начинаются с одного и того же адреса памяти. Таким образом можно, напрмер, совместить массив char и double.

A>После чего записав в член типа double вещественное число, из массива его можно побайтово прочитать.
A>А то, что привел ты — это структура с вариантами (не помню, как она "по научному" назывется).
Структура с вариантами == union в сях
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[7]: почему я предпочёл паскалю си
От: Algorithmus Украина  
Дата: 06.01.05 15:47
Оценка:
Ладно, будем завязывать... Каждый выбирает себе инструмент в зависимости от задач и личных предпочтений... Как я и говорил, Delphi я тоже юзаю и очень часто. Но только для интерфейсных приложений, которые не содержат сложной логики.

AJD>Речь о том, что для своего времени это был продвинутый компилятор. И пункт об отсутствии оптимизатора не может приниматься во внимание


Еще и как может, потому что даже Turbo C++ 2.0 имел встроенный оптимизатор, который на многих программах дает преимущество перед аналогичными паскалевскими. Но это в прошлом...

AJD>прибаляется на sizeof(word)


Окей. Буду знать (хотя предварительно проверю )

AJD>Структура с вариантами == union в сях


Интересно, интересно... Будем смотреть... Пока не верю
Re: почему я предпочёл паскалю си
От: ScorpZ Украина  
Дата: 06.01.05 15:57
Оценка: +2 :)
Здравствуйте, DEMON HOOD, Вы писали:

DH>Чегото вспомнилось сегодня, решил запостить...


DH>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal

DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,
DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.

В любом случае для многих людей эта возможность объявления переменных является не плюсом а минусом .
Re: почему я предпочёл паскалю си
От: ScorpZ Украина  
Дата: 06.01.05 16:03
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH>Чегото вспомнилось сегодня, решил запостить...


DH>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal

DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,
DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.

А как вам такая фича в сях , на мой взгляд одно из главных достоинств — как переопределение функция ?
Re[8]: почему я предпочёл паскалю си
От: AndrewJD США  
Дата: 06.01.05 17:26
Оценка:
Здравствуйте, Algorithmus, Вы писали:

A>Ладно, будем завязывать... Каждый выбирает себе инструмент в зависимости от задач и личных предпочтений... Как я и говорил, Delphi я тоже юзаю и очень часто. Но только для интерфейсных приложений, которые не содержат сложной логики.


Ага, пора.

AJD>Структура с вариантами == union в сях


A>Интересно, интересно... Будем смотреть... Пока не верю

Проверь
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[6]: почему я предпочёл паскалю си
От: yxiie Украина www.enkord.com
Дата: 06.01.05 20:26
Оценка:
Здравствуйте, ssm, Вы писали:

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


Y>>шаблоны как раз есть.


ssm>То что там есть, находится на таком уровне развития, что


ну это уже такое дело...
... << RSDN@Home 1.1.3 stable >>
Re: почему я предпочёл паскалю си
От: Larev  
Дата: 07.01.05 00:45
Оценка: +1 -1
Здравствуйте, DEMON HOOD, Вы писали:

DH>Чегото вспомнилось сегодня, решил запостить...


DH>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal

DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,
DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.

Это конечно супер, но злоупотреблять этим не стоит. Иной раз хорошо объявить переменную внутри блока, но чрезмерный разброс объявлений переменных затрудняет чтение кода, да и это не очень хороший тон. Желательно объявления переменных группировать "кучками" в логически правильных местах.
Re[6]: почему я предпочёл паскалю си
От: rockandroll Казахстан  
Дата: 07.01.05 08:37
Оценка:
Здравствуйте, Algorithmus, Вы писали:

A>В понимании С объединение — структура, у которой все члены начинаются с одного и того же адреса памяти. Таким образом можно, напрмер, совместить массив char и double.

A>После чего записав в член типа double вещественное число, из массива его можно побайтово прочитать.
A>А то, что привел ты — это структура с вариантами (не помню, как она "по научному" назывется).

Давно на паскале не писал, так что могу ошибаться:

var d:double;
var a:array [0..7] of byte absolute d;
... << RSDN@Home 1.1.4 >>
Re[3]: почему я предпочёл паскалю си
От: yxiie Украина www.enkord.com
Дата: 07.01.05 09:47
Оценка:
Здравствуйте, pavel_turbin, Вы писали:

A>>6. Нет некоторых полезных операторов (тернарный, например)

_>в Perl-e столько прикольных операторов, но мрак все равно полный.

перл рулит , ну что тут можно еще сказать
... << RSDN@Home 1.1.3 stable >>
Re[2]: почему я предпочёл паскалю си
От: DEMON HOOD  
Дата: 07.01.05 16:25
Оценка:
Здравствуйте, Larev, Вы писали:

L>Это конечно супер, но злоупотреблять этим не стоит.

for (int x=0;x<3;x++){}
... <<silent Rsdn@Home 1.1.4 beta 1 Windows XP 5.1.2600.0 >>
Re[2]: почему я предпочёл паскалю си
От: moudrick Россия http://community.moudrick.net/
Дата: 07.01.05 18:47
Оценка: :)
Здравствуйте, ScorpZ, Вы писали:

SZ>А как вам такая фича в сях , на мой взгляд одно из главных достоинств — как переопределение функция ?


Что это такое? Объявление в разных файлах разных функций с одним именем?
Если да, то у меня ой как есть что сказать по этому поводу.
Re[2]: почему я предпочёл паскалю си
От: Eugene Kilachkoff Россия  
Дата: 07.01.05 18:55
Оценка:
Здравствуйте, slegkapjan, Вы писали:
DH>>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,
S>Borland C++ 3.1 -- это же классика!! Я до сих пор держу его и на работе и дома, просто чтоб был. Эх! Желтые буквы на синем фоне. Господа, я щас прослезюсь. Эхх!
Возьми rhide/djgpp. Ну или emacs покрась
... << RSDN@Home 1.1.3 stable >>
Re: почему я предпочёл паскалю си
От: Astaroth Россия  
Дата: 07.01.05 18:59
Оценка: +1 -1
Здравствуйте, DEMON HOOD, Вы писали:

DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.


Нету в С такой возможности. Она в С++ есть.
А тем, кто путает С и С++ — руки отрывать.
WinAmp играет: (умолк пока)
http://livejournal.com/users/breqwas
Re[3]: почему я предпочёл паскалю си
От: Astaroth Россия  
Дата: 07.01.05 19:00
Оценка: 2 (2)
Здравствуйте, Dr.Gigabit, Вы писали:

DG>По-моему, по последнему стандарту С99 можно.


Можно в начале блока, а не в любом месте.
WinAmp играет: (умолк пока)
http://livejournal.com/users/breqwas
Re[2]: почему я предпочёл паскалю си
От: DJ KARIES Россия  
Дата: 10.01.05 16:32
Оценка: :)
Здравствуйте, Astaroth, Вы писали:

A>Нету в С такой возможности. Она в С++ есть.

A>А тем, кто путает С и С++ — руки отрывать.
А тем кто паскаля с дельфями путает, не только руки...
... << http://dkdens.narod.ru :: http://retroforth.org >>
Re: почему я предпочёл паскалю си
От: GlebZ Россия  
Дата: 10.01.05 17:42
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH>Чегото вспомнилось сегодня, решил запостить...


DH>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal

DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,
DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.
Нету там такой фичи.
В свое время, я думал перейти с турбо-паскаля на си. Начал сравнивать. В результате оказалось, что Турбо-Паскаль является С с синтаксисом Паскаля. По функциональности, он более родственен С чем родному Паскалю. Разница была только в синтаксисе.
Потом, когда начал переходить на ООП, сравнил функциональность С++ и Паскаля. Небо и земля. Это определило выбор. После начала работы с Windows, к паскалю не возвращался. До тех пор, пока не начал плодить программки на Delphi. Но С++ к тому времени уже стал действительно моим родным языком. Если можно выполнить работу на С++, долго не думаю. А С# уже порядком поднаедает.

С уважением, Gleb.
Re[3]: почему я предпочёл паскалю си
От: GlebZ Россия  
Дата: 10.01.05 17:45
Оценка: 4 (2)
Здравствуйте, DEMON HOOD, Вы писали:

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


L>>Это конечно супер, но злоупотреблять этим не стоит.

DH>
DH>for (int x=0;x<3;x++){}
DH>

Еще не надо забывать, что это время жизни объекта. Что есть вери гуд. И чего нет в пасквиле.

С уважением, Gleb.
Re[5]: почему я предпочёл паскалю си
От: Шахтер Интернет  
Дата: 11.01.05 01:30
Оценка:
Здравствуйте, Privalov, Вы писали:

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


ssm>>а че там вообще проверить то можно? ни шаблонов, ни исключений...


P>Что-то подсказывает мне, что в программе, кроме шаблонов и исключений, есть еще кое-что.


P>И потом, путь от идеи до реализации довольно долгий. Иногда быстрой прикидки "на коленке" бывает достаточно, чтобы убедиться в правильности /ошибочности выбранного направления.


P>Кстати, в 3.1 шаблоны как раз и появились. Говорят, они были еще в 3.0, но прошла эта версия мимо.


Были.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[6]: почему я предпочёл паскалю си
От: Шахтер Интернет  
Дата: 11.01.05 01:30
Оценка:
Здравствуйте, ssm, Вы писали:

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



P>>Что-то подсказывает мне, что в программе, кроме шаблонов и исключений, есть еще кое-что.


ssm>в современном C++


P>>И потом, путь от идеи до реализации довольно долгий. Иногда быстрой прикидки "на коленке" бывает достаточно, чтобы убедиться в правильности /ошибочности выбранного направления.


P>>Кстати, в 3.1 шаблоны как раз и появились. Говорят, они были еще в 3.0, но прошла эта версия мимо.


ssm>знаешь, давай не будем грешить, и называть, то что было в 3.1 шаблонами


Шаблоны, шаблоны. Без дураков. Ты, кстати, вспомни, в каком году вышел BC++ 3.0, в каком был принят ныне действующий стандарт, а в каком был сделан первый компилятор, реализующий частичную специализацию шаблонов.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re: почему я предпочёл паскалю си
От: F1aSh  
Дата: 11.01.05 15:02
Оценка:
А мне нравится то что в С++ все всегда "под рукой". А также то что разработчики уже написали львиную долю самых нужных функций самыми наилучшими и быстрыми способами. Программы работают быстрей и велосипед не нада изобретать. Нафига мне кусок кода для поиска какойго либо вхождения придумывать, если есть функция find — нада тока посмотреть в какой библиотеке ее прототип находится...

Срр решает!
Re: А знаете ли Вы что...
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 11.01.05 15:27
Оценка: -1
Современной версией языка Pascal (1970 год) является язык Component Pascal (1997 год)





Отличия Компонентного Паскаля от Паскаля

Исключенные средства
• Типы-диапазоны

Используйте один из стандартных целых типов.

• Перечислительные типы

Используйте вместо них целые константы.

• Произвольные диапазоны для массивов

Массивы теперь всегда определены над целым диапазоном 0..max-1.

Пример

A = ARRAY 16 OF INTEGER (* разрешены индексы из диапазона 0..15 *)

• Нет общих множеств

Тип SET теперь означает набор целых чисел, который может включать элементы 0..31.

• Нет явного оператора DISPOSE

Неиспользуемая более память автоматически собирается сборщиком мусора. Вместо DISPOSE, просто присвойте переменной значение NIL.

• Нет вариантных записей

Используйте (расширенное) переопределение записей.

• Нет упакованных структур

Используйте типы SHORTCHAR или BYTE для значений, умещающихся в байт.

• Нет GOTO

• Нет стандартных функций PRED и SUCC

Используйте DEC и INC для целых значений.

• Нет встроенных средств ввода/вывода

Нет файловых типов. Ввод/вывод обеспечивается библиотечными процедурами.

Измененные средства
• Стандартная процедура ENTIER вместо ROUND

• Синтаксис для констант типа REAL

3.0E+4, но не 3.0e+4

• Синтаксис для объявлений указательных типов

P = POINTER TO R
вместо
P = ^R

• Синтаксис для оператора CASE

"|" вместо ";" в качестве разделителя случаев.
Предложение ELSE.

Пример

CASE i * 3 — 1 OF
0: StdLog.String("нуль")
| 1..9: StdLog.String("от единицы до девяти")
| 10, 20: StdLog.String("десять или двадцать")
ELSE StdLog.String("что-то еще")
END

• Имя процедуры должно быть повторено

Пример

PROCEDURE DrawDot (x, y: INTEGER);
BEGIN
END DrawDot;

• Большие и малые буквы различаются

Пример: "proc" не то же самое, что "Proc".

• Синтаксис литерных цепочек

Литерные цепочки-константы заключаются между парой " или между парой '. У одной цепочки не может быть одновременно одиночных и двойных кавычек. Литерные цепочки-константы единичной длины могут присваиваться литерным (character) переменным.

Пример

"That's great" 'Вывести "общий привет" на экран'

ch := "x"

ch := 'x'

• Комментарии

Комментарии заключаются между (* и *) и могут быть вложены.

• Скобки для множеств

Константы-множества задаются между { и } вместо [ и ].

Пример {0..2, 4, j..2 * k}

• Синтаксис функций

Используйте ключевое слово PROCEDURE также и для функций вместо FUNCTION.

Процедуры, возвращающие значение, всегда должны иметь (возможно пустой) список параметров в своих объявлениях и в вызовах.

Результат функции возвращается явно оператором RETURN вместо присваивания имени функции.

Пример

PROCEDURE Fun (): INTEGER;
BEGIN
RETURN 5
END Fun;

вместо

FUNCTION Fun: INTEGER;
BEGIN
Fun := 5
END;

n := Fun() вместо n := Fun

• Объявления

Последовательность объявлений теперь

{ ConstDecl | TypeDecl | VarDecl} {ProcDecl | ForwardDecl}

вместо

[ConstDecl] [TypeDecl] [VarDecl] {ProcDecl}.

Упреждающие (Forward) объявления необходимы, если процедура используется до ее определения.

Пример

PROCEDURE ^ Proc;

вместо

PROCEDURE Proc; FORWARD;

• Процедурные типы

Процедуры могут быть не только переданы в качестве параметров, но и присваиваться переменным процедурных типов.

Пример

TYPE P = PROCEDURE (x, y: INTEGER);

VAR v: P;

v := DrawDot; (* присваивание *)

v(3, 5); (* вызов DrawDot(3, 5) *)

• Явные END вместо составных операторов

BEGIN может появляться только перед последовательностью операторов, но не внутри ее. IF, WHILE, и LOOP всегда заканчиваются ключевым словом END.

• Оператор WITH

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

См. детали в описании языка.

• ELSIF

Операторы IF могут иметь несколько ветвей.

Пример

IF name = "top" THEN
StdLog.Int(0)
ELSIF name = "bottom" THEN
StdLog.Int(1)
ELSIF name = " charm" THEN
StdLog.Int(2)
ELSIF name = "beauty" THEN
StdLog.Int(3)
ELSE
StdLog.String("strange")
END

• BY вместо только DOWNTO в FOR

Циклы FOR могут использовать любое константное значение в качестве приращения (положительного или отрицательного).

Пример

FOR i := 15 TO 0 BY -1 DO StdLog.Int(i, 0) END

• Булевы выражения используют "сокращенное" вычисление

Вычисление булева выражения прекращается, как только его результат определен.

Пример

Следующее выражение не вызывает ошибки при выполнении, когда p = NIL:

IF (p # NIL) & (p.name = "quark") THEN

• Константные выражения

В объявлениях констант допустимы не только буквальные константы, но и константные выражения.

Пример

CONST
zero = ORD("0");
one = zero + 1;

• Разные операции

# используется вместо <> для проверки на неравенство.

& используется вместо AND для логической конъюнкции.

~ используется вместо NOT для логического отрицания.

• Явное преобразование к меньшему типу с помощью SHORT

Включение типов для числовых типов позволяет присваивать значения меньшего типа переменной большего типа. Присваивание в обратном направлении должно использовать стандартную процедуру SHORT.

Пример

int := shortint;

shortint := SHORT(int)

Новые средства
• Шестнадцатеричные числа и литеры

Пример

100H (* десятичное 256 *)

0DX (* возврат каретки *)

• Дополнительные числовые типы

Добавлены типы LONGINT, SHORTINT, BYTE, SHORTREAL.

• Симметрическая разность множеств

Множества могут вычитаться.

• Новые стандартные процедуры

Добавлены новые стандартные процедуры INC, DEC, INCL, EXCL, SIZE, ASH, HALT, ASSERT, LEN, LSH, MAX, MIN, BITS, CAP, ENTIER, LONG и SHORT.

• LOOP с EXIT

Имеется новый оператор цикла с явным операторов выхода. См. детали в сообщении о языке.

• ARRAY OF CHAR могут сравниваться

Литертные массивы могут сравниваться с помощью операций =, #, <, >, <= и >=.

• Открытые массивы, многомерные массивы

Можно определять массивы, не указывая их размера, возможно, с несколькими измерениями.

Пример

VAR a: POINTER TO ARRAY OF CHAR;

NEW(a, 16)

PROCEDURE ScalarProduct (a, b: ARRAY OF REAL; VAR c: ARRAY OF REAL);

TYPE Matrix = ARRAY OF ARRAY OF REAL;

PROCEDURE VectorProduct (a, b: ARRAY OF REAL; VAR c: Matrix);

• Разыменование указателей не обязательно

Операция разыменования ^ может быть опущена.

Пример

root.next.value := 5

вместо

root^.next^.value := 5

• Модули

Модули суть единицы компиляции, упрятывания информации, а также загрузки. Упрятывание информации — одна из главных черт объектно-ориентированного программирования. Возможны разные уровни упрятывания информации: полное упрятывание, экспорт только для чтения/реализации, полный экспорт.

См. детали в сообщении о языке.

• Расширенное переопределение типов

Типы записей (указательные типы) могут переопределяться, обеспечивая таким образом полиморфизм. Полиморфизм — одно из главных средств объектно-ориентированного программирования.

• Методы

Процедуры могут быть связаны с типами записей (указательными типами), таким образом обеспечивая позднее связывание. Позднее связывание является одним из главных средств объектно-ориентированного программирования. Такие процедуры еще называются методами.

• Операция с цепочками

Литерная цепочка, содержащаяся в литерном массиве, может быть выбрана посредством селектора $.

• Атрибуты записей

По умолчанию записи не могут быть переопределены (are non-extensible), но могут помечены как EXTENSIBLE, ABSTRACT или LIMITED.

• Атрибуты методов

Методы не могут быть переопределены по умолчанию, но могут быть помечены как EXTENSIBLE, ABSTRACT или EMTPY. Вновь вводимые методы должны быть помечены как NEW.

Источник:

http://www.inr.ac.ru/~info21/cpascal/otliqija_cp_ot_pascal.htm
Re[2]: А знаете ли Вы что...
От: iGorash Россия http://therebel.no-ip.org
Дата: 11.01.05 16:30
Оценка: -1
> Современной версией языка Pascal (1970 год) является язык Component Pascal (1997 год)
>
> Отличия Компонентного Паскаля от Паскаля
> [skipped]

ИМХО, какую-то лажу сделали.
Все более или менее полезные и хорошие мелочи, котрых не хватает в С/С++ убрали.
Posted via RSDN NNTP Server 1.9
Re[2]: А знаете ли Вы что...
От: Кодёнок  
Дата: 12.01.05 06:12
Оценка:
СГ>Современной версией языка Pascal (1970 год) является язык Component Pascal (1997 год)

Получилось черт знает что. Увы Лучше бы добавили шаблоны, удалили interface/implementation, и forward — и язык бы преобразился.
Re[2]: почему я предпочёл паскалю си
От: DJ KARIES Россия  
Дата: 12.01.05 07:59
Оценка: 2 (1) -1 :))) :)
Здравствуйте, F1aSh, Вы писали:

FS>А мне нравится то что в С++ все всегда "под рукой". А также то что разработчики уже написали львиную долю самых нужных функций самыми наилучшими и быстрыми способами. Программы работают быстрей и велосипед не нада изобретать. Нафига мне кусок кода для поиска какойго либо вхождения придумывать, если есть функция find — нада тока посмотреть в какой библиотеке ее прототип находится...


FS>Срр решает!


Вот.
А то, блин, хают дельфистов, типа "без нужного компонента программу не решишь".
Так шо вот очередной такой "Кнопкокидатель"!

Мы ведь, настоящие ( ) прогрммеры сами всё писать любим.
Всё, от функции поиска синуса до цикла сообщений отрисовки _стандартных_ виндовых контролов.
Пусть глючно повторим уже написанное до нас, но в этом наша сила!
На платят за то, чтобы писать много собственнонаписанного неотлаженного кода. Чем больше строчик напишем, тем больше наши яйца.
А какой кайф это всё ещё и отЛаживать в отладчике. Это вам не отлаженные контролы кидать на формочки и не отлаженные стандартные функции вызывать. Ведь крутее самописной неотлаженной лажи быть не может!
... << http://dkdens.narod.ru :: http://retroforth.org >>
Re[3]: А знаете ли Вы что...
От: DJ KARIES Россия  
Дата: 12.01.05 07:59
Оценка:
Здравствуйте, Кодёнок, Вы писали:


СГ>>Современной версией языка Pascal (1970 год) является язык Component Pascal (1997 год)


Кё>Получилось черт знает что. Увы Лучше бы добавили шаблоны, удалили interface/implementation, и forward — и язык бы преобразился.


Ага без interface/implementation вышла такая же лажа, как с хидерами, тормозящими процесс и портящими инкапсуляцию.
Кто тебе мишает также включать сишные хидеры в дельфях/паскале?
{$i 'MyHeader.h'}
{$include 'MyHeader2.h'}

Напиши эти две строчки и будет те счастье.
... << http://dkdens.narod.ru :: http://retroforth.org >>
Re[3]: А знаете ли Вы что...
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 12.01.05 08:19
Оценка:
Здравствуйте, Кодёнок, Вы писали:


СГ>>Современной версией языка Pascal (1970 год) является язык Component Pascal (1997 год)


Кё>Получилось черт знает что. Увы


К чему конкретно у Вас есть претензии?

Кё> Лучше бы добавили шаблоны, удалили interface/implementation, и forward — и язык бы преобразился.


В языке Pascal (1970) ключевых слов interface/implementation НЕ БЫЛО.
Они были в языках Turbo Pascal, Object Pascal, Free Pascal, Delphi,...- которые к Никлаусу Вирту никакого отношения не имеют.

Кё> ...и forward — и язык бы преобразился.


Вы, видимо, не внимательно читали, forward в языке Component Pascal отсутсвует.
Re[3]: А знаете ли Вы что...
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 12.01.05 08:20
Оценка:
Здравствуйте, iGorash, Вы писали:

>> Современной версией языка Pascal (1970 год) является язык Component Pascal (1997 год)

>>
>> Отличия Компонентного Паскаля от Паскаля
>> [skipped]

G>ИМХО, какую-то лажу сделали.

G>Все более или менее полезные и хорошие мелочи, котрых не хватает в С/С++ убрали.

Какие конкретно у Вас есть претензии?
Re[3]: А знаете ли Вы что...
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 12.01.05 08:35
Оценка: -1
Здравствуйте, Кодёнок, Вы писали:


СГ>>Современной версией языка Pascal (1970 год) является язык Component Pascal (1997 год)


Кё> Лучше бы добавили шаблоны



Pascal ->- Modula ->- Modula 2 ->- Oberon ->- Oberon 2 ->- Component Pascal

Начиная с Modula эти языки являются модульными. Шаблоны в модульных языках практического смысла не имеют. Вот, например, в не модульном языке С++ шаблоны имеют практический смысл потому что можно один раз написать шаблон в одном текстовом файле, а потом инклюдить этот текстовый файл в другие текстовые файлы исходного кода программы и многократно использовать этот шаблон. В модульных языках программирования отсутсвует само понятие инклюда, там используется импорт (уже скомпилированных — бинарных) модулей, стало быть шаблоны, если бы они были, пришлось бы писать в каждом модуле заново — отсюда и исчезновение практического смысла. Модули и Шаблоны взаимосключают практический смысл существования друг друга, поэтому язык либо модульный, либо "шаблонный", но ни то и другое одновременно. Однако, вместо шаблонов в модульных языках можно применять так называемые generics — они, конечно, не идентичны templates, но все же могут быть полезны.
Re[4]: А знаете ли Вы что...
От: Кодёнок  
Дата: 12.01.05 08:41
Оценка:
СГ>>>Современной версией языка Pascal (1970 год) является язык Component Pascal (1997 год)

Кё>>Получилось черт знает что. Увы Лучше бы добавили шаблоны, удалили interface/implementation, и forward — и язык бы преобразился.


DK>Ага без interface/implementation вышла такая же лажа, как с хидерами, тормозящими процесс и портящими инкапсуляцию.

DK>Кто тебе мишает также включать сишные хидеры в дельфях/паскале?
DK>
DK>{$i 'MyHeader.h'}
DK>{$include 'MyHeader2.h'}
DK>

DK>Напиши эти две строчки и будет те счастье.

interface в Borland Pascal 100% инкапсуляцию тоже не обеспечивает. И зачем оно? Напусти на исходник простой процессор, и он выдаст вам .int — файл, где есть действительно только интерфейсная часть. В компиляции такой файл все равно не участвует. А вот дублирование заголовков функций в interface и implementation сильно портит жизнь. Поменял определение — ищи в большом файле реализацию. Приходилось мне поддерживать и дорабатывать код на Delphi, так что я очень злой на эту фигню

Модуль все равно целиком в ОДНОМ файле. И если файл модифицируется, он целиком перекомпилируется. Что тут меняется? Зато удобство — очень большое. А скрытие ненужного из интерфейса модуля можно сделать директивами вроде private или hidden.
Re[4]: А знаете ли Вы что...
От: Cyberax Марс  
Дата: 12.01.05 08:43
Оценка:
Сергей Губанов пишет:

> СГ>>Современной версией языка *Pascal (1970 год)* является язык

> *Component Pascal (1997 год)*
> Кё> Лучше бы добавили шаблоны
> Pascal ->- Modula ->- Modula 2 ->- Oberon ->- Oberon 2 ->- Component
> Pascal
> Начиная с Modula эти языки являются модульными. Шаблоны в модульных
> языках практического смысла не имеют. Вот, например, в не модульном
> языке С++

Да???? Это С++ с его механизмом раздельной компиляции — не модульный
язык????

И почему в "модульных" языках бессмысленны шаблоны?

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[4]: А знаете ли Вы что...
От: Кодёнок  
Дата: 12.01.05 08:59
Оценка:
СГ>>>Современной версией языка Pascal (1970 год) является язык Component Pascal (1997 год)

СГ>К чему конкретно у Вас есть претензии?


Хочу удобный синтаксис и обобщенное программирование

Кё>> Лучше бы добавили шаблоны, удалили interface/implementation, и forward — и язык бы преобразился.




СГ>Вы, видимо, не внимательно читали, forward в языке Component Pascal отсутсвует.


Упреждающие (Forward) объявления необходимы, если процедура используется до ее определения.

Re[5]: А знаете ли Вы что...
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 12.01.05 09:16
Оценка:
Здравствуйте, Кодёнок, Вы писали:


Кё> Хочу удобный синтаксис и обобщенное программирование


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

Кё>

Упреждающие (Forward) объявления необходимы, если процедура используется до ее определения.

Я имел в виду, что вместо слова "forward" используется символ "^"

PROCEDURE^ f(x: REAL): REAL;

упреждающие объявления процедур встречаются так редко, что выгоднее в случае необходимости разок написать упреждающее объявление процедуры, чем вместо этого замедлить скорость компиляции всех программ во всем мире написанных на этом языке.




Кстати, упреждающее объявление требуется только для процедур, но не для типов. Для типов в Component Pascal можно спокойно писать "зацикленные" объявления безовсякого предварительного объявления:
TYPE
  A = POINTER TO RECORD
    b: B;
    c: C;
    d: D;
  END;

  B = POINTER TO RECORD
    a: A;
    c: C;
    d: D;
  END;

  C = POINTER TO RECORD
    a: A;
    b: B;
    d: D;
  END;

  D = POINTER TO RECORD
    a: A;
    b: B;
    c: C;
  END;

предварительное объявление типов не требуется.
Re[6]: А знаете ли Вы что...
От: Кодёнок  
Дата: 12.01.05 09:22
Оценка:
Кё>> Хочу удобный синтаксис и обобщенное программирование

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


Я клоню известный мне паскаль (Delphi) к С++, а вы развиваете Oberon. Дальше тут не имеет смысла спорить

Кё>>

Упреждающие (Forward) объявления необходимы, если процедура используется до ее определения.

СГ>Я имел в виду, что вместо слова "forward" используется символ "^"

СГ>PROCEDURE^ f(x: REAL): REAL;


СГ>упреждающие объявления процедур встречаются так редко, что выгоднее в случае необходимости разок написать упреждающее объявление процедуры, чем вместо этого замедлить скорость компиляции всех программ во всем мире написанных на этом языке.


СГ>Кстати, упреждающее объявление требуется только для процедур, но не для типов. Для типов в Component Pascal можно спокойно писать "зацикленные" объявления безовсякого предварительного объявления:


Это уже хорошо, т.к. из-за упреждающих объявлений классов меня эта "фича" (просто наследие старых и ленивых компиляторов) раздражала. И в чем тогда потаённый смысл? Если компиляция все равно двупроходная?
Re[5]: А знаете ли Вы что...
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 12.01.05 09:30
Оценка: :)
Здравствуйте, Cyberax, Вы писали:

C>Да???? Это С++ с его механизмом раздельной компиляции — не модульный

C>язык????

Да, именно так.

C>И почему в "модульных" языках бессмысленны шаблоны?


Не то что бессмысленны, а "сильно ограничены в своей силе", то есть практического смысла в них мало. Именно на этот вопрос я и дал ответ в своем сообщении. Повторяю: В модульных языках есть только импорт БИНАРНЫХ модулей.
MODULE MyModule;
 IMPORT StdLog, Math; (* Импорт БИНАРНЫХ модулей StdLog и Math, но не их исходных текстовых файлов *)

(* .... *)

BEGIN
  StdLog.String("'MyModule' loaded into memory"); StdLog.Ln()
CLOSE
  StdLog.String("'MyModule' unloaded from memory"); StdLog.Ln()
END MyModule.

Это означает, что НЕЛЬЗЯ использовать шаблон описанный в другом модуле (НЕТ ИНКЛЮДА исходников, а есть ИМПОРТ БИНАРНИКОВ). А раз так, то область действия шаблона ограничивается одним единственным модулем — тем самым в котором он определен.

Представте себе что бы было если бы в С++ каждый template можно было бы использовать только в том текстовом файле где он определен, а в другом текстовом файле этот temlate использовать было бы нельзя? Много практического смысла было бы от таких templates-ов? Нет конечно их можно ввести (внутримодульные шаблоны), но зачем они такие нужны?
Re[7]: А знаете ли Вы что...
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 12.01.05 09:36
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё> И в чем тогда потаённый смысл? Если компиляция все равно двупроходная?


Я не знаю.

Кстати исходные коды компилятора языка Component Pascal от Oberon Microsystems являются открытыми. Скачать можно отсюда http://www.oberon.ch/blackbox.html качать BlackBox 1.5 BETA for Windows — чуть меньше 8 мегабайтов. Я сейчас в них потихоньку копаюсь, как раз это и пытаюсь понять...
Re[6]: А знаете ли Вы что...
От: Cyberax Марс  
Дата: 12.01.05 10:29
Оценка:
Сергей Губанов пишет:

> C>Да???? Это С++ с его механизмом раздельной компиляции — не модульный

> C>язык????
> Да, именно так.

Я так не считаю. С/C++ — вполне модульные языки, модули состоят из
интерфейса (определяемого h-файлом) и реализации, которая находится в
lib- или obj-файлах.

Шаблоны — это просто средство ГЕНЕРАЦИИ кода. Сгенерированный код (то
бишь инстанцированные шаблоны) можно паковать в модули. Экспортировать
же сами _генераторы_ (то есть шаблоны) — бессмысленно, хотя и возможно
при большом желании.

> C>И почему в "модульных" языках бессмысленны шаблоны?

> Не то что бессмысленны, а "сильно ограничены в своей силе", то есть
> практического смысла в них мало. Именно на этот вопрос я и дал ответ в
> своем сообщении. Повторяю: В модульных языках есть только импорт
> БИНАРНЫХ модулей.

Ну так и в С++ есть только импорт модулей, правда у них интерфейс не
бинарный. Но считать бинарный интерфейс модулей главным отличительным
признаком — это уже просто глупость.

> Это означает, что НЕЛЬЗЯ использовать шаблон описанный в другом модуле

> (НЕТ ИНКЛЮДА исходников, а есть ИМПОРТ БИНАРНИКОВ). А раз так, то
> область действия шаблона ограничивается одним единственным модулем —
> тем самым в котором он определен.

Кстати, в стандарте С++ есть такая фича: export templates. То есть
экспортированные в БИНАРНОМ виде шаблоны. Ее, правда, поддерживает всего
пара компиляторов (просто оказалось, что такая фича не особо и нужна).

> Представте себе что бы было если бы в С++ каждый template можно было

> бы использовать только в том текстовом файле где он определен, а в
> другом текстовом файле этот temlate использовать было бы нельзя? Много
> практического смысла было бы от таких templates-ов? Нет конечно их
> можно ввести (внутримодульные шаблоны), но зачем они такие нужны?

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

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re: почему я предпочёл паскалю си
От: jazzer Россия Skype: enerjazzer
Дата: 12.01.05 10:51
Оценка: +3
Здравствуйте, DEMON HOOD, Вы писали:

DH>Чегото вспомнилось сегодня, решил запостить...


DH>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal

DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне ;) да и паскаль от си не сильно отличается,
DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте :super: , а не где-то там, в блоке var.

Интересно, почему никто не упомянул пре/пост-инкременты/декременты?
Я в свое время был просто очарован ими :)

особенно записями вида
while (*dest++ = *src++);


и еще отсутствие разделения на процедуры и функции
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: почему я предпочёл паскалю си
От: Кодёнок  
Дата: 12.01.05 10:58
Оценка: 1 (1)
J>Интересно, почему никто не упомянул пре/пост-инкременты/декременты?
J>Я в свое время был просто очарован ими

J>особенно записями вида

J>
J>while (*dest++ = *src++);
J>


изучи тогда какой-нибудь функциональный язык, Haskel например — может еще в С++ разочаруешься
Re[7]: А знаете ли Вы что...
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 12.01.05 11:21
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>А мысль о том, что "модуль" может состоять не из одного файла, вам в

C>голову никогда не приходила?


BlackBox ->- Help ->- Contents ->- Design Practices


3.2 Modules and subsystems
.....

Before a module can be used, it must be loaded from disk into memory. But before it can be loaded, it must be compiled (command Dev->Compile). When compiling a module, the compiler produces a code file and a symbol file. The code file contains the executable code, which can be loaded into memory. The code file is a kind of super-lightweight DLL. The compiler also produces a symbol file, which contains a binary representation of the module's interface. If a module imports other modules, the compiler reads the symbol files of all these modules, in order to check that their interfaces are used correctly. The compilation process can be visualized in the following way:
Source File -->-----+                         +--->--- Code File
                    |                         |
                    +---->--- Compiller --->--+
                    |                         |
Symbol Files --->---+                         +--->--- Symbol File

When you compile a module for the first time, a new symbol file is generated. In the log window, the compiler writes a message similar to the following one:

compiling "ObxPhoneDB"
new symbol file 964 640

The first of the two numbers indicates that the machine code in the new code file is 964 bytes long. The second number indicates that the module contains 320 bytes global variables (five entries in the db variable; each entry consisting of two strings with 32 elements each; each element is a 2-byte Unicode character). If a symbol file for exactly the same interface already exists, the compiler writes a shorter message:

compiling "ObxPhoneDB" 964 640

If the interface has changed, the compiler writes a new symbol file and indicates the changes compared to the old version in the log. For example, if you just have introduced procedure LookupByNumber in the most recent version, the compiler writes:

compiling "ObxPhoneDB"
LookupByNumber is new in symbol file 964 640

Symbol files are only used at compile-time, they have no meaning at run-time. In order to load a module, only its code file is needed. Modules are loaded dynamically, i.e., there is no separate linking step as required by more static languages. To see a list of currently loaded modules, call command Info->Loaded Modules. As result, a window will be opened with a contents similar to the following one:
module name bytes clients compiled             loaded

StdLinks    20639    1    2.7.1996  18:42:15   29.8.1996  14:31:14
StdFolds    20425    1    2.7.1996  18:41:33   29.8.1996  14:31:12
StdCmds     25066    7    2.7.1996  18:39:12   29.8.1996  14:31:00

Config        125    0    2.7.1996  18:38:21   29.8.1996  14:31:20
Init          682    0    2.7.1996  18:40:21   29.8.1996  14:31:05
Controls    78876    5    7.7.1996  14:14:58   29.8.1996  14:31:00
Services     1472    5    2.7.1996  18:37:14   29.8.1996  14:30:54
Containers  37348   40    2.7.1996  18:37:51   29.8.1996  14:30:52
Properties   8337   42    2.7.1996  18:37:40   29.8.1996  14:30:49
Controllers  6037   42    2.7.1996  18:37:36   29.8.1996  14:30:49
Views       31589   49    2.7.1996  18:37:33   29.8.1996  14:30:49
Models       4267   50    2.7.1996  18:37:27   29.8.1996  14:30:48
Converters   2189   51   14.7.1996  22:45:12   29.8.1996  14:30:48
Dialog       8979   54    2.7.1996  18:37:13   29.8.1996  14:30:48
Dates        3848   45    2.7.1996  18:37:07   29.8.1996  14:30:48
Meta        19275   11    2.7.1996  18:37:10   29.8.1996  14:30:48
Stores      22302   53    2.7.1996  18:37:22   29.8.1996  14:30:47
Strings     17547   15    2.7.1996  18:37:05   29.8.1996  14:30:47
Math        15408    2    3.7.1996   1:45:05   29.8.1996  14:30:47
Ports       10631   56    2.7.1996  18:37:17   29.8.1996  14:30:46
Fonts        1589   58    2.7.1996  18:37:15   29.8.1996  14:30:46
Files        3814   62    2.7.1996  18:36:28         linked
...

Table 3-5. List of loaded modules
The list shows all loaded modules. For each module, it shows its code size in bytes, how many other modules import it, when it has been compiled, and when it has been loaded.

......
Re[2]: почему я предпочёл паскалю си
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 12.01.05 11:25
Оценка:
Здравствуйте, jazzer, Вы писали:

J>и еще отсутствие разделения на процедуры и функции


В Component Pascal тоже "нет разделения на процедуры и функции".
PROCEDURE g(x: REAL);       (* Процедура         *)
PROCEDURE f(x: REAL): REAL; (* Процедура-функция *)
Re[4]: А знаете ли Вы что...
От: iGorash Россия http://therebel.no-ip.org
Дата: 12.01.05 13:13
Оценка:
> Какие конкретно у Вас есть претензии?

• Типы-диапазоны
• Перечислительные типы
• Произвольные диапазоны для массивов
• Нет общих множеств

Не спорю, то что добавили — хорошо.
Впрочем все это уже написано ниже.
Я бы хотел удобный и красивый Паскалеский синтаксис расширить мощью С++.
Posted via RSDN NNTP Server 1.9
Re[5]: А знаете ли Вы что...
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 12.01.05 13:34
Оценка:
Здравствуйте, iGorash, Вы писали:


>> Какие конкретно у Вас есть претензии?


G>• Типы-диапазоны

G>• Перечислительные типы
G>• Произвольные диапазоны для массивов
G>• Нет общих множеств


Ну это не претензии, а так — пожелания. Конечно хорошо бы иметь такие фичи чем не иметь, но и без них тоже не плохо.
Re[3]: почему я предпочёл паскалю си
От: s.ts  
Дата: 12.01.05 20:03
Оценка: 19 (2) +2 :)))
Здравствуйте, DangerDen, Вы писали:

DD>Здравствуйте, Аноним, Вы писали:


DD>ПОлностью согласен!


DD>Когда я знал более менее паскаль, мне умные люди рассказывали как круто знать С и С++. Что его могут знать лишь избранные (я жил в маленьком городе и там таких не было ). И тогда я понял надо бросать Паскаль и Дельфи и рулить к Visual Studio (тогда я думал что это тоже что и С++) — то что там нельзя написать прогу мышкой доказывало мне силу С++ .

DD>В итоге я перешел на С++, узнал что много где заблуждался, а С++ реально крут!

продолжение из моего опыта:

... но как выяснилось, большинство пишущих на с++ пишут на нем в стиле плохого дельфи-кодераочень многие не могут даже на паскале нормально написать (как выразился один мой коллега-дельфин: "тут ведь если компилируется, то работает!" — это про паскаль конечно). Люди, пишущие на C++ не знают stl, не используют шаблоны и нэймспэйсы, создают кучу глобальных переменных, называя их MyVar и ... вообще, даже страуструпа похоже не читали.
зато все мегабаксовые вакансии с работных сайтов с гордыми заголовками "С++" для них. и рекрутеры пытаются выудить из потока г...
мнда...

добавлю в заклюении, то все встретившиекся в моей жизни дебилы от программирования (кроме одного ) писали на С++
Re[3]: почему я предпочёл паскалю си
От: jazzer Россия Skype: enerjazzer
Дата: 12.01.05 20:40
Оценка:
Здравствуйте, Кодёнок, Вы писали:


J>>Интересно, почему никто не упомянул пре/пост-инкременты/декременты?

J>>Я в свое время был просто очарован ими

J>>особенно записями вида

J>>
J>>while (*dest++ = *src++);
J>>


Кё>изучи тогда какой-нибудь функциональный язык, Haskel например — может еще в С++ разочаруешься


Ну, это вряд ли Особенно при наличии всяких извращений с рекурсивными шаблонами
Хотя, конечно, пределов совершенству нет, а наши чаяния комитет по стандартизации не торопится претворять в жизнь

С функциональным языком я имею дело, работаю в системе Mathematica.
Не знаю, как он в сравнении с Хаскелом, наверняка, хуже
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: А знаете ли Вы что...
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.01.05 04:17
Оценка: +3 -1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Начиная с Modula эти языки являются модульными. Шаблоны в модульных языках практического смысла не имеют.

Т.е. обобщенные типы и методы в .Net 2 не имеют практического смысла?
СГ> Вот, например, в не модульном языке С++ шаблоны имеют практический смысл потому что можно один раз написать шаблон в одном текстовом файле, а потом инклюдить этот текстовый файл в другие текстовые файлы исходного кода программы и многократно использовать этот шаблон. В модульных языках программирования отсутсвует само понятие инклюда, там используется импорт (уже скомпилированных — бинарных) модулей, стало быть шаблоны, если бы они были, пришлось бы писать в каждом модуле заново — отсюда и исчезновение практического смысла.
Оба утверждения не верны.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: почему я предпочёл паскалю си
От: Cyberax Марс  
Дата: 13.01.05 10:02
Оценка: +2
s.ts пишет:

> ... но как выяснилось, большинство пишущих на с++ пишут на нем в стиле

> плохого дельфи-кодераочень многие не могут даже на паскале нормально
> написать

А большинство пишущих на Паскале/Дельфи — студенты и школьники. Говорить
о качестве их кода или промолчать?


Еще предлагаю посчитать среднюю температуру по программистам на Дельфи и
С++.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[5]: А знаете ли Вы что...
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 13.01.05 10:23
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Т.е. обобщенные типы и методы в .Net 2 не имеют практического смысла?


Под шаблонами я имел ввиду templates — подстановка текста, а не generic.
Re[6]: А знаете ли Вы что...
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.01.05 12:11
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Под шаблонами я имел ввиду templates — подстановка текста, а не generic.
Я думаю, Коденок под шаблонами имел в виду именно средства обобщенного программирования. Поэтому отмазки про невозможность и ненужность идут мимо кассы.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: почему я предпочёл паскалю си
От: Курилка Россия http://kirya.narod.ru/
Дата: 13.01.05 14:36
Оценка:
Здравствуйте, s.ts, Вы писали:

ST>добавлю в заклюении, то все встретившиекся в моей жизни дебилы от программирования (кроме одного ) писали на С++


А тот, который кроме на чём писал?
Re[5]: А знаете ли Вы что...
От: AVC Россия  
Дата: 13.01.05 14:50
Оценка: 6 (1)
Здравствуйте, Cyberax, Вы писали:

C>Да???? Это С++ с его механизмом раздельной компиляции — не модульный

C>язык????

IMHO, Вы путаете раздельную (separate) и независимую (independent) компиляцию.

Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

Хоар
Re[4]: А знаете ли Вы что...
От: tarkil Россия http://5209.copi.ru/
Дата: 13.01.05 17:40
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ> Однако, вместо шаблонов в модульных языках можно применять так называемые generics — они, конечно, не идентичны templates, но все же могут быть полезны.


Всегда считал, что templates и generics это два термина, принятые в разных языках/сообществах для обозначения одного и того же: параметризованных (или обобщённых) алгоритмов и типов.

У Вас есть возможность рассказать поподробнее о различиях между этими терминами — откуда у них ноги растут и в чём отличие?
--
wbr, Peter Taran
Re[5]: А знаете ли Вы что...
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 14.01.05 07:51
Оценка: :)
Здравствуйте, tarkil, Вы писали:

T>Здравствуйте, Сергей Губанов, Вы писали:


СГ>> Однако, вместо шаблонов в модульных языках можно применять так называемые generics — они, конечно, не идентичны templates, но все же могут быть полезны.


T>Всегда считал, что templates и generics это два термина, принятые в разных языках/сообществах для обозначения одного и того же: параметризованных (или обобщённых) алгоритмов и типов.


T>У Вас есть возможность рассказать поподробнее о различиях между этими терминами — откуда у них ноги растут и в чём отличие?


templates — грубо говоря подстановка на уровне исходного текста (в runtime никаких templates нету)
generic — что-то отдаленно напоминающее COM интерфейсы, т.е. проверка принадлежности например типа объекта к generic типу осуществляется динамически в runtime.
Re[6]: А знаете ли Вы что...
От: Cyberax Марс  
Дата: 14.01.05 08:38
Оценка:
Сергей Губанов пишет:

> T>У Вас есть возможность рассказать поподробнее о различиях между

> этими терминами — откуда у них ноги растут и в чём отличие?
> templates — грубо говоря подстановка на уровне исходного текста (в
> runtime никаких templates нету)
> generic — что-то отдаленно напоминающее COM интерфейсы, т.е. проверка
> принадлежности например типа объекта к generic типу осуществляется
> динамически в runtime.

Generics в .NET- это тоже создание типа по его шаблону. Просто generic'и
_инстанцируются_ на этапе выполнения из специального промежуточного
кода, так что по сравнению с С++-template'ами имеются некоторые ограничения.

В Java генерики — это просто средство контроля типов на этапе компиляции.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[6]: А знаете ли Вы что...
От: tarkil Россия http://5209.copi.ru/
Дата: 14.01.05 08:46
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>templates — грубо говоря подстановка на уровне исходного текста (в runtime никаких templates нету)

СГ>generic — что-то отдаленно напоминающее COM интерфейсы, т.е. проверка принадлежности например типа объекта к generic типу осуществляется динамически в runtime.

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

Как назвать такую схему? Я думал, все эти три способа обозначаются общим термином generics.
--
wbr, Peter Taran
Re: почему я предпочёл паскалю си
От: Gust Россия  
Дата: 14.01.05 14:08
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH>Чегото вспомнилось сегодня, решил запостить...


DH>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal

DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,
DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.

Ага, это аргумент такого же уровня, что и "Писать на С быстрей, потому что {} быстрей чем begin-end". ИМХО — не серьезно.
Тише едешь — дело мастера боиться.
Re[3]: почему я предпочёл паскалю си
От: Gust Россия  
Дата: 14.01.05 14:11
Оценка:
Здравствуйте, slegkapjan, Вы писали:

Кё>>Ну как раз против Си Паскаль держится очень уверенно и лично я бы предпочел не очень удобный паскалевский синтаксис и ОО, чем Си и старательную эмуляцию ООП через структуры и хранимые в них указатели на функции. А вот современный C++ — совершенно другое дело

S>ИМХО -- не сравнивать Object Pascal и Си некорректно.

Может быть тут имелся в виду Pascal 7 with objects (кажется так назывался)?
Тише едешь — дело мастера боиться.
Re[3]: почему я предпочёл паскалю си
От: Gust Россия  
Дата: 14.01.05 14:21
Оценка:
Здравствуйте, DangerDen, Вы писали:

DD>Здравствуйте, Аноним, Вы писали:


DD>ПОлностью согласен!


DD>Когда я знал более менее паскаль, мне умные люди рассказывали как круто знать С и С++. Что его могут знать лишь избранные (я жил в маленьком городе и там таких не было ). И тогда я понял надо бросать Паскаль и Дельфи и рулить к Visual Studio (тогда я думал что это тоже что и С++) — то что там нельзя написать прогу мышкой доказывало мне силу С++ .


А вот неправда ваша!

Сколько-нибудь сложную программу на Delphi написать нельзя. Обработсики кнопок все равно руками нужно делать. А вот был такой VisualAge for C++ v.3.6. (По крайней мере в этой версии точно было) года эдак 1996-1998 (не позднее). Так там стово Visual отрабатывало. Формочка по работе со списком элементов (список, строка вводе, кнопки на добавление, правку, удаление элементов и их обработчики) делалать ТОЛЬКО мышой!

Жаль мало его поковырять удалось. А IBM очередную пару по маркетингу!!!
Тише едешь — дело мастера боиться.
Re[4]: почему я предпочёл паскалю си
От: Gust Россия  
Дата: 14.01.05 14:25
Оценка: :))
ST>продолжение из моего опыта:

ST>... но как выяснилось, большинство пишущих на с++ пишут на нем в стиле плохого дельфи-кодераочень многие не могут даже на паскале нормально написать (как выразился один мой коллега-дельфин: "тут ведь если компилируется, то работает!" — это про паскаль конечно). Люди, пишущие на C++ не знают stl, не используют шаблоны и нэймспэйсы, создают кучу глобальных переменных, называя их MyVar и ... вообще, даже страуструпа похоже не читали.

ST>зато все мегабаксовые вакансии с работных сайтов с гордыми заголовками "С++" для них. и рекрутеры пытаются выудить из потока г...
ST>мнда...

ST>добавлю в заклюении, то все встретившиекся в моей жизни дебилы от программирования (кроме одного ) писали на С++


"Это еще что! Сейчас даже ездовые академики встречаются!" (с) папа Дяди Федора. Я тут мучаюсь с дебилом от написания ТЗ!
Имхо — хуже. Весь отдел стонет!
Тише едешь — дело мастера боиться.
Re[2]: почему я предпочёл паскалю си
От: Gust Россия  
Дата: 14.01.05 14:30
Оценка: :)))
Здравствуйте, slegkapjan, Вы писали:

S>учителей; Паскаль — для студентов; Лого — для детей; АПЛ — для

S>марсиан; Форт, Лисп и Пролог — специализированные языки. Один Си
S>— это язык для программистов.

"АПЛ — создана для решения стратегических задач" (с) капитан 2 ранга Кравцов. Кафедра ВМФ.

ЗЫ
АПЛ — Атомная подводная лодка. Хотя сейчас правильнее РПКСН.

Сори за офтоп. Но не мог упустить — вдолбили наверно на всю жизнь.
Тише едешь — дело мастера боиться.
Re[2]: почему я предпочёл паскалю си
От: Gust Россия  
Дата: 14.01.05 14:44
Оценка: +1
Здравствуйте, Algorithmus, Вы писали:


A>НО! Если нужно писать прикладные программы не критичные по скорости, не затрагивающие низкоуровневое программирование — Паскаль — очень даже неплохой выбор. В Delphi многие огрехи паскаля исправили, но далеко не все.


Не всегда скорость конечного продукта является определяющей. Важнее остаются показатели скорость разрабоки/качество или стоимость/качество.

Информация к размышлению:
Мой бывший преподаватель был в жюри (не знаю как точно называется, может орг. комитет) всероссийских олимпиад по программированию. Так он мне рассказывал об интересной статистике. Оказывается что бОльшая часть участников использует Паскаль. И не потому что это студенты и они на нем обучались (Ведь для умеющего программировать — выбор языка не первая задача. Я думаю эти ребята умеют программировать ), а потому что в условиях дефицита времени важно иметь возможность отловить большинство ошибок на момент компиляции.

ЗЫ
Информация взята с чужих слов, юридической силой не обладает
Тише едешь — дело мастера боиться.
Re[2]: почему я предпочёл паскалю си
От: Bigger Российская Империя  
Дата: 14.01.05 15:09
Оценка: :)
Здравствуйте, jazzer, Вы писали:

J>
J>while (*dest++ = *src++);
J>


Лучше так

memcpy(dest, src, sizeof(src));

Программист — это шаман..., подарите бубен!
Re[3]: почему я предпочёл паскалю си
От: Cyberax Марс  
Дата: 14.01.05 15:33
Оценка: +2 -1
Gust пишет:

> Информация к размышлению:

> Мой бывший преподаватель был в жюри (не знаю как точно называется,
> может орг. комитет) всероссийских олимпиад по программированию. Так он
> мне рассказывал об интересной статистике. Оказывается что бОльшая
> часть участников использует Паскаль. И не потому что это студенты и
> они на нем обучались (Ведь для умеющего программировать — выбор языка
> не первая задача. Я думаю эти ребята умеют программировать ), а потому
> что в условиях дефицита времени важно иметь возможность отловить
> большинство ошибок на момент компиляции.

Просто олимпиады по программированию к самому _программированию_
отношение имеют весьма слабое.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[3]: почему я предпочёл паскалю си
От: Bigger Российская Империя  
Дата: 14.01.05 15:37
Оценка:
Здравствуйте, Bigger, Вы писали:

а чего смешного

Программист — это шаман..., подарите бубен!
Re[4]: почему я предпочёл паскалю си
От: Schade Россия  
Дата: 14.01.05 15:52
Оценка:
Здравствуйте, Bigger, Вы писали:

B>а чего смешного


B>memcpy(dest, src, sizeof(src));


Предлагаю подумать, что получится в случае, когда dest и src имеют тип char* и вообще указатель (что и имеет место быть в примере jazzer'а). И вообще, что такое sizeof.
... << RSDN@Home 1.1.4 @@subversion >>
Re[5]: почему я предпочёл паскалю си
От: Bigger Российская Империя  
Дата: 14.01.05 16:05
Оценка:
Здравствуйте, Schade, Вы писали:

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


B>>а чего смешного


S>
B>>memcpy(dest, src, sizeof(src));
S>


S>Предлагаю подумать, что получится в случае, когда dest и src имеют тип char* и вообще указатель (что и имеет место быть в примере jazzer'а). И вообще, что такое sizeof.


В примере не было ни чего видно, там вообще не было объявлений.
Там вообще-то копирование массива.
Про функцию

Copies characters between buffers.

void *memcpy(
void *dest,
const void *src,
size_t count
);
wchar_t *wmemcpy(
wchar_t *dest,
const wchar_t *src,
size_t count
);
Parameters
dest
New buffer.
src
Buffer to copy from.
count
Number of bytes to copy.
Return Value
The value of dest.

Remarks
Copies count bytes of src to dest. If the source and destination overlap, the behavior of memcpy is undefined. Use memmove to handle overlapping regions.

Security Note Make sure that the destination buffer is the same size or larger than the source buffer. For more information, see Avoiding Buffer Overruns.
Requirements
Routine Required header Compatibility
memcpy


sizeof

The sizeof operator yields the size of its operand with respect to the size of type char.
Grammar
unary-expression:
sizeof unary-expression
sizeof ( type-name )
The result of the sizeof operator is of type size_t, an integral type defined in the include file STDDEF.H. This operator allows you to avoid specifying machine-dependent data sizes in your programs.
The operand to sizeof can be one of the following:
A type name. To use sizeof with a type name, the name must be enclosed in parentheses.
An expression. When used with an expression, sizeof can be specified with or without the parentheses. The expression is not evaluated.
When the sizeof operator is applied to an object of type char, it yields 1. When the sizeof operator is applied to an array, it yields the total number of bytes in that array, not the size of the pointer represented by the array identifier. To obtain the size of the pointer represented by the array identifier, pass it as a parameter to a function that uses sizeof. For example:
Example
// expre_sizeof_Operator.cpp
// compile with: /EHsc
#include <iostream>

size_t getPtrSize( char *ptr )
{
return sizeof( ptr );
}

using namespace std;
int main()
{
char szHello[] = "Hello, world!";

cout << "The size of a char is: "
<< sizeof( char )
<< "\nThe length of " << szHello << " is: "
<< sizeof szHello
<< "\nThe size of the pointer is "
<< getPtrSize( szHello ) << endl;
}
Output
The size of a char is: 1
The length of Hello, world! is: 14
The size of the pointer is 4
When the sizeof operator is applied to a class, struct, or union type, the result is the number of bytes in an object of that type, plus any padding added to align members on word boundaries. The result does not necessarily correspond to the size calculated by adding the storage requirements of the individual members. The /Zp compiler option and the pack pragma affect alignment boundaries for members.
The sizeof operator never yields 0, even for an empty class.
The sizeof operator cannot be used with the following operands:
Functions. (However, sizeof can be applied to pointers to functions.)
Bit fields.
Undefined classes.
The type void.
Dynamically allocated arrays.
External arrays.
Incomplete types.
Parenthesized names of incomplete types.
When the sizeof operator is applied to a reference, the result is the same as if sizeof had been applied to the object itself.
If an unsized array is the last element of a structure, the sizeof operator returns the size of the structure without the array.
The sizeof operator is often used to calculate the number of elements in an array using an expression of the form:
sizeof array / sizeof array[0]



Где-то так

Программист — это шаман..., подарите бубен!
Re[6]: почему я предпочёл паскалю си
От: Schade Россия  
Дата: 14.01.05 16:31
Оценка: 1 (1) +1
Здравствуйте, Bigger, Вы писали:

[поскипано]
Ну вот, сейчас начнем в этом топике обсуждать, придет Губанов и скажет "какая гадость этот ваш C++"

Итак, пример jazzer'а:
while(*dest++ = *src++);

Поскольку есть операция разыменования, то src и dest — либо указатели, либо типы, ведущие себя как указатели. И копируется из src в dest, пока не встретится нулевое значение, что характерно для сишных строк.
Что получается в таком случае:
memcpy(dest, src, sizeof(src));

ПОлучается копирование sizeof(src) байт из src в dest, то есть 4-х байт (размер указателя) на x86 платформе.
Не говоря уже о том, что в принципе тип, на который указывают src, dest может быть любым типом, приводимым к bool, в том числе и недопускающим побитовое копирование. В случае while(*dest++ = *src++); имеем правильное использование оператора присваивания, а в случае memcpy — нет.

В случае со строками можно говорить о таком варианте:
memcpy(dest, src, (strlen(src)+1)*sizeof(*src));

но он ничуть не эффективнее (поскольку strlen внутри также содержит цикл).
... << RSDN@Home 1.1.4 @@subversion >>
Re[6]: почему я предпочёл паскалю си
От: Schade Россия  
Дата: 14.01.05 16:56
Оценка:
Здравствуйте, Bigger, Вы писали:

B>The length of Hello, world! is: 14


Так или иначе, sizeof — константа, определяемая во время компиляции.
... << RSDN@Home 1.1.4 @@subversion >>
Re[7]: почему я предпочёл паскалю си
От: Bigger Российская Империя  
Дата: 14.01.05 17:18
Оценка:
Здравствуйте, Schade, Вы писали:

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


B>>The length of Hello, world! is: 14


S>Так или иначе, sizeof — константа, определяемая во время компиляции.



When the sizeof operator is applied to a class, struct, or union type, the result is the number of bytes in an object of that type, plus any padding added to align members on word boundaries. The result does not necessarily correspond to the size calculated by adding the storage requirements of the individual members. The /Zp compiler option and the pack pragma affect alignment boundaries for members


Программист — это шаман..., подарите бубен!
Re[5]: почему я предпочёл паскалю си
От: DEMON HOOD  
Дата: 14.01.05 17:31
Оценка: :)
Здравствуйте, Cyberax, Вы писали:

C>А большинство пишущих на Паскале/Дельфи — студенты и школьники. Говорить

нескажи...
в одном из местных ВУЗов есть хорошая традиция
старшекурсники отдают младшим свои лабы\конспекты итд

но преподаватели они тоже не дураки
если в этом году курс программирование к примеру был на Делфи, то в следующем уже на билдере потом вижуал c
вобщем, вот такая защита от взлома
... <<silent Rsdn@Home 1.1.4 beta 1 Windows XP 5.1.2600.0 >>
Re[3]: почему я предпочёл паскалю си
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.01.05 20:27
Оценка:
Здравствуйте, Gust, Вы писали:

G>Я думаю эти ребята умеют программировать


Далеко не факт.

G> ), а потому что в условиях дефицита времени важно иметь возможность отловить большинство ошибок на момент компиляции.


Думаю все намного проще — важнее всего скорость компиляции, а она у Паскаля на порядок выше.
... << RSDN@Home 1.1.4 beta 3 rev. 283>>
AVK Blog
Re[3]: почему я предпочёл паскалю си
От: Павел Кузнецов  
Дата: 14.01.05 23:14
Оценка:
Gust,

> Мой бывший преподаватель был в жюри (не знаю как точно называется, может орг. комитет) всероссийских олимпиад по программированию. Так он мне рассказывал об интересной статистике. Оказывается что бОльшая часть участников использует Паскаль.


Во всероссийских олимпиадах по программированию не участвовал. Участвовал во всеукраинских. Могу подтвердить: да, большинство участников писало на Паскале. Немного писало на Бэйсике, плюс еще сколько-то на Си. Я в числе большинства писал на Паскале. Но то были олимпиады, совсем другая, чем промышленное программирование, песня. Сегодня пишу на C++.
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[5]: А знаете ли Вы что...
От: DJ KARIES Россия  
Дата: 15.01.05 12:37
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>interface в Borland Pascal 100% инкапсуляцию тоже не обеспечивает.

Как это так?
То, что не вынесено в секцию interface, недоступно из других модулей.
Это ли не инкапсуляция на уровне модулей?

Кё>И зачем оно? Напусти на исходник простой процессор, и он выдаст вам .int — файл, где есть действительно только интерфейсная часть.

1) Дядя, а где достать этот самый "простой процессор"?
2) Зачем мне нужен этот "процессор", если его нет в поставке рабочей IDE, и он не является стандартным?

Кё>В компиляции такой файл все равно не участвует. А вот дублирование заголовков функций в interface и implementation сильно портит жизнь.

Если многие заголовки функций идут на экспорт, то таки да, и мне лень дублировать...

Кё> Поменял определение — ищи в большом файле реализацию.

А что, руки мешают нажать "Ctrl+Shift+Вверх"? Это для дельфей, ибо паскаль (91 года выпуска) не юзаю, хотя и там, дожен быть шорткут для перехода между имплементацией и интерфейсной частью.

Кё>Приходилось мне поддерживать и дорабатывать код на Delphi, так что я очень злой на эту фигню

Уж на дельфях то как раз всё пучком.
... << http://dkdens.narod.ru :: http://retroforth.org >>
Re[4]: [3]: почему я предпочёл паскалю си
От: Кодёнок  
Дата: 17.01.05 06:56
Оценка:
G>>Я думаю эти ребята умеют программировать

AVK>Далеко не факт.


G>> ), а потому что в условиях дефицита времени важно иметь возможность отловить большинство ошибок на момент компиляции.


AVK>Думаю все намного проще — важнее всего скорость компиляции, а она у Паскаля на порядок выше.


У меня совсем не так Я тоже участвовал в олимпиадах, одной всероссийской. Выбор там был между Borland Pascal 7 и Borland C++ 3.1 (Бейсики-Фортраны не в счет...). А в те времена C++ — это просто C с объектами, по крайней мере программирование на нем преподавали именно в таком стиле. Шаблоны хоть и были, но на уровне функции T max<T>(const T, const T) и простых контейнеров. Ни о каких функторах, operator TYPE (), автоматическом преобразовании типов и создании временных объектов (ну когда void f(const CString&) вызывается как f("yes") и мы имеем CString в функции) никто не знал наверное я имею ввиду преподов и доступные нам книжки по C++. Я даже не знаю, есть ли в Borland C++ 3.1 поддержка этого. Об умных указателях и map<> молчу

А самое главное, не было STL! Паскаль имел огромное преимущество благодаря встроенным строкам и множествам... Работа с динамическими массивами char* неибежно вызывала какие-нибудь глюки с забытыми нулями, AV и прочее. А кому это нужно, на олимпиаде-то?

Сейчас я бы выбрал С++ однозначно — на современном компиляторе и с STL
Re[3]: [2]: почему я предпочёл паскалю си
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 17.01.05 08:45
Оценка: +1 -1 :))
Здравствуйте, Gust, Вы писали:

G>...Ведь для умеющего программировать — выбор языка не первая задача...


Наоборот — самая первейшая!
Re[6]: [5]: А знаете ли Вы что...
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 17.01.05 09:05
Оценка:
Здравствуйте, DJ KARIES, Вы писали:

Кё>>interface в Borland Pascal 100% инкапсуляцию тоже не обеспечивает.


DK>Как это так?

DK>То, что не вынесено в секцию interface, недоступно из других модулей.
DK>Это ли не инкапсуляция на уровне модулей?

Там есть заморочка:
unit Unit1;

interface

type
  TB = class; (* forward declaration *)

  TA = class
  private
    b: TB;
    ...
  end;

  TB = class
  private
    a: TA;
  public
    //...
  end;

implementation
//...
end.

в объектах класса TB есть приватная переменная a: TA, поэтому мы ОБЯЗАНЫ дать определение для TA тоже там же — в интерфейсной части юнита, хотя, быть может, мы вовсе и не хотим чтобы класс TA был доступен для остальных юнитов.

Мы не хотим делать TA доступным из других юнитов, но мы обязаны это сделать, так как обязаны описать его именно в разделе interface — иначе мы не сможем описать переменную a: TA в классе TB.

Вот с этим и связана одна из бед компании Борланд — в то время когда Никлаус Вирт уже придумал язык следующего поколения — Modula, Борланд зачем-то реализовала компилятор для устаревшего Pascal (добавив в него свое собственное изобретение кривые — interface/implementation и обозвав его Turbo Pascal), а не для Modula свободной от этих недостатков.

Как надо правильно делать:
MODULE Module1;

TYPE
  A = POINTER TO RECORD (* Какой-то приватный тип - он не экспортируется этим модулем *)
    b: B;
    ...
  END;

  B* = POINTER TO RECORD    (* Символ "*" после имени типа означает, что этот тип экспортируется *)
    a: A;
    ...
  END;

END Module1.
Re[7]: [6]: [5]: А знаете ли Вы что...
От: Кодёнок  
Дата: 17.01.05 09:21
Оценка:
СГ>Вот с этим и связана одна из бед компании Борланд — в то время когда Никлаус Вирт уже придумал язык следующего поколения — Modula, Борланд зачем-то реализовала компилятор для устаревшего Pascal (добавив в него свое собственное изобретение кривые — interface/implementation и обозвав его Turbo Pascal), а не для Modula свободной от этих недостатков.

Как интересно, на языке самого последнего поколения будет выгляеть передача callback-функций с разными типами вызова (pascal и cdecl), использование API, требующего определенного выравнивания полей, реализация COM-объекта, реализация COM VARIANT (unions там есть?)? Как только добавят в Component Pascal все такие мелочи, так и получится та же фигня, что у Борланд, только другим боком. Если только философия Оберона тут не сводится к "все что не может работать с Обероном — выбросить, и переписать на Обероне".
Re[8]: [6]: [5]: А знаете ли Вы что...
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 17.01.05 12:42
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>Как интересно, на языке самого последнего поколения будет выгляеть передача callback-функций с разными типами вызова (pascal и cdecl), использование API, требующего определенного выравнивания полей, реализация COM-объекта, реализация COM VARIANT (unions там есть?)?


А вот интересно, почему, например, я не задаю аналогичных глупых вопросов: "А есть ли в Вашем языке/системе ХХХ средство УУУ". Почему я просто беру и читаю соответствующие доки, в то время как Вы этого делать не желаете?

Вот, читайте на здоровье:
BlackBox -->-- Help -->-- Context -->--

Platform-Specific Issues (Windows)

  • Module SYSTEM
  • Using DLLs in BlackBox modules
  • Using COM without special Direct-To-COM compiler
  • Windows programming interfaces
  • OLE Automation
  • Windows-specific information in BlackBox
  • Differences between different Windows versions
  • The BlackBox linker
  • Linking BlackBox applications
  • Startup of BlackBox

  • Re[9]: [6]: [5]: А знаете ли Вы что...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 17.01.05 12:55
    Оценка:
    В догонку...

    Windows Programming Interfaces
    module    contents
    
    WinApi    basic data types, error codes, basic Win32 functionality
    WinDlg    common dialog box library
    WinCtl    common controls
    WinOle    basic COM and OLE interfaces
    WinOleDlg OLE dialogs (OleUI...)
    WinOleAut OLE automation interfaces    
    WinOleCtl OLE controls interfaces
    WinRpc    remote procedure call functions
    WinNet    networking and socket functions
    WinMM     multimedia services
    WinCmc    Messaging Application Programming Interface (MAPI)
    WinSql    Database services (ODBC)


    Map to the Ctl Subsystem
    Developer Manual
    Excel5       MS Excel 5.0 automation interface
    Excel8       MS Excel 8.0 automation interface
    Excel9       MS Excel 9.0 automation interface
    Word8        MS Word 8.0 automation interface
    Word9        MS Word 9.0 automation interface
    Outlook8     MS Outlook 8.0 automation interface
    Outlook9     MS Outlook 9.0 automation interface
    PowerPoint8  MS PowerPoint 8.0 automation interface
    PowerPoint9  MS PowerPoint 9.0 automation interface
    Access8      MS Access 8.0 automation interface
    Access9      MS Access 9.0 automation interface
    Graph8       MS Graph 8.0 automation interface
    Graph9       MS Graph 9.0 automation interface
    Office       MS Office 9.0 automation interface
    OfficeBinder MS Binder 9.0 automation interface
    MSForms      MS Forms 2.0 automation interface
    DAO35        MS Data Access Objects 3.5 automation interface
    DAO36        MS Data Access Objects 3.6 automation interface
    ADODB        MS ActiveX Data Objects 2.0 automation interface
    VBIDE        MS Visual Basic automation interface
    Re[5]: [3]: почему я предпочёл паскалю си
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 17.01.05 14:44
    Оценка: 1 (1) :))
    Здравствуйте, Кодёнок, Вы писали:

    Кё>Сейчас я бы выбрал С++ однозначно — на современном компиляторе и с STL


    А я бы C#
    ... << RSDN@Home 1.1.4 beta 3 rev. 293>>
    AVK Blog
    Re: почему я предпочёл паскалю си
    От: Poudy Россия  
    Дата: 18.01.05 08:02
    Оценка: 3 (1)
    Здравствуйте, DEMON HOOD, Вы писали:

    DH>Чегото вспомнилось сегодня, решил запостить...


    DH>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal

    DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,
    DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.

    А я под спектрумом в 1994м ни о Си, ни о Паскале ничего не знал. Писал на Васике и в машинных кодах , потому что грузить асм с кассеты было жутко долго.

    А когда аж в 1996м появился Пеньтюх, 95-е винды на нее ставил перец — мегакрутой оплачиваемый (!!) программер одной из местных контор. Он был такой молохой, худой, и всё время пускал пузырями слюни.

    Он мне сказал, что стоит смотреть либо на Си, либо на Дельфи. Под Си он подразумевал Borland 5.02, а под Дельфи — Delphi 3.0. Я так и не смог допытаться от него, что же лучше. Он очень так вяло говорил, что и то и то одна фигня, но Си в принципе сложнее, но перспективнее. Я перекрестился и сказал ставить Си .

    В качестве примера работы Си чел создал визардом OWL приложение типа нотепада. Я был в шоке! Казалось, программирование ушло без меня куда-то ваще в другую сторону .

    А потом была книжка что-то типа "Эдвард Нортон. Программирование на языке Си". Я не стал писать Hello World, а приступил сразу к "серьезным вещам " — игрушка-викторина. Набил кода на страницу и попытался запустить. Ошибка компиляции — функция не определена!! Как?!!! Где?? Дело оказалось не в case sensitive, как можно подумать. Была другая ошибка новичков — первой я написал main, а под ней остальные функции . Мрак! Что делать? На поиск ошибки ушло два дня!!!!! Книга Нортона была настолько убогой, что, как я помню, в ней не было ни слова о важности определения функции. Возможно, там вообще нигде не определялись функции, а может я прошляпил.

    В моей книжке по Си не было ни указателей, ни выделения памяти. Других книг "по компьютерам", кроме Фигурнова и Нортона в продаже в 1996м году в городе Адлере не было . И интернета не было. Я был "не в комьюнити". Тяжелые времена . Как я потом узнал, люди специально ездили за книгами в Краснодар и Таганрог.

    Короче, Си и С++ я учился по исходникам стандартной библиотеки. Память я выделалял и распределял сам в огромных статических массивах Как же я ругался тогда на "этот долбаный Си" .
    Re[2]: почему я предпочёл паскалю си
    От: Зверёк Харьковский  
    Дата: 18.01.05 08:06
    Оценка: +1 :))) :))) :)
    Здравствуйте, Poudy, Вы писали:

    P>А потом была книжка что-то типа "Эдвард Нортон. Программирование на языке Си".

    Вот это серьезно. Это та, которую он в соавторстве с Бредом Питтом написал?
    сам слушаю и вам рекомендую: Полковник и однополчане — Сто лет одиночества
    FAQ — це мiй ай-кью!
    Re[3]: почему я предпочёл паскалю си
    От: Poudy Россия  
    Дата: 18.01.05 08:32
    Оценка: :)
    Здравствуйте, Зверёк Харьковский, Вы писали:

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


    P>>А потом была книжка что-то типа "Эдвард Нортон. Программирование на языке Си".

    ЗХ>Вот это серьезно. Это та, которую он в соавторстве с Бредом Питтом написал?
    Нет. На самом деле книга была Эндрю Нортона, кажется, и писалась одним человеком.
    Re[3]: почему я предпочёл паскалю си
    От: Den Raskovalov США http://users.livejournal.com/_denplusplus_
    Дата: 18.01.05 09:32
    Оценка:
    Всем привет

    A>>НО! Если нужно писать прикладные программы не критичные по скорости, не затрагивающие низкоуровневое программирование — Паскаль — очень даже неплохой выбор. В Delphi многие огрехи паскаля исправили, но далеко не все.


    G>Не всегда скорость конечного продукта является определяющей. Важнее остаются показатели скорость разрабоки/качество или стоимость/качество.


    G>Информация к размышлению:

    G>Мой бывший преподаватель был в жюри (не знаю как точно называется, может орг. комитет) всероссийских олимпиад по программированию. Так он мне рассказывал об интересной статистике. Оказывается что бОльшая часть участников использует Паскаль. И не потому что это студенты и они на нем обучались (Ведь для умеющего программировать — выбор языка не первая задача. Я думаю эти ребята умеют программировать ), а потому что в условиях дефицита времени важно иметь возможность отловить большинство ошибок на момент компиляции.

    Насколько я знаю для соревнований ACM выбор многих команд обусловлен тем, что на финале будут предложены среды Kylix для Delphi и gcc/gdb для C++. Вот тут уж действительно выбор очевиден. А та команда, которая не ставит перед собой цели поехать в финал, много не стоит

    PS Хотя лично я считаю что среда VS 6 более приспособлена для соревнований, чем Delphi 7.
    PPS А вообще разница между C++/Delphi'стами почти нивелирована уже давно.
    Re[4]: почему я предпочёл паскалю си
    От: eugals Россия  
    Дата: 18.01.05 09:54
    Оценка: 4 (2)
    Здравствуйте, Poudy, Вы писали:

    P>Здравствуйте, Зверёк Харьковский, Вы писали:


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


    P>>>А потом была книжка что-то типа "Эдвард Нортон. Программирование на языке Си".

    ЗХ>>Вот это серьезно. Это та, которую он в соавторстве с Бредом Питтом написал?
    P>Нет. На самом деле книга была Эндрю Нортона, кажется,
    О, Андре Нортон, это ещё круче
    P>и писалась одним человеком.
    Ну, результат соавторства Нортона/Питта тоже за одного человека считать можно

    ЗЫ. Может речь о Питере Нортоне (например здесь)?
    ... << RSDN@Home 1.1.4 beta 3 rev. 215>> (WinAmp: Aqua — Turn Back Time)
    Re[7]: [5]: А знаете ли Вы что...
    От: DJ KARIES Россия  
    Дата: 18.01.05 14:20
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Как надо правильно делать:

    СГ>
    СГ>MODULE Module1;
    
    СГ>TYPE
    СГ>  A = POINTER TO RECORD (* Какой-то приватный тип - он не экспортируется этим модулем *)
    СГ>    b: B;
    СГ>    ...
    СГ>  END;
    
    СГ>  B* = POINTER TO RECORD    (* Символ "*" после имени типа означает, что этот тип экспортируется *)
    СГ>    a: A;
    СГ>    ...
    СГ>  END;
    
    СГ>END Module1.
    СГ>


    Разве КАПСОМ бегины и прочие TYPE это называется правильно писать?
    Уж лучше _такая_ модульная инкапсуляция на уровне дельфей, чем бегины БОЛЬШИМИ БУКВАМИ.

    Или это чтобы смарт-компилер отличал служебные слова от неслужебных?
    ... << http://dkdens.narod.ru :: http://retroforth.org >>
    Re[5]: [3]: почему я предпочёл паскалю си
    От: DJ KARIES Россия  
    Дата: 18.01.05 14:20
    Оценка:
    Здравствуйте, Кодёнок, Вы писали:

    Кё>Сейчас я бы выбрал С++ однозначно — на современном компиляторе и с STL

    Ясен пень, что тот же MSVC 7 крутее Borland Pascal 7.

    И никто тебе такого выбора на олимпиаде не даст.
    ... << http://dkdens.narod.ru :: http://retroforth.org >>
    Re[6]: [3]: почему я предпочёл паскалю си
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 18.01.05 14:32
    Оценка:
    Здравствуйте, DJ KARIES, Вы писали:

    Кё>>Сейчас я бы выбрал С++ однозначно — на современном компиляторе и с STL

    DK>Ясен пень, что тот же MSVC 7 крутее Borland Pascal 7.

    Забавный критерий сравнения языков.
    ... << RSDN@Home 1.1.4 beta 3 rev. 299>>
    AVK Blog
    Re[5]: почему я предпочёл паскалю си
    От: Poudy Россия  
    Дата: 18.01.05 15:22
    Оценка:
    Здравствуйте, eugals, Вы писали:

    E>ЗЫ. Может речь о Питере Нортоне (например здесь)?

    Не уверен. Сильно не уверен. Питер Нортон — это мне в руки попадалось, но уже через год. Без картинки сложно сказать . Кроме того, разве может быть Advanced C без указателей??!
    Re[6]: А знаете ли Вы что...
    От: WolfHound  
    Дата: 18.01.05 17:02
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>templates — грубо говоря подстановка на уровне исходного текста (в runtime никаких templates нету)

    СГ>generic — что-то отдаленно напоминающее COM интерфейсы, т.е. проверка принадлежности например типа объекта к generic типу осуществляется динамически в runtime.
    Блин вот ты других обвиняешь в том что они не чатают доки по оберону, а сам рассуждаешь и о С++ и о .NET не зная ни того ни другого...

    И шаблоны С++ и генерики .НЕТ перед тем как начинается работа инстационируются с конкретными типами. Разница в том что шаблоны инстационирует компилятор в момент компиляции программы, а генерики инстационирует JIT при первом обращении к коду генерика. Иначе говоря шаблоны инстационируются у программиста, а генерики у пользователя. Кроче говоря теже яйца только в профиль.

    Но у С++ шаблонов и у .НЕТ генериков есть одно существенное различие. Они используют разные принципы типизации.
    Шаблоны используют отложеную типизацию те все проверки типов, разрешение перегрузки... отодвигаются на момент инстационирования шаблона, а генерики используют декларативную типизацию те проверки выполняются в момент компиляции генерика.
    У этих стратегий есть свои плюсы и минуси. В частности шаблоны гораздо болие гибкий и мощьный инструмент, а генерики значительно легче реализовать и они позволяют сделать болие качественную диагностику ошибок.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[8]: [5]: А знаете ли Вы что...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 19.01.05 06:48
    Оценка:
    Здравствуйте, DJ KARIES, Вы писали:

    DK>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Как надо правильно делать:

    СГ>>
    СГ>>MODULE Module1;
    
    СГ>>TYPE
    СГ>>  A = POINTER TO RECORD (* Какой-то приватный тип - он не экспортируется этим модулем *)
    СГ>>    b: B;
    СГ>>    ...
    СГ>>  END;
    
    СГ>>  B* = POINTER TO RECORD    (* Символ "*" после имени типа означает, что этот тип экспортируется *)
    СГ>>    a: A;
    СГ>>    ...
    СГ>>  END;
    
    СГ>>END Module1.
    СГ>>


    DK>Разве КАПСОМ бегины и прочие TYPE это называется правильно писать?

    DK>Уж лучше _такая_ модульная инкапсуляция на уровне дельфей, чем бегины БОЛЬШИМИ БУКВАМИ.

    DK>Или это чтобы смарт-компилер отличал служебные слова от неслужебных?


    Начиная с языка Modula (Pascal -> Modula -> Modula2 -> Oberon -> Oberon2 -> Component Pascal), Виртовские языки стали различать большие и маленькие буквы. То есть лексемы: POINTER, Pointer, pointer — разные. Было принято решение зарезервированные слова писать большими буквами. Почему именно большими я не знаю, наверное, так виднее.
    Re[7]: А знаете ли Вы что...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 19.01.05 06:55
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>templates — грубо говоря подстановка на уровне исходного текста (в runtime никаких templates нету)

    СГ>>generic — что-то отдаленно напоминающее COM интерфейсы, т.е. проверка принадлежности например типа объекта к generic типу осуществляется динамически в runtime.
    WH>Блин вот ты других обвиняешь в том что они не чатают доки по оберону, а сам рассуждаешь и о С++ и о .NET не зная ни того ни другого...

    WH>И шаблоны С++ и генерики .НЕТ перед тем как начинается работа инстационируются с конкретными типами. Разница в том что шаблоны инстационирует компилятор в момент компиляции программы, а генерики инстационирует JIT при первом обращении к коду генерика. Иначе говоря шаблоны инстационируются у программиста, а генерики у пользователя. Кроче говоря теже яйца только в профиль.


    WH>Но у С++ шаблонов и у .НЕТ генериков есть одно существенное различие. Они используют разные принципы типизации.

    WH>Шаблоны используют отложеную типизацию те все проверки типов, разрешение перегрузки... отодвигаются на момент инстационирования шаблона, а генерики используют декларативную типизацию те проверки выполняются в момент компиляции генерика.
    WH>У этих стратегий есть свои плюсы и минуси. В частности шаблоны гораздо болие гибкий и мощьный инструмент, а генерики значительно легче реализовать и они позволяют сделать болие качественную диагностику ошибок.

    Между тем что написали Вы и тем что было написано у меня принципиального противоречия не наблюдается.
    Re[8]: А знаете ли Вы что...
    От: WolfHound  
    Дата: 19.01.05 08:56
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Между тем что написали Вы и тем что было написано у меня принципиального противоречия не наблюдается.

    Не ну если для тебя JIT компиляция == проверка в рантайме то...
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[9]: [5]: А знаете ли Вы что...
    От: WolfHound  
    Дата: 19.01.05 09:16
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Начиная с языка Modula (Pascal -> Modula -> Modula2 -> Oberon -> Oberon2 -> Component Pascal), Виртовские языки стали различать большие и маленькие буквы. То есть лексемы: POINTER, Pointer, pointer — разные. Было принято решение зарезервированные слова писать большими буквами. Почему именно большими я не знаю, наверное, так виднее.

    А может по тому что первую раскраску синтаксиса для оберона сделал ты после того как тебе объяснили что без нее плохо...
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[9]: [5]: А знаете ли Вы что...
    От: DJ KARIES Россия  
    Дата: 19.01.05 09:21
    Оценка: +4
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Начиная с языка Modula (Pascal -> Modula -> Modula2 -> Oberon -> Oberon2 -> Component Pascal), Виртовские языки стали различать большие и маленькие буквы. То есть лексемы: POINTER, Pointer, pointer — разные. Было принято решение зарезервированные слова писать большими буквами. Почему именно большими я не знаю, наверное, так виднее.

    Наверное, такую примочку блондинки придумали.

    Кстати, а эти хитрые языкописатели из ETH, они не в курсе, что слова, набитые БОЛЬШИМИ буквами, читаются ощутимо МЕДЛЕННЕЕ, чем слова, набранные маленькими буквами?
    Для этого и пишут ВОРНИНГИ и ЛИЦЕНЗИИ БОЛЬШИМИ БУКВАМИ, что ПРИХОДИТСЯ ВНИМАТЕЛЬНО ВЧИТЫВАТЬСЯ В ТЕКСТ, ЧТОБЫ ПОНЯТЬ, ЧТО ЖЕ ТАМ ВСЁ-ТАКИ НАПИСАНО.
    Или им в кайф ШИФТ/КАПС клацать на каждом слове?
    Ладно там, 30 лет назад, небыло клавиш SHIFT/CAPS и шрифты были только из заглавных букв, но сейчас то это зачем?
    Это ужасно неудобно, непривычно, некрасиво и иррационально.

    Почему программист (уважаемый Сергей Губанов) не знает, зачем в языке, на котором он пишет, принято писать БОЛЬШИМИ БУКВАМИ?
    Это говорит о том, что разработчики думали явно не о программистах, которые будут на нём писать.
    Да, может быть, данные языки безопасные/шустрые/хитрые, но зачем насиловать людей БОЛЬШИМИ BEGIN'ами?

    Эргономика языка должна быть эргономичной.
    ... << http://dkdens.narod.ru :: http://retroforth.org >>
    Re[9]: [5]: А знаете ли Вы что...
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 19.01.05 10:23
    Оценка: :))) :))) :)))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Начиная с языка Modula (Pascal -> Modula -> Modula2 -> Oberon -> Oberon2 -> Component Pascal), Виртовские языки стали различать большие и маленькие буквы. То есть лексемы: POINTER, Pointer, pointer — разные. Было принято решение зарезервированные слова писать большими буквами. Почему именно большими я не знаю, наверное, так виднее.


    Видимо у Вирта зрение стало портиться — стареет, однако
    Re[4]: почему я предпочёл паскалю си
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 19.01.05 12:48
    Оценка:
    Здравствуйте, Gust, Вы писали:

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


    Кё>>>Ну как раз против Си Паскаль держится очень уверенно и лично я бы предпочел не очень удобный паскалевский синтаксис и ОО, чем Си и старательную эмуляцию ООП через структуры и хранимые в них указатели на функции. А вот современный C++ — совершенно другое дело

    S>>ИМХО -- не сравнивать Object Pascal и Си некорректно.

    G>Может быть тут имелся в виду Pascal 7 with objects (кажется так назывался)?


    И то и другое название корректно, только отосятся к разным языкам (Object Pascal — это современный Delphy).
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[10]: [5]: А знаете ли Вы что...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 19.01.05 12:48
    Оценка: -1
    Здравствуйте, DJ KARIES, Вы писали:


    DK>...ЧТОБЫ ПОНЯТЬ, ЧТО ЖЕ ТАМ ВСЁ-ТАКИ НАПИСАНО...


    Да-а-а... тяжелый случай...

    Заглавными буквами пишутся только СЛУЖЕБНЫЕ ЗАРЕЗЕРВИРОВАННЫЕ слова, так что понять что написано никаких затрат сил и времени не занимает.

    Что касается лично меня, то меня вовсе не раздражает писать служебные слова заглавными буквами, а даже наоборот — нравится. Я даже в Delphi после оберона стал писать служебные слова тоже заглавными буквами — так программа выглядит более структурировано.
    Re[10]: [5]: А знаете ли Вы что...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 19.01.05 12:50
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Начиная с языка Modula (Pascal -> Modula -> Modula2 -> Oberon -> Oberon2 -> Component Pascal), Виртовские языки стали различать большие и маленькие буквы. То есть лексемы: POINTER, Pointer, pointer — разные. Было принято решение зарезервированные слова писать большими буквами. Почему именно большими я не знаю, наверное, так виднее.

    WH>А может по тому что первую раскраску синтаксиса для оберона сделал ты после того как тебе объяснили что без нее плохо...

    Пардон, Вы сами поняли что сказали?

    Я сделал подсветку для самого себя потому что мне объяснили что мне без нее плохо!!!!!!!!
    Re[4]: [2]: почему я предпочёл паскалю си
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 20.01.05 00:32
    Оценка: +1 :)))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Наоборот — самая первейшая!


    Да уж. Потом будет поздно.
    ... << RSDN@Home 1.1.4 beta 3 rev. 279>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[11]: [5]: А знаете ли Вы что...
    От: DJ KARIES Россия  
    Дата: 20.01.05 07:00
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, DJ KARIES, Вы писали:



    DK>>...ЧТОБЫ ПОНЯТЬ, ЧТО ЖЕ ТАМ ВСЁ-ТАКИ НАПИСАНО...


    СГ>Да-а-а... тяжелый случай...

    Таки да

    СГ>Заглавными буквами пишутся только СЛУЖЕБНЫЕ ЗАРЕЗЕРВИРОВАННЫЕ слова, так что понять что написано никаких затрат сил и времени не занимает.

    Да хоть какие слова.
    Я в SQL тоже пишу СЛУЖЕБНЫЕ слова типа "SELECT * FROM MyTable WHERE MyField=5".
    Потому что так принято писать. Хотя SQL и не обидится, что я напишу "SELECT" как "select" или "Select", но мои изменения на фоне предыдущей работы предыдущего разработчика проекта будут выделяться.
    В SQL так принято и я пишу так, как принято, скрипя зубами, но пишу
    Ибо запросы SQL — это ПОРТЯНКИ, а не код на нормальном языке программирования.

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

    СГ>Что касается лично меня, то меня вовсе не раздражает писать служебные слова заглавными буквами, а даже наоборот — нравится. Я даже в Delphi после оберона стал писать служебные слова тоже заглавными буквами — так программа выглядит более структурировано.

    Мда, таки тоже тяжёлый случай. Ещё тяжелее.
    В Delphi НЕ ПРИНЯТО ПИСАТЬ СЛУЖЕБНЫЕ ЗАРЕЗЕРВИРОВАННЫЕ ЗАГЛАВНЫМИ БУКВАМИ.
    В SQL-е ПОЖАЛУЙСТА.

    Вот за что люблю C# и C++, так это за регистрозависимость.
    И нефиг писать "VOID" где попало.
    Ибо "void" рулит

    Хотя, товарищ Губанов и там сделает кучку хидеров, где отдефайнит все служебные слова КАПСАМИ.

    Ничего личного.
    Это было всего-лишь IMHO.
    Ибо так оно и есть.
    ... << http://dkdens.narod.ru :: http://retroforth.org >>
    Re[2]: почему я предпочёл паскалю си
    От: Borisman2 Киргизия  
    Дата: 20.01.05 12:57
    Оценка: 3 (1)
    Здравствуйте, Аноним, Вы писали:

    А>А я вот выбрал С потому что это круто

    Да, у меня было также. Я тогда в школе в 8 классе учился. Бейсик знал в совершенстве, но надо же было куда-то двигаться! Папин знакомый программист записал на гору 5.25 дискет Borland C++. Документации у меня не было. Была тооооненькая книжка, предназначенная для обучения проргаамистов С языку С++. И все. Ровно год мои программы даже не компилировались, потому что синтаксиса я не знал. Затем как-то закомпилировались и пошло поехало. До сих пор С++ я знаю "интуитивно", т.е. знаю, как надо написать, а почему — объяснить не могу

    Правда, я тогда не знал, что Pascal — suxx и потому позже и Паскаль выучил. По книжке. Летом в пионерлагере. Без компьютера. До сих пор считаю, что Паскаль — гораздо более правильный язык чем С. Хотя на С писал, конечно, в десятки раз больше кода.

    Так то.
    Re[3]: почему я предпочёл паскалю си
    От: DJ KARIES Россия  
    Дата: 20.01.05 22:29
    Оценка:
    Здравствуйте, Borisman2, Вы писали:

    B>Здравствуйте, Аноним, Вы писали:


    А>>А я вот выбрал С потому что это круто

    B>Да, у меня было также. Я тогда в школе в 8 классе учился. Бейсик знал в совершенстве, но надо же было куда-то двигаться! Папин знакомый программист записал на гору 5.25 дискет Borland C++. Документации у меня не было. Была тооооненькая книжка, предназначенная для обучения проргаамистов С языку С++. И все. Ровно год мои программы даже не компилировались, потому что синтаксиса я не знал. Затем как-то закомпилировались и пошло поехало. До сих пор С++ я знаю "интуитивно", т.е. знаю, как надо написать, а почему — объяснить не могу
    Грустная история
    Интуитивное писание, кстати, лучше академического, когда зубрильщик читает тоннами книжки, а сам ни бумбум, пока не найдёт в книжке рещшение своей задачи.
    Оффтоп, у меня интуитивная грамматика и пунктуация русского языка, и вот я очень часто замечаю, что сотни программистов на РСДН пишут "проблеммы" с двумя "м". Неграмотное выражение мысли показывает иногда о профессиональных качествах человека.

    B>Правда, я тогда не знал, что Pascal — suxx

    А сейчас узнал?

    B>и потому позже и Паскаль выучил. По книжке. Летом в пионерлагере. Без компьютера. До сих пор считаю, что Паскаль — гораздо более правильный язык чем С. Хотя на С писал, конечно, в десятки раз больше кода.

    Удивительно.
    Обычно люди, начавшие свою дорогу в будущее с "C" далее СЕЙ не двигаются, ибо для них языки группы СИ есть идеал.
    Но мы то знаем...
    ... << http://dkdens.narod.ru :: http://retroforth.org >>
    Re[4]: почему я предпочёл паскалю си
    От: Павел Кузнецов  
    Дата: 20.01.05 22:58
    Оценка: +1
    DJ KARIES,

    > Обычно люди, начавшие свою дорогу в будущее с "C" далее СЕЙ не двигаются, ибо для них языки группы СИ есть идеал.

    > Но мы то знаем...

    Многие, выбравшие для профессионального программирования C или C++, использовали до того Турбо-Паскаль или Делфи. Интересно, как это укладывается в предложенную схему?
    Posted via RSDN NNTP Server 1.9
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[5]: почему я предпочёл паскалю си
    От: DJ KARIES Россия  
    Дата: 21.01.05 21:30
    Оценка: 12 (1) +1
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>DJ KARIES,


    >> Обычно люди, начавшие свою дорогу в будущее с "C" далее СЕЙ не двигаются, ибо для них языки группы СИ есть идеал.

    >> Но мы то знаем...

    ПК>Многие, выбравшие для профессионального программирования C или C++, использовали до того Турбо-Паскаль или Делфи. Интересно, как это укладывается в предложенную схему?


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

    Т.е. программист, познавший перед C-подобным языком, языки других групп, более гибок, чем тот, кто освоил впервым делом Си/Си++ и не желает двигаться далее, считая, что он познал дао программирования.
    ... << http://dkdens.narod.ru :: http://retroforth.org >>
    Re[6]: почему я предпочёл паскалю си
    От: Cyberax Марс  
    Дата: 22.01.05 07:30
    Оценка: 1 (1) +2
    DJ KARIES пишет:

    > Си-подобные языки *ограничивают программистов в последующем выборе

    > языков для изучения*.

    ROTLF...

    Большинство современных промышленных языков (С, С++, Java, C#, JS...) —
    С-подобны. Из паскалевидных — только Дельфи. И где тут ограниченность?

    > Т.е. программист, познавший перед C-подобным языком, языки других

    > групп, более гибок, чем тот, кто освоил впервым делом Си/Си++ и не
    > желает двигаться далее, считая, что он познал дао программирования.

    Нормальные программисты без проблем знают по 10-20 языков, а изучение
    нового занимает пару дней. Причем многие знают языки, отличающиеся от С
    не только синтаксисом, а и идеологией (XSL, O'Caml, SQL, ...).

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re: почему я предпочёл паскалю си
    От: Isaev_Max Россия  
    Дата: 27.01.05 17:54
    Оценка:
    Лично для меня решающим фактором было наличие команд:
    i++;
    i--;
    до близкого знакомства языками высокого уровня программил на Асме под ZX Spectrum forever
    и уж слишком привык к inc'ам и dec'ам, а прирощения типа:
    i=i+1;
    i=i-1;
    воспринимал с трудом .
    С++ форева
    ... << RSDN@Home 1.1.0 stable >>
    Re[2]: почему я предпочёл паскалю си
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.01.05 03:03
    Оценка: 1 (1)
    Здравствуйте, Algorithmus, Вы писали:

    A>Мне, например, в свое время в паскале много всего не понравилось... Не думаю, что возможность объявлять переменные в любом месте программы — это самая главная фича. Причем, она не в С, а в С++


    Не то что бы в С в любом месте можно было объявлять. Но в начале любого блока можно. А так как блоки можно делать где угодно, то почти в любом месте. Например:
    if (...)
    {
        int i = ...;
        i++;
        {
            int k = i * 5;
            ...
        }
    }
    ... << RSDN@Home 1.1.4 beta 3 rev. 279>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[2]: почему я предпочёл паскалю си
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.02.05 10:06
    Оценка:
    Здравствуйте, Isaev_Max, Вы писали:

    I_M>Лично для меня решающим фактором было наличие команд:

    I_M>i++;
    I_M>i--;
    I_M>до близкого знакомства языками высокого уровня программил на Асме под ZX Spectrum forever
    I_M>и уж слишком привык к inc'ам и dec'ам, а прирощения типа:
    I_M>i=i+1;
    I_M>i=i-1;
    I_M>воспринимал с трудом .
    I_M>С++ форева

    Component Pascal:
      INC(i); (* i := i + 1; *)
      DEC(i); (* i := i - 1; *)
    
      INC(i, 1000); (* i := i + 1000; *)
      DEC(i, 1000); (* i := i - 1000; *)

    VAR s: SET; i: INTEGER;
    BEGIN
      i := 5;
      s := {10, 16} (* биты под номерами 10 и 16 равны 1 остальные биты равны 0 *)
      INCL(s, 22); (* бит под номером 22 теперь = 1 *)
      EXCL(s, 22); (* бит под номером 22 теперь = 0 *)
      IF i IN s THEN (* если бит под номером i равен 1 тогда ... *)
    
      i := ORD(s); (* преобразование множества битов в целое число (SUM n: n IN s: 2^n) *)
      s := BITS(i);(* преобразование целого числа в множество битов *) 
      (* гарантируется что нулевой бит множества - это младший разряд целого числа не зависимо от архитектуры процессора - кросплатформенные приложения *)

    Set operators:
    +    union
    -    difference (x - y = x * (-y))
    *    intersection
    /    symmetric set difference (x / y = (x-y) + (y-x))
    Re[3]: почему я предпочёл паскалю си
    От: ironwit Украина  
    Дата: 25.09.05 10:33
    Оценка: :)
    Здравствуйте, AndrewJD, Вы писали:

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


    S>>великолепные возможности по работу с железом...

    AJD>Какие такие возможности есть в Си и нету в Borland Pasсal?
    AJD>И какие вообще есть возможности по работе с железом у Си на уровне языка?

    присоединяюсь к вопросу
    ... << RSDN@Home 1.2.0 alpha rev. 616>>
    Играет: Faktor-2 — [Мы фальшивые МС #01] Класс детка, класс! [foobar2000 v0.8.3]
    Я не умею быть злым, и не хочу быть добрым.
    Re[3]: почему я предпочёл паскалю си
    От: _Bill  
    Дата: 25.09.05 16:59
    Оценка:
    AJD>И какие вообще есть возможности по работе с железом у Си на уровне языка?
    Поскольку я занимаюсь программированием микроконтроллеров ("железа") и программы в основном пишу на Си, то у меня сложилось мнение, что в основном все зависит от реализации конкретных компиляторов. Это относится и к возможности доступа к различным областям памяти (RAM, EEPROM, program flash memeory, регистры), и к портам МК, и к отдельным разрядам данных. Но единых стандартов нет.
    Re[4]: почему я предпочёл паскалю си
    От: Mystic Украина http://mystic2000.newmail.ru
    Дата: 26.09.05 11:33
    Оценка: +1
    Здравствуйте, DJ KARIES, Вы писали:

    DK>Обычно люди, начавшие свою дорогу в будущее с "C" далее СЕЙ не двигаются, ибо для них языки группы СИ есть идеал.


    Я начинал с языка С, но потом перешел полностью на Delphi.
    Re[7]: почему я предпочёл паскалю си
    От: Mystic Украина http://mystic2000.newmail.ru
    Дата: 26.09.05 11:39
    Оценка: +1
    Здравствуйте, Cyberax, Вы писали:

    C>Нормальные программисты без проблем знают по 10-20 языков, а изучение

    C>нового занимает пару дней.

    Смотря что понимать под обучением Одно дело в режиме Read Only --- понимать написаный на языке текст, другое --- изучить все сопуствующее окружение и уметь его использовать.
    Re[2]: почему я предпочёл паскалю си
    От: Mystic Украина http://mystic2000.newmail.ru
    Дата: 26.09.05 11:48
    Оценка:
    Здравствуйте, yxiie, Вы писали:

    Y>а на С++ я долго перейти не мог — синтаксис знал, но заставить себя писать никак не мог — не мог придумать достойную задачу. а потом таки придумал — начал писать JavaScript-подобный интерпретатор на С++, ну а дальше пошло-поехало


    Я до сих пор не могу перейти Тоже достойной задачи никак не могу придумать...
    Re[12]: [5]: А знаете ли Вы что...
    От: Mystic Украина http://mystic2000.newmail.ru
    Дата: 26.09.05 12:32
    Оценка:
    Здравствуйте, DJ KARIES, Вы писали:

    DK>Я в SQL тоже пишу СЛУЖЕБНЫЕ слова типа "SELECT * FROM MyTable WHERE MyField=5".

    DK>Потому что так принято писать. Хотя SQL и не обидится, что я напишу "SELECT" как "select" или "Select", но мои изменения на фоне предыдущей работы предыдущего разработчика проекта будут выделяться.
    DK>В SQL так принято и я пишу так, как принято, скрипя зубами, но пишу

    В SQL я тоже привык. А в Delphi, наоборот, я привык писать ключевые слова в нижнем регистре... Обероновский синтаксис я не пробовал, возможно и к нему можно привыкныть...
    Re[4]: почему я предпочёл паскалю си
    От: Andrei N.Sobchuck Украина www.smalltalk.ru
    Дата: 28.09.05 07:22
    Оценка: 1 (1) +1 -1 :)))
    Здравствуйте, Den Raskovalov, Вы писали:

    DR>PPS А вообще разница между C++/Delphi'стами почти нивелирована уже давно.


    Программисты имеют три уровня развития:
    на первом они не знают, чем отличается С от Паскаля;
    на втором они знают, чем отличается С от Паскаля;
    на третем они понимают, что С от Паскаля ничем не отличается.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Я ненавижу Hibernate
    Автор: Andrei N.Sobchuck
    Дата: 08.01.08
    !
    Re[5]: почему я предпочёл паскалю си
    От: Cyberax Марс  
    Дата: 28.09.05 08:15
    Оценка: 3 (1) +1 :)))
    Andrei N.Sobchuck wrote:

    > DR>PPS А вообще разница между C++/Delphi'стами почти нивелирована уже

    > давно.
    > Программисты имеют три уровня развития:
    > на первом они не знают, чем отличается С от Паскаля;
    > на втором они знают, чем отличается С от Паскаля;
    > на третем они понимают, что С от Паскаля ничем не отличается.

    А на четвертом уровне понимают, что С++ кардинально отличается от С и от
    Дельфи.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[5]: почему я предпочёл паскалю си
    От: GlebZ Россия  
    Дата: 28.09.05 10:48
    Оценка: 1 (1) +1
    Здравствуйте, Andrei N.Sobchuck, Вы писали:

    DR>>PPS А вообще разница между C++/Delphi'стами почти нивелирована уже давно.


    ANS>Программисты имеют три уровня развития:

    ANS>на первом они не знают, чем отличается С от Паскаля;
    ANS>на втором они знают, чем отличается С от Паскаля;
    ANS>на третем они понимают, что С от Паскаля ничем не отличается.
    ЭЭЭ Смотря какой паскаль. Если не турбо то да, а если виртовский, то не очень то похож.

    И вообще, тут проблема совершенно в другом. Все понимают разницу между C++, Лиспом и Прологом. А тут вроде бы и термины такие-же, и синтаксис похож, и даже паттерны одни и те же. А вот реализация паттернов — другая. Вроде генерики — те же шаблоны. А в действительности не тоже самое. В результате, несмотря на общую похожесть терминов и синтаксиса — дизайн значительно изменяется. И те приемы которые подходят в C++, не проходят в C# или являются неоптимальными. И наоборот. А вот к этому привыкнуть значительно сложнее, чем перейти на Лисп.

    С уважением, Gleb.
    Re[6]: почему я предпочёл паскалю си
    От: Andrei N.Sobchuck Украина www.smalltalk.ru
    Дата: 28.09.05 12:24
    Оценка:
    Здравствуйте, GlebZ, Вы писали:

    GZ>Здравствуйте, Andrei N.Sobchuck, Вы писали:


    DR>>>PPS А вообще разница между C++/Delphi'стами почти нивелирована уже давно.


    ANS>>Программисты имеют три уровня развития:

    ANS>>на первом они не знают, чем отличается С от Паскаля;
    ANS>>на втором они знают, чем отличается С от Паскаля;
    ANS>>на третем они понимают, что С от Паскаля ничем не отличается.
    GZ>ЭЭЭ Смотря какой паскаль. Если не турбо то да, а если виртовский, то не очень то похож.

    Так вроде в совке турбо особой любовью и пользовался.

    GZ>И вообще, тут проблема совершенно в другом. Все понимают разницу между C++, Лиспом и Прологом. А тут вроде бы и термины такие-же, и синтаксис похож, и даже паттерны одни и те же. А вот реализация паттернов — другая. Вроде генерики — те же шаблоны. А в действительности не тоже самое. В результате, несмотря на общую похожесть терминов и синтаксиса — дизайн значительно изменяется. И те приемы которые подходят в C++, не проходят в C# или являются неоптимальными. И наоборот. А вот к этому привыкнуть значительно сложнее, чем перейти на Лисп.


    Тут, я думаю, можно поспорить, но я внятно мысль сформултровать не могу
    Пока мне в глаза бросаются только "умные указатели" против using+dispose.
    Что касается шаблонов, то вот Алексей или Павел, как активные С++-ники пусть скажут насколько часто им самим приходится писать шаблоны (то есть библиотеки типа Буст не считаем) и для каких целей? А гереки это так, мелочь
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Я ненавижу Hibernate
    Автор: Andrei N.Sobchuck
    Дата: 08.01.08
    !
    Re[5]: [2]: почему я предпочёл паскалю си
    От: vdimas Россия  
    Дата: 04.10.05 09:48
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Наоборот — самая первейшая!


    VD>Да уж. Потом будет поздно.


    Я никогда не верил в байки, что выбор языка программирования отражается как-то на мышлении программиста. Там более, что все знакомые спецы неплохо владели от 5 и более языками. Но тут то самое исключение, похоже.
    Re[6]: почему я предпочёл паскалю си
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 05.10.05 00:35
    Оценка: :)
    Здравствуйте, Cyberax, Вы писали:

    >> DR>PPS А вообще разница между C++/Delphi'стами почти нивелирована уже

    >> давно.
    >> Программисты имеют три уровня развития:
    >> на первом они не знают, чем отличается С от Паскаля;
    >> на втором они знают, чем отличается С от Паскаля;
    >> на третем они понимают, что С от Паскаля ничем не отличается.

    C>А на четвертом уровне понимают, что С++ кардинально отличается от С и от

    C>Дельфи.

    Ага. А на пятом даже начинают понимать, что отличие это в худшую сторону.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[7]: почему я предпочёл паскалю си
    От: Andrei N.Sobchuck Украина www.smalltalk.ru
    Дата: 08.10.05 06:59
    Оценка: :)))
    Здравствуйте, VladD2, Вы писали:

    >>> DR>PPS А вообще разница между C++/Delphi'стами почти нивелирована уже

    >>> давно.
    >>> Программисты имеют три уровня развития:
    >>> на первом они не знают, чем отличается С от Паскаля;
    >>> на втором они знают, чем отличается С от Паскаля;
    >>> на третем они понимают, что С от Паскаля ничем не отличается.

    C>>А на четвертом уровне понимают, что С++ кардинально отличается от С и от

    C>>Дельфи.

    VD>Ага. А на пятом даже начинают понимать, что отличие это в худшую сторону.


    Угу. И на шестом осознают, что в лучшую сторону отличается С#.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Я ненавижу Hibernate
    Автор: Andrei N.Sobchuck
    Дата: 08.01.08
    !
    Почему я перешёо с Java на C++ :) -Re: почему я предпочёл п
    От: _doctor Финляндия http://agilesoftwaredevelopment.com
    Дата: 08.10.05 10:39
    Оценка: 4 (2) +1
    Здравствуйте, DEMON HOOD, Вы писали:

    DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается,

    DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.

    В нлубоком детстве, лет эдак в 12 довелось мне выучить Basic (вернее, его начала) по некой загадочной детской книге издательства МИР, за которую я до сих пор благодарен дяде
    Года через два у меня появился ZX Spectrum и я даже мог писать на нём сколько-нибудь работающие программы.

    Далее следует более-менее обычный путь Pascal, Delphi, по мелочи всякие Perl и JavaScript. Потом пришла Java. Просто потому, что на ней было довольно просто написать программу, если не хочешь писать её на Delphi. А на Delphi не хочешь, потому что к моему третьему курсу уже отчётливо просматривались более низкие зарплаты и более низкий престиж дельфистов.

    Так бы я себе и программировал на Яве, если бы в один прекрасный момент не пришлось поддерживать уже существующий код на C++. Помолившись, воспользовавший общими знаниями и синтаксисом "почти Ява" добился кое-чего.

    Ну а потом. А потом пришлось писать программы под Symbian, а кроме собственного диалекта C++, практически ни на чём под неё писать невозможно. Так и получается, что хочешь — не хочешь, а рано или поздно насильно перейдёшь на C++/ Все дорого промышленного программирования ведут к C++

    P.S.
    Шаблоны я до сих пор понимаю весьма упрощённо, а об STL только читал. В Symbian этого нет и это значительно упрощает освоение C++. Крутые шаблоны освоим позже, когда основные навыки будут на уровне
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Chief Software Engineer,
    Scrum Master, Symbian
    Re[11]: [5]: А знаете ли Вы что...
    От: Пацак Россия  
    Дата: 08.10.05 11:31
    Оценка: 24 (4) +3 :)))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Что касается лично меня, то меня вовсе не раздражает писать служебные слова заглавными буквами, а даже наоборот — нравится.


    Сергей, ВОПРОС не В том, УДОБНО ли ВАМ писать СЛУЖЕБНЫЕ слова ЗАГЛАВНЫМИ буквами, А в ТОМ, насколько УДОБНО потом ТАКУЮ программу ЧИТАТЬ и ОСОЗНАВАТЬ, что ЖЕ там НАПИСАНО. Не ЗНАЮ как У вас, а ЛИЧНО у МЕНЯ взгляд СПОТЫКАЕТСЯ если ПОЛОВИНА слов НАПИСАНА в ДРУГОМ регистре. И читать ПРОГРАММУ становится СЛОЖНЕЕ. Хотя КОНЕЧНО и НАБИВАТЬ текст ПРОГРАММЫ, постоянно ПЕРЕКЛЮЧАЯ caps LOCK довольно НЕУДОБНО, но ТУТ хотя БЫ есть ПОМОЩЬ в ВИДЕ code COMPLETIONS, а ВОТ для ОБЛЕГЧЕНИЯ чтения ТАКИХ текстов АВТОМАТИКИ еще НЕ придумали.
    Ку...
    Re[12]: [5]: А знаете ли Вы что...
    От: Cyberax Марс  
    Дата: 08.10.05 11:33
    Оценка: +2 :)
    Пацак wrote:

    > а ВОТ для ОБЛЕГЧЕНИЯ чтения ТАКИХ текстов АВТОМАТИКИ еще НЕ придумали.


    НУ ПОЧЕМУ ЖЕ: МОЖНО ПРОСТО ВЕСЬ ТЕКСТ ПРЕОБРАЗОВАТЬ В ВЕРХНИЙ или нижний
    регистр. можно даже встроить это в ide.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[13]: [5]: А знаете ли Вы что...
    От: Пацак Россия  
    Дата: 08.10.05 11:35
    Оценка: +1
    Здравствуйте, Cyberax, Вы писали:

    C>НУ ПОЧЕМУ ЖЕ: МОЖНО ПРОСТО ВЕСЬ ТЕКСТ ПРЕОБРАЗОВАТЬ В ВЕРХНИЙ или нижний

    C>регистр. можно даже встроить это в ide.

    А тогда фиг ли смысла в этой идее?
    Ку...
    Re[12]: [5]: А знаете ли Вы что...
    От: AVC Россия  
    Дата: 08.10.05 13:44
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    СГ>>Что касается лично меня, то меня вовсе не раздражает писать служебные слова заглавными буквами, а даже наоборот — нравится.


    П>Сергей, ВОПРОС не В том, УДОБНО ли ВАМ писать СЛУЖЕБНЫЕ слова ЗАГЛАВНЫМИ буквами, А в ТОМ, насколько УДОБНО потом ТАКУЮ программу ЧИТАТЬ и ОСОЗНАВАТЬ, что ЖЕ там НАПИСАНО. Не ЗНАЮ как У вас, а ЛИЧНО у МЕНЯ взгляд СПОТЫКАЕТСЯ если ПОЛОВИНА слов НАПИСАНА в ДРУГОМ регистре. И читать ПРОГРАММУ становится СЛОЖНЕЕ. Хотя КОНЕЧНО и НАБИВАТЬ текст ПРОГРАММЫ, постоянно ПЕРЕКЛЮЧАЯ caps LOCK довольно НЕУДОБНО, но ТУТ хотя БЫ есть ПОМОЩЬ в ВИДЕ code COMPLETIONS, а ВОТ для ОБЛЕГЧЕНИЯ чтения ТАКИХ текстов АВТОМАТИКИ еще НЕ придумали.


    Обероновские тексты действительно легко читаются.
    Это может удивить (лично для меня это было несколько неожиданно), но это факт.
    Что касается постоянного переключения Caps Lock или клавиши Shift, зажатой в зубах , то это все выдумки.
    Например, я пишу while, а редактор сам меняет его на WHILE, что, кстати, является дополнительным способом моментально обнаруживать опечатки.

    А что касается чередований слов в верхнем и нижнем регистре, то давайте вспомним, что практически во всех редакторах Си-программ есть синтаксическая подсветка.

    Это чем-то принципиально отличается от Вашего примера?

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[13]: [5]: А знаете ли Вы что...
    От: Пацак Россия  
    Дата: 08.10.05 13:59
    Оценка: 1 (1) +5
    Здравствуйте, AVC, Вы писали:

    AVC>Обероновские тексты действительно легко читаются.

    AVC>Это может удивить (лично для меня это было несколько неожиданно), но это факт.

    Да не факт это... Я, например, об ваши с Сергеем примеры буквально глаза ломаю. Возможно к этому можно привыкнуть, может быть даже быстро привыкнуть. Но это уже совершенно другой вопрос.

    AVC>А что касается чередований слов в верхнем и нижнем регистре, то давайте вспомним, что практически во всех редакторах Си-программ есть синтаксическая подсветка.


    ... которая, как нетрудно убедиться по приведенному вами абзацу — глаз ломает гораздо меньше.

    AVC>Это чем-то принципиально отличается от Вашего примера?


    Конечно! Подсветка, в отличии от синтаксиса является отключаемой фичей. Притом — фичей редактора, а не языка. Если бы написание ключевых слов в верхнем регистре в Обероне не было бы обязательным, а входило бы в "правила хорошего тона" — лично у меня не возникло бы абсолютно никаких претензий.
    Ку...
    Re[12]: [5]: А знаете ли Вы что...
    От: Трурль  
    Дата: 09.10.05 13:24
    Оценка: +1
    Здравствуйте, Пацак, Вы писали:

    П>Сергей, ВОПРОС не В том, УДОБНО ли ВАМ писать СЛУЖЕБНЫЕ слова ЗАГЛАВНЫМИ буквами, А в ТОМ, насколько УДОБНО потом ТАКУЮ программу ЧИТАТЬ и ОСОЗНАВАТЬ, что ЖЕ там НАПИСАНО. Не ЗНАЮ как У вас, а ЛИЧНО у МЕНЯ взгляд СПОТЫКАЕТСЯ если ПОЛОВИНА слов НАПИСАНА в ДРУГОМ регистре. И читать ПРОГРАММУ становится СЛОЖНЕЕ. Хотя КОНЕЧНО и НАБИВАТЬ текст ПРОГРАММЫ, постоянно ПЕРЕКЛЮЧАЯ caps LOCK довольно НЕУДОБНО, но ТУТ хотя БЫ есть ПОМОЩЬ в ВИДЕ code COMPLETIONS, а ВОТ для ОБЛЕГЧЕНИЯ чтения ТАКИХ текстов АВТОМАТИКИ еще НЕ придумали.


    Хотелось бы заметить, что ВОПРОС УДОБНО ВАМ и т. п. — не СЛУЖЕБНЫЕ слова.
    Re[13]: [5]: А знаете ли Вы что...
    От: Пацак Россия  
    Дата: 09.10.05 13:42
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>Хотелось бы заметить, что ВОПРОС УДОБНО ВАМ и т. п. — не СЛУЖЕБНЫЕ слова.


    Ну и что? У тебя есть какое-нибудь логическое объяснение тому, что служебные слова надо писать заглавными буквами? Чтоб не было недоразумений — поясню: имеется в виду именно особенность синтаксиса языка, а не, скажем фича редактора, автоматически отображающего некий набор слов в верхнем регистре?
    Ку...
    Re[8]: почему я предпочёл паскалю си
    От: DJ KARIES Россия  
    Дата: 14.10.05 16:01
    Оценка:
    Здравствуйте, Andrei N.Sobchuck, Вы писали:

    VD>>Ага. А на пятом даже начинают понимать, что отличие это в худшую сторону.


    ANS>Угу. И на шестом осознают, что в лучшую сторону отличается С#.


    Гага. А на седьмом вкуривают, что Форт переруливает все эти паскали/си/асмы

    http://retroforth.org АО МММ
    http://likos.ru http://dkdens.narod.ru http://giref.forthworks.com
    Re: почему я предпочёл паскалю си
    От: siberia Россия http://siberiaway.com
    Дата: 17.10.05 01:39
    Оценка:
    Здравствуйте, DEMON HOOD, Вы писали:

    DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.



    на rsdn.ru приводятся тесты компилляторов на "аналогичных" примерах. Примеры простенькие. Но сколько же раз они были писаны с ошибками!
    Григорий Цуканов
    Re: Почему я перешёо с Java на C++ :) -Re: почему я предпоч
    От: ZayatsZ Россия  
    Дата: 19.10.05 17:35
    Оценка:
    Здравствуйте, _doctor, Вы писали:

    _>В нлубоком детстве, лет эдак в 12 довелось мне выучить Basic (вернее, его начала) по некой загадочной детской книге издательства МИР, за которую я до сих пор благодарен дяде


    Случайно не "Бейсик — это просто"?
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[14]: [5]: А знаете ли Вы что...
    От: alexeiz  
    Дата: 23.10.05 05:55
    Оценка: 3 (1) :)
    Здравствуйте, Пацак, Вы писали:

    П>Здравствуйте, Трурль, Вы писали:


    Т>>Хотелось бы заметить, что ВОПРОС УДОБНО ВАМ и т. п. — не СЛУЖЕБНЫЕ слова.


    П>Ну и что? У тебя есть какое-нибудь логическое объяснение тому, что служебные слова надо писать заглавными буквами?


    Когда Вирт постарел, ему стало трудно видеть маленькие буквы.
    Re[9]: почему я предпочёл паскалю си
    От: Gollum Россия  
    Дата: 28.10.05 11:00
    Оценка:
    Здравствуйте, DJ KARIES, Вы писали:

    DK>Гага. А на седьмом вкуривают, что Форт переруливает все эти паскали/си/асмы


    А на последнем они лежат на собственном пляже возле моря, рядом виднеется вилла с вертолетной площадкой. В море белеет яхта. Из языков программирования вспоминаются только названия и то — с трудом.
    Оркестр! Прощание славянки!
    Eugene Agafonov on the .NET

    Re[10]: почему я предпочёл паскалю си
    От: Andrei N.Sobchuck Украина www.smalltalk.ru
    Дата: 28.10.05 11:27
    Оценка:
    Здравствуйте, Gollum, Вы писали:

    G>вспоминаются только названия и то — с трудом.


    это не последний уровень, это последняя стадия.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Я ненавижу Hibernate
    Автор: Andrei N.Sobchuck
    Дата: 08.01.08
    !
    Re[3]: почему я предпочёл паскалю си
    От: Mikst  
    Дата: 18.11.05 15:54
    Оценка:
    Здравствуйте, Mystic, Вы писали:

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


    Y>>а на С++ я долго перейти не мог — синтаксис знал, но заставить себя писать никак не мог — не мог придумать достойную задачу. а потом таки придумал — начал писать JavaScript-подобный интерпретатор на С++, ну а дальше пошло-поехало


    M>Я до сих пор не могу перейти Тоже достойной задачи никак не могу придумать...


    Напиши что-нибудь под юникс, хоть что.
    Re[3]: почему я предпочёл паскалю си
    От: Mikst  
    Дата: 18.11.05 15:55
    Оценка:
    Здравствуйте, pavel_turbin, Вы писали:

    A>>6. Нет некоторых полезных операторов (тернарный, например)

    _>в Perl-e столько прикольных операторов, но мрак все равно полный.

    Perl рулит!
    Однозначна!
    Re[6]: почему я предпочёл паскалю си
    От: Mikst  
    Дата: 18.11.05 15:59
    Оценка:
    Здравствуйте, Algorithmus, Вы писали:

    A>Я и говорю, что для каждого класса задач есть "свой" язык программирования. Но так сложилось, что С и паскаль используются для решения похожих, а то и одинаковых задач. О том и разговор.

    A>А под языком "другого плана" я имел в виду то что C# и Java не могут быть использованы в некоторых сферах, в которых C и Pascal с успехом применяются.

    А вообще причем тут Язык и Сфера применения? Напишу компилятор который C# или Java в досовый екзешник скомпилирует — все будут только рады, только вот никто не напишет, ибо нефиг

    ssm>>>>замени функциями

    ssm>>ну а ты когда на C под дос писал, что тоже без ассемблера обходился?

    Да Конечно если не видеокарту "тюнил" (хотя и там port работало)

    A>Вопрос не в том, что я обходился без АСМа (а без него я не обходился), а в том, что некоторые моменты программирования можно упростить, чтобы программер сам не изобретал велосипед, и не воротил своих заменителей уже готовым конструкциям.
    Re[3]: почему я предпочёл паскалю си
    От: Whistler Россия Блог на GotDotNet.ru
    Дата: 28.11.05 08:21
    Оценка: +1 -2 :)))
    Здравствуйте, AndrewJD, Вы писали:

    Я тоже к вопросу присоединяюсь.

    Хотя я уже давным давно не пишу на Турбо-Паскале — он до сих пор в моем сознании остался как
    великолепнейший и красивый язык программирования.


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


    S>>P.S. Товарищи, я вас просто умоляю, давайте не будем устраивать священных войн!

    AJD>А сам даешь провакационные ответы без обоснований

    S>>Ну и замечательная экспрессивность Си, отсутствие всяких лишних и затрудняющих программирование фич,

    AJD>А что затрудняет программирование в паскале? Только не будем про begin end

    S>>красивый синтаксис,

    AJD>Весьма спорно, если речь идет о Си без плюсов. Но в принципе это дело вкуса


    S>>великолепные возможности по работу с железом...

    AJD>Какие такие возможности есть в Си и нету в Borland Pasсal?
    AJD>И какие вообще есть возможности по работе с железом у Си на уровне языка?

    Port[1..65536] : Byte, absolute, asm, Intr, Memory[$xxxxx]: Word — в Турбо Паскале
    тоже есть весь боекомплект для работы с "железом". Чем он в этом отношении
    хуже СИ?

    СИ-шники — вы параноики, до безобразия параноики. Думаю у вас комплекс неполноценности
    играет, что вы все так на паскалистов (делфистов) кидаетесь.

    Кидайтесь, кидайтесь. Я по работе программирую на си-шарпе один из немногих в своей конторе,
    также существует большая коалиция СИ-шников — которых мы постоянно "имеем" по качеству,
    срокам, да и вообще по ширине размаха мысли. Я бывший делфист — и горжусь этим.
    Re[5]: почему я предпочёл паскалю си
    От: Whistler Россия Блог на GotDotNet.ru
    Дата: 28.11.05 08:29
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>s.ts пишет:


    >> ... но как выяснилось, большинство пишущих на с++ пишут на нем в стиле

    >> плохого дельфи-кодераочень многие не могут даже на паскале нормально
    >> написать

    C>А большинство пишущих на Паскале/Дельфи — студенты и школьники. Говорить

    C>о качестве их кода или промолчать?

    Ответь за свой базар!

    C>Еще предлагаю посчитать среднюю температуру по программистам на Дельфи и

    C>С++.

    C>--

    C>С уважением,
    C> Alex Besogonov (alexy@izh.com)
    Re[6]: почему я предпочёл паскалю си
    От: Cyberax Марс  
    Дата: 28.11.05 10:10
    Оценка:
    Whistler wrote:

    > C>А большинство пишущих на Паскале/Дельфи — студенты и школьники.

    > Говорить
    > C>о качестве их кода или промолчать?
    > Ответь за свой базар!

    Да с удовольствием, давайте ваш адрес

    Про Pascal я даже и говорить не буду — я на нем помню только ОДНУ хоть
    сколько-то полезную софтину (тоссер для фидошки, если кто помнит что это
    значит). Да и устарел Паскаль тааааааааааааааак сильно, что про него и
    флеймить-то неприлично.

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

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[7]: почему я предпочёл паскалю си
    От: Трурль  
    Дата: 28.11.05 13:40
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Про Pascal я даже и говорить не буду — я на нем помню только ОДНУ хоть

    C>сколько-то полезную софтину (тоссер для фидошки, если кто помнит что это
    C>значит).

    Разная у людей память. Я вот ещё помню Quattro Pro. MultiEdit так до сих пор использую.
    А ещё некоторые TeX очень уважают.
    Re[8]: почему я предпочёл паскалю си
    От: Cyberax Марс  
    Дата: 28.11.05 13:48
    Оценка:
    Трурль wrote:

    > C>Про Pascal я даже и говорить не буду — я на нем помню только ОДНУ хоть

    > C>сколько-то полезную софтину (тоссер для фидошки, если кто помнит что
    > это
    > C>значит).
    > Разная у людей память. Я вот ещё помню Quattro Pro. MultiEdit так до
    > сих пор использую.

    Оба никогда не использовал.

    > А ещё некоторые TeX очень уважают.


    Он уже не на Паскале написан

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[9]: почему я предпочёл паскалю си
    От: Трурль  
    Дата: 28.11.05 14:13
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Он уже не на Паскале написан


    Что значит "уже не на Паскале"?

    % This program is copyright (C) 1982 by D. E. Knuth; all rights are reserved.
    ....
    % Version 3.141592 fixed \xleaders, glueset, weird alignments (December 2002).

    % A reward of $327.68 will be paid to the first finder of any remaining bug.
    ....
    This is \TeX, a document compiler intended to produce typesetting of high quality.
    ...
    This \TeX\ implementation conforms to the rules of the {\sl Pascal User
    @:PASCAL}{\PASCAL@>
    @^system dependencies@>
    Manual} published by Jensen and Wirth in 1975
    ....
    If this program is changed, the resulting system should not be called `\TeX';

    Re[2]: Почему я перешёо с Java на C++ :) -Re: почему я пред
    От: E. http://gluposti.h15.ru
    Дата: 29.11.05 16:31
    Оценка:
    Здравствуйте, ZayatsZ, Вы писали:

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


    _>>В нлубоком детстве, лет эдак в 12 довелось мне выучить Basic (вернее, его начала) по некой загадочной детской книге издательства МИР, за которую я до сих пор благодарен дяде


    ZZ>Случайно не "Бейсик — это просто"?
    Re[5]: почему я предпочёл паскалю си
    От: GreyJedi  
    Дата: 01.12.05 09:37
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>s.ts пишет:


    C>А большинство пишущих на Паскале/Дельфи — студенты и школьники. Говорить

    C>о качестве их кода или промолчать?

    Довайте поговорим о качестве кода студентов и школьников, пишущих на C++



    Сам я пишу на С++, начинал Паскаль->Delphi пекрешел на C++ так как нужна была перегрузка операторов. В добавок в Паскале нет шаблонов.
    Re[2]: почему я предпочёл паскалю си
    От: Stoune  
    Дата: 07.12.05 00:30
    Оценка:
    Здравствуйте, Кодёнок, Вы писали:


    Кё>Ну как раз против Си Паскаль держится очень уверенно

    Разве что в гробу, где ему и место. Си по прежнему широко используестся в системном програмировании(драйвера, ядро ОС) и в встроенных системах(контролеры, DSP, SoC) ни там, ни там Паскалю ничего не светит. С(не путать с С++) это эдакий переносимый макроассемблер, который достаточно легко портировать почти на любую платформу, и садится он на эти платформы очень гладко, бывает что перевод один в один инструкций в асм и другие языки з такими возможностями мне не ивестны. А Паскаль как язык решения прикладных задач своё отжил(Модула-2 и Оберон, это другие языки пускай с Паскалеподобным синтаксисом) и место ему только разве учить студентов и то из-за нехватки часов я предпочитаю начинать сразу с С, хотя мечтаю найти время и дописать програму для Python. Delphi тоже считаю уже немного другим языком.

    Кё>и лично я бы предпочел не очень удобный паскалевский синтаксис и ОО, чем Си и старательную эмуляцию ООП через структуры и хранимые в них указатели на функции. А вот современный C++ — совершенно другое дело.

    Ну там где не нужно ООП не используется и не эмулируется, а там где нужно создаётся компилятор С++ или по крайней мере через cfront переганяется в С.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[4]: почему я предпочёл паскалю си
    От: Stoune  
    Дата: 07.12.05 00:30
    Оценка:
    Здравствуйте, Whistler, Вы писали:

    S>>>великолепные возможности по работу с железом...

    AJD>>Какие такие возможности есть в Си и нету в Borland Pasсal?
    AJD>>И какие вообще есть возможности по работе с железом у Си на уровне языка?

    W>Port[1..65536] : Byte, absolute, asm, Intr, Memory[$xxxxx]: Word — в Турбо Паскале

    W>тоже есть весь боекомплект для работы с "железом". Чем он в этом отношении
    W>хуже СИ?
    Очень простой пример ++i, в большинстве своём переведётся в inc i, в случае с Паскалем нужен ещё оптимизатор, который нужно написать, но не факт что он не будет написан, которого может и не быть, дальше cdecl calling convension компактнее что для встроенных платформ значительное преимущество, дальше у языка есть много способов подсказать компилятору как лучше откомпилировать код,а работа с указателями и масивами это вообще песня, на Паскале это через жопу сделано. Создать компилятор для С достаточно легко, так как он просто в упрощении может в большинстве случаев рассматриватся как продвинутый переносимый макроассемблер. Но людям которые для железа ничего не писали это сложно понять, они мыслят в терминах настольных систем, которые здесь попросту неприменимы.

    W>СИ-шники — вы параноики, до безобразия параноики. Думаю у вас комплекс неполноценности

    W>играет, что вы все так на паскалистов (делфистов) кидаетесь.
    Анекдот про неуловимого Джо слышали, да не нужны вы нам, жизни радоватся можно тихо. Если речь идёт о С, то Паскалистов даже никто трогать не будет, покойники нам не конкуренты.
    W>Кидайтесь, кидайтесь. Я по работе программирую на си-шарпе один из немногих в своей конторе, также существует большая коалиция СИ-шников — которых мы постоянно "имеем" по качеству,
    Тогда почему не Delphi.NET? Синтаксис у шарпа с-подобный. Может всё таки вы чувствует у него какие-то недостатки?
    W>срокам, да и вообще по ширине размаха мысли. Я бывший делфист — и горжусь этим.
    Ну и что, а я писал на Borland C++ и OWL и считаю єто хорошим опытом и ничего. Собственно мне плевать на чём человек писал в прошлом, мне главное чтобы его прошлый опыт помогал решать мои задачи в настоящем, а в моей сфере такой опыт скорее всего будет бесполезен и даже вреден, так как люди привыкшие к визуальным средам просто теряются видя то убожество(я о IDE, хорошо если она вообще есть, а не блокнот) с которым им приходится работать и большинство убегают, так как приходится ещё и больше думать, это при том что зарплата в среднем на 30-40% выше чем та которую они получали бы "шарпая".

    А вообще если говорить о С, то С имеет широкое применение в нескольких сферах и там ему конкурентов пока не предвидится, а класический Паскаль умер и притом давно.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[6]: почему я предпочёл паскалю си
    От: Stoune  
    Дата: 07.12.05 00:30
    Оценка:
    Здравствуйте, DEMON HOOD, Вы писали:

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


    C>>А большинство пишущих на Паскале/Дельфи — студенты и школьники. Говорить

    DH>нескажи...
    DH>в одном из местных ВУЗов есть хорошая традиция
    DH>старшекурсники отдают младшим свои лабы\конспекты итд

    DH>но преподаватели они тоже не дураки

    DH>если в этом году курс программирование к примеру был на Делфи, то в следующем уже на билдере потом вижуал c
    DH>вобщем, вот такая защита от взлома
    Да ладно мне достаточно одной минуты чтобы понять писал ли работу сам студент или за него писали. Ну и у меня каждый семестр задания другие. а вобще выделеного времени на Делфи не хватает, потому чтобы успеть научить их что-то програмить сразу с С начинаю.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[6]: почему я предпочёл паскалю си
    От: Stoune  
    Дата: 07.12.05 00:30
    Оценка:
    Здравствуйте, GreyJedi, Вы писали:

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


    C>>s.ts пишет:


    C>>А большинство пишущих на Паскале/Дельфи — студенты и школьники. Говорить

    C>>о качестве их кода или промолчать?

    GJ>Довайте поговорим о качестве кода студентов и школьников, пишущих на C++

    GJ>Сам я пишу на С++, начинал Паскаль->Delphi пекрешел на C++ так как нужна была перегрузка операторов. В добавок в Паскале нет шаблонов.

    Моя Деградация:
    MSX Basic
    Borland Pascal 5.0
    Borland Pascal 7.0
    Borland C++ 3.0
    Turbo Assembler 5.0
    Borland C++ 5.0
    Visual C++ 5.0
    Visual C++ 6.0
    (а ещё VHDL, Verilog, Motorola DSP asm и ещё з пятёрка других асмов)
    Visual C++ .NET 2002
    Visual C++ .NET 2003
    Python, Tcl, Java(маленько)
    PSoC С & ASM + JavaScript
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[3]: почему я предпочёл паскалю си
    От: AndrewJD США  
    Дата: 07.12.05 10:16
    Оценка:
    Здравствуйте, Stoune, Вы писали:

    Кё>>Ну как раз против Си Паскаль держится очень уверенно

    S>Разве что в гробу, где ему и место. Си по прежнему широко используестся в системном програмировании(драйвера, ядро ОС)

    А ничего, что старые версии MacOS были написаны на паскале?
    "For every complex problem, there is a solution that is simple, neat,
    and wrong."
    Re[3]: почему я предпочёл паскалю си
    От: Трурль  
    Дата: 07.12.05 10:50
    Оценка:
    Здравствуйте, Stoune, Вы писали:


    S> Си по прежнему широко используестся в системном програмировании(драйвера, ядро ОС) и в встроенных системах(контролеры, DSP, SoC) ни там, ни там Паскалю ничего не светит.


    Вот это можно считать использованием Паскаля встроенных системах?
    Re[4]: почему я предпочёл паскалю си
    От: Cyberax Марс  
    Дата: 07.12.05 11:14
    Оценка: 1 (1)
    AndrewJD wrote:

    > Кё>>Ну как раз против Си Паскаль держится очень уверенно

    > S>Разве что в гробу, где ему и место. Си по прежнему широко
    > используестся в системном програмировании(драйвера, ядро ОС)
    > А ничего, что старые версии MacOS были написаны на паскале?

    Неправда. Старые версии MacOS были написаны на ассемблере (иначе не
    поместились бы в 128Kb первого Mac'а).

    Правда, была неудачная разработка под названием Lisa — там была
    встроенная Паскаль-машина, но ядро ОС тоже было на ассемблере.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0
    Sapienti sat!
    Re[5]: почему я предпочёл паскалю си
    От: AndrewJD США  
    Дата: 07.12.05 11:47
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Неправда. Старые версии MacOS были написаны на ассемблере (иначе не

    C>поместились бы в 128Kb первого Mac'а).

    Ну я не имел ввиду столь древние маки
    "For every complex problem, there is a solution that is simple, neat,
    and wrong."
    Re[6]: почему я предпочёл паскалю си
    От: Cyberax Марс  
    Дата: 07.12.05 12:50
    Оценка:
    AndrewJD wrote:

    > C>Неправда. Старые версии MacOS были написаны на ассемблере (иначе не

    > C>поместились бы в 128Kb первого Mac'а).
    > Ну я не имел ввиду столь древние маки

    На более новых Маках ОС уже на С написана. Они все переписали на С/C++
    (включая паскалевский код с Лизы) где-то в начале 90-х годов.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0
    Sapienti sat!
    Re[5]: почему я предпочёл паскалю си
    От: Трурль  
    Дата: 07.12.05 14:28
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Неправда. Старые версии MacOS были написаны на ассемблере (иначе не

    C>поместились бы в 128Kb первого Mac'а).

    From Wikipedia, the free encyclopedia:

    Much of the original Macintosh operating system was written in Pascal,


    C>Правда, была неудачная разработка под названием Lisa

    Неудачная она была в том смысле, что слишком хорошая.
    1MB RAM в эпоху, когда большинство довольствовалось 64K.
    Re[6]: почему я предпочёл паскалю си
    От: Cyberax Марс  
    Дата: 07.12.05 15:09
    Оценка:
    Трурль wrote:

    > C>Неправда. Старые версии MacOS были написаны на ассемблере (иначе не

    > C>поместились бы в 128Kb первого Mac'а).
    > From Wikipedia, the free encyclopedia:
    > Much of the original Macintosh operating system was written in Pascal,

    Где именно? Я поправлю эту неточность... В System 1.0 на Паскале было
    написано всего несколько утилит, в ядре его даже близко не было (там все
    до байт оптимизировали).

    Вот в Lisa был встроен интерпретатор Паскаля и достаточно много софта
    было написано на нем, в том числе и ассемблер/редактор ресурсов для
    Mac'а. Весь этот софт постепенно переписали на С/asm.

    Вот более полная статья: http://en.wikipedia.org/wiki/Mac_OS_history
    Есть еще замечательный сайт: http://folklore.org/index.py

    > C>Правда, была неудачная разработка под названием Lisa

    > Неудачная она была в том смысле, что слишком хорошая.

    Скорее слишком дорогая — $10000. По такой цене тогда продавались гораздо
    более мощные рабочие станции.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0
    Sapienti sat!
    Re[7]: почему я предпочёл паскалю си
    От: AndrewJD США  
    Дата: 07.12.05 16:10
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>На более новых Маках ОС уже на С написана. Они все переписали на С/C++

    C>(включая паскалевский код с Лизы) где-то в начале 90-х годов.

    Можешь указать конкретную версию? И по чему весь API был с паскалевскими строками?
    "For every complex problem, there is a solution that is simple, neat,
    and wrong."
    Re[8]: почему я предпочёл паскалю си
    От: Cyberax Марс  
    Дата: 07.12.05 16:39
    Оценка:
    AndrewJD wrote:

    > C>На более новых Маках ОС уже на С написана. Они все переписали на С/C++

    > C>(включая паскалевский код с Лизы) где-то в начале 90-х годов.
    > Можешь указать конкретную версию? И по чему весь API был с
    > паскалевскими строками?

    Чего именно? MacOS на Паскале никогда не писалась (хотя ходят слухи, что
    для первой версии взяли результат компиляции части Pascal-кода Lisa, а
    потом доводили его руками), блоки на С там начали появляться в конце
    80-х (с появлением качественных компиляторов).

    При переходе на PowerPC (т.е. в 93-94) ядро ОС переписали на С, а для
    совместимости со старым кодом использовали эмулятор m68k.

    Паскалевские строки задумывались для легкой интероперабельности с
    Паскаль-программами. Ну и наследие Лизы тоже к этому подталкивало.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0
    Sapienti sat!
    Re[9]: почему я предпочёл паскалю си
    От: AndrewJD США  
    Дата: 07.12.05 19:56
    Оценка:
    Здравствуйте, Cyberax, Вы писали:


    C>Чего именно? MacOS на Паскале никогда не писалась (хотя ходят слухи, что

    C>для первой версии взяли результат компиляции части Pascal-кода Lisa, а
    C>потом доводили его руками), блоки на С там начали появляться в конце
    C>80-х (с появлением качественных компиляторов).

    C>При переходе на PowerPC (т.е. в 93-94) ядро ОС переписали на С, а для

    C>совместимости со старым кодом использовали эмулятор m68k.

    The MacOS was originally written in Pascal, and the syntax of system calls sometimes show this origin. Pascal programmers will immediately recognize some of the "types" used by the Mac OS managers. C language programmers should take the time to learn the associated types (with special attention to Pascal's length based approach to string handling). Most MacOS based C language compilers provide versions of the headers that declare the common structures in C syntax, but Apple and other third party supplied Mac Toolbox documentation frequently is only available in the "Pascal" flavor.


    2 года назад, когда писал по мак, на developer.apple.com читал про паскалевские корни. Сейчас к сожалению найти ссылку не могу.


    C>Паскалевские строки задумывались для легкой интероперабельности с

    C>Паскаль-программами. Ну и наследие Лизы тоже к этому подталкивало.

    А pascal соглашения о передачи параметров? Для С это не естественно.
    Кроме того, почему до сих пор Universal Interfaces поставляются с интерфейсными файлами для паскаля.

    Кстати в *.h фалах встречаются коментарии типа:

    AppleEvents.h

    AEEventSource is defined as an SInt8 for compatability with pascal.

    "For every complex problem, there is a solution that is simple, neat,
    and wrong."
    Re[10]: почему я предпочёл паскалю си
    От: alexeiz  
    Дата: 08.12.05 07:29
    Оценка: 2 (1)
    Здравствуйте, AndrewJD, Вы писали:

    AJD>

    AJD>The MacOS was originally written in Pascal, and the syntax of system calls sometimes show this origin. Pascal programmers will immediately recognize some of the "types" used by the Mac OS managers. C language programmers should take the time to learn the associated types (with special attention to Pascal's length based approach to string handling). Most MacOS based C language compilers provide versions of the headers that declare the common structures in C syntax, but Apple and other third party supplied Mac Toolbox documentation frequently is only available in the "Pascal" flavor.


    С таким же успехом можно сказать, что Windows была написана на Паскале. Ты не помнишь в 3.0 системные вызовы имели PASCAL calling convention (сейчас это называется __stdcall)? Но это всего лишь calling convention и не более того. Из этого нельзя сделать вывод, что OS написана на Паскале.

    Кстати, такой метод вызова функций существует вовсе не из-за интеропа с Паскалем. Он позволяет сделать код вызова функции немного меньше.
    Re[11]: почему я предпочёл паскалю си
    От: AndrewJD США  
    Дата: 08.12.05 11:07
    Оценка:
    Здравствуйте, alexeiz, Вы писали:

    A>С таким же успехом можно сказать, что Windows была написана на Паскале. Ты не помнишь в 3.0 системные вызовы имели PASCAL calling convention (сейчас это называется __stdcall)?


    stdcall и pascal — это совершено разные соглашения о вызовах.


    A>Но это всего лишь calling convention и не более того. Из этого нельзя сделать вывод, что OS написана на Паскале.

    Соглашения о вызовах. Типы данных. Всего ничего.
    "For every complex problem, there is a solution that is simple, neat,
    and wrong."
    Re[12]: почему я предпочёл паскалю си
    От: alexeiz  
    Дата: 08.12.05 23:35
    Оценка:
    Здравствуйте, AndrewJD, Вы писали:

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


    A>>С таким же успехом можно сказать, что Windows была написана на Паскале. Ты не помнишь в 3.0 системные вызовы имели PASCAL calling convention (сейчас это называется __stdcall)?


    AJD>stdcall и pascal — это совершено разные соглашения о вызовах.


    Посмотри лучше windef.h.


    A>>Но это всего лишь calling convention и не более того. Из этого нельзя сделать вывод, что OS написана на Паскале.

    AJD>Соглашения о вызовах. Типы данных. Всего ничего.

    Я тебе уже объяснял зачем нужна PASCAL calling convention. Типы данных для того же. Не имеют они к паскалю никакого отношения. Строки есть там с длинной в начале, ну и что? OLESTR — тоже, наверное, из паскаля пришла. Дас...
    Re[8]: почему я предпочёл паскалю си
    От: Stoune  
    Дата: 12.12.05 00:54
    Оценка:
    Здравствуйте, Algorithmus, Вы писали:

    >>можно и на XSLT положить и сделать все при помощи XML парсера, мы ведь не ищем легких путей! правда?


    A>Ага... Недавно учавствовал в обсуждении проекта, который взялись делать программеры, недавно закончившие читать книгу по С++

    A>Вот там и было что-то типа "Легких путей не ищем"... Ничё, сократили раза в 4

    Надеюсь програмеров
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[10]: почему я предпочёл паскалю си
    От: Stoune  
    Дата: 12.12.05 00:54
    Оценка:
    Здравствуйте, Gollum, Вы писали:

    G>Здравствуйте, DJ KARIES, Вы писали:


    DK>>Гага. А на седьмом вкуривают, что Форт переруливает все эти паскали/си/асмы


    G>А на последнем они лежат на собственном пляже возле моря, рядом виднеется вилла с вертолетной площадкой. В море белеет яхта. Из языков программирования вспоминаются только названия и то — с трудом.


    Програмерская Валгалла. А на могилке программера чветут васильки.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[4]: почему я предпочёл паскалю си
    От: Stoune  
    Дата: 12.12.05 01:57
    Оценка:
    Здравствуйте, Трурль, Вы писали:

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



    S>> Си по прежнему широко используестся в системном програмировании(драйвера, ядро ОС) и в встроенных системах(контролеры, DSP, SoC) ни там, ни там Паскалю ничего не светит.


    Т>Вот это можно считать использованием Паскаля встроенных системах?


    Какая серия этого творения, я так понял дальше инженерного образца дело не пошло. Тзвините но на одну такую поделку иначе я не скажу, потому что человек потратил кучу ненужных усилий на то чтобы "притянуть" Паскаль к железу. Отношение к програмисту как к чистому кодэру тоже не вдохновляет, хотя зная какие сейчас там платят зарплаты действительно он только кодэров нанять и сможет. Апаратная платформа абсолютно неизвесна так что даже как пример не катит. Ну и на одну такую поделку, которую кстати оплачивают из вашего кармана приходятся десятки тысяч С-систем. Например недавний пример, прошивка USB-мыши для достаточно извесной фирмы на С + асм и мне даже в страшном сне не приснилось бы терять время чтоб писать для этой платформы Паскаль компилятор.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[2]: почему я предпочёл паскалю си
    От: Nikola-2  
    Дата: 14.01.06 09:25
    Оценка: -1
    DH>>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.


    Как может быть хорошим язык, в котором переменные обьявляются в любом месте?
    Язык должен быть по возможнеости строгим.
    Re[3]: почему я предпочёл паскалю си
    От: WolfHound  
    Дата: 14.01.06 10:52
    Оценка: +3
    Здравствуйте, Nikola-2, Вы писали:

    N2>Как может быть хорошим язык, в котором переменные обьявляются в любом месте?

    Ну переменные вобщето объявляются не в любом месте. Но и паскалевсого маразма с блоком var нет.
    N2>Язык должен быть по возможнеости строгим.
    Одно другому не мешает.
    А если уметь использовать RAII то паскаль выглядит как каменный топор.
    ... << RSDN@Home 1.1.4 beta 6a rev. 436>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[2]: почему я предпочёл паскалю си
    От: xStream  
    Дата: 16.01.06 11:05
    Оценка:
    Здравствуйте, slegkapjan, Вы писали:

    Идея правильная — каждый язык создается для своих нужд. НО программист — это чесовек пишущий программы => все языки созданы для программистов.
    А Си это язык для написания системных программ.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[2]: А знаете ли Вы что...
    От: xStream  
    Дата: 16.01.06 11:05
    Оценка:
    А ты в курсе, что это новый явыз (а не Pascal) называемый Oberon, а Companent Pascal это его мод.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[7]: А знаете ли Вы что...
    От: Stoune  
    Дата: 22.01.06 22:35
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Сергей Губанов пишет:


    >> C>Да???? Это С++ с его механизмом раздельной компиляции — не модульный

    >> C>язык????
    >> Да, именно так.
    Вообще то С++ мультипарадигменный язык.



    C>Кстати, в стандарте С++ есть такая фича: export templates. То есть

    C>экспортированные в БИНАРНОМ виде шаблоны. Ее, правда, поддерживает всего
    C>пара компиляторов (просто оказалось, что такая фича не особо и нужна).
    Такой компилятор EDG, и фича эта не для экспорта бинарных шаблонов, так как неинстанциированный шаблон експортировать нет возможности, export не выполнил возлагавшихся на него надежд и рано или позно его или удалят или переопределят смысл, так как толку от него сейча 0.



    P.S. Я не оберонщик и судя по всему никогда им не стану, у меня другая религия Python
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[6]: А знаете ли Вы что...
    От: Stoune  
    Дата: 22.01.06 22:35
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, tarkil, Вы писали:



    СГ>templates — грубо говоря подстановка на уровне исходного текста (в runtime никаких templates нету)

    Грубо говоря ядерная боеголовка єто модернизированая дубина, а Оберон грубо говоря это Паскаль следуя вашей логике. Подстановка исходного текста это Макросы препроцесора, а templates, это мощный апарат вывода типов, частичной параметризации и много чего другого, по сути их мощь смогли оценить наверное после Александрэску только в 2000-м, templates в С++ это ещё один язык внутри языка.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 23.01.06 12:37
    Оценка:
    DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.

    А у меня вот наоборот, как понял, что функции в C нельзя объявлять там где надо, а можно только на верхнем самом уровне файла — так и плянул
    Re[5]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 23.01.06 12:42
    Оценка:
    S>Очень простой пример ++i, в большинстве своём переведётся в inc i, в случае с Паскалем нужен ещё оптимизатор,

    Нет, в случае с Паскалем нужно Inc(i); писать

    S> Но людям которые для железа ничего не писали это сложно понять,


    О! Т.е. C — узкоспециализированный язык для крохотных кристаллов. "машинно-независимый ассемблер". А где и он толстоват — етсь C--. Ну и нехай, там можно

    S> а класический Паскаль умер и притом давно.

    Да он и не жил никогда, ибо не должен был.
    Re[2]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 23.01.06 12:43
    Оценка:
    S>Borland C++ 3.1 -- это же классика!!

    Это да! Компилируем программу — перезагрузка. Ещё раз — ещё перезагрузка, контрольная. Ставим точки с запятой между функциями — компилируется.
    Ох, классика-копейка!
    Re[4]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 23.01.06 12:49
    Оценка:
    G>был такой VisualAge for C++ v.3.6.

    Не знашеь ,случайно, насколько на него был похож VA for Java ? И насколько на VA for Java похож на eclipse.org ?
    Re[4]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 23.01.06 12:52
    Оценка:
    M>Напиши что-нибудь под юникс, хоть что.

    А что это за эзотерический юникс, под который паскаля нет? и где его найти м железом, чтобы под него писать ? :D
    Re[4]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 23.01.06 13:09
    Оценка:
    AJD>>AFAIK в то время у сишных компилеров тоже не было оптимизаторов. А компилер очень быстрый

    А опимизирующий линкер, выкидывающий из библиотек (не исходников, а скажем так .LIB+OBJ) весь неиспользуемый код — когда в C++ появился ?

    AJD>> А куда она делась?

    A>А ты хочешь сказать, что в Паскале можно свободно писать A := B + 2, где A и B — указатели?
    А зачем? динамические массивы ?

    A>А если ты имеешь в виду Inc(Longint(A)), то это никакая не арифметика указателей, а один из возможных выходов из ситуации.

    Это не выход. Исключая случай, что A — однобайтовый.
    Выход скорее — Pred & Succ.

    AJD>>Не дает отстрелить ногу по самую шею. Но в принципе все те же возможности что и в си


    A>Да? Чтобы объявить указатель на указатель, сколько кода написать нужно?


    Кода ?
    var pp: ^Pointer;
    Сколько тут кода ?

    A> А как тебе работа с

    A>динамическим массивом?
    В чистом виде, с SetLength(), Length() и т.д. не было до довольно поздних Delphi.
    Через type dynarr=array[0..0] of xxx, а потом класть это на heap — по крайней мере в TP5.5

    A>Но при работе с символами и их кодами, например, постоянные Ord, Chr и т.д. меня раздражают.

    Обойти можно. Вот обойти чрезмерное приведение в компиляторе C — труднее
    type str = array [0..100] of char; data: array [0..100] of byte;
    var x: str; y: data absolute x; // На ДВК/УКНЦ/БК даже красивее - var y origin x: data;


    AJD>>есть и обьединения и перечисления и даже множества

    A>Открой глаза незнающему, пожалуйста. Как в паскале объявить объединение?
     type union = record Name: string (* и ещё что-нибудь *) case byte of 0: (asInt: integer); 1: (asPtr: pointer); end;


    Хммм, а о каком памкале речь-то идет, что в нем этого не было?

    A> Перечисление?

    Как раз оно-то вроде в C из Паскаля перешло.
    Правда, с улучшениями, можно было написать {value0,value1,value2,value10=10,value11}
    В паскале только подряд, 0,1,2,3.....

    A>Постоянно нужно лезть к двоеточию... Это СУГУБО СУБЪЕКТИВНАЯ мысль. Кому-то == не нравится в сравнении...

    +1
    Cпасите меня от сливающегося на старых плохих мониторах ==, а с := я и сам разберусь

    Вот += иногда не хватало, в отсутсвие оптимизации.
    Re[6]: [3]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 23.01.06 13:10
    Оценка:
    AVK>А я бы C#

    Т.е. ты и остался Дельфинистом ? :D
    Re[4]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 23.01.06 13:14
    Оценка: -1 :)
    DH>>
    DH>>for (int x=0;x<3;x++){}
    DH>>

    GZ>Еще не надо забывать, что это время жизни объекта. Что есть вери гуд. И чего нет в пасквиле.

    Угу, в нём гораздо лучше:

    with TSomeClass.Create do try
    ...
    ...
    finally
      Free;
    end;
    Re[5]: почему я предпочёл паскалю си
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 23.01.06 13:20
    Оценка:
    Здравствуйте, Arioch2, Вы писали:

    DH>>>
    DH>>>for (int x=0;x<3;x++){}
    DH>>>

    GZ>>Еще не надо забывать, что это время жизни объекта. Что есть вери гуд. И чего нет в пасквиле.

    A>Угу, в нём гораздо лучше:


    A>
    A>with TSomeClass.Create do try
    A>...
    A>...
    A>finally
    A>  Free;
    A>end;
    A>


    За with убивал бы — делает код ужасно нечитаемым
    Re[3]: А знаете ли Вы что...
    От: Arioch2  
    Дата: 23.01.06 13:24
    Оценка:
    Кё> удалили interface/implementation

    Таки нету.
    Вместо интерфейса рядом с объявлением функции ставится звездочка.
    Re[3]: А знаете ли Вы что...
    От: Arioch2  
    Дата: 23.01.06 13:25
    Оценка:
    S>А ты в курсе, что это новый явыз (а не Pascal) называемый Oberon, а Companent Pascal это его мод.

    А точнее, кажется, Oberon/F. А потом переименовали и стал он таки Паскалем.
    Re[6]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 23.01.06 13:49
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>За with убивал бы — делает код ужасно нечитаемым


    Зависит от привычки, во-первых.
    Во-вторых не нужно так оборпачивать большие куски блока (а и не получится, писать резко станет намного труднее).

    Мне например сишный for не нравится. Честный while читать куда как проще, чем этот препроцессор
    Re[5]: почему я предпочёл паскалю си
    От: Cyberax Марс  
    Дата: 23.01.06 14:21
    Оценка:
    Arioch2 wrote:
    > AJD>>AFAIK в то время у сишных компилеров тоже не было оптимизаторов. А
    > компилер очень быстрый
    > А опимизирующий линкер, выкидывающий из библиотек (не исходников, а
    > скажем так .LIB+OBJ) весь неиспользуемый код — когда в C++ появился ?
    Где-то в районе 84 года. Для С появился еще в 70-х.

    > A>А ты хочешь сказать, что в Паскале можно свободно писать A := B + 2,

    > где A и B — указатели?
    > А зачем? динамические массивы ?
    Не только. В частности, указатели являются частным случаем итераторов,
    которые используются в обобщенных алгоритмах.

    > A>Да? Чтобы объявить указатель на указатель, сколько кода написать нужно?

    > Кода ?
    > var pp: ^Pointer;
    > Сколько тут кода ?
    К указателям обращаться не так удобно.

    > A> А как тебе работа с

    > A>динамическим массивом?
    > В чистом виде, с SetLength(), Length() и т.д. не было до довольно
    > поздних Delphi.
    > Через type dynarr=array[0..0] of xxx, а потом класть это на heap — по
    > крайней мере в TP5.5
    Ага, я помню. Объявлялся массив в 65536 элементов, а потом создавался в
    куче (обычно много меньшего размера). Замечательная понятность...

    > Обойти можно. Вот обойти чрезмерное приведение в компиляторе C — труднее

    > type str = array [0..100] of char; data: array [0..100] of byte;
    > var x: str; y: data absolute x; // На ДВК/УКНЦ/БК даже красивее — var y origin x: data;
    А зачем такое? В С++ это считается хаком — а в Паскале обходом типизации.

    Но если уж очень надо...
    union
    {
        char str[100];
        byte data[100];
    };

    Ничуть не менее понятно...

    > AJD>>есть и обьединения и перечисления и даже множества

    > A>Открой глаза незнающему, пожалуйста. Как в паскале объявить объединение?
    > type union = record Name: string (* и ещё что-нибудь *) case byte of 0: (asInt: integer); 1: (asPtr: pointer); end;
    Это discriminated union, а не объединение в понятии С. В С++, кстати,
    есть гораздо более мощный boost::variant.

    А вообще, в Pascal'е нет темплейтов и обобщенного программирования. Нет
    умных указателей (при ручном управлениии памятью!), нет множественного
    наследования (а хотелось бы), нет перегрузки операторов (вспомню как
    писал 3D-графику с кватернионами и матрицами — в дрожь бросает).
    Posted via RSDN NNTP Server 2.0
    Sapienti sat!
    Re[6]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 23.01.06 15:11
    Оценка: -1
    C>Где-то в районе 84 года. Для С появился еще в 70-х.

    Тут писали "Для меня "то время" — это время, когда я писал под ДОС (1995-1998). "
    Было это под DOS ?

    C>Не только. В частности, указатели являются частным случаем итераторов,


    итераторы — это где надо +1 / -1 ?
    Pred & Succ

    C>К указателям обращаться не так удобно.


    ???


    C>Ага, я помню. Объявлялся массив в 65536 элементов,

    в 1 элемент.
    С чем сравнить ? объявился указатель и стал массивом ? Дело вкуса.

    Кстати еще размер массива в 64кб max, действительно. Но тут меньше паскаль и больше ограничения 16 бит x86.


    >> Обойти можно. Вот обойти чрезмерное приведение в компиляторе C — труднее

    >> type str = array [0..100] of char; data: array [0..100] of byte;
    >> var x: str; y: data absolute x; // На ДВК/УКНЦ/БК даже красивее — var y origin x: data;
    C>А зачем такое? В С++ это считается хаком — а в Паскале обходом типизации.

    Да вот приведение char к byte/shortint человеку надо, а Ord(x) писать надоело.
    Это только к тому и относилось. Массовое приведение char к int я хаком и считаю.

    C>Ничуть не менее понятно...


    Ты кажется сбился с фазы
    Это не я доказываю, что Паскаль всех нагнет. Это человеку я отвечаю, как не только в С, но и в Паскале можно то, то и это

    >> AJD>>есть и обьединения и перечисления и даже множества

    >> A>Открой глаза незнающему, пожалуйста. Как в паскале объявить объединение?
    >> type union = record Name: string (* и ещё что-нибудь *) case byte of 0: (asInt: integer); 1: (asPtr: pointer); end;
    C>Это discriminated union, а не объединение в понятии С.

    в чём разница ?

    C> В С++, кстати,

    C>есть гораздо более мощный boost::variant.

    Сравни год появление boost и, скажем Turbo Pascal 4.0

    C>А вообще, в Pascal'е нет темплейтов и обобщенного программирования.


    Увы. Но, наверное, с выходом .Net 2 будет.

    C>умных указателей (при ручном управлениии памятью!),


    Есть интерфейсы. умных указателей на отдельный integer и правда нет, но нужны ли ?

    C> нет множественного наследования (а хотелось бы),


    "nj уже не сюда, а в соседнюю ветку, C++ мы С++ :D

    C>нет перегрузки операторов (вспомню как

    C>писал 3D-графику с кватернионами и матрицами — в дрожь бросает).

    Нету. Но как-то это напоминает войну с begin и end
    Re[7]: почему я предпочёл паскалю си
    От: Cyberax Марс  
    Дата: 23.01.06 15:24
    Оценка:
    Arioch2 wrote:
    > C>Где-то в районе 84 года. Для С появился еще в 70-х.
    > Тут писали "Для меня "то время" — это время, когда я писал под ДОС
    > (1995-1998). "
    > Было это под DOS ?
    Было. Насчет Borland C++ не уверен, но в Watcom точно было (я как раз в
    то время в нем писал). В DJGPP тоже было с момента создания.

    > C>Не только. В частности, указатели являются частным случаем итераторов,

    > итераторы — это где надо +1 / -1 ?
    Не только, еще бывает нужна арифметика итераторов и изменение на заданую
    величину.

    > C>К указателям обращаться не так удобно.

    > ???
    Арифметика очень неудобна.

    > C>Ага, я помню. Объявлялся массив в 65536 элементов,

    > в 1 элемент.
    Нет, именно в 65536, иначе Паскаль жаловался на переполнение массива.
    Хотя сейчас уже точно и не вспомню.

    > С чем сравнить ? объявился указатель и стал массивом ? Дело вкуса.

    Указатель в С++ массивом не становится — это разные вещи, просто доступ
    к массиву идет через указатель(в С есть тождество: A[i]==*(A+i)==i[A]).

    > C>А зачем такое? В С++ это считается хаком — а в Паскале обходом типизации.

    > Да вот приведение char к byte/shortint человеку надо, а Ord(x) писать
    > надоело.
    Так char ведь _это_ _и_ _есть_ байт (в большинстве случаев). С ним
    возможна нормальная арифметика с обычными правилами integer
    promotion'ов. Почему в Паскале тип 'char' считается особым — мне
    непонятно, так как это преимуществ никаких не дает.

    > Это только к тому и относилось. Массовое приведение char к int я хаком и

    > считаю.
    Почему?

    >> > type union = record Name: string (* и ещё что-нибудь *) case byte of

    > 0: (asInt: integer); 1: (asPtr: pointer); end;
    > C>Это discriminated union, а не объединение в понятии С.
    > в чём разница ?
    В слове "discriminated" — то есть в структуре в виде скрытого поля
    записывается "дискриминатор", показывающий какой тип активен. В union'ах
    дискриминатора нет. Стандартный пример:
    union IPAddress
    {
        long long quad;
        long word[2];
        long byte[4];
    };
    
    IPAddress adr;
    adr.byte[0]=1; adr.byte[1]=2; ...
    write(sock,&adr.quad,sizeof(long long));


    > C> В С++, кстати,

    > C>есть гораздо более мощный boost::variant.
    > Сравни год появление boost и, скажем Turbo Pascal 4.0
    И что? В Delphi оно до сих пор удобнее не стало.

    > C>умных указателей (при ручном управлениии памятью!),

    > Есть интерфейсы. умных указателей на отдельный integer и правда нет, но
    > нужны ли ?
    Интерфейсы в TP4? Либо говорим о современном Паскале (aka Delphi), либо
    о древних версиях.

    > C>нет перегрузки операторов (вспомню как

    > C>писал 3D-графику с кватернионами и матрицами — в дрожь бросает).
    > Нету. Но как-то это напоминает войну с *begin* и *end*
    Перегрузка _реально_ упрощает программы со сложными вычислениями с
    нестандартными объектами.
    Posted via RSDN NNTP Server 2.0
    Sapienti sat!
    Re[5]: почему я предпочёл паскалю си
    От: WolfHound  
    Дата: 23.01.06 15:45
    Оценка: +1
    Здравствуйте, Arioch2, Вы писали:

    GZ>>Еще не надо забывать, что это время жизни объекта. Что есть вери гуд. И чего нет в пасквиле.

    A>Угу, в нём гораздо лучше:
    Сравним?
    {
        File file1("file1");
        File file2("file2");
        File file3("file3");
        File file4("file4");
        File file5("file5");
        File file6("file6");
        File file7("file7");
        File file8("file8");
        File file9("file9");
        //Тут работаем.
    }

    Повтори на паскале...

    ЗЫ А за with надо на месте руки отрывать.
    ... << RSDN@Home 1.1.4 beta 6a rev. 436>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[8]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 23.01.06 16:50
    Оценка: +1
    Здравствуйте, Cyberax, Вы писали:

    >> C>Не только. В частности, указатели являются частным случаем итераторов,

    >> итераторы — это где надо +1 / -1 ?
    C>Не только, еще бывает нужна арифметика итераторов и изменение на заданую
    C>величину.

    Все же реже

    >> C>К указателям обращаться не так удобно.

    >> ???
    C>Арифметика очень неудобна.

    Это уже повтор.

    >> C>Ага, я помню. Объявлялся массив в 65536 элементов,

    >> в 1 элемент.
    C>Нет, именно в 65536, иначе Паскаль жаловался на переполнение массива.
    C>Хотя сейчас уже точно и не вспомню.

    Проверка границ массивов может включаться и отключаться, если ты про это.
    Или ты про ограничение сверху? Оно было на размер массива, чтобы он целиком убирался в 64Кб.
    Убрано в 32-битный компиляторах типа VirtualPascal.

    >> С чем сравнить ? объявился указатель и стал массивом ? Дело вкуса.

    C>Указатель в С++ массивом не становится — это разные вещи, просто доступ
    А это уже, применительно к чтению исxодников, и етсь привычка.
    C>к массиву идет через указатель(в С есть тождество: A[i]==*(A+i)==i[A]).
    Особенно это тождество смотрится, если A — структура.

    >> C>А зачем такое? В С++ это считается хаком — а в Паскале обходом типизации.

    >> Да вот приведение char к byte/shortint человеку надо, а Ord(x) писать
    >> надоело.
    C>Так char ведь _это_ _и_ _есть_ байт (в большинстве случаев).
    Не в Паскале, там это разные типы.

    C>promotion'ов. Почему в Паскале тип 'char' считается особым — мне

    C>непонятно, так как это преимуществ никаких не дает.

    Да ну? В C конечно не дает. Насчет C++ сходу не скажу, но думаю там будут свои заморочки.
    А вот возможность сложить 5 обычных char и 10 юникодных и без всяких путаниц получить строчку из 15 символов — даёт. И отсутствие путаницы — именно потому что char — не число.
    А вот чем мешает Ord() — вопрос.
    И то и другое по большому счету синтаксический сахар маловажный, но мне больше приятен паскалевский.

    >> Это только к тому и относилось. Массовое приведение char к int я хаком и

    >> считаю.
    C>Почему?
    Массовое не в смысле объема данных, а в смысле объема кода.
    Если мне нужно зашифровать/заархивировать буфер, или колдировку сменить и т.д. — то преобразование типов выполняется один раз, хоть в цикле по букве, хоть сразу над буфером.

    >>> > type union = record Name: string (* и ещё что-нибудь *) case byte of

    >> 0: (asInt: integer); 1: (asPtr: pointer); end;
    >> C>Это discriminated union, а не объединение в понятии С.
    >> в чём разница ?
    C>В слове "discriminated" — то есть в структуре в виде скрытого поля
    C>записывается "дискриминатор", показывающий какой тип активен.

    Так и думал.
    Чистый Pascal мёртв и никогда не жил.
    В Turbo такого не было никогда.

    Перечитай мой пример, пожалуйста. Я там после case не просто так поставил не имя переменной-члена, а тип.

    >> C> В С++, кстати,

    >> C>есть гораздо более мощный boost::variant.
    >> Сравни год появление boost и, скажем Turbo Pascal 4.0
    C>И что? В Delphi оно до сих пор удобнее не стало.
    дженериков в Delphi нет. Уже говорили.

    Но отвечал я на вопрос человека, заговорившего про конкретный промежуток времени и конкретную OS

    C>Интерфейсы в TP4? Либо говорим о современном Паскале (aka Delphi), либо

    C>о древних версиях.
    Вот-вот. Так шаг за шагом начинаем говорить ни о чём. Я отвечал ... не хочу повторяться

    C>Перегрузка _реально_ упрощает программы со сложными вычислениями с

    C>нестандартными объектами.
    И все же это синтаксический сахар. Тук кто-то советовал препроцессорами пользоваться пасквилятникам.
    Могу этот совет вернуть сишникам
    Ну и отослать к аналогичному сахару насчет char + char +widechar + char = widestring
    Re[6]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 23.01.06 16:54
    Оценка:
    WH> File file4("file4");
    WH> File file5("file5");
    WH>Повтори на паскале...
    /me думает
    TCollection, которая объектами управляет ?
    Или через интерфейсы...
    Надо еще глянуть в сторону финализации динамических массивов, может быть там что-то было.

    (шепотом... а вот потом где-то затрётся file9 NULL'ом по ошибке — какой феерверк будет)

    Не всё что по-другому — сразу хуже.

    И это только за одну минуту в голову пришло

    WH>ЗЫ А за with надо на месте руки отрывать.

    За char который непонятно число или буква — тоже.
    Re[9]: почему я предпочёл паскалю си
    От: Cyberax Марс  
    Дата: 24.01.06 06:33
    Оценка: +1
    Arioch2 wrote:
    >> > C>Не только. В частности, указатели являются частным случаем итераторов,
    >> > итераторы — это где надо +1 / -1 ?
    > C>Не только, еще бывает нужна арифметика итераторов и изменение на заданую
    > C>величину.
    > Все же реже
    Но бывает нужна. Для Delphi есть некое подобие STL, но намного менее
    красивое.

    >> > C>Ага, я помню. Объявлялся массив в 65536 элементов,

    >> > в 1 элемент.
    > C>Нет, именно в 65536, иначе Паскаль жаловался на переполнение массива.
    > C>Хотя сейчас уже точно и не вспомню.
    > Проверка границ массивов может включаться и отключаться, если ты про это.
    Да, но иногда хотелось иметь ее включенной.

    > C>Указатель в С++ массивом не становится — это разные вещи, просто доступ

    > А это уже, применительно к чтению исxодников, и етсь привычка.
    > C>к массиву идет через указатель(в С есть тождество: A[i]==*(A+i)==i[A]).
    > Особенно это тождество смотрится, если A — структура.
    А какие проблемы? Странно выглядит только самая правая часть тождества,
    но про нее вообще многие не знают.

    >> > Да вот приведение char к byte/shortint человеку надо, а Ord(x) писать

    >> > надоело.
    > C>Так char ведь _это_ _и_ _есть_ байт (в большинстве случаев).
    > Не в Паскале, там это разные типы.
    А зачем? Это не добавляет абстракции, а только лишней головной боли.

    > C>promotion'ов. Почему в Паскале тип 'char' считается особым — мне

    > C>непонятно, так как это преимуществ никаких не дает.
    > Да ну? В C конечно не дает. Насчет C++ сходу не скажу, но думаю там
    > будут свои заморочки.
    С типом char? Не припомню, за исключением его знаковости.

    > А вот возможность сложить 5 обычных char и 10 юникодных и без всяких

    > путаниц получить строчку из 15 символов — даёт. И отсутствие путаницы —
    > именно потому что char — не число.
    Во-первых, _каких_ юникодных char'ов? Их много, если вы не знали: есть
    UCS2 BE/LE, есть суррогаты, есть UCS4. А есть еще широкие не-Unicode
    кодировки.

    Кстати, в C++/C тоже есть широкие символы, имеющие тип wchar_t. Никакой
    путаницы с ними нет:
    const wchar_t *str=L"Wide string";
    const char *str2=L"This string won't compile";
    const wchar_t *str3="This string also won't compile";
    const char *str4="Narrow string";
    
    char c='A';
    char wc=L'A';


    > А вот чем мешает Ord() — вопрос.

    Лишний мусор там, где он совсем не нужен. Я не ворзражаю против
    дополнительной абстракции для символов, но только если она будет оправдана.

    На самом деле, это весьма непростая задача (из-за огромной путаницы с
    Unicode'ом). Есть целые библиотеки для ее решения (ICU от IBM, например).

    > Массовое не в смысле объема данных, а в смысле объема кода.

    > Если мне нужно зашифровать/заархивировать буфер, или колдировку сменить
    > и т.д. — то преобразование типов выполняется один раз, хоть в цикле по
    > букве, хоть сразу над буфером.
    Нет смысла выделять char в отдельный тип — без контекста (кодировки,
    языка и т.п.) с ним все равно ничего осмысленного кроме простой
    арифметики или сравнений выполнить нельзя. А для арифметики и сравнений
    вполне подойдет обычный интегральный тип.

    > C>В слове "discriminated" — то есть в структуре в виде скрытого поля

    > C>записывается "дискриминатор", показывающий какой тип активен.
    > Так и думал.
    > Чистый Pascal мёртв и никогда не жил.
    > В Turbo такого не было никогда.
    Именно то что я описал и было в TP. Дискриминатор записывался перед
    вариантной переменной и занимал 1 байт, если не ошибаюсь.

    > Перечитай мой пример, пожалуйста. Я там после case не просто так

    > поставил не имя переменной-члена, а тип.
    Да, а теперь перечитайте то что я написал:

    скрытого поля записывается "дискриминатор", показывающий какой
    тип активен.


    > И все же это синтаксический сахар. Тук кто-то советовал препроцессорами

    > пользоваться пасквилятникам.
    > Могу этот совет вернуть сишникам
    > Ну и отослать к аналогичному сахару насчет char + char +widechar + char
    > = widestring
    А зачем это надо? В С++ это вообще не скомпилируется — из-за
    несовпадений типов (char к wchar_t не приводится без явного каста).
    Posted via RSDN NNTP Server 2.0
    Sapienti sat!
    Re[10]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 24.01.06 08:23
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Но бывает нужна. Для Delphi есть некое подобие STL, но намного менее

    C>красивое.

    Даже то ли три то ли четыре. Но все они, конечно, обход ограничений, и поэтому сами ограниченные.
    Но, видимо, кому-то нужны были

    >> C>Нет, именно в 65536, иначе Паскаль жаловался на переполнение массива.

    >> C>Хотя сейчас уже точно и не вспомню.
    >> Проверка границ массивов может включаться и отключаться, если ты про это.
    C>Да, но иногда хотелось иметь ее включенной.
    Включай и выключай.
    М.б. тогда в Watcom'е и были проверки длины *динамических* массивов, не знаю.
    Но Watcom и стоил сколько и работал долго


    >> C>Указатель в С++ массивом не становится — это разные вещи, просто доступ

    >> А это уже, применительно к чтению исxодников, и етсь привычка.
    >> C>к массиву идет через указатель(в С есть тождество: A[i]==*(A+i)==i[A]).
    >> Особенно это тождество смотрится, если A — структура.
    C>А какие проблемы? Странно выглядит только самая правая часть тождества,
    C>но про нее вообще многие не знают.
    Но если ты это привел как тождество — то и правая должна иметь смысл.

    >>> > Да вот приведение char к byte/shortint человеку надо, а Ord(x) писать

    >>> > надоело.
    >> C>Так char ведь _это_ _и_ _есть_ байт (в большинстве случаев).
    >> Не в Паскале, там это разные типы.
    C>А зачем? Это не добавляет абстракции, а только лишней головной боли
    Это добавляет абстракции и убирает головную боль там где строки мешаются с числами.

    >> будут свои заморочки.

    C>С типом char? Не припомню, за исключением его знаковости.

    char a='a', b='b';
    puts (a+b);

    Должно вывести на экран (на уровне простой человеческой логики) строку "ab"

    Вот если отказаться от человеческой логики в пользу string.h — тогда конечно, никаких заморочек

    >> А вот возможность сложить 5 обычных char и 10 юникодных и без всяких

    >> путаниц получить строчку из 15 символов — даёт. И отсутствие путаницы —
    >> именно потому что char — не число.
    C>Во-первых, _каких_ юникодных char'ов?

    Тех, которые есть в языке.
    Кажется через макрос TCODE они в C++ делаются ?

    C>Кстати, в C++/C тоже есть широкие символы, имеющие тип wchar_t. Никакой

    C>путаницы с ними нет:
    C>
    C>char c='A';
    C>char wc=L'A';
    C>


    puts (c + wc); ???

    >> А вот чем мешает Ord() — вопрос.

    C>Лишний мусор там, где он совсем не нужен.

    А я вот так считаю про лишний мусор там где нужно просто соединить два-три символа в одну строку.

    C>На самом деле, это весьма непростая задача (из-за огромной путаницы с

    C>Unicode'ом). Есть целые библиотеки для ее решения (ICU от IBM, например).

    ICU так и не собрался посмотреть, с другой тсороны он изначально илёт от Явы, насколько помню. Не знаю, насколько он естественнен на C++.

    C>Нет смысла выделять char в отдельный тип — без контекста (кодировки,

    C>языка и т.п.)
    А программа вероятно вне контекста работает? Такой вот сфероконь в вакууме ?
    C> с ним все равно ничего осмысленного кроме простой
    C>арифметики или сравнений выполнить нельзя.
    Как минимум — соединения.
    Можно бы было еще умножение на число определить, типа дупликации символов/строк
    Впрочем это уже Питоном попахивает

    C>А для арифметики


    Угу, арифметика над буквами, я правильно понимаю? Символьная арифметика, прям в текстовом представлении чисел ?
    Как там говорил Каганов (по памяти): Целочисленная ошибка: попытка деления на букву "о".

    >> Перечитай мой пример, пожалуйста. Я там после case не просто так

    >> поставил не имя переменной-члена, а тип.
    C>Да, а теперь перечитайте то что я написал:
    C>

    C>скрытого поля записывается "дискриминатор", показывающий какой
    C>тип активен.


    Не знаю, надо бы проверить.
    Никогда не видел его на уровне языка.
    Если он там и еcть, то на правах атавизма ни на что не влияющего.

    C>несовпадений типов (char к wchar_t не приводится без явного каста).

    И эти люди считают проблемой Ord !
    Re[11]: почему я предпочёл паскалю си
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 24.01.06 08:40
    Оценка: +1
    Здравствуйте, Arioch2, Вы писали:

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


    >>> будут свои заморочки.

    C>>С типом char? Не припомню, за исключением его знаковости.

    A>char a='a', b='b';

    A>puts (a+b);

    A>Должно вывести на экран (на уровне простой человеческой логики) строку "ab"


    Тут уже проходила тема, что конкатенация — это не сложение и использование плюса не есть корректно. По меньшей мере она не коммуникативная операция. Хотя это в сторону.
    Смысл сишного варианта в том, что там нет операции конкатенации как таковой и это надо понимать (и вообще по сути нет операций над массивами, которыми являются строки, как таковыми). Ну нет в си строкового типа!
    Re[11]: почему я предпочёл паскалю си
    От: Cyberax Марс  
    Дата: 24.01.06 08:41
    Оценка:
    Arioch2 wrote:
    >> > C>Нет, именно в 65536, иначе Паскаль жаловался на переполнение массива.
    >> > C>Хотя сейчас уже точно и не вспомню.
    >> > Проверка границ массивов может включаться и отключаться, если ты про это.
    > C>Да, но иногда хотелось иметь ее включенной.
    > Включай и выключай.
    Угу, очень удобно.

    > М.б. тогда в Watcom'е и были проверки длины *динамических* массивов, не

    > знаю. Но Watcom и стоил сколько и работал долго
    std::vector — там он был.

    > C>А какие проблемы? Странно выглядит только самая правая часть тождества,

    > C>но про нее вообще многие не знают.
    > Но если ты это привел как тождество — то и правая должна иметь смысл.
    Ну так она имеет смысл — если обратить внимание на центр тождества. В С
    запись A[i] значит *(A+i), а так как сложение коммутативно, то
    *(A+i)==*(i+A)==i[A].

    > C>А зачем? Это не добавляет абстракции, а только лишней головной боли

    > Это добавляет абстракции и убирает головную боль там где строки мешаются
    > с числами.
    Не помню таких проблем, кроме как с printf'ом.

    >> > будут свои заморочки.

    > C>С типом char? Не припомню, за исключением его знаковости.
    > char a='a', b='b';
    > puts (a+b);
    > Должно вывести на экран (на уровне простой человеческой логики) строку "ab"
    Почему? Мы складываем числа, например puts('1'+1) на уровне простой
    логики должно вывести '2'.

    > C>Во-первых, _каких_ юникодных char'ов?

    > Тех, которые есть в языке.
    В С++ в языке есть wchar_t, для которого ничего не гарантировано (и это
    минус), можно явно использовать wchar_t как хранилище для UCS2 или
    использовать свой тип для UCS4.

    > C>char c='A';

    > C>char wc=L'A';
    > puts (c + wc); ???
    Нефиг складывать символы. Кстати! Для Delphi оно тоже небезопасно:
    SomeWinFunc(@'a',@'b');

    Этот код молчаливо упадет, если функция будет ожидать строку, а не символ.

    >> > А вот чем мешает Ord() — вопрос.

    > C>Лишний мусор там, где он совсем не нужен.
    > А я вот так считаю про лишний мусор там где нужно просто соединить
    > два-три символа в одну строку.
    А они в какой кодировке? А с суррогатами оно работает? Что будет, если я
    сложу русский 'а' и символ в финской кодировке?

    > C>На самом деле, это весьма непростая задача (из-за огромной путаницы с

    > C>Unicode'ом). Есть целые библиотеки для ее решения (ICU от IBM, например).
    > ICU так и не собрался посмотреть, с другой тсороны он изначально илёт от
    > Явы, насколько помню. Не знаю, насколько он естественнен на C++.
    Нормально, там все достаточно низкого уровня.

    > C>Нет смысла выделять char в отдельный тип — без контекста (кодировки,

    > C>языка и т.п.)
    > А программа вероятно вне контекста работает? Такой вот сфероконь в вакууме ?
    Нет, просто для корректного выполнения даже "простых" операций типа
    сложения строк нужно знать достаточно много параметров. И простой "a+b"
    прокатывает только в самых простых случаях.

    В С++ поступили честно — строки рассматриваются просто как набор байт и
    никак не интерпретируются контейнерами. Для работы с локалями есть
    специальный набор функций (facet'ы в потоках и т.п.).

    В Паскале наоборот, выбрали некое поведение и объявили его "The Only
    Right Way".

    > C> с ним все равно ничего осмысленного кроме простой

    > C>арифметики или сравнений выполнить нельзя.
    > Как минимум — соединения.
    Нет, так как они тоже зависят от кодировок. Имеет смысл только бинарная
    конкатенация, для которой вполне достаточно арифметического представления.

    > Можно бы было еще умножение на число определить, типа дупликации

    > символов/строк
    Тоже прекрасно работают с бинарными данными.

    > C>А для арифметики

    > Угу, арифметика над буквами, я правильно понимаю? Символьная арифметика,
    > прям в текстовом представлении чисел ?
    Да, для hash-контейнеров, например.

    > Как там говорил Каганов (по памяти): Целочисленная ошибка: попытка

    > деления на букву "о".
    Без проблем.

    > C>Да, а теперь перечитайте то что я написал:

    > C>скрытого поля записывается "дискриминатор", показывающий какой
    > C>*тип* активен.
    > Не знаю, надо бы проверить.
    > Никогда не видел его на уровне языка.
    > Если он там и еcть, то на правах атавизма ни на что не влияющего.
    Именно на уровне языка.

    > C>несовпадений типов (char к wchar_t не приводится без явного каста).

    > И эти люди считают проблемой Ord !
    А какое должно быть правильное поведение? Можно узнать?
    Posted via RSDN NNTP Server 2.0
    Sapienti sat!
    Re[12]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 24.01.06 16:03
    Оценка:
    >> C>Да, но иногда хотелось иметь ее включенной.
    >> Включай и выключай.
    C>Угу, очень удобно.
    В те вермена ее включали в основном для отладки. Не те процессоры были

    >> М.б. тогда в Watcom'е и были проверки длины *динамических* массивов, не

    >> знаю. Но Watcom и стоил сколько и работал долго
    C>std::vector — там он был.
    А елси я в нем хотел отключить проверку ?

    >> C>А какие проблемы? Странно выглядит только самая правая часть тождества,

    >> C>но про нее вообще многие не знают.
    >> Но если ты это привел как тождество — то и правая должна иметь смысл.
    C>Ну так она имеет смысл — если обратить внимание на центр тождества. В С
    C>запись A[i] значит *(A+i), а так как сложение коммутативно, то
    C>*(A+i)==*(i+A)==i[A].
    Нет-нет, давай без алгебры, на пальцах.
    Какой смысл все же имеет i[A], где A — например, структура.
    Раз уж это — преимущество C — то смысл должен быть. Иначе это тождество получается интересной гимнастикой для умая у которой иногда случайно бывает практическое применение.

    >>> > будут свои заморочки.

    >> C>С типом char? Не припомню, за исключением его знаковости.
    >> char a='a', b='b';
    >> puts (a+b);
    >> Должно вывести на экран (на уровне простой человеческой логики) строку "ab"
    C>Почему? Мы складываем числа, например puts('1'+1) на уровне простой
    C>логики должно вывести '2'.
    Мы складываем-таки буквы. Букву "а" и букву "б".
    Кстати, ваш пример по-моему так и отработает,в BASIC'е.

    >> C>Во-первых, _каких_ юникодных char'ов?

    >> Тех, которые есть в языке.
    C>В С++ в языке есть wchar_t, для которого ничего не гарантировано (и это
    C>минус), можно явно использовать wchar_t как хранилище для UCS2 или
    C>использовать свой тип для UCS4.

    Ой-ой, и вам не нравятся, что кодировки не обозначены ???
    PS: вспоминается представление строк и API для работы с ними в VAX VMS :D

    >> C>char c='A';

    >> C>char wc=L'A';
    >> puts (c + wc); ???
    C>Нефиг складывать символы.

    Это еще почему ??? Потому что тогда бедный C не может разобраться где у него что?

    C> Кстати! Для Delphi оно тоже небезопасно:

    C>
    C>SomeWinFunc(@'a',@'b');
    C>

    C>Этот код молчаливо упадет, если функция будет ожидать строку, а не символ.

    Во-первых у меня обычно Typed @ включен. Так что не скомпилируется даже.
    Во-вторых подмена разговора о буквах разговором про указатели... показательна.

    >>> > А вот чем мешает Ord() — вопрос.

    >> C>Лишний мусор там, где он совсем не нужен.
    >> А я вот так считаю про лишний мусор там где нужно просто соединить
    >> два-три символа в одну строку.
    C>А они в какой кодировке?
    зависит от компилятора/OS/настроек.
    Turbo Pascal создавался для USA и там этого в принципе не было.
    Думаю нетрудно будет найти компилятор C++, который ни бум-бум о кодировках.
    C>А с суррогатами оно работает?
    Это что? MBSC ? Или чисто юникодная фишка ?

    C>Что будет, если я

    C>сложу русский 'а' и символ в финской кодировке?
    Вы не сможете их одновременно хранить в одной программе в char.
    В widechar сможете, но труднее будет вывести на экран (в VCL почти нет UNICODE, увы. Проектировалась библиотека под Win3.x)
    Но это проблема конкретного компилятора и библиотеки к нему. И не говоирте, что во всех компиляторах C в char можно одновременно положить русские буквы и китайские иероглифы и любая runtime library из правильно объединит.

    >> C>Нет смысла выделять char в отдельный тип — без контекста (кодировки,

    >> C>языка и т.п.)
    >> А программа вероятно вне контекста работает? Такой вот сфероконь в вакууме ?
    C>Нет, просто для корректного выполнения даже "простых" операций типа
    C>сложения строк нужно знать достаточно много параметров.
    Не всегда нужна поддержка одновременно сотни языков в одном экземпляре программы. Тем более была нужна в годы Turbo Pascal.
    Там где нужна — можно использовать widechar. Все равно одна строка не может быть в разных кодировках одновременно и без Юникода не обойтись.

    Но главное, непонятна убежденность, что если кодировки не вынесены на уровень языка — их нет и быть не может.

    Я точно также могу ссказать, что вызов strcat(a,b); невозможен. Просто потому что в этом куске исходника нет нигде информации о локали. А равно и нельзя привести char к CString — по той же самой причине. Бред. Чтобы правильно отработал сhar+char нужен соотв. компилятор/рантайм который будет учитывать в какой локали программа запущена. И вопрос необходимости такого компилятора.

    Насколько слыщал, в .NET все строки юникодные. Что-то мне подсказыват что компилятор ComponentPascal for .NET будет перкасно соединять русские и финские буквы. Хотя никто недогадался указывать локали в исходниках.

    C>В С++ поступили честно — строки рассматриваются просто как набор байт и

    C>никак не интерпретируются контейнерами.

    Кажется была функция добавления char к char* ? По крайней мере поиска char в char* ? Как же она-то с многобайтовыми кодировками справляется, если не знает в какой кодировке конкретный набор байт ?

    Тут же выскакивают вопросы о соотношении sizeof(char) и sizeof(int) в многобайтовых кодировках, учитывая суррогаты и прочее.

    C>В Паскале наоборот, выбрали некое поведение и объявили его "The Only

    C>Right Way".

    Вам кто-то мешает сделать свой класс типа CString (за минусом операторов и дженериков) ?

    >> C> с ним все равно ничего осмысленного кроме простой

    >> C>арифметики или сравнений выполнить нельзя.
    >> Как минимум — соединения.
    C>Нет, так как они тоже зависят от кодировок.

    И что? программа работает в контексте, это не сфероконь в вакууме. Программа на этапе выполнения знает(если ей нужно) о кодировке среды и данных. Компилятор этого не знает. И не должен.

    C>Имеет смысл только бинарная конкатенация,

    Интересно, какой еще может быть здравый смысл у "буква + ещё одна буква" ?

    C>для которой вполне достаточно арифметического представления.

    Угу, достаточно. Но нужно дополнительно набивать обвязку.
    А в паскале для получения кода символа нужно писать обвязку в виде Ord() — и этого тоже достаточно.

    >> Можно бы было еще умножение на число определить, типа дупликации

    >> символов/строк
    C>Тоже прекрасно работают с бинарными данными.

    '@'*2 что даст ? "@@" или 128 либо что-то зщависимое от кодировки ?
    Если бы это было в Паскале — был бы "@@".
    В C было бы как повезет, что захотелось назвать стандартом.

    >> C>А для арифметики

    >> Угу, арифметика над буквами, я правильно понимаю? Символьная арифметика,
    >> прям в текстовом представлении чисел ?
    C>Да, для hash-контейнеров, например.
    И опереторы переопределяете прям над char, над бащовым типом ?

    >> Как там говорил Каганов (по памяти): Целочисленная ошибка: попытка

    >> деления на букву "о".
    C>Без проблем.
    Спасибо. Предпочту без таких ошибок.

    >> Никогда не видел его на уровне языка.

    C>Именно на уровне языка.
    Вот странно-то. И почему же всегда когда надо было, я клал один тип и тут же следующим оператором доставал другой? И ни разу компилятор не удивился. И runtime тоже.

    >> C>несовпадений типов (char к wchar_t не приводится без явного каста).

    >> И эти люди считают проблемой Ord !
    C>А какое должно быть правильное поведение? Можно узнать?
    Смотря что нужно. Я не считаю автоматический каст везде и всегда преимуществом или везде и всегда недостатком. Я не считаю, что иногда написать 5 буковок Ord(x) — это руки отвалятся. А вот вы так считаете. Тем более должны считать, что руки отвалятся писать (wchar_t)x — это же на целых 4 буквы больше, почти в два раза, кошмар какой.

    Кстати о правильном поведениии, нет у меня Delphi 7, не интересовался. Скжау просто по здравому смыслу. Даже как-то неудобно. Вроде такие простые вещи.
    Если нужно преобразовтаь char к wchar_t (widechar) — не важно, явно или автомаически — программа должна проверить в какой локали работает и исходя их этой локали преобразовfть в тот UTF, который принят (для данной программы, скомпилированной данным компилятором, работающей в данном контексте) для wchar_t.
    Re[12]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 24.01.06 16:05
    Оценка:
    К>Смысл сишного варианта в том, что там нет операции конкатенации как таковой и это надо понимать (и вообще по сути нет операций над массивами, которыми являются строки, как таковыми). Ну нет в си строкового типа!

    Угу, а в Паскале есть. И в Паскале это имеет смысл. Но вот этого смысла и не могут простить фанаты-СИнюшники. У них видите-ли руки отвалились написать Ord. Писать strcat не отвалились, а вдвое более короткий Ord — преступление.
    Re[13]: почему я предпочёл паскалю си
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 24.01.06 16:18
    Оценка:
    Здравствуйте, Arioch2, Вы писали:

    К>>Смысл сишного варианта в том, что там нет операции конкатенации как таковой и это надо понимать (и вообще по сути нет операций над массивами, которыми являются строки, как таковыми). Ну нет в си строкового типа!


    A>Угу, а в Паскале есть. И в Паскале это имеет смысл. Но вот этого смысла и не могут простить фанаты-СИнюшники. У них видите-ли руки отвалились написать Ord. Писать strcat не отвалились, а вдвое более короткий Ord — преступление.


    Уже значит спокойно воспринимать аргументы не можем?
    Обязательно переходить на обзывания?
    Вопрос что рассматриваем? Если Си — это это низкоуровневый язык и там строки как первичный тип не обязательны (хотя это повод для флейма, но я не буду участвовать в нём). Если C++, то там ты можешь иметь строки любой кодировки, как ансишные, как юникодные так и другие, за программиста нет кого-то, что решает, что есть единственный The Right Way и иначе быть не может. Всёже плюсы — язык многопарадигменный и позволяющий свободнее выражать свои мысли, но это же накладывает на программиста ответственность за его решения (которые могут дать плюс, как и привести к BSOD, просто надо думать головой, а не полагаться на серебряную пулю в виде компайлера)
    Re[14]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 24.01.06 17:49
    Оценка:
    К>Уже значит спокойно воспринимать аргументы не можем?

    Аргуметны, которые к С относятся так же как к Паскалю ?
    Вот в паскале нельзя... не нравится плюс? скажаем "присовокупить" один символ кдругому, потому что неизвестна локаль. А в С можно. Хотя код вполне вероятно бужет один и тот же с точностью до представления строк (а в Coponent Pascal, где строки Сишные — может и просто без разницы).

    К>Обязательно переходить на обзывания?


    Фанатиков? Мы в Holywars или где ?

    К> Вопрос что рассматриваем?


    Ужас того, что в Паскле нужно явно кастить char в число. Именно это мне пытаются доказать. Остальное -0 побочные ответвления.
    С этой точки зрения C и C++ малоотличими. char — базовый тип.

    K> Если C++, то там ты можешь иметь строки любой кодировки, как ансишные, как юникодные так и другие, за программиста нет кого-то, что решает, что есть единственный The Right Way


    А ассемблер еще гибче, да ?
    Кто будет писать свои классы строк на C++ — тот их же напишгет на Паскале. Кому это действительно нужно.
    Re[13]: почему я предпочёл паскалю си
    От: Cyberax Марс  
    Дата: 25.01.06 10:27
    Оценка:
    Arioch2 wrote:
    >> > М.б. тогда в Watcom'е и были проверки длины *динамических* массивов, не
    >> > знаю. Но Watcom и стоил сколько и работал долго
    > C>std::vector — там он был.
    > А елси я в нем хотел отключить проверку ?
    В векторе есть проверяемый вариант (функция at()) и непроверяемый —
    оператор индекса.

    > C>Ну так она имеет смысл — если обратить внимание на центр тождества. В С

    > C>запись A[i] значит *(A+i), а так как сложение коммутативно, то
    > C>*(A+i)==*(i+A)==i[A].
    > Нет-нет, давай без алгебры, на пальцах.
    > Какой смысл все же имеет i[A], где A — например, структура.
    *(i+A)

    Только A — это не стурктура, а указатель на структуру. Все достаточно
    логично.

    > Раз уж это — преимущество C — то смысл должен быть. Иначе это тождество

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

    >> > Должно вывести на экран (на уровне простой человеческой логики)

    > строку "ab"
    > C>Почему? Мы складываем числа, например puts('1'+1) на уровне простой
    > C>логики должно вывести '2'.
    > Мы складываем-таки буквы. Букву "а" и букву "б".
    > Кстати, ваш пример по-моему так и отработает,в BASIC'е.
    А откуда для этого взять память для результата? А если выделение памяти
    будет неудачным? А какое время жизни будет у строки?

    > C>В С++ в языке есть wchar_t, для которого ничего не гарантировано (и это

    > C>минус), можно явно использовать wchar_t как хранилище для UCS2 или
    > C>использовать свой тип для UCS4.
    > Ой-ой, и вам не нравятся, что кодировки не обозначены ???
    То есть? Я же написал "можно явно использовать wchar_t как
    хранилище".

    > C>Нефиг складывать символы.

    > Это еще почему ??? Потому что тогда бедный C не может разобраться где у
    > него что?
    Может. Но попытки такой автомагической автоматизации скрывают проблемы.

    > C>А они в какой кодировке?

    > зависит от компилятора/OS/настроек.
    > Turbo Pascal создавался для USA и там этого в принципе не было.
    > Думаю нетрудно будет найти компилятор C++, который ни бум-бум о кодировках.
    _Любой_ компилятор С++ ничего не знает о кодировках строк — это не его
    компетенция. Единственное, что может крутиться — это кодировка текста
    программы, важная для строк, вставленных непосредственно в исходник.

    > C>А с суррогатами оно работает?

    > Это что? MBSC ? Или чисто юникодная фишка ?
    Это два символа, которые рисуются как один.

    > C>Что будет, если я

    > C>сложу русский 'а' и символ в финской кодировке?
    > Вы не сможете их одновременно хранить в одной программе в char.
    Да ну?
    a:=chr(211);
    b:=chr(211);

    Угадайте, какие это символы?

    > Но это проблема конкретного компилятора и библиотеки к нему. И не

    > говоирте, что во всех компиляторах C в char можно одновременно положить
    > русские буквы и китайские иероглифы и любая runtime library из правильно
    > объединит.
    Еще раз: библиотека С работает со строками как с _бинарным_ блоком,
    никак его не интерпретируя (за исключением исключений типа isupper). То
    есть strcat просто объединяет два ASCIZ-блока. Поэтому для облегчения
    работы 'char' и является арифметическим типом.

    >> > А программа вероятно вне контекста работает? Такой вот сфероконь в

    > вакууме ?
    > C>Нет, просто для корректного выполнения даже "простых" операций типа
    > C>сложения строк нужно знать достаточно много параметров.
    > Не всегда нужна поддержка одновременно сотни языков в одном экземпляре
    > программы. Тем более была нужна в годы Turbo Pascal.
    Ну вот, из-за узости мышления Вирта и его последователей и имеем
    ситуацию, когда Delphi не заточен под i18n.

    > Там где нужна — можно использовать widechar.

    Тот который в Delphi — нельзя, он не поддерживает Unicode-3.

    > Все равно одна строка не

    > может быть в разных кодировках одновременно и без Юникода не обойтись.
    Да ну? Про UTF-8 слышали?

    > Но главное, непонятна убежденность, что если кодировки не вынесены на

    > уровень языка — их нет и быть не может.
    Может. Но они уже будут прикручены параллельно основной системе.

    > Я точно также могу ссказать, что вызов strcat(a,b); невозможен. Просто

    > потому что в этом куске исходника нет нигде информации о локали.
    Может. strcat объединяет бинарные блоки (о чем явно говорится в доке),
    при этом не гарантируется семантическая правильность результата (о чем
    тоже в доке пишется).

    > Кажется была функция добавления char к char* ? По крайней мере поиска

    > char в char* ? Как же она-то с многобайтовыми кодировками справляется,
    > если не знает в какой кодировке конкретный набор байт ?
    Естественно, это просто поиск арифметического значения. Без всяких
    дополнительных гарантий.

    > Вам кто-то мешает сделать свой класс типа CString (за минусом операторов

    > и дженериков) ?
    А как мне сделать, чтобы для него операторы "+" работали?

    > C>Имеет смысл только бинарная конкатенация,

    > Интересно, какой еще может быть здравый смысл у "буква + ещё одна буква" ?
    `'0'+('5'-'1')`

    > C>Тоже прекрасно работают с бинарными данными.

    > '@'*2 что даст ?
    Что-то. Лень по таблице смотреть.

    > C>Да, для hash-контейнеров, например.

    > И опереторы переопределяете прям над char, над бащовым типом ?
    Нет, в частности для обобщенного кода типа:
    template<class R,class T> void add_to_hash(R &_cur, const T& _param)
    {
        _cur^=+_param; //Можно хэш похитрее взять
    };

    Что характерно, будет работать так:
    int hash_;
    add_to_hash(hash_,'a');
    add_to_hash(hash_,11);
    add_to_hash(hash_,112134);


    > C>А какое должно быть правильное поведение? Можно узнать?

    > Смотря что нужно. Я не считаю автоматический каст везде и всегда
    > преимуществом или везде и всегда недостатком. Я не считаю, что иногда
    > написать 5 буковок *Ord(*x*)* — это руки отвалятся. А вот вы так
    > считаете. Тем более должны считать, что руки отвалятся писать
    > *(wchar_t)*x — это же на целых 4 буквы больше, почти в два раза, кошмар
    > какой.
    Стоп. Какой-такой "*(wchar_t)*x" — что это должно значить?

    > Кстати о правильном поведениии, нет у меня Delphi 7, не интересовался.

    > Скжау просто по здравому смыслу. Даже как-то неудобно. Вроде такие
    > простые вещи.
    Они не простые, они _упрощенные_ (как в "оболваненные").

    > Если нужно преобразовтаь char к wchar_t (widechar) — не важно, явно или

    > автомаически — программа должна проверить в какой локали работает и
    > исходя их этой локали преобразовfть в тот UTF, который принят (для
    > данной программы, скомпилированной данным компилятором, работающей в
    > данном контексте) для wchar_t.
    Убрать слово "компилятор".
    Posted via RSDN NNTP Server 2.0
    Sapienti sat!
    Re[14]: почему я предпочёл паскалю си
    От: Arioch2  
    Дата: 25.01.06 11:52
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Arioch2 wrote:

    >>> > М.б. тогда в Watcom'е и были проверки длины *динамических* массивов, не
    >>> > знаю. Но Watcom и стоил сколько и работал долго
    >> C>std::vector — там он был.
    >> А елси я в нем хотел отключить проверку ?
    C>В векторе есть проверяемый вариант (функция at()) и непроверяемый —
    C>оператор индекса.

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

    C>Практическое значение имеет левая часть тождества, которая постулирует

    C>схожесть доступа к массивам и указателям.

    Ну вот на ней бы тогда и остановиться

    >>> > Должно вывести на экран (на уровне простой человеческой логики)

    >> строку "ab"
    >> C>Почему? Мы складываем числа, например puts('1'+1) на уровне простой
    >> C>логики должно вывести '2'.
    >> Мы складываем-таки буквы. Букву "а" и букву "б".
    >> Кстати, ваш пример по-моему так и отработает,в BASIC'е.
    C>А откуда для этого взять память для результата?

    Да хоть на стеке, компилятор решит.

    C>А если выделение памяти

    C>будет неудачным?

    Компилятор выдаст runtime error, или бросит исключение.
    В отличие от C, где програмист может забыть — компилятор не забудет.

    C>А какое время жизни будет у строки?

    Такое, какое надо.

    Я ж не спрашиваю о времени жизни
     { SomeObject var1; ..... };
    ,
    а хоть бы (без плюсов) и
     { char buffer[200] ... };


    >> C>В С++ в языке есть wchar_t, для которого ничего не гарантировано (и это

    >> C>минус), можно явно использовать wchar_t как хранилище для UCS2 или
    >> C>использовать свой тип для UCS4.
    >> Ой-ой, и вам не нравятся, что кодировки не обозначены ???
    C>То есть? Я же написал "можно явно использовать wchar_t как
    C>хранилище".

    Если вам не нравится, что в Паскале не задана жестко кодировка типа char, то почему вам нравится, что в стандарте C++ не задана жестко кодировка wchar_t ? Давайте определимя, должна ли быть кодировка прибита гвоздиками уже в спецификация языка или нет?

    >> C>Нефиг складывать символы.

    >> Это еще почему ??? Потому что тогда бедный C не может разобраться где у
    >> него что?
    C>Может. Но попытки такой автомагической автоматизации скрывают проблемы.
    В С, не в Паскале.

    >> C>А они в какой кодировке?

    >> зависит от компилятора/OS/настроек.
    >> Turbo Pascal создавался для USA и там этого в принципе не было.
    >> Думаю нетрудно будет найти компилятор C++, который ни бум-бум о кодировках.
    C>_Любой_ компилятор С++ ничего не знает о кодировках строк — это не его
    сразу замечу: runtime library считаю неотъемлемой частью компилятора, с практической точки зрения, при разборе того, как работает конкретная уже откомпилированная программа.
    C>компетенция. Единственное, что может крутиться — это кодировка текста
    C>программы, важная для строк, вставленных непосредственно в исходник.
    Та же фигня в Паскале. Почему же в случае Паскаля это претензия, а в случае C — нет? Что за двойной стандарт ?

    >> C>А с суррогатами оно работает?

    >> Это что? MBSC ? Или чисто юникодная фишка ?
    C>Это два символа, которые рисуются как один.
    Так все-таки, рчь идет о юникоде или нет?
    могу я суррогат+букву запихнуть в Cшный char или нет ?

    >> C>Что будет, если я

    >> C>сложу русский 'а' и символ в финской кодировке?
    >> Вы не сможете их одновременно хранить в одной программе в char.
    C>Да ну?
    C>
    C>a:=chr(211);
    C>b:=chr(211);
    C>

    C>Угадайте, какие это символы?
    Гадать не нужно, нужно узнат в какой кодировке работает программа. Такой это символ и будет.
    Программа работает в каком-токонтексте а не на абстрактной идеальной машине.

    C>Еще раз: библиотека С работает со строками как с _бинарным_ блоком,

    C>никак его не интерпретируя (за исключением исключений типа isupper).
    А Паскалевская не так ?

    C>есть strcat просто объединяет два ASCIZ-блока.

    А Паскалевская — две паскаль-строки.

    C>Поэтому для облегчения

    C>работы 'char' и является арифметическим типом.
    вот тут я не понимаю.
    А что, будь он буквой, *dst = *src работало бы хуже? Или memcpy бы работало хуже?

    >> программы. Тем более была нужна в годы Turbo Pascal.

    C>Ну вот, из-за узости мышления Вирта и его последователей
    Стоп. Не нужно примешивать Вирта к Borland.
    C>и имеем
    C>ситуацию, когда Delphi не заточен под i18n.
    Более того, речь идет не о языке ,а о конкретной библиотеки очень тесно привязанной к Win API
    Был бы в Win16 API юникод — было бы по-другому.

    >> Там где нужна — можно использовать widechar.

    C>Тот который в Delphi — нельзя, он не поддерживает Unicode-3.
    Насколько знаю, он использует функции Win API, и должен поддерживать все, что WinAPI.

    >> Все равно одна строка не

    >> может быть в разных кодировках одновременно и без Юникода не обойтись.
    C>Да ну? Про UTF-8 слышали?
    тогда выбирайте, что именно вы сказали:
    1) UTF-8 — не Юникод.
    2) UTF-8 — не кодировка.

    >> Но главное, непонятна убежденность, что если кодировки не вынесены на

    >> уровень языка — их нет и быть не может.
    C>Может. Но они уже будут прикручены параллельно основной системе.
    ...если нужна совместимость назад, с не-Юникодом. Она была нужна.
    В C наверное тоже не просто так char и wchar_t разные типы ? Параллельные.

    >> Я точно также могу ссказать, что вызов strcat(a,b); невозможен. Просто

    >> потому что в этом куске исходника нет нигде информации о локали.
    C>Может. strcat объединяет бинарные блоки (о чем явно говорится в доке),
    А a+b объединяет строки, и о том явно говорится в доке.
    И *работающая* программа знает в какой кодировке она работает.

    Кроме того, когда это бинарное объединение строк может дать неправильный результат ?
    Когда первая строка кончается на одинакий суррогат, не имеющий основной буквы к нему?
    Так такая строка уже семантически не верна.
    Garbage in — garbage out.

    C>Естественно, это просто поиск арифметического значения. Без всяких

    C>дополнительных гарантий.
    Это вам они дополнительные, а где-то они нужны.

    >> Вам кто-то мешает сделать свой класс типа CString (за минусом операторов

    >> и дженериков) ?
    C>А как мне сделать, чтобы для него операторы "+" работали?
    Повторяемся. Нету в паскале дженериков и пергрузки оператора.
    Кроме того — зачем? Кроме синтакического сахара ?
    Сделайте лучше перегруженную strcpy (CString&, CString&) и не заимствуйте вы этот дурацкий паскалевский плюс.

    >> C>Имеет смысл только бинарная конкатенация,

    >> Интересно, какой еще может быть здравый смысл у "буква + ещё одна буква" ?
    C>`'0'+('5'-'1')`
    Отрицание не имеет смысла над строками.

    >> C>Тоже прекрасно работают с бинарными данными.

    >> '@'*2 что даст ?
    C>Что-то. Лень по таблице смотреть.
    Тогда заканчиваем с экспериментами. умножение деление и отрицание над буквами/строками не определены
    Но в случае Паскаля умножение было бы легче определить.

    >> C>Да, для hash-контейнеров, например.

    >> И опереторы переопределяете прям над char, над бащовым типом ?
    C>Нет, в частности для обобщенного кода типа:
    C>
    C>template<class R,class T> void add_to_hash(R &_cur, const T& _param)
    C>{
    C>    _cur^=+_param; //Можно хэш похитрее взять
    C>};
    C>

    C>Что характерно, будет работать так:
    C>
    C>int hash_;
    C>add_to_hash(hash_,'a');
    C>add_to_hash(hash_,11);
    C>add_to_hash(hash_,112134);
    C>


    Если эти базовые типа имеют автоматическое приведение к типу T, так ?
    Учитываем нелюбовь паскаля к автоматическим кастам — и делаем ручное преобразование.
    Учитываем отсутствие прергрузки операторов, и заменяем += на по сути эквивалентное _cur.Add(_param);
    Ну опять же, нет дженериков пока, первый скажу, хотя повторяться надоедает.

    Разница — синтаксический сахар.

    >> C>А какое должно быть правильное поведение? Можно узнать?

    >> Смотря что нужно. Я не считаю автоматический каст везде и всегда
    >> преимуществом или везде и всегда недостатком. Я не считаю, что иногда
    >> написать 5 буковок *Ord(*x*)* — это руки отвалятся. А вот вы так
    >> считаете. Тем более должны считать, что руки отвалятся писать
    >> *(wchar_t)*x — это же на целых 4 буквы больше, почти в два раза, кошмар
    >> какой.
    C>Стоп. Какой-такой "*(wchar_t)*x" — что это должно значить?
    А это где-то кому-о взглюкнулось, вместо звездочек там (b) и (/b) — все кроме переменной выделенно жирным шрифтом.

    C>Они не простые, они _упрощенные_ (как в "оболваненные").

    Да нет, там просто нет ненужной сложности. Кому она нужна — добавит.

    >> Если нужно преобразовтаь char к wchar_t (widechar) — не важно, явно или

    >> автомаически — программа должна проверить в какой локали работает и
    >> исходя их этой локали преобразовfть в тот UTF, который принят (для
    >> данной программы, скомпилированной данным компилятором, работающей в
    >> данном контексте) для wchar_t.
    C>Убрать слово "компилятор".
    Почему? У нас таки абстрактные сферокони, которых компилируют абстрактные компиляторы ?
    Re[2]: почему я предпочёл паскалю си
    От: KBH  
    Дата: 01.02.06 12:12
    Оценка:
    Здравствуйте, Larev, Вы писали:

    DH>>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.


    L>Это конечно супер, но злоупотреблять этим не стоит. Иной раз хорошо объявить переменную внутри блока, но чрезмерный разброс объявлений переменных затрудняет чтение кода, да и это не очень хороший тон. Желательно объявления переменных группировать "кучками" в логически правильных местах.


    А может лучше создавать такие методы, которые помещаются целиком на экран, тогда и группировать "кучками" не придется. У нас есть сотрудники, которые умудряются запихнуть весь код в одну функцию, длиной в несколько тысяч строк! Вот у них есть такой маразм, объявлять все используемые переменные в начале функции.
    Re[4]: почему я предпочёл паскалю си
    От: KBH  
    Дата: 01.02.06 12:56
    Оценка:
    Здравствуйте, s.ts, Вы писали:

    ST>продолжение из моего опыта:


    ST>... но как выяснилось, большинство пишущих на с++ пишут на нем в стиле плохого дельфи-кодераочень многие не могут даже на паскале нормально написать (как выразился один мой коллега-дельфин: "тут ведь если компилируется, то работает!" — это про паскаль конечно). Люди, пишущие на C++ не знают stl, не используют шаблоны и нэймспэйсы, создают кучу глобальных переменных, называя их MyVar и ... вообще, даже страуструпа похоже не читали.

    ST>зато все мегабаксовые вакансии с работных сайтов с гордыми заголовками "С++" для них. и рекрутеры пытаются выудить из потока г...
    ST>мнда...

    ST>добавлю в заклюении, то все встретившиекся в моей жизни дебилы от программирования (кроме одного ) писали на С++


    Да, есть такие, которые гордо заявляют, что могут писать как на Делфи так и на С++ одинакого, но это только говорит о том, что они не знают ни того, ни другого даже на троечку.
    Re[5]: А знаете ли Вы что...
    От: Jack128  
    Дата: 04.02.06 23:03
    Оценка:
    Здравствуйте, Кодёнок, Вы писали:

    Кё>interface в Borland Pascal 100% инкапсуляцию тоже не обеспечивает. И зачем оно? Напусти на исходник простой процессор, и он выдаст вам .int — файл, где есть действительно только интерфейсная часть. В компиляции такой файл все равно не участвует. А вот дублирование заголовков функций в interface и implementation сильно портит жизнь. Поменял определение — ищи в большом файле реализацию. Приходилось мне поддерживать и дорабатывать код на Delphi, так что я очень злой на эту фигню


    Не знаю как в паскале, а в дельфи как раз заголовки в interface и implemintation не обязательно дублировать.

    interface
    
    function Test(Param: string): Integer;
    
    implementation
    
    function Test;
    begin
     Result := MessageBox(0, PChar(Param), nil, 0);
    end;

    так что не злится надо было, а изучать инструмент, который ты пользуешь.
    Re[6]: А знаете ли Вы что...
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 06.02.06 08:57
    Оценка:
    Здравствуйте, Jack128, Вы писали:


    J>Не знаю как в паскале, а в дельфи как раз заголовки в interface и implemintation не обязательно дублировать.


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

    Помню эти грабли — долго на борландовцев матерился, читаемость кода офигенная получается
    Re[7]: А знаете ли Вы что...
    От: Jack128  
    Дата: 06.02.06 10:06
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Помню эти грабли — долго на борландовцев матерился, читаемость кода офигенная получается


    Ну вот видешь.. Одним нравится, другим не нравится.. Как понять тонкую программерскую душу...
    Re[8]: А знаете ли Вы что...
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 06.02.06 10:54
    Оценка:
    Здравствуйте, Jack128, Вы писали:

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


    К>>Помню эти грабли — долго на борландовцев матерился, читаемость кода офигенная получается


    J>Ну вот видешь.. Одним нравится, другим не нравится.. Как понять тонкую программерскую душу...


    Нравиться плохая читаемость кода может только неопытным разработчикам
    Которые ещё не наступали на сии грабли
    Re[9]: А знаете ли Вы что...
    От: KBH  
    Дата: 06.02.06 11:22
    Оценка: :)
    Здравствуйте, Курилка, Вы писали:

    К>Нравиться плохая читаемость кода может только неопытным разработчикам

    К>Которые ещё не наступали на сии грабли

    Знаю одного "ОЧЕНЬ ОПЫТНОГО" прогера, ему лет 60 с небольшим. Так он даже не старается форматировать свой код, кое где сделает отступы, несколькими табами, причем, размер отступа зависит от средней температуры по больнице. Еще он любит называть переменные тремя буквами, максимум. А еще делать функции размером в 1500 строк. А еще вставлять кучу условий где захочется. А еще называть функции тремя буквами по известной только ему методике шифрования. А еще... ну пожалуй хватит. Все это он пишет на С, в итоге, его код напоминает матрицу, как в фильме и меня жутко все это бесит, когда приходится в этом чудо-коде разбираться.

    Я вот думаю, может быть он в каске-невидимке???
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.