Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему все любят С++? 
:(
    Опции темы
kolesnle
Дата 10.4.2013, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Цитата(Mayk @  11.7.2005,  20:49 Найти цитируемый пост)
В паскале нет шаблонов. Это раз.
В паскале нет циклов. Это два(for i := 10 downto 0 это не цикл, while(*i++=*j++) - вот пример цикла. for(iter i = collection->begin(); i->value != desired_value && i != collection->end(); ++i) - вот пример цикла)
В паскале очень длинный, запутанный, я б даже сказал, дурацкий синтаксис. Это три(integer вместо int, begin вместо { и end вместо }, then вместо <тут пусто>).
В паскале указатели просто смешны. Мне НУЖЕН указатель на статическую переменную. Я НЕ хочу вызывать операции по удалению объектов в ручную. Я НЕ хочу обращаться к тормознутому менеджеру памяти(выделение в стеке гораздо быстре). И если компилятор имеет на этот счёт иное мнение, то я имею топку в которую полетит шибко умный компилятор. Это четыре. И это приговор.
В паскале нет препроцессора. Это пять(кстати за это я не люблю яву, с#)
В паскале очень тупые ветвления(then, наличие ';', отсутствие ';') это пять с копейками
В паскале нет оператара присваивания. Это шесть с копейками(a:=b это операция присваивания. a=b=c=d=e=f=g=someFunction(h) - вот это оператор присваивания в своей красе).
В паскале синтаксис очень похож на basic'овский. Это шесть с копейками. С ОЧЕНЬ ВЕСОМЫМИ копейками
В паскале очень тупая библиотека. На си создания дубликата участка памяти я запишу в одно выражение memcpy(malloc(len),src,len); В паскале getmem НЕ возвращает значение. А устанавливает переданный ей pointer.
В си есть циклы, операторы присваивания, препроцессор, stdlib функции которой возвращают то что им положено возвращать.
В си++ есть классы. Паскалевскому stringу в пору бится в конвульсиях. 

Почти полностью солидарен! Только по моему там есть препроцессор, типа $include или еще как. Но я его все-равно жутко ненавижу!
PM MAIL   Вверх
Beltar
Дата 10.4.2013, 12:39 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



В Паскале есть дженерики.

Касательн цикла for, то http://forum.vingrad.ru/forum/topic-361800...+-си++/60.html#

Цитата

Это три(integer вместо int, begin вместо { и end вместо }, then вместо <тут пусто>).


В Паскале сейчас вообще-то можно писать и так: int8, int16, int32. Ну и как обычно пошла песня про то, что писать видите ли долго. Сразу выдает быдлокодера.

Цитата

В паскале указатели просто смешны. Мне НУЖЕН указатель на статическую переменную.


А пишущим на Паскале он нужен?

Цитата

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


По этому поводу была такая статья http://www.delphikingdom.com/asp/viewitem.asp?catalogid=346 писалась как ответ на указанный в начале монументальный труд.

Цитата

В паскале нет оператара присваивания. Это шесть с копейками(a:=b это операция присваивания. a=b=c=d=e=f=g=someFunction(h) - вот это оператор присваивания в своей красе).


Оно, конечно, минус, но даже не третьестепенный.

Цитата

В си++ есть классы. Паскалевскому stringу в пору бится в конвульсиях. 


Написавший это болен. Скорее наоборот в Си++ нет нормального строкового типа, что признают даже его ярые адепты, есть только жалкая попытка имитировать функциональность ANSIString с помощью классовой обертки над гнилым PChar. При этом эта самая обертка вывалится нафиг, как только придется  написать что-то вроде "ab"+"cd", потому что тут не классы у которых перегружена конкатенация, а пичары.
Я даже не знаю каким идиотом надо быть, чтобы не понимать этого.

В общем, как обычно, придирки что в Паскале нет какой-то хрени, нужной раз в год, или не нужной вообще, но при этом мило забываются такие подсудные вещи плюсов, как присваивание в операторе if, совершенно неюзебельный switch, нет понимания, что же такое цикл for, замалчивается отсутствие в плюсах вложенных функция, классовых ссылок и виртуальных конструкторов. Замлчивается просто несопоставимое с Паскалем время компиляции, что при работе одному в режиме проверил-не работает-исправил довольно серьезный недостаток. Про строки, это действительно нечто, достойно того, чтобы повторить это еще раз.

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


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Akella
Дата 10.4.2013, 13:01 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 1
Всего: 329



Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
Написавший это болен. Скорее наоборот в Си++ нет нормального строкового типа, что признают даже его ярые адепты, есть только жалкая попытка имитировать функциональность ANSIString с помощью классовой обертки над гнилым PChar.

+1

Добавлено через 8 минут и 41 секунду
Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
что буковок вроде поменьше писать

а толку... в глазах рябит от знаков препинания, не язык, а brainfack какой-то

Добавлено через 9 минут и 7 секунд
Вот название бредовое. ВСЕ не могут любить C++.
PM MAIL   Вверх
k0rvin
Дата 10.4.2013, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
В Паскале есть дженерики.

Во-первых, дженерики и шаблоны — разные вещи. Во-вторых, даже дженерики в паскале недоделаны (во всяком случае в делфи), один товарищ приводил пример, найду – выложу. В-третьих, зачем же так некропостить? =))


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Beltar
Дата 10.4.2013, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



И что такого полезного можно нашаблонить в плюсах, помимо того, что дают дженерики?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
kolesnle
Дата 10.4.2013, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
Написавший это болен. Скорее наоборот в Си++ нет нормального строкового типа

Нет? Напиши.

Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
присваивание в операторе if

Ну во первых не  в операторе, а в инструкции, а во вторых : "Каким дебилом надо быть, чтобы присваивать в инструкции if"

Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
совершенно неюзебельный switch

Наоборот, более юзабельный.

Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
нет понимания, что же такое цикл for

Range-based for

Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
вложенных функция

пожалуйста посмотреть c++11 лямбда

Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
классовых ссылок 

что это?!

Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
 виртуальных конструкторов

Огромная проблема сэмулировать? Оно
Ну и ответ на минусы плюсами: кроссплатформенность, с помощью библиотек можно добиться гораздо большего, чем с помощью дельфей, пользовательские литералы, auto, shared_ptr, initializer_list и еще много-много-много-много
PM MAIL   Вверх
Beltar
Дата 10.4.2013, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Цитата

"Каким дебилом надо быть, чтобы присваивать в инструкции if"


В том-то и отличие между тобой и сишником, который с горя пишет if (5==N), спотыкаясь на чтении, лишь бы хотя бы в частном случае сравнения с константой компилятор подстелили соломку.

Цитата

пожалуйста посмотреть c++11 лямбда


Кстати, я как раз описание этого стандарта открыл.

Вот что приведено в педивикии:

Цитата

В C++ всегда присутствовала концепция константных выражений. Так, выражения типа 3+4 всегда возвращали одни и те же результаты, не вызывая никаких побочных эффектов. Сами по себе константные выражения предоставляют компиляторам C++ удобные возможности по оптимизации результата компиляции. Компиляторы вычисляют результаты таких выражений только на этапе компиляции и сохраняют уже вычисленные результаты в программе. Таким образом, подобные выражения вычисляются только раз. Также существует несколько случаев, в которых стандарт языка требует использования константных выражений. Такими случаями, например, могут быть определения внешних массивов или значения перечислений (enum).


int GiveFive() {return 5;}
 
int some_value[GiveFive() + 7]; // создание массива 12 целых; запрещено в C++

Вышеуказанный код запрещён в C++, поскольку GiveFive() + 7 фактически не является константным выражением, известным на этапе компиляции. Компилятору на тот момент просто не известно, что функция на самом деле возвращает константу во время исполнения. Причиной таких рассуждений компилятора является то, что эта функция может повлиять на состояние глобальной переменной, вызвать другую неконстантную функцию времени исполнения и т. д.

C++11 вводит ключевое слово constexpr, которое позволяет пользователю гарантировать, что или функция или конструктор объекта возвращает константу времени компиляции. Код выше может быть переписан следующим образом:
constexpr int GiveFive() {return 5;}
 
int some_value[GiveFive() + 7]; // создание массива 12 целых; разрешено в C++11

Такое ключевое слово позволяет компилятору понять и удостовериться в том, что GiveFive возвращает константу.

Использование constexpr порождает очень жёсткие ограничения на действия функции:
такая функция не может быть типа void;
тело функции должно быть вида return выражение;
выражение должно также быть константой, а также может вызывать только те функции, что также обозначены ключевым словом constexpr, или просто использовать обычные константы;
функция, обозначенная constexpr, не может вызываться до того момента, пока она не определена в текущей единице компиляции.

В предыдущей версии стандарта в константных выражениях можно было использовать переменные только целого типа или типа перечисления. В C++11 это ограничение снято для переменных перед определением которых стоит ключевое слово constexpr:
constexpr double accelerationOfGravity = 9.8;
constexpr double moonGravity = accelerationOfGravity / 6;

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

В случае необходимости конструирования константных значений из типов, определённых пользователем, конструкторы таких типов также могут быть описаны с помощью constexpr. Конструктор константных выражений, подобно константным функциям, также должен быть определён до момента первого его использования в текущей единице компиляции. У такого конструктора должно быть пустое тело, а также такой конструктор должен инициализировать члены своего типа только константами.


 smile  smile 

У меня один вопрос, ребят, вы вообще понимаете, что это отборная трава? При этом элементарный функционал вида вещественных констант в Паскале был поди в первой версии Вирта. Надо в раздел по Паскалю перепостить, народ поржет.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
kolesnle
Дата 10.4.2013, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Цитата(Beltar @  10.4.2013,  19:21 Найти цитируемый пост)
элементарный функционал

был и в C++. Это функции вычисляемые на этапе компиляции ввели. Какой-то странный пример в педивикии

Это сообщение отредактировал(а) kolesnle - 10.4.2013, 19:33
PM MAIL   Вверх
Beltar
Дата 10.4.2013, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



 smile 

Код

const
  a=4.5;
  b=5;
  c=a+b;

type
  TMyArray=array[1..c] of Integer;//Ес-но не скомпилируется при a=4.5, но при a=4 вполне


Функция вычисляемая на этапе компиляции является константой. 
Ваш Кэп.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
kolesnle
Дата 10.4.2013, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Да все-равно ввели уже. Теперь delphi точно хуже C++, хотя бы из-за синтаксиса(я не про begin smile)
PM MAIL   Вверх
Beltar
Дата 10.4.2013, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



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


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
kolesnle
Дата 10.4.2013, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Что по твоему серьезно?
PM MAIL   Вверх
Beltar
Дата 10.4.2013, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Что-то резко снижающее объем работы и повышающее читабельность. Способность обнаружить ошибку еще на этапе компиляции.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
k0rvin
Дата 11.4.2013, 05:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Beltar @ 10.4.2013,  18:33)
И что такого полезного можно нашаблонить в плюсах, помимо того, что дают дженерики?

http://msdn.microsoft.com/en-us/library/c6cyy67b.aspx

Цитата

C# Generics and C++ templates are both language features that provide support for parameterized types. However, there are many differences between the two. At the syntax level, C# generics are a simpler approach to parameterized types without the complexity of C++ templates. In addition, C# does not attempt to provide all of the functionality that C++ templates provide. At the implementation level, the primary difference is that C# generic type substitutions are performed at runtime and generic type information is thereby preserved for instantiated objects. For more information, see Generics in the Run Time (C# Programming Guide).

The following are the key differences between C# Generics and C++ templates:

  • C# generics do not provide the same amount of flexibility as C++ templates. For example, it is not possible to call arithmetic operators in a C# generic class, although it is possible to call user defined operators.
  • C# does not allow non-type template parameters, such as template C<int i> {}.
  • C# does not support explicit specialization; that is, a custom implementation of a template for a specific type.
  • C# does not support partial specialization: a custom implementation for a subset of the type arguments.
  • C# does not allow the type parameter to be used as the base class for the generic type.
  • C# does not allow type parameters to have default types.
  • In C#, a generic type parameter cannot itself be a generic, although constructed types can be used as generics. C++ does allow template parameters.
  • C++ allows code that might not be valid for all type parameters in the template, which is then checked for the specific type used as the type parameter. C# requires code in a class to be written in such a way that it will work with any type that satisfies the constraints. For example, in C++ it is possible to write a function that uses the arithmetic operators + and - on objects of the type parameter, which will produce an error at the time of instantiation of the template with a type that does not support these operators. C# disallows this; the only language constructs allowed are those that can be deduced from the constraints.




--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
k0rvin
Дата 11.4.2013, 05:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(k0rvin @  10.4.2013,  17:53 Найти цитируемый пост)
найду – выложу

http://ideone.com/ct8xTq

В то время как в любом другом языке с дженериками это работает.

Добавлено @ 05:50
Цитата(Beltar @  10.4.2013,  19:21 Найти цитируемый пост)
У меня один вопрос, ребят, вы вообще понимаете, что это отборная трава? При этом элементарный функционал вида вещественных констант в Паскале был поди в первой версии Вирта. Надо в раздел по Паскалю перепостить, народ поржет. 

Угу, поржет. Над тобой. При чем тут вещественные константы? Ты понимаешь, что в С++ теперь можно константно инициализировать практически что угодно? Например:
Код

constexpr int fact (int x) { x < 2 ? 1 : return x * fact(x - 1); }
const fact10 = fact(10);

Раньше такое можно было шаблонами делать, теперь вот просто функциями. Повтори-ка на Паскале, поржем.

Добавлено через 11 минут и 8 секунд
Цитата(Beltar @  10.4.2013,  19:44 Найти цитируемый пост)
Функция вычисляемая на этапе компиляции является константой. 
Ваш Кэп. 

Кэп может продолжать считать значения этих констант на бумажке/калькуляторе каждый раз, когда они ему нужны. Или у Кэпа текстовый файлик с их значениями? =)

Это сообщение отредактировал(а) k0rvin - 11.4.2013, 05:51


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.1703 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.