Здравствуйте, netch80, Вы писали:
N>И это только то, через что я сам "продирал" своих учеников, когда им было необходимо научиться этому кошмару.
Я б добавил к этому отсутствие возможности вернуть из функции указатель на функцию, при том что сами по себе такие указатели в языке есть.
Насколько я могу судить, причина тому — странная причудь Вирта оформлять вызов фукнции без аргументов в виде имени функции без скобок. Отсюда невозможность понять, если такая функция возвращает указатель на функцию, то что имеется ввиду, она сама или возвращаемое ей значение. Ну и как сомнительное решение этпй проблемы — отсутствие возможности вернуть указатель на функцию вообще.
Здравствуйте, elmal, Вы писали:
E>5) В современном мире паскаль прививает крайне хреновый стиль программирования. Только недавно сделали возможность объявлять переменные по месту использования;
Ради срача
Почему некоторые люди считают что объявление переменных по месту это хорошо? Чем плохо заранее объявить что понадобиться, а не равномерно размызвать безполезное гавно по коду.
Здравствуйте, Pzz, Вы писали:
Pzz>Насколько я могу судить, причина тому — странная причудь Вирта оформлять вызов фукнции без аргументов в виде имени функции без скобок. Отсюда невозможность понять, если такая функция возвращает указатель на функцию, то что имеется ввиду, она сама или возвращаемое ей значение. Ну и как сомнительное решение этпй проблемы — отсутствие возможности вернуть указатель на функцию вообще.
Ну все, что вы тут понаписали, не стоит и выдеенного яйца по сравнению с теми тормозными сишными приложениями, которые сейчас пишут с использованием .dot или с десктопными ява-приложениями.
Здравствуйте, kov_serg, Вы писали:
_>Почему некоторые люди считают что объявление переменных по месту это хорошо? Чем плохо заранее объявить что понадобиться, а не равномерно размызвать безполезное гавно по коду.
Какой смысл даёт объявление переменных в начале? Для любого современного компилятора это совершенно пофиг.
Для программиста не пофиг, так как нельзя с первого взгляда увидеть, где переменная получает значение. Ну и с иммутабельностью по умолчанию оно тоже никак не дружит.
Здравствуйте, Слава, Вы писали:
C>> работа с динамическими структурами вообще совсем никакая. Указатели в Паскале придумали какие-то извращенцы. С>Что там не так с указалями?
Совершенно дикий синтаксис, который ни на что не похож. Я начинал учить программирование с Паскали, и так и ниасилил их.
Но после перехода на С всё стало абсолютно кристально понятно сразу же.
Здравствуйте, Don Reba, Вы писали:
DR>Изучая промышленный язык, школьник может понемногу участвовать в интересных проектах и использовать огромную общедоступную базу знаний. Изучая Паскаль, он может только копировать с доски.
В общеобразовательной школе? Хорошо если с доски спишут. Все, кто, учась в школе, могут понемногу участвовать в чём угодно, будут участвовать и так, и изучить два языка сразу — у этих не будет проблем. Остальным — чем проще, тем лучше.
Здравствуйте, Cicero, Вы писали:
C>Очень часто это слышу: Паскаль(иногда конкретизируют: Turbo Pascal) не подходят для обучения программированию. C>Обычно аргументов нет. Самый "сильный" аргумент — это несовременный!
зачем обучать мёртвому языку ?
намного более актуальны c/c++ | Java | C# | PHP | MySql — после них хоть к станку (особенно если JS/JQuery добавить)
Здравствуйте, itmanager85, Вы писали:
I>зачем обучать мёртвому языку ?
Для понимания принципов.
I>намного более актуальны c/c++ | Java | C# | PHP | MySql — после них хоть к станку
В обсуждаемом не должно быть цели "после к станку". Даже в ВУЗе при начальном обучении программированию не должно быть такой цели. I>(особенно если JS/JQuery добавить)
это мусор к программированию как учебной дисциплине не имеющий никакого отношения.
Здравствуйте, pagid, Вы писали:
P>Здравствуйте, itmanager85, Вы писали:
I>>зачем обучать мёртвому языку ? P>Для понимания принципов.
Из этого не следует необходимость обучения мёртвому языку.
Из живых на эту роль отлично подходит, например, Go (ближайший по духу), Java, C#, Python. Для системного уровня — C.
I>>намного более актуальны c/c++ | Java | C# | PHP | MySql — после них хоть к станку P>В обсуждаемом не должно быть цели "после к станку". Даже в ВУЗе при начальном обучении программированию не должно быть такой цели.
Во-первых, должна быть. Учат чему-то полезному, и конкретный язык здесь, хоть и не первоочередная составляющая, но важная. А если ещё при обучении человек сразу включается в реальную работу и видит полезный выхлоп от своей работы — то это ещё больше работает на качество обучения.
Во-вторых, тем более не должно быть цели учить тому, после чего надо заново переучиваться.
Здравствуйте, Cyberax, Вы писали:
C>>> работа с динамическими структурами вообще совсем никакая. Указатели в Паскале придумали какие-то извращенцы. С>>Что там не так с указалями? C>Совершенно дикий синтаксис, который ни на что не похож. Я начинал учить программирование с Паскали, и так и ниасилил их.
C>Но после перехода на С всё стало абсолютно кристально понятно сразу же.
Ну это ты зря. Как раз с синтаксисом указателей у Паскаля лучше.
Здравствуйте, Pzz, Вы писали:
Pzz>Я б добавил к этому отсутствие возможности вернуть из функции указатель на функцию, при том что сами по себе такие указатели в языке есть.
В расширениях есть, типа такого. Это стало, вроде бы, универсальным синтаксисом между вендорами.
Без '@', да, считается за вызов.
Pzz>Насколько я могу судить, причина тому — странная причудь Вирта оформлять вызов фукнции без аргументов в виде имени функции без скобок. Отсюда невозможность понять, если такая функция возвращает указатель на функцию, то что имеется ввиду, она сама или возвращаемое ей значение. Ну и как сомнительное решение этпй проблемы — отсутствие возможности вернуть указатель на функцию вообще.
См. выше.
Да, после Вирта вроде никто такое не повторял (ну, Ruby позаимствовал, один на десятки новых языков).
Здравствуйте, Sharowarsheg, Вы писали:
S>>>Остальным — чем проще, тем лучше. N>>Именно поэтому Паскаль не подходит. S>Да, но если сказать, давайте учить Бейсик в размере 1995 года, вой же будет ещё больше, не так ли?
Так, всё так. Вот потому надо смотреть на что-то современное. При этом язык должен как минимум:
1. Не требовать заката солнца вручную там, где сейчас все предоставляют современные возможности. Это относится, например, к типу map (dictionary, hash — где как зовётся), или к базовым возможностям дженериков; возможность объявить const на значение переменной...
2. Позволять умолчательную обработку ошибок на случай "всё хорошо" и её замену на явную, где это надо, вместо полного вылета. И минимум игнорирования, в идеале по умолчанию должно проверяться и ловиться всё.
3. Позволять форсировать типизацию даже выше стандартной статики (из банальностей — что-то в духе type body_temperature = 34.0 .. 42.0).
4. Или должен форсировать стиль начиная с отступов (Python, Nim), или идти со встроенными средствами проверки и форсирования (включая режим в IDE).
5. Иметь обширную стандартную библиотеку (типа: тот же sort() должен быть; писать самому, конечно, хорошо для учёбы, но постоянно таскать за собой такую реализацию — нуегона) и репозиторий модулей на расширенные случаи (вплоть до чего-то типа CORBA клиента, не к ночи будь сказано).
Здравствуйте, netch80, Вы писали:
C>>Но после перехода на С всё стало абсолютно кристально понятно сразу же. N>Ну это ты зря. Как раз с синтаксисом указателей у Паскаля лучше.
В Паскале массивы — это нечто магическое (есть синтаксис динамических массивов, но тоже странный), а в С сразу всё становится понятно при работе с арифметикой. Такое же слышал и от других людей.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, netch80, Вы писали:
C>>>Но после перехода на С всё стало абсолютно кристально понятно сразу же. N>>Ну это ты зря. Как раз с синтаксисом указателей у Паскаля лучше. C>В Паскале массивы — это нечто магическое (есть синтаксис динамических массивов, но тоже странный), а в С сразу всё становится понятно при работе с арифметикой. Такое же слышал и от других людей.
Я имею в виду то, что уже просто var x: ^integer; это лучше, чем int *x; и чем сложнее конструкция, тем легче её читать в таком виде.
Для динамических массивов, да, методы работы совершенно другие — указатель под капотом, а в явном виде зовёшь setlength и дальше работаешь как с обычным. Получается где-то так же, как std::vector<тип>& в C++.
Фокус в виде a[i] == i[a] == *(a+i) там не одобряют в чистом виде. Но в борландовской линии, по-моему, писать явно (a+i)^ было можно и нужно, если тебе в явном виде передали unsafe-указатель (хоть он так и не назывался).
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, kov_serg, Вы писали:
_>>Почему некоторые люди считают что объявление переменных по месту это хорошо? Чем плохо заранее объявить что понадобиться, а не равномерно размызвать безполезное гавно по коду. C>Какой смысл даёт объявление переменных в начале? Для любого современного компилятора это совершенно пофиг.
Дело в том что объявление переменных в начале убирает синтаксический шум внутри, видно сколько и какие переменные используются. Появляется дисциплина и порядок.
Если нужно первое определение переменной то с этим может справиться IDE если не может убираем из объявления и компилятор указывает что вот тут используется не объявленная переменная.
C>Для программиста не пофиг, так как нельзя с первого взгляда увидеть, где переменная получает значение.
Так какие проблемы если так надо можно добавть резервное слово для первого присвоения скажем let. Оно будет единообразно указывать на первое определение. C>Ну и с иммутабельностью по умолчанию оно тоже никак не дружит.
С какого перепоя. Компилятору всё равно где объявление. Так что оно будет работать как и работало.
SomeTypeWithLongNameAndAlotOfParametersAndNamespaces somevar;
auto v1,v2,v3,v4;
....
let somevar=fn(); // 1st time
let v1="string";
let v2=3.14;
let v3=fn();
if (cond) let v4=1; else let v4=2;
...
somevar=fn(); // 2nd time
Здравствуйте, kov_serg, Вы писали:
C>>Ну и с иммутабельностью по умолчанию оно тоже никак не дружит. _>С какого перепоя. Компилятору всё равно где объявление. Так что оно будет работать как и работало.
Потому что значение переменной может зависеть от результата выполнения сложного блока, то есть объявить её со значением до этого блока нельзя.
А ещё переменная может быть нужна лишь в одной из веток алгоритма. А в другой ветке нужна другая переменная того же типа. И в итоге получаем либо распухший список переменных в начале функции, либо вредную привычку вместо index для одной ветки и tmp для другой заводить одну specail_int и использовать её везде. Сейчас вы скажете, надо функции мельче делать?
Здравствуйте, T4r4sB, Вы писали:
C>>>Ну и с иммутабельностью по умолчанию оно тоже никак не дружит. _>>С какого перепоя. Компилятору всё равно где объявление. Так что оно будет работать как и работало.
TB>Потому что значение переменной может зависеть от результата выполнения сложного блока, то есть объявить её со значением до этого блока нельзя.
Мы просто объявляем переменную в начале блока.
TB>А ещё переменная может быть нужна лишь в одной из веток алгоритма. А в другой ветке нужна другая переменная того же типа. И в итоге получаем либо распухший список переменных в начале функции, либо вредную привычку вместо index для одной ветки и tmp для другой заводить одну specail_int и использовать её везде. Сейчас вы скажете, надо функции мельче делать?
Нет просто каждый блок может иметь свой список переменных.
Здравствуйте, kov_serg, Вы писали:
_>Почему некоторые люди считают что объявление переменных по месту это хорошо? Чем плохо заранее объявить что понадобиться, а не равномерно размызвать безполезное гавно по коду.
Плохо тем, что в результате большинство паскалистов лучше сдохнут и будут дико копипастить, но переменную не объявят . Ибо много букв, слишком сложно, проще скопипастить. А вообще, в современном мире именно классическая переменная — в большинстве случаев дурной тон и источник потенциальных ошибок. Рулит иммутабельность, соответственно рулят константы, которым нельзя повторно присвоить значения, а не переменные.