Когда я знал более менее паскаль, мне умные люди рассказывали как круто знать С и С++. Что его могут знать лишь избранные (я жил в маленьком городе и там таких не было ). И тогда я понял надо бросать Паскаль и Дельфи и рулить к Visual Studio (тогда я думал что это тоже что и С++) — то что там нельзя написать прогу мышкой доказывало мне силу С++ .
В итоге я перешел на С++, узнал что много где заблуждался, а С++ реально крут!
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. Присваивание := ненавижу!
А мне и за С++ и за Delphi платят
ssm>зато компилятор был очень быстрый, что для машин того времени играло не последнюю роль
Согласен. Но при разработке довольно серьезных проектов определяющую роль часто играет производительность конечного продукта.
ssm>ну в Java, C# их вообще как таковых нет
А они там и не нужны. Это языки другого плана, которые компилятся в промежуточный код, и т.д. и т.п.
В Perl их тоже нет
ssm>опять же Java, C, C#
См. выше.
ssm>зато есть set (или это уже в дельфине?)
И в паскале тоже есть. Согласен — это то, чего С/С++ и по сей день не хватает. Хотя без них можно обойтись... но временами не очень приятно.
ssm>замени функциями
Не вопрос, буду писать все руками и на ассемблере, чтобы все самому реализовывать.
Языки программирования для чего делают? Для облегчения жизни программеров в тех или иных задачах.
ssm>для прикладника один паскалевский string чего значит!
Ограниченный до 255 символов
ssm>а такое любишь?
ssm>
Здравствуйте, Algorithmus, Вы писали:
A>А мне и за С++ и за Delphi платят
там где я сейчас живу, на дельфистов спрос нулевой
ssm>>ну в Java, C# их вообще как таковых нет
A>А они там и не нужны. Это языки другого плана, которые компилятся в промежуточный код, и т.д. и т.п. A>В Perl их тоже нет
а тебе не призодила мысля, что и Pascal язык другого плана?
ssm>>замени функциями
A>Не вопрос, буду писать все руками и на ассемблере, чтобы все самому реализовывать.
ну а ты когда на C под дос писал, что тоже без ассемблера обходился?
Во-первых, давай без агресии и наездов, пусть даже небольших. Если тебе так сильно нравится паскаль, что я своим сообщением оскорбил твои убеждения, тогда извини.
ssm>а тебе не призодила мысля, что и Pascal язык другого плана?
Я и говорю, что для каждого класса задач есть "свой" язык программирования. Но так сложилось, что С и паскаль используются для решения похожих, а то и одинаковых задач. О том и разговор.
А под языком "другого плана" я имел в виду то что C# и Java не могут быть использованы в некоторых сферах, в которых C и Pascal с успехом применяются.
ssm>>>замени функциями ssm>ну а ты когда на C под дос писал, что тоже без ассемблера обходился?
Вопрос не в том, что я обходился без АСМа (а без него я не обходился), а в том, что некоторые моменты программирования можно упростить, чтобы программер сам не изобретал велосипед, и не воротил своих заменителей уже готовым конструкциям.
Здравствуйте, ssm, Вы писали:
ssm>а че там вообще проверить то можно? ни шаблонов, ни исключений...
Что-то подсказывает мне, что в программе, кроме шаблонов и исключений, есть еще кое-что.
И потом, путь от идеи до реализации довольно долгий. Иногда быстрой прикидки "на коленке" бывает достаточно, чтобы убедиться в правильности /ошибочности выбранного направления.
Кстати, в 3.1 шаблоны как раз и появились. Говорят, они были еще в 3.0, но прошла эта версия мимо.
Здравствуйте, Algorithmus, Вы писали:
A>Во-первых, давай без агресии и наездов, пусть даже небольших.
непонятно, что было принято тобой за наезд
A>Если тебе так сильно нравится паскаль, что я своим сообщением оскорбил твои убеждения, тогда извини.
мне нравится рыбалка и пиво с таранкой, а если есть возможность выбора между дельфином и C++, то выбирать я буду не по предпочтению, а в соответствии с поставленной задачей и рациональностью применения того или иного инструмента применительно к решаемой задаче. можно и на XSLT положить и сделать все при помощи XML парсера, мы ведь не ищем легких путей! правда?
ssm>>а тебе не призодила мысля, что и Pascal язык другого плана?
A>Я и говорю, что для каждого класса задач есть "свой" язык программирования. Но так сложилось, что С и паскаль используются для решения похожих, а то и одинаковых задач. О том и разговор. A>А под языком "другого плана" я имел в виду то что C# и Java не могут быть использованы в некоторых сферах, в которых C и Pascal с успехом применяются.
ладно давай завязывать, с меня таранка, с тебя пиво
P>Что-то подсказывает мне, что в программе, кроме шаблонов и исключений, есть еще кое-что.
в современном C++
P>И потом, путь от идеи до реализации довольно долгий. Иногда быстрой прикидки "на коленке" бывает достаточно, чтобы убедиться в правильности /ошибочности выбранного направления.
P>Кстати, в 3.1 шаблоны как раз и появились. Говорят, они были еще в 3.0, но прошла эта версия мимо.
знаешь, давай не будем грешить, и называть, то что было в 3.1 шаблонами
>можно и на XSLT положить и сделать все при помощи XML парсера, мы ведь не ищем легких путей! правда?
Ага... Недавно учавствовал в обсуждении проекта, который взялись делать программеры, недавно закончившие читать книгу по С++
Вот там и было что-то типа "Легких путей не ищем"... Ничё, сократили раза в 4
ssm>ладно давай завязывать, с меня таранка, с тебя пиво
Здравствуйте, 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."
С тобой, что ли еще поспорить...
AJD>AFAIK в то время у сишных компилеров тоже не было оптимизаторов. А компилер очень быстрый
Для меня "то время" — это время, когда я писал под ДОС (1995-1998). А в то время у всех популярных С компиляторов оптимизаторы были.
AJD> А куда она делась?
А ты хочешь сказать, что в Паскале можно свободно писать A := B + 2, где A и B — указатели?
Интересно...
А если ты имеешь в виду Inc(Longint(A)), то это никакая не арифметика указателей, а один из возможных выходов из ситуации.
AJD>Не дает отстрелить ногу по самую шею. Но в принципе все те же возможности что и в си
Да? Чтобы объявить указатель на указатель, сколько кода написать нужно? А как тебе работа с
динамическим массивом?
A>>3. Морока с приведением типа.
Нет автоматического приведения. С одной стороны, конечно, хорошо...
Но при работе с символами и их кодами, например, постоянные Ord, Chr и т.д. меня раздражают.
AJD>есть и обьединения и перечисления и даже множества
Открой глаза незнающему, пожалуйста. Как в паскале объявить объединение? Перечисление?
Множество и сам знаю как.
AJD>Вполне нормальный набор. Единственное что математики очень мало было
Смотря для каких задач, опять же...
AJD>
Постоянно нужно лезть к двоеточию... Это СУГУБО СУБЪЕКТИВНАЯ мысль. Кому-то == не нравится в сравнении...
Здравствуйте, 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."
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 вещественное число, из массива его можно побайтово прочитать.
А то, что привел ты — это структура с вариантами (не помню, как она "по научному" назывется).
Здравствуйте, 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
Здравствуйте, 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."
Ладно, будем завязывать... Каждый выбирает себе инструмент в зависимости от задач и личных предпочтений... Как я и говорил, Delphi я тоже юзаю и очень часто. Но только для интерфейсных приложений, которые не содержат сложной логики.
AJD>Речь о том, что для своего времени это был продвинутый компилятор. И пункт об отсутствии оптимизатора не может приниматься во внимание
Еще и как может, потому что даже Turbo C++ 2.0 имел встроенный оптимизатор, который на многих программах дает преимущество перед аналогичными паскалевскими. Но это в прошлом...
AJD>прибаляется на sizeof(word)
Окей. Буду знать (хотя предварительно проверю )
AJD>Структура с вариантами == union в сях
Интересно, интересно... Будем смотреть... Пока не верю
Здравствуйте, DEMON HOOD, Вы писали:
DH>Чегото вспомнилось сегодня, решил запостить...
DH>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается, DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.
В любом случае для многих людей эта возможность объявления переменных является не плюсом а минусом .
Здравствуйте, DEMON HOOD, Вы писали:
DH>Чегото вспомнилось сегодня, решил запостить...
DH>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается, DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.
А как вам такая фича в сях , на мой взгляд одно из главных достоинств — как переопределение функция ?