LINUX.ORG.RU
ФорумTalks

[Ы]Откуда такая ненависть к Pascal?


0

0

Смотрю тут темы для двух языков уже появились, решил создать свою :) Но C++ и Java, это фигня(в плане холиваров), стая красноглазых кричат про их ненужность, знающие и использующие их люди говорят обратное и я с ними согласен. Хотя отчасти согласен и с теми, кто проклинает сложность/гемморойность/etc. поддержки кода на том или ином языке. Ну да ладно.

Собственно Pascal - о нем кричат все кому не лень, и быдло, и красноглазые, и даже вполне, казалось бы, вменяемые люди. Холивары Pascal vs. С или С++(кому что больше нравится :)), поднимаются чаще других. И стоит любой поде^W программе/игре/etc. написанной на Pascal появится на свет - тут же будут камменты что это УГ.

Неужели проблема кроется в том что на компах стоят только труЪ компиляторы, и самые труЪ линуксоиды не приемлют установки бинарников, если неасилили поставить другой компилятор? Или же это на генетическом уровне вроде "C++ не нужен, ибо UNIX был на C" или "Страуструп - мудак, и точка"? В общем хотелось бы услышать варианты почему Pascal так всем не нравится :)

ЗЫ: башорг комментировать про "/" не надо :)

★★★★

Pascal пихают в школах, потом и в ВУЗах - я полгода промучился, но потом разрешили перейти на плюсы. А многим - нет, заставляют юзать винду+паскаль, причем турбо от борланда, некро в общем сплошное.

Думаю, это тут основная причина.

P.S. ы - тонкий намек на /s/?

anonymous
()

Надо же кого-то ненавидеть :-)

sdio ★★★★★
()

Если углубиться в историю... Паскаль был создан Никлаусом Виртом как язык для обучения студентов программированию. Язык хорошо структурирован, универсален. Для обучения и познания основ алгоритмизации, моё мнение, самое то.

Так что, Паскаль - хороший язык.

vvn_black ★★★★★
()
Ответ на: комментарий от anonymous

>>А многим - нет, заставляют юзать винду+паскаль, причем турбо от борланда, некро в общем сплошное.

Дауж, может для кого-то вполне жестоко. У нас в ВУЗ'е только первый курс давали Pascal в качестве изучаемого, но потом перешли на C++, но курсовые и пр. разрешали писать на чем угодно.

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

Andru ★★★★
() автор топика

Ты бы для приличия про black box сказал, а то паскаль...

anonymous
()
Ответ на: комментарий от vvn_black

> Так что, Паскаль - хороший язык.

Уже писали: в идеологическом плане Паскаль давно уже переплюнули и Модула-2 и Оберон.

В плане "языка для обучения студентов" его успешно вытесняют Схема и Питон.

Так что, язык явно устарел.

eugine_kosenko ★★★
()
Ответ на: комментарий от Andru

Мой первый язык, который я выучил, был c++ так что "девай" подальше своего тупого студентишку.

anonymous
()
Ответ на: комментарий от JackYF

>>begin/end

мне допустим проще ориентироваться именно по ним, нежели по {}. В общем кому какие фломастеры :) Вопрос только - что не так с указателями? 8) Пользуюсь ими довольно часто, и никаких проблем не возникает.

Andru ★★★★
() автор топика
Ответ на: комментарий от eugine_kosenko

>>Арифметика

хм... задумался... Не, в Delphi допустим для Windows с арифметикой складно, да, самому пришлось писать дефайны для определения компилятора, чтоб народ мог юзать один мой модуль. Но в родном мне FreePascal вполне складываются обычные числа и указатели. Или я чего-то не в ту степь "думаю"? :)

Andru ★★★★
() автор топика
Ответ на: комментарий от Zenom

>>А как насчет того, что begin'у не всегда соответствует end?

пример? Я неопределенности в этом плане не видел(хотя скорее потому что, в "сложных" ситуациях для большего понимания кода перестраховываюсь доп. begin/end). Знаю только, что когда-то в обсуждениях встречал фразу о том, что зоопарк компиляторов для С++ под Windows может сгенерировать разный код, если вдоволь поиздеваться над записью одной операции с инкрементами(если ща вспомню этот кусок кода, то приведу) :)

Andru ★★★★
() автор топика

Синтаксис у него неудобный, и все эти заморочки, типа того, что ВСЕ локальные переменные надо заранее в начале модуля / процедуры объявить.

Ну и знакомство с некробиблиотекой от Borland и куча соответствующих лабораторок на первом курсе (с непременным заданием "вывести красивую графику") не добавляет любви, хотя это вроде как и не относится к самому языку.

hexenlord
()
Ответ на: комментарий от Andru

> Но в родном мне FreePascal вполне складываются обычные числа и указатели.

Примеры?

И еще, FreePascal -- это какой стандарт? ANSI, ISO или ECMA?

eugine_kosenko ★★★
()

Мои причины ненавидет Pascal(тьфу!)

1. Ну что это? Нафига давать программе имя? Да ещё и обязательно!

2. Какой дебил сделал так, чтоб все переменные создавались в одном месте, как и всё остальное? А если я хочу создать переменную по середине прогрммы - чот, нельзя? СрачЪ.

3. Кто придумал begin и end?

4. До ужаса ужасные математические операторы(особенно деления)

5. Ваще тупой язык - тупее тупого васика.

AntiWindows
()
Ответ на: комментарий от eugine_kosenko

>>record ... end

а, в этом плане ) Ну тут уж такой синтаксис, и в качестве "bagin'а" выступает type :) Т.к.

type
MyType = record/class/object
end;

Впринципе ничего неопределённого или явно непонятного тут нет, и особых отличий, допустим, от:

struct
{
...
} MyType;

нету

Andru ★★★★
() автор топика
Ответ на: комментарий от eugine_kosenko

>>И еще, FreePascal -- это какой стандарт? ANSI, ISO или ECMA?

Если говорить именно о языках, то да, я немного отклонился от темы :)

А примеры с указателями, вот функция для чтения данных из ogg:

function ogg_ReadBuffer( Buffer : Pointer; Count : LongWord ) : Integer;
var
BytesRead : Integer;
begin
BytesRead := 0;
repeat
{$IFDEF FPC}
Result := ov_read( vf, Buffer + BytesRead, Count - BytesRead, FALSE, 2, TRUE, nil );
{$ELSE}
Result := ov_read( vf, Pointer( LongWord( Buffer ) + BytesRead ), Count - BytesRead, FALSE, 2, TRUE, nil );
{$ENDIF}

if Result = -3 Then break;
BytesRead := BytesRead + Result;
until ( Result = 0 ) or ( BytesRead = Count );

Result := BytesRead;
end;

В случаи с Delphi(код после {$ELSE}) пока стоит грубый хак только для 32-битной венды, т.к. указатель приходится преобразовывать в число, а LongWord это только 32-бита.

Andru ★★★★
() автор топика
Ответ на: комментарий от hexenlord

>и все эти заморочки, типа того, что ВСЕ локальные переменные надо заранее в начале модуля / процедуры объявить.

кстати как по мне, объявление всех переменных в начале ф-ции - хороший тон.

chicane
()
Ответ на: комментарий от Andru

> Ну тут уж такой синтаксис, и в качестве "bagin'а" выступает type :)

Не всякий type завершается end. Так что, не все так очевидно.

> и особых отличий, допустим, от ... нету

Здесь скобки соответствуют друг другу (как и везде). И это довольно сильно помогает в навигации.

eugine_kosenko ★★★
()
Ответ на: комментарий от chicane

> кстати как по мне, объявление всех переменных в начале ф-ции - хороший тон.

И даже автопеременные? Даже в Аде, и то не обязательно объявлять.

eugine_kosenko ★★★
()
Ответ на: комментарий от AntiWindows

>>Мои причины ненавидет Pascal(тьфу!)

После этих строк хотел почитать что-то умное, но... после прочтения одно только "Бугага!". Собственно вот и школьники подтянулись(с такими красочными никами, но эт ладно, обсуждать чужие ники не хорошо) :) Сорри если обидел, но увы стиль твоего поста на другие мысли не наводит )

>>1. Ну что это? Нафига давать программе имя? Да ещё и обязательно!

Пальцы отсохнут набить лишнюю строку, да? 8)

>>2. Какой дебил сделал так, чтоб все переменные создавались в одном месте, как и всё остальное? А если я хочу создать переменную по середине прогрммы - чот, нельзя? СрачЪ.

Срач... нуну, я плакалЪ :) Я посмотрю на тебя, как ты будешь искать в большом куске кода на С/С++, где же программер объявил переменную, использующуюся "тута и тута"... Хотя все это дело вкуса. Мне вполне логичным представляется объявление переменных в определенных местах(тот же подход пытаюсь соблюдать и в коде на C/C++), и особо неудобства в этом не вижу, хотя да, бывают моменты когда неплохо бы объявить переменную непосредственно в самом цикле, а не перед началом функции, но я уже привык и на автомате это делаю :)

>>3. Кто придумал begin и end?

Кто придумал эти крокозябры - {}? Это если отвечать в твоем стиле, так что...

>>4. До ужаса ужасные математические операторы(особенно деления)

Чем деление не угодило? Тем что если делить int на float и присваивать int'еджеру, то число будет float, и выскочит ошибка компилятора? В С/С++ для меня было немного неудобно перед подобными делениями делать что-то вроде float_var = (float)intP1/intP2; чтобы получить в результате именно float, а не int(хотя хз, может это старое уг от MS такое требовало :)). В Pascal'е с этим по другому - используется div для получения int в качестве результата от деления.

>>5. Ваще тупой язык - тупее тупого васика.

ну ты понял, да? :)

Andru ★★★★
() автор топика
Ответ на: комментарий от eugine_kosenko

>>А вычитание указателей сможет?

эх... увы(в смысле вычитание Buffer и Buffer, а не Buffer и BytsRead), значит не со всеми я случаями сталкивался 8) В общем да, пожалуй в С++ код будет попроще в таких ситуациях, но выход в Pascal'е есть, пускай и "толстый".

Но такие ситуации чем-то мне напоминают споры о работе со строками. Да, в C++ есть string, но String/AnsiString в Pascal'е удобнее, не говоря о char* в чистом С.

Andru ★★★★
() автор топика
Ответ на: комментарий от eugine_kosenko

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

chicane
()
Ответ на: комментарий от eugine_kosenko

>>Не всякий type завершается end. Так что, не все так очевидно.

Все такие typ'ы заменяют typedef, и для паскалистов допустим очевидно что запись type MyInteger = Integer; обьявляет новый тип, а не структуру.

>>Здесь скобки соответствуют друг другу (как и везде). И это довольно сильно помогает в навигации.

Если записать код, как в одной известной программе по преобразованию чисел в римские... то проблемы с навигацией могут возникнуть везде 8) Ладно, тут все к вкусам сводится в который раз, так что спорить не стану.

Andru ★★★★
() автор топика
Ответ на: комментарий от chicane

> кстати как по мне, объявление всех переменных в начале ф-ции - хороший тон.

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

int fn(const T& arg)
{
CMyObject obj; // используется дефолтный конструктор

...
obj = otherFn(...);
}


obj будет сконструирован в начале функции, а потом обьект хранящийся в obj будет удален оператором присваивания, что-бы поместить туда новую версию CMyObject, - копию значения, возвращенного otherFn.

Если же записать сразу:

int fn(const T& arg)
{
...

CMyObject obj = otherFn(...);
}

Эта запись будет эквивалентна

CMyObject obj(otherFn(...));

т.е. - вызов конструктора с аргументами, - конструктора копии, только 1 раз, для копирования, а не 2 раза.

К тому-же у CMyObject может и вообще не быть конструктора безаргументного, тогда первая форма вообще нипременима.

anonymous
()
Ответ на: комментарий от Andru

> Все такие typ'ы заменяют typedef, и для паскалистов допустим очевидно что запись type MyInteger = Integer; обьявляет новый тип, а не структуру.

Но end здесь отсутствует, хотя type якобы продолжает играть роль begin.

> Если записать код, как в одной известной программе по преобразованию чисел в римские... то проблемы с навигацией могут возникнуть везде 8)

И что, количество открывающих скобок не совпадет с количеством закрывающих? Заинтриговали...

> Ладно, тут все к вкусам сводится в который раз, так что спорить не стану.

Кому "вкусы", а кому моды к vim/emacs писать...

eugine_kosenko ★★★
()
Ответ на: комментарий от eugine_kosenko

>>И что, количество открывающих скобок не совпадет с количеством закрывающих? Заинтриговали...

я к тому, что в таком коде и чёрт голову сломит :)

>>Кому "вкусы", а кому моды к vim/emacs писать...

ах вот откуда ненависть к Pascal'у! :D шучу )

Andru ★★★★
() автор топика

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

Iron_Stone
()
Ответ на: комментарий от Iron_Stone

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

Всего два момента:

а) несоответствие открывающих и закрывающих скобок;

б) невозможность объявлений в локальных анонимных блоках.

Отнесите это к Си.

Есть еще одна мелкая проблема: необходимость явной декларации меток. Но про это, так уж и быть, не вспоминаем. Так же, как и о арифметике указателей.

Да, и еще наличие общепринятого стандарта.

eugine_kosenko ★★★
()
Ответ на: комментарий от Iron_Stone

Ну я то придерживаюсь мнения о "фломастерах" :) И хотя такие темы не раз обсуждал, но то было среди геймдеверов, что обычно пишут под форточки. Решил поинтересоваться мнением у людей использующих родную для меня ОС :) Мало ли чем паскаль/его компиляторы не угодили тут, и может таки имеет большой смысл перейти на другие языки :) Пока причины кроме как "gcc есть почти на каждой машине" не вижу. Ну и разве что для OpenSource проекта использующего С/С++ - есть больше шансов, что кто-то поможет с его развитием.

Andru ★★★★
() автор топика

> Холивары Pascal vs. С или С++(кому что больше нравится :)), поднимаются чаще других.

Особой разницы между Pascal и C нет, так что глупые эти холиворы.

> В общем хотелось бы услышать варианты почему Pascal так всем не нравится :)

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

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

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

Продолжать?

(disclaimer: я Паскаль любил. Лет эдак 18-20 назад. Писал на Pascal под MSX и под DOS. Но я тогда был еще глуп и мало знал.)

anonymous
()
Ответ на: комментарий от eugine_kosenko

>>Да, и еще наличие общепринятого стандарта.

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

>>Всего два момента:

У каждого языка(и его компиляторов) есть свои недостатки, но они ведь не критичны. Я например не стал упоминать про шаманство вокруг кода библиотек, когда хочется "спрятать" от экспорта определенные функции/переменные. На строки давить тоже не стал. Да и теже стандарты... допустим gcc вполне воспринимает запись int MyArray[] как дин-массив, но теже поделки от MS напрочь отказываются компилировать такой код.

Andru ★★★★
() автор топика
Ответ на: комментарий от vvn_black

> Паскаль был создан Никлаусом Виртом как язык для обучения студентов программированию.

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

anonymous
()
Ответ на: комментарий от chicane

> кстати как по мне, объявление всех переменных в начале ф-ции - хороший тон.

Ага, особенно после COMMON блоков в Фортране - так и вовсе идеал. :)

anonymous
()
Ответ на: комментарий от anonymous

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

Я, например, владею помимо паскале еще и С/С++, но Pascal как-то привычнее и удобнее :)

>>, и только самые стойкие не покидают дельфю.

ну, вполне удобная RAD для кнопкошлёпства и создания небольших утилит и софта по работе с БД :) Хотя мне она не нужна )

>>Продолжать?

ваша точка зрения мне понятна, так что можно не продолжать :)

Andru ★★★★
() автор топика
Ответ на: комментарий от Andru

> Я например не стал упоминать про шаманство вокруг кода библиотек, когда хочется "спрятать" от экспорта определенные функции/переменные.

А где там шаманство?

> На строки давить тоже не стал.

А что на них давить?

> Да и теже стандарты... допустим gcc вполне воспринимает запись int MyArray[] как дин-массив, но теже поделки от MS напрочь отказываются компилировать такой код.

По стандарту int MyArray[] эквивалентно int *MyArray, то есть, это указатель на int. Отсюда и разбираемся, кто крив, а кто -- нет.

eugine_kosenko ★★★
()
Ответ на: комментарий от anonymous

>>Но некоторые (особо неумные) переучиваться уже не захотели.

Скорее для решаемых задач новые языки не представляли каких-либо преимуществ. Да и все упирается в компиляторы и сопутствующую базу кода и библиотек. Вот сейчас ведь есть куча новых языков, некоторые из них получше С и С++, но почему-то для многих задач зачастую используется именно С и С++. Про Ынтырпрайз я не говорю.

Andru ★★★★
() автор топика
Ответ на: комментарий от eugine_kosenko

> Кому "вкусы", а кому моды к vim/emacs писать...

Ну, всё ж таки синтаксис у Паскаля на порядки проще чем у даже C, а про C++ я и не говорю. Паскаль вообще можно в один проход компилировать.

anonymous
()

Ненависти как таковой нет и не было. Паскаль замечательный язык для обучения - причём чисто "академического" обучения, без привязки к конкретному железу и ассемблеру под это железо. Изучения сортировок, решения задачек аля "разместить 8 ферзей так, чтобы они не били друг друга" и т.д. Неприязнь появляется лишь тогда, когда Паскаль пытаются применять в "промышленном" уровне, т.е. писать Ъ-интерпрайз.

fukazzz
()
Ответ на: комментарий от Andru

> Я, например, владею помимо паскале еще и С/С++, но Pascal как-то привычнее и удобнее :)

Программист, рассуждающий в терминах "привычнее" - это ещё не программист, и даже ещё не учится. И C/C++ - этого мало. Да и не думаю я, что ты понимаешь хотя бы десять процентов от C++.

> ну, вполне удобная RAD для кнопкошлёпства и создания небольших утилит и софта по работе с БД

Ничего удобного. Есть на порядки более адекватные средства.

anonymous
()
Ответ на: комментарий от Andru

> Скорее для решаемых задач новые языки не представляли каких-либо преимуществ.

Представляли. Ознакомься с ними. Вместо этого всякие косолапые (типа багланда) начали пытаться сам Паскаль вправить, и получилось в результате редкостное уродство.

> Да и все упирается в компиляторы и сопутствующую базу кода и библиотек.

В те времена это не было проблемой.

> Про Ынтырпрайз я не говорю.

Какой такой на фиг интырпрайз на Паскале в начале 80х?!?

anonymous
()
Ответ на: комментарий от anonymous

> Ну, всё ж таки синтаксис у Паскаля на порядки проще чем у даже C, а про C++ я и не говорю. Паскаль вообще можно в один проход компилировать.

А у Лиспа вообще синтаксиса нет. Как и у ассемблера.

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

eugine_kosenko ★★★
()
Ответ на: комментарий от fukazzz

> Паскаль замечательный язык для обучения - причём чисто "академического" обучения, без привязки к конкретному железу и ассемблеру под это железо. Изучения сортировок, решения задачек аля "разместить 8 ферзей так, чтобы они не били друг друга" и т.д.

Питон

eugine_kosenko ★★★
()
Ответ на: комментарий от eugine_kosenko

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

Форт многословен? А там всего синтаксиса - пробел и \n.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.