2014 dxdy logo

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

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




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


24/05/09

2054
Tor в сообщении #823943 писал(а):
Alexu007 писал(а):
В чём принципиальная разница между языками С и Паскаль?

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


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

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

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


31/10/08
1244
Паскаль не допускает сделать очевидные ошибки.
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 
Админ форума
Аватара пользователя


19/03/10
8952
Alexu007 в сообщении #824024 писал(а):
говнокод как и хороший код
 !  Alexu007, предупреждение за сквернословие.

 Профиль  
                  
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 12:54 


27/11/10
201
Pavia в сообщении #824064 писал(а):
2) Отсутствие явного булевого типа в Си.

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

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

 Профиль  
                  
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 12:57 


24/05/09

2054
Если Паскаль это Extended Pascal, то может его правильнее сравнивать с Си++, который расширение Си? А почему быстродействие Си больше - сишные компиляторы круче?

 Профиль  
                  
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 13:02 


27/11/10
201
Alexu007, хорошие компиляторы С не однопроходные. Несколько обработок исходного кода позволяют построить максимально оптимизированный машинный код.

 Профиль  
                  
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 14:14 


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

 Профиль  
                  
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 14:35 


05/09/12
2585
Стабильно пишут, что С уже не актуален, и стабильно это вызывает удивление. Складывается ощущение, что авторы подобных заявлений ни на чем кроме ПК не программируют, и либо путают С и С++, либо считают последний полноценной заменой первого.
Шуточный ответ на вопрос заголовка темы - принципиально существуют компиляторы С для микроконтроллеров (по понятным причинам лучшего перевода в ассемблер), а паскалевских - пока не встречал.

 Профиль  
                  
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 15:12 
Заслуженный участник


09/09/10
3729
Си++ — не расширение Си, они ни в какую сторону не совместимы. Те же правила неявных приведений указателей в них разные.

 Профиль  
                  
 
 Re: В чём принципиальная разница между языками С и Паскаль?
Сообщение08.02.2014, 20:57 


24/05/09

2054
По быстрому набросать формы можно в Qt С++. Можно так же в С++ builder, но он платный и вроде как больше не развивается.

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


08/02/14
53
Серпухов, Россия
Паскаль удобен тем, что позволяет сконцентрироваться именно на алгоритме, не отвлекаясь на всевозможные низкоуровневые моменты вроде работы с указателями и т.п., да и синтаксис вроде как попроще для тех, кто впервые с программированием сталкивается.

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

(Оффтоп)

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

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

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


22/09/09

1907
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 
Заслуженный участник


11/05/08
31922
spyphy в сообщении #824114 писал(а):
Pascal - больше для прикладного программирования. Си - для системного.

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

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

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

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

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

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


11/06/12
9445
слегка.весны.храп
ewert в сообщении #824312 писал(а):
Это ровно Паскаль и есть. Только усложнённый за счёт ОО и визуализации;
Тут есть некоторые тонкости. Object Pascal и Delphi — немножко разные языки.

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


08/02/14
53
Серпухов, Россия
ewert в сообщении #824312 писал(а):
x51 в сообщении #824251 писал(а):
Но код на С более компактен, быстрее работает,

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


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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу 1, 2, 3, 4  След.

Модераторы: Toucan, maxal, PAV, Karan, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group