> А оно и так однозначно и очевидно, если не использовать запрещенные конструкции.
Самому не смешно? Уже само существование запрешённых конструкций говорит о непродуманности языка. И о его непригодности к ШИРОКОМУ использованию массами.
> Или ты из той разновидности луддитов, которые ругают молоток за то, что им можно попасть по пальцам, а ружье за возможность выстрелить в ногу?
Нет. Молоток всегда будет бить по пальцам при неверном использовании, а попытка предотвратить такое его поведение если и реальна, то чрезвычайно дорога, что автоматически ведёт к невыгодности такого молотка. А вот изначально обеспечить языку предсказуемое поведение в таких ситуациях - задача вполне реальная и с подобными затратами не связанная, надо просто сесть и хорошо подумать. Разница хорошо видна?
> Если хочешь пользоваться инструментом, будь добр прочитать инструкцию. И _следовать_ ей. А по дурости можно и йцк сломать.
Речь о том, что язык можно было продумать, тогда и инструкция была бы проще, и пользование им - безопаснее. Но - не озаботились. Потому что писали для себя и на скорую руку.
> Вместо "сложно" ты хотел написать "невозможно"? Да, сейчас модно ругать С за наличие адресной арифметики, за неявное преобразование типов и т.д.
Нет, я не о том. Язык для дебила - это немного другая тема. Меня интересует детерминированность поведения - чтобы не оказывалось так, что один компилер насчитал одно, второй - нечто совершенно иное, а третий вообще обругал юзера, и ВСЕ три при этом оказались правы.
> Но С -- это всего-навсего "универсальный макро-ассемблер", один из самых низкоуровневых языков программирования высокого уровня. ;) И он уже не раз доказал эффективность в этом качестве.
Против этого я ничего не имею. И ничего не имею против переполнения при некорректном использовании типа и пр. Но это - вещи предсказуемые, если знать особенность архитектуры (размер int и пр.). А вот "c=c++" - это откровенный произвол.
> Но если из С убрать адресную арифметику, ввести обязательную проверку границ и строгую типизацию, то получится Паскаль в своем первозданном виде.
Я в винде использую именно delphi. Компилирует, зараза, быстро, приложения выходят шустрые. И за ошибки по рукам больно бьёт. Для сравнительно небольших программ типа мелких утилиток, само собой :)
> Нет. Это позор для кодера. Клеймо профнепригодности для писателя "анекдотов на С" вида 'i=i++'.
Был бы продуманный язык - не было бы этих досадных исключений :) Хотя я согласен, что c=c++ - редкостный дебилизм и лично я бы до такого не додумался.
> Подходили со словами: "Вы, вероятно, ошиблись в задании: тут неоднозначность возникает". Нельзя в пределах одного оператора дважды присвоить значение переменной.
Да вот можно, именно благодаря концепкии lvalue. Выпустили джинна из бутылки. Гибкость всегда имеет обратную сторону - надо много думать, чтобы корректно обрабатывать предельные случаи. Но думать - это для некоторых, судя по всему, процесс очень болезненный :)
Чего? Любой ЯП -- это профессиональный инструмент. Если ты берешься его использовать, будь добр изучить "инструкцию". Я тоже могу в свой револьвер запихать магнум, но дальше будет НП: или пронесет, или руку оторвет нахрен.
> изначально обеспечить языку предсказуемое поведение в таких ситуациях - задача вполне реальная
Для этого необходимо, чтобы конструкция вида 'i=i++' имела смысл. А так, 'shit in - shit out'.
> Меня интересует детерминированность поведения
Вот тебе пример детерминированного поведения:
int i;
for (i = 0; i++;) break;
printf("%d\n", i);
Скажи, какое значение _обязан_ печатать этот код?
> А вот "c=c++" - это откровенный произвол
Полностью согласен: откровенный произвол кодера-недоучки, который просит компилятор присвоить переменной два разных значения _одновременно_.
> Я в винде использую именно delphi
Object Pascal намного ближе к C, чем к творению Вирта.
> Гибкость всегда имеет обратную сторону - надо много думать, чтобы корректно обрабатывать предельные случаи. Но думать - это для некоторых, судя по всему, процесс очень болезненный :)
А что, нежелание идиотов думать -- это для профессионала повод отказаться от гибкого и эффективного инструмента? Нафиг-нафиг, я лучше буду продолжать носить револьвер с УСМ двойного действия.
> Речь о том, что язык можно было продумать, тогда и инструкция была бы проще, и пользование им - безопаснее. Но - не озаботились. Потому что писали для себя и на скорую руку.
написать оптимизирующий транслятор на много порядков сложнее чем просто транслятор.
И продумать машинно-независимый язык который позволяет генерировать оптимальный код тоже не очень просто. И тут undefined behaviour просто необходимая штука -- например ты говоришь в стандарте что-то должно вызываться только один раз. Если ты напишешь что если оно вызывается второй раз то будет какое-то детерминированное поведение, то компилятор уже обязан затрачивать на это какой-то оверхед. А если ты просто говоришь -- это UB, то у компилятора развязаны руки.
> Вот тебе пример детерминированного поведения: int i; for (i = 0; i++;) break; printf("%d\n", i);
Тут два варианта тебе на выбор - либо ты только что дал мне ещё один пример бредовости и непродуманности языка C, либо ты сейчас сам ответишь на свой вопрос, предварительно решив, какое значение должно возвращать lvalue "i++".
> Полностью согласен: откровенный произвол кодера-недоучки, который просит компилятор присвоить переменной два разных значения _одновременно_.
Одновременно? А я не знал, что ты такой чайник. Или ламер? Инкремент и присвоение должны происходить в ЧЁТКО ОПРЕДЕЛЁННОЙ последовательности. Если же она не определена стандартом языка, то язык - сляпанное на коленке ДЕРЬМО, и не более :)
> Object Pascal намного ближе к C, чем к творению Вирта.
Именно, батенька! Object Pascal - это почти C++, только без идиотизма и лучше продуманный. Меньше простора для полёта фантазии, но, как показывает обилие дыр в софте на C/C++, фантазия получается, как правило, больная. Так зачем она тогда нужна?
> А что, нежелание идиотов думать -- это для профессионала повод отказаться от гибкого и эффективного инструмента? Нафиг-нафиг, я лучше буду продолжать носить револьвер с УСМ двойного действия.
Да без проблем. Только не смей заявлять, что этот твой револьвер хорошо продуман, ибо выстрелить он может в любую сторону и в любой момент.
> И продумать машинно-независимый язык который позволяет генерировать оптимальный код тоже не очень просто. И тут undefined behaviour просто необходимая штука -- например ты говоришь в стандарте что-то должно вызываться только один раз. Если ты напишешь что если оно вызывается второй раз то будет какое-то детерминированное поведение, то компилятор уже обязан затрачивать на это какой-то оверхед. А если ты просто говоришь -- это UB, то у компилятора развязаны руки.
Лично я коду, работающему быстро, но при этом как бог на душу положит, код, работающий чуть медленнее, но зато однозначно так как, мне нужно и как я задумал. А кому нравится - тот может продолжать играть в рулетку с C.
Ни какой он не "почти C++". Как только в любом из OP/Java/C# появятся такие же конструкторы и деструкторы, как в С++, им можно будет спокойно пользоваться, без всякого фанатизма. Но до тех пор все они "намного ближе к C".