OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 18 Февраль, 2019 23:13

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 74 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: Четверг, 06 Сентябрь, 2007 16:09 

Зарегистрирован: Понедельник, 19 Март, 2007 09:40
Сообщения: 142
Откуда: USA, Israel, Belarus
Илья Ермаков писал(а):
Единственной более-менее эффективной защитой от = в некоторых случаях является приучить себя писать сначала выражение, а потом имя переменной: if ( 1 == x )... Тогда при пропуске = будет гарантированная ошибка ("требуется lvalue").
Можно конечно привыкнуть писать и такое, но у меня лично такой код вызывает раздражение не меньшее чем:
Код:
if ((x=y)==1)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 06 Сентябрь, 2007 16:43 

Зарегистрирован: Понедельник, 19 Март, 2007 09:40
Сообщения: 142
Откуда: USA, Israel, Belarus
ScrollLock писал(а):
Цитата:
зачем тождество надо записывать символом "==", когда есть символ "=".
А это не тождество, а операция сравнения, которая возвращает значение. С точки зрения компьютера это такая же бинарная операция, как и сложение! Надо разделять математику и программирование (по крайней мере на начальном этапе обучения). Эта аналогия даже вредна - переменная в машине и переменная в алгебре - разные вещи.
Именно! с точки зрения компьютера, а не человека. Хотите встать на сторону компьютера - пишите в битах и байтах. Язык программирования, тем более претендующий на высокий уровень, должен быть ближе к человеку. И уж так вышло, что математика развивается уже сотни лет, а компьютеры только десятки. И школьники тоже начинают изучать математику ещё с первого класса или даже с детского класса, а программирование... ну сами знаете.

Более того, на начальном этапе, ИМХО, вредно не иметь аналогию между переменными в математике и программировании. Во-первых не все будут системщиками, а во вторых можно тему строения памяти и машинного слова отодвинуть. Важнее развить алгоритмическое мышление и чем раньше тем лучше.
ScrollLock писал(а):
Цитата:
А, ну да, "=" занят под присваивание.
Можно пойти и по пути Бейсика - в if-ах = означает исключительно сравнение, а в других местах - присваивание. Я ещё помню себя в начальной школе и у меня такое положение дел в GW-BASIC трудностей не вызывало.
Ккажется оператор присваивания в BACIS записывался так: LET x=1;
Так что на мой взгляд ничего страшного с перегрузкой "=" там не было.

Другое дело C, где наворотить можно такого... ну все в курсе.

И возвращаясь к математике. Есть такая книга по Мат. Анализу в двух томах, Зорича. Там автор не чуждался использовать алгебру (векторные пространства, группы, теорию множеств) при описании всяких там интегралов. Короче несколько не стандартная книга о стандартных вещах.

Определения в его книги описывались через оператор ":="


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 06 Сентябрь, 2007 19:48 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2930
Откуда: г. Ярославль
ScrollLock писал(а):
Цитата:
зачем тождество надо записывать символом "==", когда есть символ "=".

А это не тождество, а операция сравнения, которая возвращает значение.


Операция сравнения возвращает значение. Перегрузить её, так она ещё и косинус посчитает, почему бы нет. Как только читать эту помесь белки со штопором, неясно :)

ScrollLock писал(а):
Цитата:
Согласитесь, что приятно писать исходный текст, который после компиляции практически не требует отладки. Фантастика? Отнюдь, реальный опыт.

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


В Блэкбоксе декларируется "защитный" стиль программирования - пусть ошибка заявит о себе как можно раньше! Ну и тестирование ещё никто не отменял. А защита от глупых ошибок заметно разгружает мозги.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 06 Сентябрь, 2007 20:43 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Иван Кузьмицкий писал(а):
Операция сравнения возвращает значение. Перегрузить её, так она ещё и косинус посчитает, почему бы нет. Как только читать эту помесь белки со штопором, неясно :)

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 06 Сентябрь, 2007 23:18 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 149
Иван Кузьмицкий писал(а):
Операция сравнения возвращает значение. Перегрузить её, так она ещё и косинус посчитает, почему бы нет. Как только читать эту помесь белки со штопором, неясно


Классная идея, обязательно попробую в деле :lol: Вспомнился вот такой анекдот:

Пришел мужик как-то в баню, помылся, а потом обнаружил, что забыл дома полотенце. Стоит, растерянно шарит взглядом по сторонам. Вдруг видит - табличка: "Занавесками не вытираться!" Думает: "О! А это - мысль!"

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.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 07 Сентябрь, 2007 00:12 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
ScrollLock писал(а):
Windows 95 тоже был похуже OS/2, но нетребовательность к ресурсам и более качественная поддержка софта из DOS/Windows 3.x сделали своё дело.
Ну вапще-то OS/2 была менее требовательна к ресурсам, да и программы для DOS и Win3.1 работали лучше, чем в Win95...
Там всё дело в агрессивном маркетинге Майкрософта было, да в ненужности OS/2 для самой IBM (возможная конкуренция с AIX)...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 07 Сентябрь, 2007 01:02 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Иван Кузьмицкий писал(а):
Опыт на школьнике прекрасно показывает.


Да, да, спросите у школьника что такое ':='...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 07 Сентябрь, 2007 09:33 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9084
Откуда: Россия, Орёл
Цитата:
Илья Ермаков писал(а):
А безопасность нужно обеспечивать не межпроцессными барьерами, а аппартаной типизацией.
Идея хорошая и правильная, но не отменяет защиту памяти (нужен контроль за тем, чтобы программа не могла писать вне своего кода). Даже в обероновских системах вполне может встретиться вирус или ассемблерная программа и давать им "на растерзание" ядро - весьма опрометчиво. Мы это уже проходили в MS-DOS.

А если мы уберём native-код вообще? Все приложения распространяются только в промежуточном коде, с отложенной кодогенерацией? И "даже в обероновских системах" ещё в 1994 году эта вещь была, францевские slim binaries.
Я не против разделения адресных пространств, только безопасность достигается не этим... И может достигаться и без этого. С моей ТЗ, сейчас нужно делать акцент на роли адресных пространств, как границ подсистем, которые внутри используют параллелизм с разделением памяти, а между - только асинхронно на сообщениях.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 07 Сентябрь, 2007 09:37 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9084
Откуда: Россия, Орёл
Знак "=" по сути своей симметричен. Знак присваивания подчёркивает ассиметричность, разные роли "присваиваемого" и "принимающего". В некоторых алгоритмических псевдоязыках используется "<-", что вообще наиболее наглядно...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 07 Сентябрь, 2007 12:22 

Зарегистрирован: Понедельник, 19 Март, 2007 09:40
Сообщения: 142
Откуда: USA, Israel, Belarus
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 ещё приближается к тому что уже было пару десятков лет назад.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 07 Сентябрь, 2007 13:50 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 149
Цитата:
Примеры всем известны, в том числе и пример OS/2 - надёжное ядро (надеюсь Linux когда нибудь достигнет такого), эмуляция DOS и Windows3.1 (лучшая чем в Win95, более того в многих случаях лучшая чем в оригиналах!). И тем не менее ОС/2 провалилась.

Там было дело не только в маркетинге. Просто такие системы, как OS/2 и Windows NT требовали 16/32 Мб оперативы, а Windows 95 - 8/16. Память тогда стоила большие деньги, поэтому Microsoft сознательно пошли на ухудшение надёжности для экономии ресурсов.

Цитата:
А если мы уберём native-код вообще? Все приложения распространяются только в промежуточном коде, с отложенной кодогенерацией?

Эта идея уже реализована на платформе .NET (хотя и не изобретение MS). Но драйвера и очень критичные к быстродействию участки кода на подобной платформе реализовать не очень просто.

Цитата:
И наоборот - преуспевающие компании продвигают посредственные продукты.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 07 Сентябрь, 2007 20:36 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
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 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 22:34
Сообщения: 431
Откуда: Москва
В отношении синтаксиса. Как нередко говорят, синтаксис -- вопрос вкуса. А вкус, как известно, формируется. Вкус человека во многом формируется той культурной средой, в которой он находится, теми, с кем он общается, тем, какие книги читает и т.д.

Заглавные буквы в зарезервированных словах и предопределенных идентификаторах применяются в Модуле-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 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1007
Если говорить о логике СИ-синтаксиса, то мне представляется, что цели что-либо выделить из окружаещего текста не ставили. Вероятно, имели в виду пропорцию между местом занимаемым каркасом и его предметным наполнением. То внимание, которое уделяется выделению синтаксической компоненты в Обероне, можно было бы уделить анализу содержательной стороны дела.
Однако тема немного о другом.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 08 Сентябрь, 2007 17:50 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 22:34
Сообщения: 431
Откуда: Москва
GUEST писал(а):
Если говорить о логике СИ-синтаксиса, то мне представляется, что цели что-либо выделить из окружаещего текста не ставили. Вероятно, имели в виду пропорцию между местом занимаемым каркасом и его предметным наполнением.


Вы имеете в виду Денниса Ритчи? Почему тогда во множественном числе? У языка Си был один автор.

GUEST писал(а):
То внимание, которое уделяется выделению синтаксической компоненты в Обероне, можно было бы уделить анализу содержательной стороны дела.


По отношению к кому эта фраза: к участникам обсуждения, ко мне, к программистскому сообществу вообще?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 08 Сентябрь, 2007 20:56 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1007
Руслан Богатырев писал(а):
Вы имеете в виду Денниса Ритчи? Почему тогда во множественном числе? У языка Си был один автор.
Неизвестно, советовался ли он с кем либо. Если нет, беру множественное число назад. Вообще-то, имел в виду исключительно своё мнение об их предпочтениях.
Руслан Богатырев писал(а):
GUEST писал(а):
То внимание, которое уделяется выделению синтаксической компоненты в Обероне, можно было бы уделить анализу содержательной стороны дела.

По отношению к кому эта фраза: к участникам обсуждения, ко мне, к программистскому сообществу вообще?
Думаю, по отношению к тем, кому приходится его уделять. Согласитесь, что участники обсуждения делают именно это.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 09 Сентябрь, 2007 02:10 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 149
Цитата:
Рассмотрим теперь частность, которая почему-то больше всего приковывает к себе внимание -- оператор присваивания ("=" в Фортране и Си). Если человек немного знаком с математикой, он уверен, что знаком равенства обозначается что-то симметричное. Откуда возникла эта идея использования знака равенства в качестве оператора присваивания? Из желания сэкономить время написания программы (ее синтеза программистом).

Программирование - это не совсем математика (а иногда совсем не математика), в ряде случаев целесообразно ввести собственную нотацию. Присваивание встречается очень часто, а if-ы - не так часто. Достаточно показать пример вроде a=a+1; и ненужная аналогия с математикой будет разрушена. В конце концов, использовали же в Обероне неинтуитивное обозначение "не равно" в виде # (принято <>). И фигурные скобки лучше begin...end - при соблюдении отступов они выделяются даже без подсветки синтаксиса.
По поводу удобства: как только я познакомился с языком Си, желание писать на Паскале и Бейсике заметно поубавилось. Дело не в экономии набора (для меня это не очень актуально), а в более удобном и читаемом синтаксисе и в инфраструктуре (библиотеки).

Цитата:
Чем компактнее запись, чем плотнее она упаковывает конструкции, тем сложнее заниматься распаковкой (в голове). В этом и есть глубинные проблемы Си-синтаксиса.

Компактность и читаемость напрямую друг с другом не связаны. Тут всё зависит от культуры программиста - можно написать понятную программу на Си, а можно совершенно нечитаемую - на Обероне. "Разруха сидит не в клозетах, а в головах!"; "Настоящий программист напишет программу на Фортране, пользуясь любым языком".

Цитата:
Есть вариант "<-"

Он ассоциируется с "искорёженным" оператором косвенного доступа к элементам структур.

Цитата:
Знаете, где-то 10 лет назад я пытался установить Win95 и OS/2 Warp 3 на 486 с 4 мег. ОЗУ - точно помню, что OS/2 работала куда шустрее

Весьма неожиданный результат... Тогда не вполне ясно, почему же MS победила...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 09 Сентябрь, 2007 11:21 

Зарегистрирован: Понедельник, 19 Март, 2007 09:40
Сообщения: 142
Откуда: USA, Israel, Belarus
ScrollLock писал(а):
Цитата:
Знаете, где-то 10 лет назад я пытался установить Win95 и OS/2 Warp 3 на 486 с 4 мег. ОЗУ - точно помню, что OS/2 работала куда шустрее
Весьма неожиданный результат... Тогда не вполне ясно, почему же MS победила...
Немного не корректное сравнение: OS/2 Warp 3 vs. Win95 vs. NT 4.0, т.к OS/2 Warp 3 вышла раньше. Поэтому и ресурсы кушала меньше.

Более "правильное сравнение", ИМХО, следующее: 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 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 22:34
Сообщения: 431
Откуда: Москва
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++, но к чему постоянно бороться с проблемами, которые могут возникнуть на ровном месте? Кроме того, при явной тенденции ухода от индивидуальной разработки к коллективной все чаще людям приходится читать чужие исходные тексты (я имею в виду в том числе и сотрудников службы контроля качества). И чтобы подобных казусов не случалось, надо выпускать объемистые руководства внутри компаний, регламентирующие правила хорошего написания (так на деле и происходит). А зачем все это?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Анализ против синтеза
СообщениеДобавлено: Воскресенье, 09 Сентябрь, 2007 21:45 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1007
Руслан Богатырев писал(а):
ScrollLock писал(а):
Компактность и читаемость напрямую друг с другом не связаны. Тут всё зависит от культуры программиста - можно написать понятную программу на Си, а можно совершенно нечитаемую - на Обероне. "Разруха сидит не в клозетах, а в головах!"; "Настоящий программист напишет программу на Фортране, пользуясь любым языком".


По-моему, это просто оправдание неаккуратности. Безусловно, и на языке, стимулирующем неаккуратность, можно писать аккуратно. Но зачем бороться, если можно это делать на языке, который подталкивает к аккуратности. И если, скажем, в Си на уровне выражений возможны такие примеры, которые приводил Вирт
Цитата:
Равняется ли значение выражения x+++++y значению ++x+++y+1? Верны ли следующие соотношения?
x+++++y+1==++x+++y
x+++y++==x+++++y+1


то зачем говорить о том, что так не надо писать? Я хорошо отношусь к Си и вполне терпимо к C++, но к чему постоянно бороться с проблемами, которые могут возникнуть на ровном месте? Кроме того, при явной тенденции ухода от индивидуальной разработки к коллективной все чаще людям приходится читать чужие исходные тексты (я имею в виду в том числе и сотрудников службы контроля качества). И чтобы подобных казусов не случалось, надо выпускать объемистые руководства внутри компаний, регламентирующие правила хорошего написания (так на деле и происходит). А зачем все это?
При всем при том то, что ввести контроль за недопущением подобных выражений в Си на уровне компилятора (плюс их преобразования) можно, должно было быть известно профессору Вирту лучше кого бы то ни было.
P.S.Относительно END , ";" и проблем на голом месте: должно быть это любимое нацинальное занятие. Собственно поэтому в Форте одна единственная ";" в конце.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 74 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB