2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2, 3, 4  След.
 
 В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 06:40 
Tor в сообщении #823943 писал(а):
Alexu007 писал(а):
В чём принципиальная разница между языками С и Паскаль?

В безопасности кода, в степени поддержки парадигмы структурного программирования. Но код С работает быстрее. Эта болезнь "быстрое гавно" давно была бы рынком излечена, если бы государства не производителей гавнокода поддерживали, разрешая алгоритмы патентовать, а законодательно поддерживали пользователей в их исках к производителю гавнокода. Например Микрософт давно бы разорился и отбросил коньки.


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

Структурное программирование - в Паскале изначально было то, что затем появилось только в С++?

 
 
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 11:00 
Аватара пользователя
Паскаль не допускает сделать очевидные ошибки.
1) В Паскале более строгая типизация. Нельзя присвоить указатели разных типов. Нужно делать явное преобразование.
Выявить такую ошибку в Си не возможно. Так как её проявление от места ошибки разнесено во времени вине, не один отладочный прием не работает кроме логов всего проекта.
2) Отсутствие явного булевого типа в Си.
True+5= может быть любым числом.
True тут не константа, а результат булевого выражения.
3) В Си плохой синтаксис в котором легко сделать ошибку.
Очень просто ошибиться в | или ||, а еще более страшно в условии сделать ошибку = вместо ==. И долго удивляться почему результат другой.
4) Не явные задача параметра в цикле for.
5) Строки в Си являются не безопасными.
Большинство ошибок приходиться на этот пункт. Программист должен вычислить длину результирующей строки а только потом выполнять операции.
В Си++ эта болезнь вылечена.
В паскале такого нет.
6) Динамические параметры в функции. В Си их количество не котролируются.
Из за чего возможен элементарный выход за приделы массива.
printf scanf - поэтому считаются не безопасными функциями.
В Си++ симтомы вылечены.
На самом деле тут больше интересно а был ли мальчик? А был ли реальный взлом пароля из-за не правильной работай со строками в printf и scanf?
7) Я привел только 2 не безопасные функции на самом деле их гораздо больше.
8) Стоит отметить простоту грамматики паскаля. Она одно проходная в отличии от Си.

1) Отсутствие константных указателей в паскале. Правда в Си они тоже сделаны через левое плечё.

Цитата:
Структурное программирование - в Паскале изначально было то, что затем появилось только в С++?
Структурированое программирование появилась за долго до Паскаля и Си. Когда были введены современные циклы и условные операторы.
Что касается структур данных. То они были и в Си изначально. А вот в Паскаль был примитивным языком. Без указателей, структур и строк. Пока его не расширили до Extended Pascal - что является современным стандартом. Поэтому именно последний и рассматриваю в качестве Паскаля, да и в школе и в вузе говорят Паскаль имеют в виду именно Extended Pascal.

В Си++ работа со структурами расширилась. В ведение шаблонов, ООП, дженерики.

 
 
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 12:47 
Аватара пользователя
Alexu007 в сообщении #824024 писал(а):
говнокод как и хороший код
 !  Alexu007, предупреждение за сквернословие.

 
 
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 12:54 
Pavia в сообщении #824064 писал(а):
2) Отсутствие явного булевого типа в Си.

Начиная со стандарта С99 он есть.
Цитата:
В Си++ работа со структурами расширилась. В ведение шаблонов, ООП, дженерики.

Дженериков в C++ нет. Некоторые операции с дженериками возможны только при наличии виртуальной машины.

 
 
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 12:57 
Если Паскаль это Extended Pascal, то может его правильнее сравнивать с Си++, который расширение Си? А почему быстродействие Си больше - сишные компиляторы круче?

 
 
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 13:02 
Alexu007, хорошие компиляторы С не однопроходные. Несколько обработок исходного кода позволяют построить максимально оптимизированный машинный код.

 
 
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 14:14 
Основное отличие имхо: Pascal - больше для прикладного программирования. Си - для системного.
Вообще сравнивать Паскаль и Си уже не очень актуально. Современные их ООП-реализации - это Делфи и С++.
В настоящее время Делфи используется там, где нужно по-быстрому набросать формы, ну еще для работы с базами данных. Для системных и алгоритмических задач - это очевидно C/C++. Да, код в С/C++ не безопасный, потому что изначально язык Си был разработан как замена ассемблеру, то есть основной упор на производительность. Естественно, там отсутствовала проверка типов, выход указателей за пределы массива и т.п. Библиотека STL во многом решила эту проблему.

 
 
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 14:35 
Стабильно пишут, что С уже не актуален, и стабильно это вызывает удивление. Складывается ощущение, что авторы подобных заявлений ни на чем кроме ПК не программируют, и либо путают С и С++, либо считают последний полноценной заменой первого.
Шуточный ответ на вопрос заголовка темы - принципиально существуют компиляторы С для микроконтроллеров (по понятным причинам лучшего перевода в ассемблер), а паскалевских - пока не встречал.

 
 
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 15:12 
Си++ — не расширение Си, они ни в какую сторону не совместимы. Те же правила неявных приведений указателей в них разные.

 
 
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 20:57 
По быстрому набросать формы можно в Qt С++. Можно так же в С++ builder, но он платный и вроде как больше не развивается.

 
 
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 21:09 
Аватара пользователя
Паскаль удобен тем, что позволяет сконцентрироваться именно на алгоритме, не отвлекаясь на всевозможные низкоуровневые моменты вроде работы с указателями и т.п., да и синтаксис вроде как попроще для тех, кто впервые с программированием сталкивается.

Но код на С более компактен, быстрее работает, откомпилированные программы занимают меньше места. А главное для меня язык С является очень похожим на остальные языки, например Фортран, Перл и Ада. Если человек научился программировать на С, то он без большого труда выучится и на Паскале, на С++ и на всем таком прочем.

(Оффтоп)

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

P.S. паскаля не знаю, и не знал никогда. да и не узнаю видимо.

 
 
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 21:31 
Аватара пользователя
Pavia в сообщении #824064 писал(а):
Что касается структур данных. То они были и в Си изначально. А вот в Паскаль был примитивным языком. Без указателей, структур и строк. Пока его не расширили до Extended Pascal - что является современным стандартом. Поэтому именно последний и рассматриваю в качестве Паскаля, да и в школе и в вузе говорят Паскаль имеют в виду именно Extended Pascal.

Pavia
Выше Вы написали много верного про недостатки Си, но применительно к цитированному "хвосту" Вашего сообщения вынужден выразить недоумение. Без указателей? - Посмотрите Йенсен, Вирт, Паскаль, Руководство для пользователей, М.: Финансы и статистика, 1982 г., С. 54, Ссылочные типы. Без строк? - Посмотрите ту же книгу, С. 37 - строки. Без структур? - См. Комбинированные типы, С.38. Слово record уже тогда было зарезервированным.

Про Extended Pascal:
Цитата:
In 1990, an extended Pascal standard was created as ISO/IEC 10206. (Википедия, Pascal)
Я принимал участие в первой реализации компилятора (Dr. Pascal's Extended Pascal Compiler -См. там же). Но ранее стараниями Borland и Microsoft появились компиляторы ОО Паскаля - см. Jon Udell, Crash of the Object-Oriented Pascals, BYTE, July, 1989, заодно можете посмотреть и мое письмо редактору M.I.Trofimov, The End of Pascal?, BYTE, March, 1990, p.36, где уже тогда я ставил вопрос о надежности и высказывал опасения в отношении излишней переусложненности :D Extended Pascal не ОО, Дельфи - ОО. На мой взгляд, оптимальный на сегодняшний день язык - Дельфи-7. Про С++: там действительно была попытка улучшения, но язык стал слишком сложным, сохранились и добавились неоднозначности, из-за которых на сегодняшний день мы имеем очень ненадежный софт, от ОС и библиотек и до прикладных программ.

В отношении неэффективности - это в прошлом, мои программы на Дельфи с применением многопоточности на международном соревновании, проведенном компанией Интел, не отставали по скорости от программ на Intel-C++, при этом в С++ для поддержки многопоточности приходилось применять костыль в виде TBB :D

В общем случае: самый эффективный код может быть получен только на ассемблере, все другие языки - его ограничение. Кому нужно, может писать критические участки кода на ассемблере и вставлять в код на Дельфи, там есть все возможности для этого.

-- Сб фев 08, 2014 21:51:30 --

Alexu007 в сообщении #824097 писал(а):
А почему быстродействие Си больше - сишные компиляторы круче?
Про компиляторы С++ интересное свидетельство есть в книге Крис Касперски, Фундаментальные основы хакерства, М.:Солон-пресс, 2004, С. 142, где автор утверждает, что все известные ему реализации генерируют "ну очень кривой и тормозной код". Может, Си (без плюсов) делает исполняемый код лучше, но ведь Си не ОО. Неужели сейчас кто будет тратить время на написание GUI без OOP? ;-)

 
 
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 23:16 
spyphy в сообщении #824114 писал(а):
Pascal - больше для прикладного программирования. Си - для системного.

Я бы сказал грубее: Паскаль -- для человека, Си -- для программера. (хотя, конечно, драйверов на Паскале не напишешь)

x51 в сообщении #824251 писал(а):
Но код на С более компактен, быстрее работает,

Сильно сомневаюсь, что сильно быстрее. Я в своё время развлекался выжиманием из Паскаля всех соков ассемблерными вставками. И ускорения более чем втрое ( да и то в лучшем случае) как-то не наблюдал. Ну, допустим, Си (как промежуточный вариант) обгонит Паскаль раза в полтора. А оно нам нужно -- за такую-то цену?...

bin в сообщении #824265 писал(а):
На мой взгляд, оптимальный на сегодняшний день язык - Дельфи-7.

Это ровно Паскаль и есть. Только усложнённый за счёт ОО и визуализации; что, конечно, есть благо -- но с точки зрения собственно языка не более чем усложнение.

 
 
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 23:25 
Аватара пользователя
ewert в сообщении #824312 писал(а):
Это ровно Паскаль и есть. Только усложнённый за счёт ОО и визуализации;
Тут есть некоторые тонкости. Object Pascal и Delphi — немножко разные языки.

 
 
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 23:26 
Аватара пользователя
ewert в сообщении #824312 писал(а):
x51 в сообщении #824251 писал(а):
Но код на С более компактен, быстрее работает,

Сильно сомневаюсь, что сильно быстрее. Я в своё время развлекался выжиманием из Паскаля всех соков ассемблерными вставками. И ускорения более чем втрое ( да и то в лучшем случае) как-то не наблюдал. Ну, допустим, Си (как промежуточный вариант) обгонит Паскаль раза в полтора. А оно нам нужно -- за такую-то цену?...


Когда каждый килобайт на счету и нет возможности использовать ассемблер, то очень даже влияет. А цена затрат на разработку потом сильно окупается экономией на обслуживании оборудования по причине сбоя ПО, ибо оно меньше сбоит, особенно при пересборке "на лету" в самой машине, непосредственно на объекте.

 
 
 [ Сообщений: 54 ]  На страницу 1, 2, 3, 4  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group