Re[5]: Чем плох Паскаль?
От: Пацак Россия  
Дата: 14.06.19 11:31
Оценка: +3
Здравствуйте, kov_serg, Вы писали:

_>Дело в том что объявление переменных в начале убирает синтаксический шум внутри, видно сколько и какие переменные используются. Появляется дисциплина и порядок.


Это примерно как предложить людям ходить исключительно строевым шагом, объясняя это тем, что "так обувь ровнее стаптывается и меньше шансов оступиться". Логика железная, но мало кто на это добровольно согласится.
Ку...
Re[5]: Чем плох Паскаль?
От: AlexRK  
Дата: 14.06.19 11:32
Оценка:
Здравствуйте, netch80, Вы писали:

N>в if, else, while нужно строить блок вокруг нескольких предложений, а в repeat-until — нет


В Ц/Ц++ то же самое — в do надо обязательно ставить {}, а в других местах — нет.

N>в конце main надо ставить точку после end, а у остальных — точку с запятой


Дааа... в других-то языках все иначе, да?

The main function has several special properties:
1) It cannot be used anywhere in the program
a) in particular, it cannot be called recursively
b) its address cannot be taken
2) It cannot be predefined and cannot be overloaded: effectively, the name main in the global namespace is reserved for functions (although it can be used to name classes, namespaces, enumerations, and any entity in a non-global namespace, except that a function called "main" cannot be declared with C language linkage in any namespace (since C++17))
3) It cannot be defined as deleted or declared with C language linkage (since C++17), inline, static, or constexpr
4) The body of the main function does not need to contain the return statement: if control reaches the end of main without encountering a return statement, the effect is that of executing return 0;.
5) Execution of the return (or the implicit return upon reaching the end of main) is equivalent to first leaving the function normally (which destroys the objects with automatic storage duration) and then calling std::exit with the same argument as the argument of the return. (std::exit then destroys static objects and terminates the program)
6) (since C++14) The return type of the main function cannot be deduced (auto main() {... is not allowed)


N>что var идёт перед основным телом


Просто другой подход.

N>что and и or почему-то приоритетнее сравнений


А почему должно быть наоборот?
Re[6]: Чем плох Паскаль?
От: night beast СССР  
Дата: 14.06.19 11:34
Оценка: +2
Здравствуйте, AlexRK, Вы писали:

N>>в if, else, while нужно строить блок вокруг нескольких предложений, а в repeat-until — нет


ARK>В Ц/Ц++ то же самое — в do надо обязательно ставить {}, а в других местах — нет.


шито?
Re[6]: Чем плох Паскаль?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.06.19 11:39
Оценка: +1
Здравствуйте, AlexRK, Вы писали:

N>>в if, else, while нужно строить блок вокруг нескольких предложений, а в repeat-until — нет

ARK>В Ц/Ц++ то же самое — в do надо обязательно ставить {}, а в других местах — нет.

Что в do обязательно?

do
  x();
while(y);


компилируется без проблем.

N>>в конце main надо ставить точку после end, а у остальных — точку с запятой

ARK>Дааа... в других-то языках все иначе, да?

Все описанные тобой проблемы это запреты на разные хаки, а простое прямолинейное решение как раз не мешается с этим. А в Паскале надо даже написав hello world помнить, что тут именно '.', а не ';'

N>>что and и or почему-то приоритетнее сравнений

ARK>А почему должно быть наоборот?

Потому что приоритеты операций придуманы не от балды, а чтобы упростить наиболее типовое применение.
Если бы сложение было приоритетнее умножения, и надо было бы a+b*c писать a+(b*c), чтобы его не поняли как (a+b)*c, то аналогичные жалобы были бы и тут.
Запись типа if a=0 and b>0, понимаемая как if (a=0) and (b=0), в этом смысле полезнее в десятки раз, чем if a=(0 and b)>0, или как-то ещё не по обычным ожиданиям.
Re[2]: Чем плох Паскаль?
От: qwertyuiop Российская Империя  
Дата: 14.06.19 11:41
Оценка:
Здравствуйте, netch80, Вы писали:

N>Синтаксис цикла — for i := 1 to 10, например. Сначала ":=" несловесной лексемой, затем почему-то "to" — словесной. А назад — downto. Кстати, если я хочу шаг 2?


Почему-то апологеты считают строгость положительным качеством. Однако выучившись на Паскале, ученики и на Си будут писать в паскалеподобном стиле, хотя там шаг может быть любым, а переменная цикла может быть любого типа или вообще отсутствовать. Главное, что там есть три оператора: инициализация, оператор, проверяющий условие окончания цикла и оператор выполняемый в конце. Вот это — действительно строгость, ничего лишнего! Но зато есть гибкость.
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Re[6]: Чем плох Паскаль?
От: Пацак Россия  
Дата: 14.06.19 11:52
Оценка:
Здравствуйте, elmal, Вы писали:

E>Да любой современный язык — по умолчанию не переменная (var), а val, которой не изменить значение после присваивания. Надеюсь до чистой Java такое вскоре тоже дойдет, это как раз то, что можно исправить, хоть и не полностью.


А стоит ли игра свеч? Иммутабильности объектам использование val по умолчанию не добавит, а менять синтаксис только ради того, чтобы нельзя было повторно переприсвоить локальную переменную... Ну чо-та как-то немного из пушки по воробьям, по-моему, не?
Ку...
Re[7]: Чем плох Паскаль?
От: AlexRK  
Дата: 14.06.19 11:54
Оценка: :)
Здравствуйте, netch80, Вы писали:

N>компилируется без проблем.


Да? Запамятовал. Впрочем, дела это не меняет — do/while образует блок, абсолютно как и в паскале. А while — не образует.

N>Все описанные тобой проблемы это запреты на разные хаки, а простое прямолинейное решение как раз не мешается с этим. А в Паскале надо даже написав hello world помнить, что тут именно '.', а не ';'


Речь не о хаках, а о том, что main — не обычная функция. И лучше это понимать, чем нет. Выражать отличие синтаксически — закреплять понимание.

N>>>что and и or почему-то приоритетнее сравнений

ARK>>А почему должно быть наоборот?

N>Потому что приоритеты операций придуманы не от балды, а чтобы упростить наиболее типовое применение.

N>Если бы сложение было приоритетнее умножения, и надо было бы a+b*c писать a+(b*c), чтобы его не поняли как (a+b)*c, то аналогичные жалобы были бы и тут.
N>Запись типа if a=0 and b>0, понимаемая как if (a=0) and (b=0), в этом смысле полезнее в десятки раз, чем if a=(0 and b)>0, или как-то ещё не по обычным ожиданиям.

В этом есть резон, но я считаю, что приоритеты вообще не нужны. Всегда явно выделяю скобками все операции.
Re[7]: Чем плох Паскаль?
От: elmal  
Дата: 14.06.19 12:39
Оценка:
Здравствуйте, Пацак, Вы писали:

П>А стоит ли игра свеч? Иммутабильности объектам использование val по умолчанию не добавит, а менять синтаксис только ради того, чтобы нельзя было повторно переприсвоить локальную переменную... Ну чо-та как-то немного из пушки по воробьям, по-моему, не?

Ну, это не изменение синтаксиса, это его добавление. А вообще, я надеюсь что с появлением Data Types будет заодно и нормальная иммутабельность объектов.
Re[8]: Чем плох Паскаль?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.06.19 12:40
Оценка: +1
Здравствуйте, AlexRK, Вы писали:

N>>компилируется без проблем.

ARK>Да? Запамятовал. Впрочем, дела это не меняет — do/while образует блок, абсолютно как и в паскале.

Нет, не образует.

do
  x();
  y();
while (z);


не скомпилируется.

N>>Все описанные тобой проблемы это запреты на разные хаки, а простое прямолинейное решение как раз не мешается с этим. А в Паскале надо даже написав hello world помнить, что тут именно '.', а не ';'

ARK>Речь не о хаках, а о том, что main — не обычная функция. И лучше это понимать, чем нет. Выражать отличие синтаксически — закреплять понимание.

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

ARK>В этом есть резон, но я считаю, что приоритеты вообще не нужны. Всегда явно выделяю скобками все операции.


Боюсь представить себе, как выглядит твой код и как на это ругаются коллеги.
Рекомендовать всем такое, увы, не могу.
Re[5]: Чем плох Паскаль?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.06.19 12:51
Оценка:
Здравствуйте, pagid, Вы писали:

N>>Из этого не следует необходимость обучения мёртвому языку.

N>>Из живых на эту роль отлично подходит, например, Go (ближайший по духу), Java, C#, Python.
P>Тоже можно. Но в C# и Java больше условностей совершенно излишних — не забыть импортировать пакеты, написать хотя бы один класс, ни к чему это школьникам.

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

N>>Для системного уровня — C.

P>Зачем системный уровень школьникам

В контексте не только школы, но и вузы.

N>>Во-первых, должна быть. Учат чему-то полезному, и конкретный язык здесь, хоть и не первоочередная составляющая, но важная. А если ещё при обучении человек сразу включается в реальную работу и видит полезный выхлоп от своей работы — то это ещё больше работает на качество обучения.

P>Математике и литературе в школе тоже учат чтобы можно было сразу включиться в реальную работу?

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

N>>Во-вторых, тем более не должно быть цели учить тому, после чего надо заново переучиваться.

P>Что там переучиваться если разговор про первоначальное обучение там что переучиваться на другой язык, что доучиваться на том же до профессионального уровня трудозатраты примерно те же. А при этом представление о том, что языки бывают разные вредным не будет.

Отлично, с таким подходом надо учить 2-3 языка, но все три актуальных и полезных, а не древние окаменелости. И лучше, если одним из них будет что-то андедное актуальное вроде LISP.
Отредактировано 14.06.2019 12:52 netch80 . Предыдущая версия .
Re: Чем плох Паскаль?
От: kov_serg Россия  
Дата: 14.06.19 12:51
Оценка:
Здравствуйте, Cicero, Вы писали:

C>Очень часто это слышу: Паскаль(иногда конкретизируют: Turbo Pascal) не подходят для обучения программированию.

C>Обычно аргументов нет. Самый "сильный" аргумент — это несовременный!
Сейчас модно визуальное программирование, что бы ярко, модно, молодёжно

https://www.youtube.com/watch?v=6GpdoJXpo2U
Отредактировано 14.06.2019 12:52 kov_serg . Предыдущая версия .
Re[5]: Чем плох Паскаль?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.06.19 13:08
Оценка:
Здравствуйте, kov_serg, Вы писали:

N>>Из живых на эту роль отлично подходит, например, Go (ближайший по духу), Java, C#, Python. Для системного уровня — C.

_>Есть же Perl!

Как же я мог забыть!

всё, вопрос закрыт.

N>>Во-вторых, тем более не должно быть цели учить тому, после чего надо заново переучиваться.

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

+100500. Но — всё равно живой язык полезнее.
Re[3]: Чем плох Паскаль?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.06.19 13:10
Оценка:
Здравствуйте, qwertyuiop, Вы писали:

N>>Синтаксис цикла — for i := 1 to 10, например. Сначала ":=" несловесной лексемой, затем почему-то "to" — словесной. А назад — downto. Кстати, если я хочу шаг 2?


Q>Почему-то апологеты считают строгость положительным качеством. Однако выучившись на Паскале, ученики и на Си будут писать в паскалеподобном стиле, хотя там шаг может быть любым, а переменная цикла может быть любого типа или вообще отсутствовать. Главное, что там есть три оператора: инициализация, оператор, проверяющий условие окончания цикла и оператор выполняемый в конце. Вот это — действительно строгость, ничего лишнего! Но зато есть гибкость.


Ну для обучения ещё неизвестно, что лучше.
Циклы в сишном стиле — тут надо зазубрить идиомы, что переменная итератора всегда одна и та же (а иначе будет долго втыкать, что не так в каком-нибудь for (i = 0; ii < 100; ++i)), или, если это нарушается, нужно смотреть внимательнее, что происходит. В синтаксисе foreach-стиля это само получается.
Re[9]: Чем плох Паскаль?
От: AlexRK  
Дата: 14.06.19 13:11
Оценка:
Здравствуйте, netch80, Вы писали:

N>Нет, не образует.

N>не скомпилируется.

Да, точно. Забавно. Но, скажем, в сишарпе {} после do обязательны: https://ideone.com/UcHEPr
Да и в жабе тоже. Так что не паскалем единым.

N>Что, много кто пытается вызвать main рекурсивно? Что-то ни разу не видел.


Еще раз: main — особая функция. Особой функции — особый синтаксис.

Ну и «не видел» — аргумент тоже так себе.

ARK>>В этом есть резон, но я считаю, что приоритеты вообще не нужны. Всегда явно выделяю скобками все операции.

N>Боюсь представить себе, как выглядит твой код и как на это ругаются коллеги.
N>Рекомендовать всем такое, увы, не могу.

Не бойся. Отлично выглядит и однозначно читается. По себе всех не суди.
Re: Чем плох Паскаль?
От: borga  
Дата: 14.06.19 13:17
Оценка: +1
Здравствуйте, Cicero, Вы писали:

Читая ответы коллег у меня возникает странное чувство непонимания.

Если это касается школы: вы реально считаете что там вот это все о чем Вы спорите важно?
Там ИМХО все изучается на элементарном уровне.
Какие указатели? Вы о чем?

Что же касается более продвинутого уровня.
Вам вот реально важно begin/end или {}?
Re[10]: Чем плох Паскаль?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.06.19 13:19
Оценка:
Здравствуйте, AlexRK, Вы писали:

N>>Нет, не образует.

N>>не скомпилируется.
ARK>Да, точно. Забавно. Но, скажем, в сишарпе {} после do обязательны: https://ideone.com/UcHEPr
ARK>Да и в жабе тоже. Так что не паскалем единым.

Ну я вообще считаю, что {} надо делать обязательными везде. Речь-то шла о существующем.

N>>Что, много кто пытается вызвать main рекурсивно? Что-то ни разу не видел.

ARK>Еще раз: main — особая функция. Особой функции — особый синтаксис.

Много функций особых. Есть вложенные. Есть всякие interrupt handlers или обработчики сигналов.
Есть вызываемые при старте и стопе программы. Есть функции тредов.
Что, всем особый синтаксис?
Для рантайма, кстати, main() совершенно стандартна, и все описанные спецтребования, во-первых, только для hosted режима (во freestanding main() может и не быть, или она может иметь другие свойства), а во-вторых, всё, что ему нужно — чтобы она была main, а не _Z4mainipv или как оно там будет звучать.
Хотя конкретный компилятор может сделать из неё _MAINQQ$$, если ему так нравится

ARK>Ну и «не видел» — аргумент тоже так себе.


Аргумент очень даже осмысленный. Да, у меня не было 1000 студентов, как у Кузнецова. Но несколько — были. И я помню, что им не было дела до того, что такого особенного в main — но было до того, что надо про эту точку особо помнить.

После Паскаля этого никто не повторял. Даже в Ada нет такого, хотя уж в нём строгостей нагнали. Так что могу считать подтверждённым, что этот бред никому не нужен.

ARK>>>В этом есть резон, но я считаю, что приоритеты вообще не нужны. Всегда явно выделяю скобками все операции.

N>>Боюсь представить себе, как выглядит твой код и как на это ругаются коллеги.
N>>Рекомендовать всем такое, увы, не могу.
ARK>Не бойся. Отлично выглядит и однозначно читается. По себе всех не суди.

По себе и не сужу, и всех не сужу, пытаюсь оценить конкретно тебя и этот код. Пример можно?
А ассоциативность ты тоже явно помечаешь? a+b+c нельзя, можно только (a+b)+c?
Re[2]: Чем плох Паскаль?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.06.19 13:26
Оценка:
Здравствуйте, borga, Вы писали:

B>Читая ответы коллег у меня возникает странное чувство непонимания.


B>Если это касается школы: вы реально считаете что там вот это все о чем Вы спорите важно?

B>Там ИМХО все изучается на элементарном уровне.
B>Какие указатели? Вы о чем?

Да, там другие грабли, и я их описал
Автор: netch80
Дата: 13.06.19
.

B>Что же касается более продвинутого уровня.

B>Вам вот реально важно begin/end или {}?

Да. Потому что
1) лучше, когда синтаксические средства группировки заметно выделяются формой, чем сливаются с другими словами и идентификаторы.
2) например, есть штатные средства перейти на противоположную скобку (любого вида) в каком-нибудь vim, но с begin/end это становится в разы сложнее. Учить редакторы фолдить тоже усложнение.
Re[2]: Чем плох Паскаль?
От: ksandro Россия  
Дата: 14.06.19 15:09
Оценка: +3
Здравствуйте, Джеффри, Вы писали:

Д>* Нет возможности легко разрабатывать UI, пусть даже и очень простой (Turbo Vision не предлагать). Иногда для ребенка может быть намного интересней сделать программу с окошком и кнопкой, похожую на реальное приложение, чем делать консольную утилиту с выводом в командную строку.

Д>* Наследие MS DOS — не знаю можно ли сейчас вообще легко запустить IDE на новых версиях Виндоус, объяснять почему длина имени файла не может быть больше 8 символов, возиться с кодировками и т.д.

Чувствую себя старым... Народ уже забыл что такое Delphi...
А ведь когда-то именно для паскаля появилась самая крутая IDE. Можно сказать первая IDE в современном понимании (VB не считается). И именно на паскале проще всего было писать оконные приложения под винду...
Re[11]: Чем плох Паскаль?
От: AlexRK  
Дата: 14.06.19 15:09
Оценка:
Здравствуйте, netch80, Вы писали:

N>Ну я вообще считаю, что {} надо делать обязательными везде. Речь-то шла о существующем.


Существующая ситуация состоит в том, что блок repeat-until не является уникальным для паскаля.

N>Много функций особых. Есть вложенные. Есть всякие interrupt handlers или обработчики сигналов.

N>Есть вызываемые при старте и стопе программы. Есть функции тредов.

По-моему, все эти функции с точки зрения языка особенными не являются. Например, обработчик прерывания — чем он особенный?

N>Что, всем особый синтаксис?


Если с точки зрения языка функция является особенной — то лучше ей дать отдельный синтаксис. Этот подход применяется и не только в учебных языках (см. async-await), ну а уж в учебных сам б-г велел.

N>Для рантайма, кстати, main() совершенно стандартна, и все описанные спецтребования, во-первых, только для hosted режима (во freestanding main() может и не быть, или она может иметь другие свойства), а во-вторых, всё, что ему нужно — чтобы она была main, а не _Z4mainipv или как оно там будет звучать.

N>Хотя конкретный компилятор может сделать из неё _MAINQQ$$, если ему так нравится

Текст программы читает человек, а не рантайм.

N>После Паскаля этого никто не повторял. Даже в Ada нет такого, хотя уж в нём строгостей нагнали. Так что могу считать подтверждённым, что этот бред никому не нужен.


Какие именно языки, предназначенные для обучения, были созданы после паскаля? То, что в промышленных или любительских "никто не повторял" — это не показатель.

N>По себе и не сужу, и всех не сужу, пытаюсь оценить конкретно тебя и этот код. Пример можно?


if ((a > 3) && (b == 4))

N>А ассоциативность ты тоже явно помечаешь? a+b+c нельзя, можно только (a+b)+c?


Ассоциативность во всех случаях, с какими я имел дело, всегда слева направо. Поэтому не помечаю. Но если бы пришлось писать код, где ассоциативность иная (всякие там сложения вещественных чисел в чувствительных к этому алгоритмах) — то обязательно бы пометил.
Re[3]: Чем плох Паскаль?
От: Джеффри  
Дата: 14.06.19 15:38
Оценка:
Здравствуйте, ksandro, Вы писали:

K>Чувствую себя старым... Народ уже забыл что такое Delphi...

K>А ведь когда-то именно для паскаля появилась самая крутая IDE. Можно сказать первая IDE в современном понимании (VB не считается). И именно на паскале проще всего было писать оконные приложения под винду...

ТС предлагает использовать Паскаль 5.5 / Турбо Паскаль для обучения — так что мой комментарий относится к этой версии.

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

А так из реальных недостатков — он вроде платный был раньше? не помню была раньше какая-то бесплатная education / developer версия?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.