Перейти к содержанию
    

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

 

Простите, ну ведь это Ваш способ гасить оппонента в споре?

это "ограничение паскаля" вовсе не критичное - оно совершенно не мешает программированию.

 

 

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

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

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

 

 

а вместо ответа вы начинаете изливаться словесным поносом. джентельмен так не поступает :)

у вас есть подтверждение своих заявлений? предъявите. нет - извинитесь и перестаньте кидаться говном навозом.

* Простите, не Вам судить и указывать как мне себя вести.

* Классика! -- Месье сам, претендуя на звание джентльмена, не знаеет как пишется слово?

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

Изменено пользователем zhevak

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по сравнению с полным аналогом WinAVR в ассемблерном листинге кроме таблицы векторов нет ни одной "вспомогательной" команды, которые Си постоянно лепит - инициализация переменных нулями, стеки данных и т.п. Не стану спорить - пример некорректный

Инициализация переменных - это фича конкретного компилятора, кстати не предусмотренная стандартом и отключаемая по желанию. Как и многие другие.

И вообще, если говорим "паскаль" и подразумеваем "Delphi", то смотрим на название темы и констатируем, что имеются некоторые несоответствия.

Главное преимущество си (++) - то, что он де-факто мировой стандарт. Причём не примочки борланда или мелкософта, а ANSI C. Мирового стандарта Pascal не существует.

Большинство открытых (также и закрытых) проектов также написаны на си.

Синтаксис большинства современных языков здорово смахивает на сишный.

Если всё-таки проводить аналогии с машинами, то в своё время многие автолюбители (и профессионалы) тащились от 24-й волги, но сейчас её время прошло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Даже синтаксис и набившие оскомину бегины с эндами имеют значение - зачем мне набивать 5 букв если можно поставить одну? Это не только отнимает время, но и мешает пониманию - объект, являющийся по сути лишь скобкой, выглядит как ключевое слово. А для чего нужно слово then? Ведь и без него все понятно.
придирки к особенностям синтаксиса выглядят смешными - я уже приводил сравнение с the или der-die-das - это особенности языка. веснушки на лице. вы же не станете говорить, что человек с веснушками - дебил, а чистолицый - умный? так и здесь. если для вас основное преимущество Си в том, что он позволяет быть более ленивым - так и скажите, чего юлить :) а я скажу, что чем длиннее текст программы за счет длинных имен переменных, лексем языка и т.п. - тем ближе он к пониманию человеком, нативнее. так сказать. и я вижу в этом плюс, а не минус. но непринципиальный плюс - веснушку :)

 

теперь о фортране, goto и невозможности. язык можно назвать плохим, если он не просто неудобен вам (например, из-за того, что вы слишком ленивы и не желаете набирать 3 символа вместо двух), а содержит явные рамки, сужающие ваши возможности, как узкий лифт не позволит инвалиду на коляске подняться на третий этаж. пример: бейсик (классический) не содержит такого инструмента, как указатель, и потому не позволяет манипулировать произвольными областями памяти. это ограничение существенное для многих приложений. далее: бейсик (классик) не содержит инструмента передачи параметров в подпрограммы и возврата результата из них - для этого используются глобальные переменные. это существенно затрудняет как процесс алгоритмизации, так и понимания логики уже готовой программы. понимаете - критерии, которые очевидны и действительно являются недостаткаи. важно вовсе не то, что в бейсике IF, а в Си if :) если можете - повторите аналогично для Си-паскаль.

 

P.S. я не случайно уточнил, что бейсик я беру классический, ибо в последних версиях его возможности практически не отстают от Си. и призываю для корректного сравнения выбрать версии Си и паскаля "одной весовой категории" - если виртовский паскаль, то тогда ANSI C кернигана&ритчи, а если С++, то как минимум Delphi

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

У того, кто не видит таких примеров, которых, как я уже писал, приведено немало, но вы их видеть не желаете. Специально для вас привожу один - перевод символа в нижний регистр:

 

c |= 0x40;

 

Паскаль не позволяет проводить с символьными переменными арифметические операции. Впрочем, я догадываюсь, для вас такой пример "несущественный". Более того, вы считаете, что паскаль, не позволяя выполнять перевод символа таким простым способом, помогает программисту. Я же считаю, что мешает.

- пример с добалвением запятой или знака равенства в код - см. выше. - где комментарии?

Придумывание кодов и знаков, которые в него можно дабваить, чтобы код стал неработоспособным - давняя забава паскалистов. Только к практическому программиованию это не имеет отношения. Если вы добавили запятую и программа перестала работать - это будет видно по результатам ее работы. Следовательно нужно брать отладчик и искать ошибку. Если же программа не перестала работать - значит она исправна. Все.

компилятор-то отловит, только вам потом придется разбираться, какая из двух i неверно задана :)

Та, которая используется для индексирования. Или это не очевидно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Главное преимущество си (++) - то, что он де-факто мировой стандарт. Причём не примочки борланда или мелкософта, а ANSI C. Мирового стандарта Pascal не существует.
он не только де-факто... он и де-юре стандартизирован. а паскаль, увы, нет...

первое за всю тему значительное объективное подтверждение достоинства Си.

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

 

У того, кто не видит таких примеров, которых, как я уже писал, приведено немало, но вы их видеть не желаете. Специально для вас привожу один - перевод символа в нижний регистр:

 

c |= 0x40;

вам уже говорили, что для UTF8, например, такой перевод не прокатит - вашу программу придется страшно долго корректировать, чтобы она смогла переводить регистр символов в этой кодировке. так же это не сработает для Кириллицы и других языков в UNICODE - примеров много. есть кодировки и более экзотические.

а преобразование ch := locase(ch), являющееся традиционным для паскаля, сработает всегда.

 

что лучше?

Придумывание кодов и знаков, которые в него можно дабваить, чтобы код стал неработоспособным - давняя забава паскалистов. Только к практическому программиованию это не имеет отношения. Если вы добавили запятую и программа перестала работать - это будет видно по результатам ее работы. Следовательно нужно брать отладчик и искать ошибку. Если же программа не перестала работать - значит она исправна. Все.
не все. это имеет очень большое значение в реальном программировании.

я спрашивал, как долго вы будете среди 10000 строк искать случайно набранный символ в отладчике? ну дрогнула у вас рука при вводе - бывает, не так ли?

самое интересное, что если я вместо практически любого = поставлю == - компилятор Си проглотит это практически со 100% вероятностью даже без ворнинга (если повезет - скажет, что строка удалена при оптимизации, т.к. не содержит использования результата операции или типа того). и программа после этого начнет работать... и для выяснения того, что она работает неверно - еще надо приложить немалые усилия...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

самое интересное, что если я вместо практически любого = поставлю == - компилятор Си проглотит это практически со 100% вероятностью даже без ворнинга (если повезет - скажет, что строка удалена при оптимизации, т.к. не содержит использования результата операции или типа того). и программа после этого начнет работать... и для выяснения того, что она работает неверно - еще надо приложить немалые усилия...

Основная идея языка си - программист всегда прав, он знает, что делает.

Си называют «универсальным ассемблером» или «ассемблером высокого уровня», что отражает различие языков ассемблера для разных платформ и единство стандарта Си, код которого может быть скомпилирован без изменений практически на любой модели компьютера. Си часто называют языком среднего уровня или даже низкого уровня, учитывая то, как близко он работает к реальным устройствам. Компиляторы Си разрабатываются сравнительно легко благодаря относительно низкому уровню языка и скромному набору элементов. Поэтому данный язык доступен на самых различных платформах (возможно, круг этих платформ шире, чем у любого другого существующего языка). К тому же, несмотря на свою низкоуровневую природу, язык позволяет создавать переносимые программы и поддерживает программиста в этом. Программы, соответствующие стандарту языка, могут компилироваться на самых различных компьютерах.

Цитата из вики.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

MrYuran, да кто ж с этим спорить станет?! :) вопрос в том, что программист - человек, и может нечаянно ошибиться. стоит ли в этом случае продолжать считать, что он прав? и на самом ли деле это есть преимушество? а контроль действий программиста - недостаток?

я согласен, что больше свободы - больше ответственности. а вы согласны с тем, что меньше законов - больше анархии?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

самое интересное, что если я вместо практически любого = поставлю == - компилятор Си проглотит это практически со 100% вероятностью даже без ворнинга (если повезет - скажет, что строка удалена при оптимизации, т.к. не содержит использования результата операции или типа того). и программа после этого начнет работать... и для выяснения того, что она работает неверно - еще надо приложить немалые усилия...

Не всякий компилятор. gcc-3.4.5 выдаёт предупреждение при -Wall, а любое предупреждение - фактически ошибка. Другие компиляторы тоже не отстают :)

Ищите другой пример ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я вот подумал, может, простейший пример паскалевского кода разберем?

var str : string;
begin
   str := readln;
   writeln(str);
end.

сумеете написать полный, работающий абсолютно аналогично этому код на Си? и после этого сравним результат по размеру исходника. по размеру исполняемого кода (наверное, для консоли Windows проще всего)...

 

почему-то мне кажется, что по размеру исходника (к вопросу о экономии сил при написании символов) победа будет за паскалем :) на счет остального - поглядим :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а вы согласны с тем, что меньше законов - больше анархии?

зато работать веселее. Такие бывают забавные глюки, если, например, во флотовом значении вместо точки поставить запятую.

Зато когда раскопаешь - триумф и ликование, и как обычно - "вот дятел!"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а преобразование ch := locase(ch), являющееся традиционным для паскаля, сработает всегда.

Разумеется, на практике следует пользоваться tolower(). Но вы хотели примеров - вот вам пример: паскаль не позволяет выполнять арифметические операции с символами. Да, для стандартных случаев, типа перевода регитра, еть функции, но случаи бывают и нестандартные.

я спрашивал, как долго вы будете среди 10000 строк искать случайно набранный символ в отладчике? ну дрогнула у вас рука при вводе - бывает, не так ли?

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

самое интересное, что если я вместо практически любого = поставлю == - компилятор Си проглотит это практически со 100% вероятностью даже без ворнинга

Вы заблуждаетесь.

AVR:

../tn.c:242: warning: suggest parentheses around assignment used as truth value

MSVC:

c:\users\... .cpp(307) : warning C4706: assignment within conditional expression

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не всякий компилятор. gcc-3.4.5 выдаёт предупреждение при -Wall, а любое предупреждение - фактически ошибка. Другие компиляторы тоже не отстают :)

Ищите другой пример ;)

а я и говорил, если повезет - компилятор скажет про неиспользуемый результат :) повторяю - я Си неплохо знаю. а что скажете про это:
int a = b == c;

здесь тоже ворнинг будет? ;)

 

Разумеется, на практике следует пользоваться tolower(). Но вы хотели примеров - вот вам пример: паскаль не позволяет выполнять арифметические операции с символами. Да, для стандартных случаев, типа перевода регитра, еть функции, но случаи бывают и нестандартные.
никого не останавливает при этом использовать приведение типов (которое в Си сплошь и рядом применяется), а приведение типов и в паскале возможно :) хотя, вообще говоря, символ в паскале - это не число, и вполне логично, что просто так его просуммировать с числом нельзя. контроль типов, знаете ли...

 

 

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

 

блин, не заметил, как скатился на выискивание недостатков в Си, что изначально не входило в мои планы :) если можно - вернемся к выискиванию плохого в паскале :)

Изменено пользователем ARV

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что скажете про это:
int a = b == c;

здесь тоже ворнинг будет? ;)

А если в паскале написать a := b = c что будет?

Я вообще не понимаю, что это за доводы - написать какой-то бредовый код и сказать - вот смтрите, на Си можно написать неправильную программу, значит это плохой язык!

никого не останавливает при этом использовать приведение типов (которое в Си сплошь и рядом применяется), а приведение типов и в паскале возможно :)

Приведение типов в Си используется в сомнительных случаях - например, если вы попытаетесь указателю присвоить целое - операция странная, но в редких случаях необходимая. Но если вы складываете char и int - это рядовая операция и ничего приводить не требуется.

Изменено пользователем 777777

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вы же не станете говорить, что человек с веснушками - дебил, а чистолицый - умный?...

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

 

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

Ваши убеждения -- это Ваши убеждения. Общее мнение -- это общее мнение. Не стоит путатьь одно с другим. Вам может быть удобнее работать с длинными переменными, но многие предпочетают сокращать имена переменных (до разумных пределов, разумеется). Кто как привык работать, то так и работает. Кто привык жить в подземке, тот там и живет. Но большая часть граждан предпочетает жить в квартирах.

 

я изменил некоторые термины и вот что получилось:

язык можно назвать плохим, если он не просто неудобен вам (например, из-за того, что вы слишком напуганы лаконичностию си-шных лексем и желаете набирать BEGIN-END-PROCEDURE-FUNCTION-PROGRAM-THEN и т.д. вместо фигурных скобок), а содержит явные рамки, сужающие ваши возможности

...

это существенно затрудняет как процесс алгоритмизации, так и понимания логики уже готовой программы.

Да, да. Это особенно так, если учесть, что программист не понимает для чего нужны комментарии.

 

примеров много. есть кодировки и более экзотические.

а преобразование ch := locase(ch), являющееся традиционным для паскаля, сработает всегда.

Эт-точно! В Си ведь отсутствует аналогичная библиотечная функция? Поэтому Си-шникам приходится колдовать с битами, что очень сильно усложняет понимание текста программы. Бред какой-то!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если в паскале написать a := b = c что будет?
будет ошибка компиляции, если а - число, а не логическая переменная. я не зря написал код на си с ЧИСЛАМИ. в паскале числа отдельно, символы - отдельно, логические отношения - отдельно, и только в Си мухи умножаются на котлеты и это считается нормальным.

 

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

 

а вот явно сужающие рамки возможности, о которых вы все время толкуете, так и остались виртуальными миражами - кроме жалкой попытки доказать, что символ и число на самом деле есть эквиваленты, ничего нету... почему не откликаетесь на предложение сравнить примитивнейший код, что я предложил выше? есть сомнения, что Си победит или что? давайте доказывать свою точку зрения фактами, а не словами. раз мы тут программисты - будем говорить на языках программирования, оставляя человеческие слова для комментариев :) идет? ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...