Yoda писал(а):
SII писал(а):
Это, кстати, ещё одна причина, почему я не использую Си и иже с ним: читабельность очень плохая, если сравнивать с Паскалем/Адой.
Мы ведь здесь сравниваем не Аду с С, а ассемблер с ЯВУ.
Не соглашусь. Вы, конечно, имеете полное право утверждать, что на Си писать
всегда лучше, чем на ассемблере, а я вот утверждаю: нет, часто не лучше, а хуже. Надёжность кода на Си будет крайне низка, читабельность -- очень посредственная, и практически все преимущества над асмом сводятся в скорости набора исходников. Лично меня такое положение не устраивает, поэтому я Си не использую и использовать не буду, и если у меня стоит выбор -- Си или ассемблер -- я пишу на ассемблере. (Правда, мне не приходится создавать программы для работы с СУБД и т.п. "высокоуровнево-прикладной" код, так что говорю только о системном).
Цитата:
По поводу читаемости. Можно написать хороший или плохой код на ЯВУ и хороший или плохой код на ассемблере. Но в любом случае читаемость хорошего кода на ЯВУ лучше, чем хорошего кода на ассемблере.
По-настоящему хороший код на Си написать вообще близко к невозможному, и для этого надо отказываться от многих специфических особенностей языка. В частности, категорически нельзя использовать операцию ?, кодируя явным образом if-else (ну или разбивать ? на несколько строк, где чётко видно, где какая часть). Ни в коем случае нельзя использовать for для чего-либо, кроме традиционного цикла с заранее известным числом элементов, полностью аналогичного паскалевскому for'у, ну и так далее. Любое отклонение от подобных правил убивает читабельность программы, поскольку приходится каждый раз расшифровывать, что же на самом деле стоит за той или иной конструкцией. В результате приходим к "паскалевскому" стилю программирования, но без паскалевского контроля типов и других вещей, направленных на повышение надёжности.
Цитата:
А о таком понятии, как "золотая середина", слышал?
Золотая середина -- это обычно грандиозная ложь, а компромиссы приводят к появлению вещей, одинаково плохо подходящих для любых задач.
Цитата:
SII писал(а):
А вообще, единственный минус, и то относительный и прямо проистекающий из плюсов, той же Ады -- необходимость довольно частого использования явного приведения типов.
Это далеко не единственный минус и, может быть даже не самый главный. Самые противный минус Паскаля, Модулы и Ады (я перечислил те языки общего класса, на которых имел несчастье выполнять проекты) - это слишкам-много-букав и, как следствие, ужасная читаемость. Та мысль, которую можно выразить в двух очевидных строках, в них необходимо расписывать на целый абзац мутного текста, содержащего кучу лишних слов. Чего только стоят эти begin/end!
Извините, полный бред. "Многа-многа букаф" в Аде как раз резко повышают читабельность по сравнению с Си, где что ни строка -- то набор специальных символов, через который ещё продраться надо, чтобы понять смысл этой "шифрограммы". Даже несчастный if или for невозможно записать как минимум без скобок. А многие ещё и пробелы не ставят, и попробуй сходу увидеть, что там -- вызов функции или условный оператор... Операторы с ? вообще абсолютно нечитаемые, поскольку и условное выражение, и оба вычисляемых по условию сливаются в одну сплошную кашу...
А begin-end'ы бесконечные -- это характерная черта только и исключительно Паскаля, а не прочих языков, к нему восходящих. В той же Аде эта парочка используется только для начала и конца кода подпрограммы (процедуры или функции), а также в случае, если внутри специально производится группировка операторов в блок (оператор declare-begin-end). Во всяких там условных операторах и прочих циклах никаких begin'ов нет. И это не говоря о том, что сам по себе begin-end читабельней, чем выполняющие совершенно ту же функцию в Си { }, особенно при слабом зрении -- хотя б потому, что { } очень легко спутать с [ ] или ( ), если не приглядываешься или шрифт не на весь монитор.