Создать ответ 
 
Рейтинг темы:
  • Голосов: 0 - Средняя оценка: 0
  • 1
  • 2
  • 3
  • 4
  • 5
"логичность" языков
Yevgenijz Не на форуме
Новичок
*


Рейтинг: 0
Сообщений: 3
У нас с: 30.09.2018
Пол: Мужской
Сказал Спасибо: 0
Есть Спасибо: 0 в 0п.
Сообщение: #1 | 30.09.2018 13:15
"логичность" языков
Цитата:Ленайра моргнула, честно попыталась осмыслить слова — иногда русские фразы ставили ее в тупик. В этом плане ее родной язык очень походил на английский, с его логикой расстановки слов и образования падежей, родов и склонений. Все логично и жестко. Никаких исключений, никаких двусмысленностей. Может быть, это плохо для творчества, но очень хорошо для магии и построения заклинаний, когда фразу можно понять только так, как нужно, и никак иначе. В своей жесткости смысла английский не очень уступал рунному письму, хотя и со своими проблемами. Все же разговорный язык неизбежно вбирает в себя много разного, не всегда ему нужного, но обогащающего речь. Тем более что язык аристократии отличается от языка крестьян
Автор, видимо, недостаточно хорошо знает английский, иначе бы не ляпнул такое.
Английский очень сильно отличается от Паскаля, например, слово then в нём имеет совершенно другой смысл. Например, в конструкции
Цитата:If русские не пускают евреев к нам then мы поставим эмбарго на поставки им стратегических товаров
слово then означает отнюдь не то, что можно было бы подумать, что русские должны что-то сделать, чтобы Америка отменила санкции. В этой фразе "than" имеет смысл "и после этого". Таким образом по-англий

ски фраза "После того - не значит вследствие" звучит как then не значит then

что опровергает логичностьб английского языка. Впрочем, все естественные языки нелогичны.

да и английская поговорка
Цитата:пишется "Манчестер", читается - "Ливерпуль"

Ди и Паскаль нелогичен: вот зачем все begin имеют свой end;, кроме первого begin последний end. пишется с точкой, а не с запяточием, что нелогично.

Ещё нелогичность Паскаля: после всех операторов ставится запяточие;, но если после оператора стоит оператор end; или end., то запяточие Не ставится. В общем, наделал Вирт проблем составителям трансляторов с его языка.
(Последний раз сообщение было отредактировано 30.09.2018 в 14:42, отредактировал пользователь Yevgenijz.)
Сказать Спасибо Цитировать выделенное Вернуться к началу
Serge Sadov Не на форуме
Автор
**********


Рейтинг: 156
Сообщений: 2 364
У нас с: 10.03.2009
Пол: Мужской
Сказал Спасибо: 17
Есть Спасибо: 4863 в 692п.
Сообщение: #2 | 01.10.2018 20:46
RE: "логичность" языков
(30.09.2018 13:15)Yevgenijz писал(а):  но если после оператора стоит оператор end; или end., то запяточие Не ставится.
Допускается не ставить, но правила хорошего тона требуют его там ставить. Всегда ставил - проблем меньше, если вдруг понадобиться что-нибудь еще вписать в то место, то вылетит ошибка. С точкой тоже все логично - конец программы.

В этом плане мне нелогичным кажется наличие оператора begin в FOR, WHILE, WHEN. Сами эти операторы логично было бы считать началом блока, требующего наличие в конце оператора END.

- У него за плечами - огромный жизненный опыт!
- А когда-то там были крылья...
Сказать Спасибо Цитировать выделенное Вернуться к началу
Abs Не на форуме
Продвинутый
***


Рейтинг: 1
Сообщений: 300
У нас с: 15.03.2009
Пол:
Сказал Спасибо: 2
Есть Спасибо: 67 в 25п.
Сообщение: #3 | 02.10.2018 08:44
Ответ: "логичность" языков
Как раз всё логично. For/While выполняют один оператор. Если оператор составной, он заключается в операторные скобки begin/end. Всё. А присутствие закрывающей операторной скобки без открывающей сломало бы всю логику.

Истина размножается спорами...
Сказать Спасибо Цитировать выделенное Вернуться к началу
Yevgenijz Не на форуме
Новичок
*


Рейтинг: 0
Сообщений: 3
У нас с: 30.09.2018
Пол: Мужской
Сказал Спасибо: 0
Есть Спасибо: 0 в 0п.
Сообщение: #4 | 18.02.2019 15:56
RE: "логичность" языков
(01.10.2018 20:46)Serge Sadov писал(а):  Допускается не ставить, но правила хорошего тона требуют его там ставить. Всегда ставил - проблем меньше, если вдруг понадобиться что-нибудь еще вписать в то место, то вылетит ошибка. С точкой тоже все логично - конец программы.
Читал в учебнике, что поставить ; в таких случаях именно ошибка, очень удивлялся, ибо в PL1 как раз ; в конце любого оператора обязательно, (в т.ч. и в последнем END; ) поэтому после PL, C, Фортран именно Паскаль кажется чудовищно неудобной дикостью.
Точка в конце программы нелогична - она заставляет транслятор по особому её обрабатывать, если бы было ; составителям транслятора было бы проще.
Ещё Паскаль бесит тем, что программы на нем приходится писать сзаду-наперед.
Если вы читали "Похождения бравого солдата Швейка", то там есть такой эпизод, когда Швейк спрашивает (обер)лейтенанта Лукаша:
- Какой том нести, первый или второй?
а Лукаш отвечает:
- Мы же не евреи какие-нибудь, чтобы сзаду-наперед читать.
Так вот, Паскаль, в отличие от Си и Фортрана построен так, что то, что в других языках называется ПОДпрограммой, в Паскале по повелению Вирта, чтоб ему икалось, ОБЯЗАНА писаться НАД текстом программы, для которой она является подпрограммой. Это затрудняет понимание программ, написанных на Паскале и затрудняет написание программ на Паскале.
Почему я вспомнил евреев: у них книги пишутся справа-налево и строчки идут снизу-вверх, вот и программу на Паскале приходится читать снизу-вверх, но не весь текст снизу-вверх, ведь внутри ПОДпрограмм, которые против всяких правил наименования, пишутся НАД программами, текст опять-таки пишется сверху-вниз, что ещё больше запутывает.
В Фортране же главная программа ОБЯЗАНА быть самой верхней: та, которая сверху, та и главная, в PL можно располагать главную программу как раздельно, самой верхней, как в Фортране, так и объемлющей подпрограммы, как в Паскале и Алголе, но нам говорили, что это нежелательно и лучше по отдельности. В Си та программа главная, которая называется main и неважно, где она стоит, но опять-таки для лучшей читаемости лучше, когда главная программа сверху.

(02.10.2018 08:44)Abs писал(а):  Как раз всё логично. For/While выполняют один оператор. Если оператор составной, он заключается в операторные скобки begin/end. Всё. А присутствие закрывающей операторной скобки без открывающей сломало бы всю логику.
В PL каждый DO должен иметь свой END; даже если внутри цикла всего один оператор.(например DO I=1 TO N;a(I)=B(I);END; ) А в С вообще вместо операторных скобок begin end ставят фигурные скобки {}

(01.10.2018 20:46)Serge Sadov писал(а):  понадобиться
Вы, случайно, не украинецЬ?
Рассказ о мягком знаке в глаголах и о том, как он своим личным отсутствием строит настоящее и будущее время
http://flibusta.is/b/539410/read#t57
Рассказ ведется от лица мягкого знака.
В украинЬсЬкой мове в глаголах после т мягкий знак ставитЬся ВСЕГДА, а в русском языке не всегда, а только в неопределенной форме или повелительном наклонении, тся-ться - это частный случай того же самого правила. Исключение: когда стоит модальный глагол (может или должен.) Может понадобиться и понадобится.
Для русского можно было бы ставить проверочные вопросы:
Что сделает?(мягкого знака нет) - понадобится.
Может что сделаться?(мягкий знак есть) - понадобиться.
А для украинЬця это будет неприемлемо, потому что для него контрольный вопрос будет Шо сделаитЬ? Шо сдеитЬся?, соответственно всегда будет содержать Ь, как оно в мове и есть.
(Последний раз сообщение было отредактировано 18.02.2019 в 17:14, отредактировал пользователь Yevgenijz.)
Сказать Спасибо Цитировать выделенное Вернуться к началу
Alekc Не на форуме
Пользователь
**


Рейтинг: 0
Сообщений: 68
У нас с: 23.03.2009
Пол:
Сказал Спасибо: 2
Есть Спасибо: 10 в 8п.
Сообщение: #5 | 19.02.2019 12:18
RE: "логичность" языков
(18.02.2019 15:56)Yevgenijz писал(а):  В PL каждый DO должен иметь свой END; даже если внутри цикла всего один оператор.(например DO I=1 TO N;a(I)=B(I);END; )
Вот меня это в VBScript жутко бесит. Если мне надо сделать простое ветвление, например: if fileexists() then ..., то приходится городить блок на три строчки, когда за глаза хватило бы двух.

(18.02.2019 15:56)Yevgenijz писал(а):  Так вот, Паскаль, в отличие от Си и Фортрана построен так, что то, что в других языках называется ПОДпрограммой, в Паскале по повелению Вирта, чтоб ему икалось, ОБЯЗАНА писаться НАД текстом программы, для которой она является подпрограммой.
"подпрограмма" - это перевод и в изначальном смысле он вовсе не обозначает что код должен располагаться именно после основной программы. Это просто выделенный в отдельную сущность кусок кода и ничего более. Зато такое расположение процедур позволило сделать однопроходовый компилятор и повысить скорость компиляции.

Ну и да, время расставило всё по своим местам - где там тот PL и Фортран?..
Сказать Спасибо Цитировать выделенное Вернуться к началу
Yevgenijz Не на форуме
Новичок
*


Рейтинг: 0
Сообщений: 3
У нас с: 30.09.2018
Пол: Мужской
Сказал Спасибо: 0
Есть Спасибо: 0 в 0п.
Сообщение: #6 | 02.04.2019 15:28
RE: "логичность" языков
(19.02.2019 12:18)Alekc писал(а):  Ну и да, время расставило всё по своим местам - где там тот PL и Фортран?.
А где тот Алгол и где тот Паскаль?
Зато С жив и помирать не собирается, а ведь у него как раз подпрограммы под текстом главной программы располагаются.
Кстати, однопроходность скорее зло, чем добро. Транслирование в один проход позволяет Паскалю и Алголу создавать НЕоптимальные программы, которые жрут больше памяти и выполняются медленнее, зато С, благодаря многопроходности изначально создает оптимальную программу, которая ест меньше памяти и выполняется быстрее. Хотя, конечно, в условиях, когда компьютеры комплектуются всё большим количеством оперативки и всё более быстродейственны, это такая ерунда... Но изначально это не было ерундой.

(19.02.2019 12:18)Alekc писал(а):  "подпрограмма" - это перевод и в изначальном смысле он вовсе не обозначает что код должен располагаться именно после основной программы.
Как раз означает!
SUBROUTINE - подпрограмма, где SUB - приставка, означающая "под", в том числе и то, что её текст находится под текстом главной программы, сравни слово - Subway - подземка.

Кстати, в С тоже есть свои нелогичности.
Например, a=&b; означает, что в a присваивается адрес b или выполняется побитовое "И"? Зависит от настроек транслятора. А что бы Кернигану и Ричи не задать для адреса другой значок? Создали путаницу. Или вот например if(a=b) кажется, что a сравнивается с b, а на самом деле в a присваивается b и результат сравнивается с нулем. Это от маниакального стремления разработчиков С сделать самый оптимальный код. Си изначально разрабатывался на машинах PDP11, чьим аналогом являлся ДВК, а там в ассемблерной команде MOV биты условий выставляются по результату пересылки, в отличие от компьютеров IBM, как мэйнфреймов, так и PC.
Кстати, поэтому же в С нет присваиваний массивов. В ДВК нет такой ассемблерной команды, а вот в IBM есть и в PL тоже можно присваивать из одного массива в другой одним оператором присваивания.
Зато в ДВК есть очень разные методы пересылки например, MOV (R2)+,-(R4) на С выглядит как *--a= *b++; и на ДВК такое чудо транслируется в ассемблер один-в-один, а вот на других процессорах требует нескольких ассемблерных строк.
В то же время есть операторы, которые на С не отображаются, как например пересылка массивов, потому что таких операторов нет в ДВК(той ЭВМ, для которой изначально был разработан С)
(Последний раз сообщение было отредактировано 02.04.2019 в 19:05, отредактировал пользователь Yevgenijz.)
Сказать Спасибо Цитировать выделенное Вернуться к началу
gnfalex Не на форуме
Новичок
*


Рейтинг: 0
Сообщений: 4
У нас с: 02.04.2009
Пол:
Сказал Спасибо: 1
Есть Спасибо: 1 в 1п.
Сообщение: #7 | 05.04.2019 09:06
RE: "логичность" языков
Доброе время
Yevgenijz
Цитата:Ещё Паскаль бесит тем, что программы на нем приходится писать сзаду-наперед
Зато С жив и помирать не собирается, а ведь у него как раз подпрограммы под текстом главной программы располагаются.
И в Pascal и в C функция должна быть объявлена перед первым использованием. В Pascal - при помощи директивы forward. В C - или в начале программы или в header file.
И, IMHO, это никак не связано с распространенностью/популярностью языков.
Цитата:Например, a=&b; означает, что в a присваивается адрес b или выполняется побитовое "И"?
Присвоение - унарная операция, сравнение - бинарная. Пожалуйста покажите конкретный пример - как и в чем у Вас получилось унарное "И" для данного выражения в настройках компилятора.
Цитата:Кстати, однопроходность скорее зло, чем добро. Транслирование в один проход позволяет Паскалю и Алголу создавать НЕоптимальные программы, которые жрут больше памяти и выполняются медленнее, зато С, благодаря многопроходности изначально создает оптимальную программу, которая ест меньше памяти и выполняется быстрее.
А вот количество проходов - это как раз свойство компилятора, а не языка.
Цитата:SUB - приставка, означающая "под", в том числе и то, что её текст находится под текстом главной программы
Тогда получается, что подсистема (subsystem) находится под основной системой, а подраздел (subsection) находится под основным разделом и подрайон (subarea) - под основным районом. "И выходит, что экстаз— Это просто старый таз." ©
Посмотрите с точки зрения "часть большего".
Цитата:Или вот например if(a=b) кажется, что a сравнивается с b, а на самом деле в a присваивается b и результат сравнивается с нулем.
Да, оператор присвоения можно было сделать более явным, как в Паскале. Но реально это имеет значение только когда много "прыгаешь" между разными группами языков - например С и VB.
Только уточнение - результат - это не "результат присвоения", это "результат выражения справа от присвоения". Удобно для инициализации: a=b=c=d=e=f=0;
PS. Языков и диалектов много. Если что-то нелогично и раздражает - лучше найти другой. Для автора язык был однозначно "логичен". А вот смогут ли остальные понять такую логику и перенять ее / приспособится под нее - это вопрос.

Alekc
Цитата:Вот меня это в VBScript жутко бесит. Если мне надо сделать простое ветвление, например: if fileexists() then ..., то приходится городить блок на три строчки, когда за глаза хватило бы двух.
Вы двоеточием пользуетесь?
Код:
If true Then a=5: b=6: c=7: d=8
MsgBox d
(Последний раз сообщение было отредактировано 05.04.2019 в 09:07, отредактировал пользователь gnfalex.)
Сказать Спасибо Цитировать выделенное Вернуться к началу
eandr-67 Не на форуме
Новичок
*


Рейтинг: 0
Сообщений: 5
У нас с: 11.05.2012
Пол: Мужской
Сказал Спасибо: 2
Есть Спасибо: 1 в 1п.
Сообщение: #8 | 19.05.2019 02:12
RE: "логичность" языков
Цитата:Ещё нелогичность Паскаля: после всех операторов ставится запяточие;, но если после оператора стоит оператор end; или end., то запяточие Не ставится. В общем, наделал Вирт проблем составителям трансляторов с его языка.
Если вы не видите логики, это не значит что её нет. Точка с запятой является не завершителем, а разделителем операторов. И ставится она не после оператора, а между операторами одного уровня.

И у составителей трансляторов никаких проблем не возникает. Более того, синтаксис Pascal разрабатывался для удобства использования придуманных Виртом же грамматик предшествования - так что грамматический разбор классического Pascal максимально прост.
Сказать Спасибо Цитировать выделенное Вернуться к началу
Создать ответ 


Переход:


Пользователи просматривают эту тему: 1 Гость(ей)