OberonCore https://forum.oberoncore.ru/ |
|
О "раздражении" знатоков старого Паскаля при знакомстве с КП https://forum.oberoncore.ru/viewtopic.php?f=7&t=635 |
Страница 2 из 4 |
Автор: | slava [ Четверг, 06 Сентябрь, 2007 16:09 ] |
Заголовок сообщения: | Re: О "раздражении" знатоков старого Паскаля при знакомстве с КП |
Илья Ермаков писал(а): Единственной более-менее эффективной защитой от = в некоторых случаях является приучить себя писать сначала выражение, а потом имя переменной: if ( 1 == x )... Тогда при пропуске = будет гарантированная ошибка ("требуется lvalue"). Можно конечно привыкнуть писать и такое, но у меня лично такой код вызывает раздражение не меньшее чем: Код: if ((x=y)==1)
|
Автор: | slava [ Четверг, 06 Сентябрь, 2007 16:43 ] |
Заголовок сообщения: | Re: О "раздражении" знатоков старого Паскаля при знакомстве с КП |
ScrollLock писал(а): Цитата: зачем тождество надо записывать символом "==", когда есть символ "=". А это не тождество, а операция сравнения, которая возвращает значение. С точки зрения компьютера это такая же бинарная операция, как и сложение! Надо разделять математику и программирование (по крайней мере на начальном этапе обучения). Эта аналогия даже вредна - переменная в машине и переменная в алгебре - разные вещи.Более того, на начальном этапе, ИМХО, вредно не иметь аналогию между переменными в математике и программировании. Во-первых не все будут системщиками, а во вторых можно тему строения памяти и машинного слова отодвинуть. Важнее развить алгоритмическое мышление и чем раньше тем лучше. ScrollLock писал(а): Цитата: А, ну да, "=" занят под присваивание. Можно пойти и по пути Бейсика - в if-ах = означает исключительно сравнение, а в других местах - присваивание. Я ещё помню себя в начальной школе и у меня такое положение дел в GW-BASIC трудностей не вызывало. Так что на мой взгляд ничего страшного с перегрузкой "=" там не было. Другое дело C, где наворотить можно такого... ну все в курсе. И возвращаясь к математике. Есть такая книга по Мат. Анализу в двух томах, Зорича. Там автор не чуждался использовать алгебру (векторные пространства, группы, теорию множеств) при описании всяких там интегралов. Короче несколько не стандартная книга о стандартных вещах. Определения в его книги описывались через оператор ":=" |
Автор: | Иван Кузьмицкий [ Четверг, 06 Сентябрь, 2007 19:48 ] |
Заголовок сообщения: | Re: О "раздражении" знатоков старого Паскаля при знакомстве с КП |
ScrollLock писал(а): Цитата: зачем тождество надо записывать символом "==", когда есть символ "=". А это не тождество, а операция сравнения, которая возвращает значение. Операция сравнения возвращает значение. Перегрузить её, так она ещё и косинус посчитает, почему бы нет. Как только читать эту помесь белки со штопором, неясно ScrollLock писал(а): Цитата: Согласитесь, что приятно писать исходный текст, который после компиляции практически не требует отладки. Фантастика? Отнюдь, реальный опыт. Я тоже пользуюсь отладчиком сравнительно редко - обычно всё решается отладочной печатью и нормальным разбиением на функции и классы. Но если программа работает как надо с первого раза, то это подозрительно и её надо тщательно тестировать - может оказаться, что она написана принципиально неправильно В Блэкбоксе декларируется "защитный" стиль программирования - пусть ошибка заявит о себе как можно раньше! Ну и тестирование ещё никто не отменял. А защита от глупых ошибок заметно разгружает мозги. |
Автор: | Geniepro [ Четверг, 06 Сентябрь, 2007 20:43 ] |
Заголовок сообщения: | Re: О "раздражении" знатоков старого Паскаля при знакомстве с КП |
Иван Кузьмицкий писал(а): Операция сравнения возвращает значение. Перегрузить её, так она ещё и косинус посчитает, почему бы нет. Как только читать эту помесь белки со штопором, неясно Ну, что уж тут поделаешь, приходится выбирать между жёсткостью и неудобством, которое может быть даст некоторое повышение надёжности, а может и не даст (так как придётся больше однотипного кода набивать ручонками)... И между гибкостью, сокращающей объём кода, которая, однако, может привести к лишним глюкам, а может и не привести - ведь если меньше кода и разных вариантов решения однотипных задач, то меньше и багов... |
Автор: | ScrollLock [ Четверг, 06 Сентябрь, 2007 23:18 ] |
Заголовок сообщения: | Re: О "раздражении" знатоков старого Паскаля при знакомстве с КП |
Иван Кузьмицкий писал(а): Операция сравнения возвращает значение. Перегрузить её, так она ещё и косинус посчитает, почему бы нет. Как только читать эту помесь белки со штопором, неясно Классная идея, обязательно попробую в деле Вспомнился вот такой анекдот: Пришел мужик как-то в баню, помылся, а потом обнаружил, что забыл дома полотенце. Стоит, растерянно шарит взглядом по сторонам. Вдруг видит - табличка: "Занавесками не вытираться!" Думает: "О! А это - мысль!" slava писал(а): Ккажется оператор присваивания в BACIS записывался так: LET x=1; В более поздних версиях (тот же GW-BASIC 3.23) ключевое слово LET можно было опускать и программа работала. Точка с запятой не нужна (она нужна в PRINT - не переходить на следующую строку). slava писал(а): Более того, на начальном этапе, ИМХО, вредно не иметь аналогию между переменными в математике и программировании. Но она может мешать понять, что же такое i:=i+1; и что из себя представляет объявление переменной. До изучения ассемблера представлял её как "коробочку", в которой хранится нечто. Вопрос спорный и может зависеть от конкретного ученика и изучаемого языка программирования. Наверное, это моё ИМХО - в своё время увидел переменную в Бейсике раньше, чем переменную в математике. Цитата: Есть такая книга по Мат. Анализу в двух томах, Зорича. Там автор не чуждался использовать алгебру (векторные пространства, группы, теорию множеств) при описании всяких там интегралов. Зачем только такое надо - непонятно, разве что для красоты. Обычно матанализ обходится теорией действительных чисел (как частный случай теории групп и множеств), а теорию групп изучают в линейной алгебре. Илья Ермаков писал(а): Вообще, называть Интел самым совершенным процессором язык не поворачивается. Путь компромиссов между совместимостью и продуманностью архитектуры... То, что система команд и режимы работы процессора >=80386 там не самые изящные и содержат много из "тяжёлого наследия прошлого" - согласен. Но если бы они были "плохими", то Intel не достигла бы такого объёма продаж. Рынок не всегда продвигает самое изящное и продуманное решение, но обычно самое практичное на данном этапе. Windows 95 тоже был похуже OS/2, но нетребовательность к ресурсам и более качественная поддержка софта из DOS/Windows 3.x сделали своё дело. Илья Ермаков писал(а): А безопасность нужно обеспечивать не межпроцессными барьерами, а аппартаной типизацией. Идея хорошая и правильная, но не отменяет защиту памяти (нужен контроль за тем, чтобы программа не могла писать вне своего кода). Даже в обероновских системах вполне может встретиться вирус или ассемблерная программа и давать им "на растерзание" ядро - весьма опрометчиво. Мы это уже проходили в MS-DOS.
|
Автор: | Geniepro [ Пятница, 07 Сентябрь, 2007 00:12 ] |
Заголовок сообщения: | Re: О "раздражении" знатоков старого Паскаля при знакомстве с КП |
ScrollLock писал(а): Windows 95 тоже был похуже OS/2, но нетребовательность к ресурсам и более качественная поддержка софта из DOS/Windows 3.x сделали своё дело. Ну вапще-то OS/2 была менее требовательна к ресурсам, да и программы для DOS и Win3.1 работали лучше, чем в Win95...Там всё дело в агрессивном маркетинге Майкрософта было, да в ненужности OS/2 для самой IBM (возможная конкуренция с AIX)... |
Автор: | Vlad [ Пятница, 07 Сентябрь, 2007 01:02 ] |
Заголовок сообщения: | Re: О "раздражении" знатоков старого Паскаля при знакомстве с КП |
Иван Кузьмицкий писал(а): Опыт на школьнике прекрасно показывает. Да, да, спросите у школьника что такое ':='... |
Автор: | Илья Ермаков [ Пятница, 07 Сентябрь, 2007 09:33 ] |
Заголовок сообщения: | Re: О "раздражении" знатоков старого Паскаля при знакомстве с КП |
Цитата: Илья Ермаков писал(а): А безопасность нужно обеспечивать не межпроцессными барьерами, а аппартаной типизацией. Идея хорошая и правильная, но не отменяет защиту памяти (нужен контроль за тем, чтобы программа не могла писать вне своего кода). Даже в обероновских системах вполне может встретиться вирус или ассемблерная программа и давать им "на растерзание" ядро - весьма опрометчиво. Мы это уже проходили в MS-DOS.А если мы уберём native-код вообще? Все приложения распространяются только в промежуточном коде, с отложенной кодогенерацией? И "даже в обероновских системах" ещё в 1994 году эта вещь была, францевские slim binaries. Я не против разделения адресных пространств, только безопасность достигается не этим... И может достигаться и без этого. С моей ТЗ, сейчас нужно делать акцент на роли адресных пространств, как границ подсистем, которые внутри используют параллелизм с разделением памяти, а между - только асинхронно на сообщениях. |
Автор: | Илья Ермаков [ Пятница, 07 Сентябрь, 2007 09:37 ] |
Заголовок сообщения: | Re: О "раздражении" знатоков старого Паскаля при знакомстве с КП |
Знак "=" по сути своей симметричен. Знак присваивания подчёркивает ассиметричность, разные роли "присваиваемого" и "принимающего". В некоторых алгоритмических псевдоязыках используется "<-", что вообще наиболее наглядно... |
Автор: | slava [ Пятница, 07 Сентябрь, 2007 12:22 ] |
Заголовок сообщения: | Re: О "раздражении" знатоков старого Паскаля при знакомстве с КП |
ScrollLock писал(а): Илья Ермаков писал(а): Вообще, называть Интел самым совершенным процессором язык не поворачивается. Путь компромиссов между совместимостью и продуманностью архитектуры... То, что система команд и режимы работы процессора >=80386 там не самые изящные и содержат много из "тяжёлого наследия прошлого" - согласен. Но если бы они были "плохими", то Intel не достигла бы такого объёма продаж. Рынок не всегда продвигает самое изящное и продуманное решение, но обычно самое практичное на данном этапе. Windows 95 тоже был похуже OS/2, но нетребовательность к ресурсам и более качественная поддержка софта из DOS/Windows 3.x сделали своё дело. И наоборот - преуспевающие компании продвигают посредственные продукты. Примеры всем известны, в том числе и пример OS/2 - надёжное ядро (надеюсь Linux когда нибудь достигнет такого), эмуляция DOS и Windows3.1 (лучшая чем в Win95, более того в многих случаях лучшая чем в оригиналах!). И тем не менее ОС/2 провалилась. Тоже самое и с Intel, архитектура (даже если откинуть наследие 8086 CISC) - очень старая. Достаточно вспомнить Alpha, MIPS. Intel ещё приближается к тому что уже было пару десятков лет назад. |
Автор: | ScrollLock [ Пятница, 07 Сентябрь, 2007 13:50 ] |
Заголовок сообщения: | Re: О "раздражении" знатоков старого Паскаля при знакомстве с КП |
Цитата: Примеры всем известны, в том числе и пример OS/2 - надёжное ядро (надеюсь Linux когда нибудь достигнет такого), эмуляция DOS и Windows3.1 (лучшая чем в Win95, более того в многих случаях лучшая чем в оригиналах!). И тем не менее ОС/2 провалилась. Там было дело не только в маркетинге. Просто такие системы, как OS/2 и Windows NT требовали 16/32 Мб оперативы, а Windows 95 - 8/16. Память тогда стоила большие деньги, поэтому Microsoft сознательно пошли на ухудшение надёжности для экономии ресурсов. Цитата: А если мы уберём native-код вообще? Все приложения распространяются только в промежуточном коде, с отложенной кодогенерацией? Эта идея уже реализована на платформе .NET (хотя и не изобретение MS). Но драйвера и очень критичные к быстродействию участки кода на подобной платформе реализовать не очень просто. Цитата: И наоборот - преуспевающие компании продвигают посредственные продукты. В реальной жизни приходится идти на компромисс цена/совершенство, цена/совместимость и цена/качество. На практике цена и совместимость могут быть намного важнее технического изящества системы команд и архитектуры. |
Автор: | Geniepro [ Пятница, 07 Сентябрь, 2007 20:36 ] |
Заголовок сообщения: | Re: О "раздражении" знатоков старого Паскаля при знакомстве с КП |
ScrollLock писал(а): Там было дело не только в маркетинге. Просто такие системы, как OS/2 и Windows NT требовали 16/32 Мб оперативы, а Windows 95 - 8/16. Память тогда стоила большие деньги, поэтому Microsoft сознательно пошли на ухудшение надёжности для экономии ресурсов. Знаете, где-то 10 лет назад я пытался установить Win95 и OS/2 Warp 3 на 486 с 4 мег. ОЗУ - точно помню, что OS/2 работала куда шустрее. В Win95 несколько минут открывалось меню Пуск, в OS/2 же вполне можно было запустить WinWord 6 и работать...А память очень быстро дешевела, так что IBM тут пролетела, потратив слишком много времени на создание нетребовательной к памяти ОС... |
Автор: | Руслан Богатырев [ Суббота, 08 Сентябрь, 2007 11:40 ] |
Заголовок сообщения: | Некоторые размышления о синтаксисе |
В отношении синтаксиса. Как нередко говорят, синтаксис -- вопрос вкуса. А вкус, как известно, формируется. Вкус человека во многом формируется той культурной средой, в которой он находится, теми, с кем он общается, тем, какие книги читает и т.д. Заглавные буквы в зарезервированных словах и предопределенных идентификаторах применяются в Модуле-2 и Обероне, что довольно редко где можно встретить. Не потому ли они и расходятся со вкусом многих? Просто вкус подавляющего большинства формировался под влиянием конкретных факторов -- привычки к традициям языков Си-семейства. Традиция активного использования маленьких букв -- это традиция UNIX. Впрочем, об этом детальнее можно почитать, например, здесь: http://www.linfo.org/lower_case.html Хотя и в мире Паскаля, где идентификаторы не чувствительны к регистру, преобладающее использование нижнего регистра в зарезервированных словах тоже уже стало традицией. В европейской письменности традиция использования заглавных букв преимущественно в сокращениях и в начале предложениях (а также именах собственных) формировалась постепенно. И вряд ли корректно напрямую отображать традиции письменности на языки программирования. Насколько мне известно, во времена Римской империи латинский алфавит имел только одну форму -- заглавные буквы (маюскул). Маленькие (строчные) буквы (минускул) не использовались в книжном почерке. Прошло немало столетий, прежде чем появился минускул, причем это был результат долгой сложной линии развития, восходящей к римскому курсивному письму. Почему Вирт решил выбрать именно такую форму? Я не знаю в точности ответа на этот вопрос, хотя во время одного из визитов проф. Ю.Гуткнехта в Москву мы эту тему с Юргом обсуждали. Он тогда хотел принять решение в отношении своего языка Zonnon, который можно отнести к семейству Оберонов, хотя по своей сложности и навороченности он явно выпадает из этого ряда (Гуткнехт хотел в него вложить едва ли не все свои идеи, да еще с максимальным использованием возможностей .NET). Я высказал отрицательную оценку желанию пойти на поводу у масс и сделать зарезервированные слова в нижнем регистре. Но Гуткнехт в итоге поступил по-своему. В отношении Модулы-2 и Оберона могу предположить, что Вирт руководствовался, скорее, не римскими традициями, хотя обращение к античности -- это стильно (если, правда, люди об этом знают). Такой прием Вирт наверняка позаимствовал у языка Mesa (первого языка модульного программирования, блестящая разработка исследовательского центра Xerox PARC начала 1970-х годов). Именно под его влиянием Вирт создавал Модулу-2 из своей экспериментальной Модулы (кстати, в Модуле в отличие от Модулы-2 был принят паскалевский подход, без чувствительности к регистру и с нижним регистром зарезервированных слов). Этот же принцип (верхний регистр) использовался и в языке Cedar (Xerox PARC), который Вирт изучал при создании Оберона. Этот же принцип использовал язык Modula-3 (разработка исследовательских лабораторий DEC SRC). В категорию этих языков можно отнести Occam(-2), в разработке которого участвовал Тони Хоар. Собственно, можно даже говорить, что это традиция модульных языков, которые прошли мимо подавляющей массы программистов. Другая культура. Думаю, это не изобретение Вирта. И даже не изобретение европейской школы программирования. Вирт больше прагматик, хотя эстетическое начало очень высоко ценит и имеет отличный вкус (на мой взгляд). Ясно, что зарезервированные слова в языке играют роль разделителей. И они должны выделяться. Как? Цветом? В годы Модула-2 с цветом была напряженка. Подчеркиванием или полужирным, как это делали в отношении того же Паскаля? Но это хорошо делать в печатных изданиях, а не в исходных текстах, когда его отображение на экране лишено возможности выбора гарнитуры и начертания. Так что подход Вирта был вполне обоснован. Более того, он действительно удобен. Только, чтобы осознать это удобство, надо с ним поработать. Зарезервированные слова в верхнем регистре формируют очень наглядный каркас исходного текста. И в нем лично мне крайне комфортно ориентироваться. Я не проводил полноценных социологических опросов, но среди тех, кто работал с Модулой-2 (а это куда более обширная аудитория, нежели сменивший его Оберон) мне не встречались отрицательные мнения на этот счет. Хотя то, что это было поначалу многим непривычно -- факт. Честно говоря, мне нередко приходится слышать сетования на это неудобство синтаксиса Оберона. Ну хорошо, давайте предположим компромисс -- пусть поддерживаются обе формы для зарезервированных слов (как это планируется в новом языке в рамках проекта “Роса”). Проблема ушла? Ушла. Притом элементарным решением. А что же с остальными вопросами синтаксиса? Интересно, почему мы редко задаемся вопросами небрежности доминирующего ныне Си-синтаксиса? Это в самом деле глубокая и серьезная проблема. Желание потакать привычкам, оправдываясь преемственностью языков (C++, Java, C#)? Допустим, что нет необходимости учитывать пресловутую преемственность и привычки масс. Давайте сопоставим Си-синтаксис и виртовский синтаксис (не говорю Паскаль-синтаксис, поскольку Модула-2 и Оберон его сильно уточнили в лучшую сторону). Не является ли небрежность Си-синтаксиса потенциальным источником многих ошибок? Если мы проблемы Си-синтаксиса сводим преимущественно к оператору присваивания, это будет слишком упрощенный взгляд. Проблемы и в построении выражений, и в операторах, и в объявлениях сущностей, да почти везде... Кстати, проблемы и виртовском синтаксисе. Важно видеть не детали, а существенную разницу в подходах: Си-синтаксис заточен на удобство синтеза исходного текста (экономит время написания); виртовский синтаксис -- на удобство анализа исходного текста (экономит время на понимание программы -- с целью проверки и модификации). С позиции этого критерия (удобство быстрой записи) Си-синтаксис (я сюда включаю не только Си, но C++, Java, C#) ) вполне достиг своей цели (хотя есть и более изощренные в этом плане языки). Однако проблема в том, что человек должен заниматься не только и не столько синтезом, сколько анализом программы. При этом это может быть как ее автор, так и посторонний человек (для промышленного, некустарного программирования это крайне важно). Более того, сам автор, обратившийся к своей же программе спустя длительный период, сам попадает в позицию постороннего человека. И для него анализ становится много важнее синтеза. Вот тут-то и всплывают проблемы. Чем компактнее запись, чем плотнее она упаковывает конструкции, тем сложнее заниматься распаковкой (в голове). В этом и есть глубинные проблемы Си-синтаксиса. К чему подталкивает желание экономить время при наборе текста? К неаккуратности. Причем неаккуратности даже не внешней, а смысловой. Меня не удивляет то, что работа с отладчиками и системами тестирования -- это норма для современных языков. Мир Модулы-2 мне открыл совсем иной подход. Я стал не кодировать (как при работе на Фортране, Си или даже том же классическом Паскале -- с этих языков я начинал), а конструировал. При этом меня не интересовало желание побыстрее скомпилировать что-нибудь и запустить. Зачем? Я конструировал здание (модуль, совокупность модулей) методично. Шаг за шагом. И спокойно анализировал исходный текст. Не один день. На этом не экономил. При таком подходе для меня крайне важен синтаксис, позволяющий постоянно работать в режиме анализа. Я вообще не пользовался никаким отладчиком (хотя в той же TopSpeed Modula-2 или в Logitech Modula-2 отладчики по своему уровню превосходили ведущие отладчики для других языков). Мне не нужен был и посмертный отладчик. Это качественно иной подход к программированию. И он дает результат такого качества, которого очень трудно добиться в мире языков с Си-синтаксисом. Рассмотрим теперь частность, которая почему-то больше всего приковывает к себе внимание -- оператор присваивания ("=" в Фортране и Си). Если человек немного знаком с математикой, он уверен, что знаком равенства обозначается что-то симметричное. Откуда возникла эта идея использования знака равенства в качестве оператора присваивания? Из желания сэкономить время написания программы (ее синтеза программистом). Да, этот критерий -- экономии при написании -- пропитал весь Си-синтаксис (и фигурные скобки -- из той же оперы). Более того, он стимулировал к такому мышлению и программиста. Вариант, восходящий к Алголу-60 (а виртовские языки лежат в русле этой традиции), отдает предпочтение записи ":=". Она лишена недостатка Си, но вряд ли является идеалом. Известны и другие подходы. В первом языке программирования (Plankalkul), созданного Конрадом Цузе в 1940-х годах, для присваивания использовалась запись "=>" (при этом что присваивают -- слева, а чему присваивают -- справа). Именно это вариант хотел пробить проф. Рутисхаузер в конце 1950-х годов в Алголе-60, но его предложение отклонили. Есть вариант "<-" (так записывался оператор присваивания в языке Mesa). Позиция Вирта по вопросам синтаксиса изложена, например, в его статье "Хорошие идеи, взгляд из Зазеркалья", в разделе "Особенности языков программирования": http://www.citforum.ru/programming/digest/wirth/ Эта статья, как известно, служила основой для большинства его выступлений, с которыми он проехал по нашей стране в ходе своего Большого турне 2005 г. К сожалению, Вирт не обратил внимание аудитории на существенную разницу в критериях для оценки синтаксисов разных языков (что я изложил выше). И, на мой взгляд, напрасно. Люди подходят к оценке синтаксиса и семантики языков с позиции своих критериев, забывая о том, что выдвигать претензии к инструменту надо, понимая, какие критерии ставил во главу угла сам автор. Иначе возникает простой вопрос: кто заставляет пользоваться именно этим инструментом. Из-за игнорирования критериев и их важности для тех или иных задач и возникают, на мой взгляд, проблемы у большинства программистов с пониманием компактного строения Оберона. Это язык-ядро. Созданный для реализации ОС. Но не стремление вложить в язык максимум средств, чтобы облегчить жизнь сегодня (когда надо создавать программу) , но усложнить ее завтра(когда эту программу надо пересматривать и развивать). |
Автор: | Сергей Оборотов [ Суббота, 08 Сентябрь, 2007 16:50 ] |
Заголовок сообщения: | Re: Некоторые размышления о синтаксисе |
Если говорить о логике СИ-синтаксиса, то мне представляется, что цели что-либо выделить из окружаещего текста не ставили. Вероятно, имели в виду пропорцию между местом занимаемым каркасом и его предметным наполнением. То внимание, которое уделяется выделению синтаксической компоненты в Обероне, можно было бы уделить анализу содержательной стороны дела. Однако тема немного о другом. |
Автор: | Руслан Богатырев [ Суббота, 08 Сентябрь, 2007 17:50 ] |
Заголовок сообщения: | Re: Некоторые размышления о синтаксисе |
GUEST писал(а): Если говорить о логике СИ-синтаксиса, то мне представляется, что цели что-либо выделить из окружаещего текста не ставили. Вероятно, имели в виду пропорцию между местом занимаемым каркасом и его предметным наполнением. Вы имеете в виду Денниса Ритчи? Почему тогда во множественном числе? У языка Си был один автор. GUEST писал(а): То внимание, которое уделяется выделению синтаксической компоненты в Обероне, можно было бы уделить анализу содержательной стороны дела. По отношению к кому эта фраза: к участникам обсуждения, ко мне, к программистскому сообществу вообще? |
Автор: | Сергей Оборотов [ Суббота, 08 Сентябрь, 2007 20:56 ] |
Заголовок сообщения: | Re: Некоторые размышления о синтаксисе |
Руслан Богатырев писал(а): Вы имеете в виду Денниса Ритчи? Почему тогда во множественном числе? У языка Си был один автор. Неизвестно, советовался ли он с кем либо. Если нет, беру множественное число назад. Вообще-то, имел в виду исключительно своё мнение об их предпочтениях.Руслан Богатырев писал(а): GUEST писал(а): То внимание, которое уделяется выделению синтаксической компоненты в Обероне, можно было бы уделить анализу содержательной стороны дела. По отношению к кому эта фраза: к участникам обсуждения, ко мне, к программистскому сообществу вообще? |
Автор: | ScrollLock [ Воскресенье, 09 Сентябрь, 2007 02:10 ] |
Заголовок сообщения: | Re: О "раздражении" знатоков старого Паскаля при знакомстве с КП |
Цитата: Рассмотрим теперь частность, которая почему-то больше всего приковывает к себе внимание -- оператор присваивания ("=" в Фортране и Си). Если человек немного знаком с математикой, он уверен, что знаком равенства обозначается что-то симметричное. Откуда возникла эта идея использования знака равенства в качестве оператора присваивания? Из желания сэкономить время написания программы (ее синтеза программистом). Программирование - это не совсем математика (а иногда совсем не математика), в ряде случаев целесообразно ввести собственную нотацию. Присваивание встречается очень часто, а if-ы - не так часто. Достаточно показать пример вроде a=a+1; и ненужная аналогия с математикой будет разрушена. В конце концов, использовали же в Обероне неинтуитивное обозначение "не равно" в виде # (принято <>). И фигурные скобки лучше begin...end - при соблюдении отступов они выделяются даже без подсветки синтаксиса. По поводу удобства: как только я познакомился с языком Си, желание писать на Паскале и Бейсике заметно поубавилось. Дело не в экономии набора (для меня это не очень актуально), а в более удобном и читаемом синтаксисе и в инфраструктуре (библиотеки). Цитата: Чем компактнее запись, чем плотнее она упаковывает конструкции, тем сложнее заниматься распаковкой (в голове). В этом и есть глубинные проблемы Си-синтаксиса. Компактность и читаемость напрямую друг с другом не связаны. Тут всё зависит от культуры программиста - можно написать понятную программу на Си, а можно совершенно нечитаемую - на Обероне. "Разруха сидит не в клозетах, а в головах!"; "Настоящий программист напишет программу на Фортране, пользуясь любым языком". Цитата: Есть вариант "<-" Он ассоциируется с "искорёженным" оператором косвенного доступа к элементам структур. Цитата: Знаете, где-то 10 лет назад я пытался установить Win95 и OS/2 Warp 3 на 486 с 4 мег. ОЗУ - точно помню, что OS/2 работала куда шустрее Весьма неожиданный результат... Тогда не вполне ясно, почему же MS победила... |
Автор: | slava [ Воскресенье, 09 Сентябрь, 2007 11:21 ] |
Заголовок сообщения: | Re: О "раздражении" знатоков старого Паскаля при знакомстве с КП |
ScrollLock писал(а): Цитата: Знаете, где-то 10 лет назад я пытался установить Win95 и OS/2 Warp 3 на 486 с 4 мег. ОЗУ - точно помню, что OS/2 работала куда шустрее Весьма неожиданный результат... Тогда не вполне ясно, почему же MS победила...Более "правильное сравнение", ИМХО, следующее: OS/2 Warp 4 (Merlin) - вышла в 1996 г. Она была несколько более требовательна к ресурсам чем Win95. Но не более чем NT на тот момент. На 486DX4-100MHz, 16MB она работала. Но уже если сравнивать с Win98, то тут уже будет далеко не в пользу последней. Ну и наконец OS/2 4.5 (Avrora) - сервер, бета вышла в 2000 г. на Pentium-1 32MB - работала, но желательно добавить 64MB. Сравните с Win98 или Win2000. Можно конечно сказать, что IBM вложила ресурсы в оптимизацию по памяти и "выиграв битву, проиграла войну". ИМХО все причины верны: и плохой маркетинг, и не нужность ОС/2 самой IBM и "пофигисткое отношение" IBM к обычным пользователям и многое другое. Все вместе и привело к краху. Нам же на ошибках стоит учится, тем более что в отношении ОС/2 их было сделано не мало. |
Автор: | Руслан Богатырев [ Воскресенье, 09 Сентябрь, 2007 11:51 ] |
Заголовок сообщения: | Анализ против синтеза |
ScrollLock писал(а): Программирование - это не совсем математика (а иногда совсем не математика), в ряде случаев целесообразно ввести собственную нотацию. Присваивание встречается очень часто, а if-ы - не так часто. Достаточно показать пример вроде a=a+1; и ненужная аналогия с математикой будет разрушена. Опять-таки, многое зависит от того с каких позиций, с каких критериев это ценивается. Предположим, что есть некоторый язык. Нас интересует оптимизация его синтаксиса. Смотрим частоту появления тех или иных конструкций и оптимизируем синтаксис (собственно в Си так в итоге и получилось). Собственно, на эту разницу в акцентах и хотел обратить внимание. Писать компактно (синтез) просто так не получится, приходится жертвовать пониманием (анализ). Одни готовы идти на эти жертвы (нужно написать быстро и сейчас), другие -– нет. Другие предпочитают иметь меньше проблем при анализе. Оно и понятно, что пишет человек один раз, а вот читать приходится -– много. Так где лучше экономить время? ScrollLock писал(а): В конце концов, использовали же в Обероне неинтуитивное обозначение "не равно" в виде # (принято <>). И фигурные скобки лучше begin...end - при соблюдении отступов они выделяются даже без подсветки синтаксиса. Фигурные скобки для выделения границ структур -- с точки зрения анализа -- очень плохо. Да и END -- тоже недостаточно. К тому же фигурные скобки плохо отличимы от круглых. Это лишний повод для ошибок (можно легко просмотреть). В язык их лучше стараться по этой причине вообще не включать. В нашей команде при работе на Модуле-2 придерживались жесткого правила -- использовать END с обязательным комментарием (чему он принадлежит). Т.е. END (*IF*). При этом было средство автоматического контроля (простенький верификатор по соответствию служебных комментариев). Многие ошибки допускаются из-за копирования готовых кусков в новую точку без учета изменившегося контекста. Поэтому чем больше будет проверок несоответствия -- тем лучше. Среда разработки обратит внимание программиста на неувязочку. А там, глядишь, он посмотрит еще раз повнимательнее на новый контекст использования и найдет логическую ошибку. Собственно поэтому мы намеренно не ставили точку с запятой везде, где можно было ее не ставить. Тогда при модификации исходных текстов всплывали ошибки нового контекста. Те, кто оптимизируют по времени, ставят точки с запятой всегда, не задумываясь. В этом разные подходы к разработке. Приоритет анализа или синтеза. Можно вспомнить про ENDIF, ENDWHILE, ENDFOR и др. Вирт здесь пошел по пути компромисса. Но я не уверен, что нужен компромисс. Качество важнее. ScrollLock писал(а): По поводу удобства: как только я познакомился с языком Си, желание писать на Паскале и Бейсике заметно поубавилось. Дело не в экономии набора (для меня это не очень актуально), а в более удобном и читаемом синтаксисе и в инфраструктуре (библиотеки). Вопрос психологии и личных предпочтений. Вы знакомы с языком APL? А с Forth? Вполне вероятно, что если отдаете предпочтение компактности записи, они могут Вам приглянуться. Насчет инфраструктуры библиотек -- а какое это отношение имеет к синтаксису языка? Я что-то не понял. ScrollLock писал(а): Компактность и читаемость напрямую друг с другом не связаны. Тут всё зависит от культуры программиста - можно написать понятную программу на Си, а можно совершенно нечитаемую - на Обероне. "Разруха сидит не в клозетах, а в головах!"; "Настоящий программист напишет программу на Фортране, пользуясь любым языком". По-моему, это просто оправдание неаккуратности. Безусловно, и на языке, стимулирующем неаккуратность, можно писать аккуратно. Но зачем бороться, если можно это делать на языке, который подталкивает к аккуратности. И если, скажем, в Си на уровне выражений возможны такие примеры, которые приводил Вирт Цитата: Равняется ли значение выражения x+++++y значению ++x+++y+1? Верны ли следующие соотношения? x+++++y+1==++x+++y x+++y++==x+++++y+1 то зачем говорить о том, что так не надо писать? Я хорошо отношусь к Си и вполне терпимо к C++, но к чему постоянно бороться с проблемами, которые могут возникнуть на ровном месте? Кроме того, при явной тенденции ухода от индивидуальной разработки к коллективной все чаще людям приходится читать чужие исходные тексты (я имею в виду в том числе и сотрудников службы контроля качества). И чтобы подобных казусов не случалось, надо выпускать объемистые руководства внутри компаний, регламентирующие правила хорошего написания (так на деле и происходит). А зачем все это? |
Автор: | Сергей Оборотов [ Воскресенье, 09 Сентябрь, 2007 21:45 ] |
Заголовок сообщения: | Re: Анализ против синтеза |
Руслан Богатырев писал(а): ScrollLock писал(а): Компактность и читаемость напрямую друг с другом не связаны. Тут всё зависит от культуры программиста - можно написать понятную программу на Си, а можно совершенно нечитаемую - на Обероне. "Разруха сидит не в клозетах, а в головах!"; "Настоящий программист напишет программу на Фортране, пользуясь любым языком". По-моему, это просто оправдание неаккуратности. Безусловно, и на языке, стимулирующем неаккуратность, можно писать аккуратно. Но зачем бороться, если можно это делать на языке, который подталкивает к аккуратности. И если, скажем, в Си на уровне выражений возможны такие примеры, которые приводил Вирт Цитата: Равняется ли значение выражения x+++++y значению ++x+++y+1? Верны ли следующие соотношения? x+++++y+1==++x+++y x+++y++==x+++++y+1 то зачем говорить о том, что так не надо писать? Я хорошо отношусь к Си и вполне терпимо к C++, но к чему постоянно бороться с проблемами, которые могут возникнуть на ровном месте? Кроме того, при явной тенденции ухода от индивидуальной разработки к коллективной все чаще людям приходится читать чужие исходные тексты (я имею в виду в том числе и сотрудников службы контроля качества). И чтобы подобных казусов не случалось, надо выпускать объемистые руководства внутри компаний, регламентирующие правила хорошего написания (так на деле и происходит). А зачем все это? P.S.Относительно END , ";" и проблем на голом месте: должно быть это любимое нацинальное занятие. Собственно поэтому в Форте одна единственная ";" в конце. |
Страница 2 из 4 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |