Здравствуйте, Дарней, Вы писали:
Д>Оказывается, Ява — это испорченный Оберон. Чем дальше, тем лохмаче
Есть возражения по существу?
Hint: отвлекитесь от разницы Си-подобного и Паскале-подобного синтаксиса и сопоставьте конструкции языков.
Попробуйте указать другой язык-предшественник, с которым у Явы были бы такие большие совпадения.
Лично я это проделал, у меня больших сомнений насчет Явы нет.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Хоар
Re[3]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, AVC, Вы писали:
AVC>Здравствуйте, Дарней, Вы писали:
Д>>Оказывается, Ява — это испорченный Оберон. Чем дальше, тем лохмаче
AVC>Есть возражения по существу? AVC>Hint: отвлекитесь от разницы Си-подобного и Паскале-подобного синтаксиса и сопоставьте конструкции языков. AVC>Попробуйте указать другой язык-предшественник, с которым у Явы были бы такие большие совпадения. AVC>Лично я это проделал, у меня больших сомнений насчет Явы нет.
С++. Добавьте сборку мусора, блоки инициализации, уберите указатели, шаблоны, макросы, переопределение операторов и delete и получаем Java Кстати все ли помнят для чего был разработан язык Java?
ИМХО в обероне придётся для этого поменять гораздо больше.
Идею сборщика мусора придумали до Вирта, первые работы на эту тему были аж в 50-х. А то, что изучались исходники оберона, так это понятно. Уверен, что не одного оберона. Как минимум ещё C и C++. Кстати, насколько я помню один из создателей Java об этом писал прямо. Я тоже VB изучал, что бы понять, что так жить нельзя Это обычное дело, когда исследуются существующие возможности и оттуда черпаются идеи. Так что с тем же успехом можно вести родословную Java и от Smalltalk
Re[3]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, AVC, Вы писали:
AVC>Hint: отвлекитесь от разницы Си-подобного и Паскале-подобного синтаксиса и сопоставьте конструкции языков.
На самом деле это давно стоило бы сделать, примерно так, как это сделали Джехани и Фьюэр в своей работе, посвященной сравнению C и Pascal. Довольно содержательная дискуссия была. Жаль, нет сейчас у меня этой книги.
Все это очень похоже на ситуацию внедрения в промышленное производство какого-нибудь опытного образца. Серийно выпускаемый предмет всегда отличается, и весьма значительно, от опытного образца, полученного в лаборатории. Причины, думаю, понятны.
Re[4]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, Privalov, Вы писали:
P>Все это очень похоже на ситуацию внедрения в промышленное производство какого-нибудь опытного образца. Серийно выпускаемый предмет всегда отличается, и весьма значительно, от опытного образца, полученного в лаборатории. Причины, думаю, понятны.
У акулы и дельфина очень много схожих внешних признаков, хотя в происхождении они не имеют практически ничего общего. Причины, я думаю, тоже понятны.
Это называется "конвергенция"
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[4]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, AndreyFedotov, Вы писали:
Д>>>Оказывается, Ява — это испорченный Оберон. Чем дальше, тем лохмаче
AVC>>Есть возражения по существу? AVC>>Hint: отвлекитесь от разницы Си-подобного и Паскале-подобного синтаксиса и сопоставьте конструкции языков. AVC>>Попробуйте указать другой язык-предшественник, с которым у Явы были бы такие большие совпадения. AVC>>Лично я это проделал, у меня больших сомнений насчет Явы нет.
AF>С++. Добавьте сборку мусора, блоки инициализации,...
Я думаю, имелось ввиду что-то вроде виртуальной машины.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[5]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, Дарней, Вы писали:
Д>У акулы и дельфина очень много схожих внешних признаков, хотя в происхождении они не имеют практически ничего общего. Причины, я думаю, тоже понятны. Д>Это называется "конвергенция"
Очень удачная аналогия.
ИМХО, как раз так и соотносятся между собой Си++ (акула) и Java/C# (дельфин).
Внешность сходная, а содержание — разное.
Так же как у дельфина, у Java/C# предок (Оберон) внешне непохож.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Хоар
Re[4]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, AndreyFedotov, Вы писали:
Д>>>Оказывается, Ява — это испорченный Оберон. Чем дальше, тем лохмаче
AVC>>Есть возражения по существу? AVC>>Hint: отвлекитесь от разницы Си-подобного и Паскале-подобного синтаксиса и сопоставьте конструкции языков. AVC>>Попробуйте указать другой язык-предшественник, с которым у Явы были бы такие большие совпадения. AVC>>Лично я это проделал, у меня больших сомнений насчет Явы нет.
Не обижайтесь, Андрей, но Ваш пост получился весьма забавным.
AF>С++. Добавьте сборку мусора, блоки инициализации, уберите указатели, шаблоны, макросы, переопределение операторов и delete и получаем Java
Можно оставить указатели и вернуть всем этим "новшествам" Явы родной паскалевский синтаксис.
Перед Вами портрет Оберона.
AF>ИМХО в обероне придётся для этого поменять гораздо больше.
Неужели вернуть паскалеподобный синтаксис — больше, чем
?!
Ну, попробуйте исполнить в Си++ хотя бы первое (добавить сборку мусора).
AF>Идею сборщика мусора придумали до Вирта, первые работы на эту тему были аж в 50-х.
Да, действительно, сборка мусора существовала как минимум со времен Лиспа, но только в интерпретируемых средах.
Насколько мне известно, Оберон был первым компилируемым императивным языком, в котором появилась сборка мусора.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Хоар
Re[4]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, AVC, Вы писали:
AVC>>Hint: отвлекитесь от разницы Си-подобного и Паскале-подобного синтаксиса и сопоставьте конструкции языков.
Д>какие конструкции?
Си++ Java Oberon
Модульность и раздельная компиляция Нет Да Да
Шаблоны Да Нет Нет
Сборка мусора Нет Да Да
Деструкторы Да Нет Нет
Объединения (union) Да Нет Нет
Многомерные открытые массивы Нет Да Да
Наследование Мн. Од. Од.
Оператор goto Да Нет Нет
ИМХО, Си++ и близко не ночевал здесь.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Хоар
Re[5]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, AVC, Вы писали:
AVC>На страничке AVC>http://alexcheremkhin.boom.ru/oberon.htm AVC>я сделал жалкую попытку их перечислить (далеко не полностью) в таблице.
Разумеется, здесь перечислено далеко не все.
Например, в Java (как и в Обероне) нет адресной арифметики — "краеугольного камня" Си/Си++.
(Впрочем, в Java вообще нет указателей. )
И т.д. и т.п.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Хоар
Re[5]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, gear nuke, Вы писали:
AF>>С++. Добавьте сборку мусора, блоки инициализации,...
GN>Я думаю, имелось ввиду что-то вроде виртуальной машины.
Действительно, байт-код Java имел предшественников. В первую очередь паскалевский P-код, сыгравший значительную роль в распространении Паскаля.
Но я имел в виду не это. Хотя Оберон очень легко "садится" на разные "виртуальные машины", все же, в основном, он компилируется в эффективный "нативный" код. Самым первым применением Оберона было написание одноименной ОС Оберон в 1980-х годах. Эффективность кода, порождаемого, например (для конкретики), компилятором XDS — на уровне лучших оптимизирующих компиляторов Си++.
И все это — при полной безопасности типов (type safety)!
А имел я в виду, что создали Java именно скопировали многие обероновские решения.
Отдельные составляющие этих решений могли существовать и раньше, но интеграция их систему произошла именно в Обероне.
Кстати, даже идею переносимости (основную идею Java) позаимствовали из Оберона.
Существовал такой формат — OMI (Oberon Module Interchange), с помощью которого можно было переносить оберновские модули между разными оберон-системами.
Добавьте сюда лекции Франца, которые он читал на эти темы в Sun в 1994 году (за год до выхода Java).
ИМХО, картина получается полная.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Хоар
Re[4]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, Privalov, Вы писали:
P>Здравствуйте, AVC, Вы писали:
AVC>>Hint: отвлекитесь от разницы Си-подобного и Паскале-подобного синтаксиса и сопоставьте конструкции языков.
P>На самом деле это давно стоило бы сделать, примерно так, как это сделали Джехани и Фьюэр в своей работе, посвященной сравнению C и Pascal. Довольно содержательная дискуссия была. Жаль, нет сейчас у меня этой книги.
Зато у меня она есть!
И правда — очень интересный сборник статей. Одна статья Кернигана о Паскале чего стоит!
Согласен, что спокойное и объективное сравнение языков программирования было бы интересным и, возможно, полезным.
(Конечно, я имею в виду не споры о том, что лучше — } или END, а рассмотрение именно несущих конструкций.)
Жаль, что из-за взаимного фанатизма у нас это до сих пор получается плохо.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Хоар
Re[5]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, AVC, Вы писали:
AVC>Согласен, что спокойное и объективное сравнение языков программирования было бы интересным и, возможно, полезным.
здесь довольно интересное сравнение. И даже работающий результат .
AVC>(Конечно, я имею в виду не споры о том, что лучше — } или END, а рассмотрение именно несущих конструкций.) AVC>Жаль, что из-за взаимного фанатизма у нас это до сих пор получается плохо.
Вот она причина всего. Ещё и сам Вирт подливает масла в огонь, говоря corrupted with C syntax.
Очень жаль, что "мелочи" вроде знаков препинания могут повлиять на восприятие идей. Но это факт, и на этом играют.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[6]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, AVC, Вы писали:
AVC>На страничке AVC>http://alexcheremkhin.boom.ru/oberon.htm AVC>я сделал жалкую попытку их перечислить (далеко не полностью) в таблице. AVC>На всякий случай повторюсь.
AVC>
AVC> Си++ Java Oberon
AVC>Модульность и раздельная компиляция Нет Да Да
AVC>Шаблоны Да Нет Нет
AVC>Сборка мусора Нет Да Да
AVC>Деструкторы Да Нет Нет
AVC>Объединения (union) Да Нет Нет
AVC>Многомерные открытые массивы Нет Да Да
AVC>Наследование Мн. Од. Од.
AVC>Оператор goto Да Нет Нет
AVC>
Честно говоря, по широте выборки фич сильно напоминает приколы на тему "что общего между женщиной и пивом".
(я не отрицаю и не подтверждаю, что Ява ближе к Оберону, нежели к С++. но табличка эта смотрится несерьезно)
FAQ — це мiй ай-кью!
Re[6]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, gear nuke, Вы писали:
GN>здесь довольно интересное сравнение. И даже работающий результат .
Спасибо за интересную ссылку!
С интересом прочитал странички о сравнении языков и о компиляторе. Любопытный эксперимент!
Вместе с тем, не могу согласиться с выводом автора о семантической идентичности современных языков программирования. (Могу предположить, что и мои оппоненты — поклонники Си++ — также не согласятся с этим выводом, но имея в виду другие особенности языков. )
Практика же (создание многоязычного компилятора "Странник") по первому впечатлению выглядит "подогнанной" под теорию: судя по информации о компиляторе, из языков просто изымались "необщие" конструкции.
Но это вовсе не лишает эксперимент интереса. Стоит ознакомиться с компилятором поближе.
AVC>>(Конечно, я имею в виду не споры о том, что лучше — } или END, а рассмотрение именно несущих конструкций.) AVC>>Жаль, что из-за взаимного фанатизма у нас это до сих пор получается плохо.
GN> Вот она причина всего. Ещё и сам Вирт подливает масла в огонь, говоря corrupted with C syntax. GN>Очень жаль, что "мелочи" вроде знаков препинания могут повлиять на восприятие идей. Но это факт, и на этом играют.
Для меня важнее всего несущие конструкции и механизмы языка, а не внешние детали синтаксиса.
Все же, ИМХО, синтаксис Си имеет ряд действительно "плохих" черт: слишком большое число уровней и неочевидность приоритетов операций; легко сделать опечатку (те же грабли = и ==) и т.д.
В Паскале-подобном синтаксисе (и еще в большей степени в синтаксисе Модулы-2 и Оберона) с этим обстоит значительно лучше.
Вот Vlad2 утверждает, что и в отношении := можно опечататься.
Сомневаюсь, чтобы он представил хотя бы один пример, даже "высосанный из пальца".
Вместе с тем, если бы все различие между языками сводилось к особенностям синтаксиса Си и Паскаля, оно не заслуживало бы слишком долгого обсуждения.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Хоар
Re[7]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, eao197, Вы писали:
AVC>>Добавьте сюда лекции Франца, которые он читал на эти темы в Sun в 1994 году (за год до выхода Java).
E>Эти лекции можно было бы приплести, если бы не Green Project (см. Re[10]: Kylix и написание WebServices
насколько я понимаю, ты хочешь сказать, что раз работа над Star7 была закончена в 1992 году, то влияние ETH здесь было несущественным.
Мне, увы, пока неизвестно о языке, на котором создавался Star7 (также как и о том, был ли на самом деле создан и какие именно решения были заложены в его основу; говорю об этом потому что в свое время Sun была поймана на "жульничестве", связанном с компиляторами Java, поэтому особого доверия у меня к ним нет), но очень странно, что информация о проекте, завершенном в 1992 году, сопровождается ссылкой на спецификацию языка от 1994 года.
Что касается, лекций Франца о динамической кодогенерации. Обращаю твое внимание на то, что решение о переориентации Oak на Интернет было "внезапно" (как "озарение") принято в 1994 году.
Напомню также, что язык Оберон был представлен "широкой публике" в 1988 году, незадолго до завершения работ по созданию одноименной операционной системы, и в том же году Оберон (и ОС, и язык) начали использоваться в качестве учебного материала в ETH. Соответственно, ни принципиальные решения, ни исходные тексты системы никогда не скрывались и были широко доступны.
А вообще, очень рад тебя слышать.
У меня трудности с Инетом, вот сегодня ночью "дорвался".
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Хоар
Re[6]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Честно говоря, по широте выборки фич сильно напоминает приколы на тему "что общего между женщиной и пивом". ЗХ>(я не отрицаю и не подтверждаю, что Ява ближе к Оберону, нежели к С++. но табличка эта смотрится несерьезно)
Возможно, она смотрится несерьезно.
Но практически за каждым указанным в ней синтаксическим ( ="внешним") отличием между Си++ и Java/Обероном стоит различие механизмов языков и соответствующего им рантайма ( ="внутренних", существенных особенностей).
Возьмем, к примеру, отсутствие в Обероне и Java вариантных записей (union).
Во-первых, такие записи могут использоваться (и используются) для скрытого приведения типов, что в корне противоречит концепции безпасности типов. Си++ это заботит мало (по-моему, ему на все наплевать ), а вот Оберон и Java — сильно "привязаны" к безопасности типов.
Во-вторых, здесь есть прямая связь с реализацией сборки мусора. Дескриптор типа в Обероне включает не только адреса методов (type-bound procedures), но и смещения указателей в записи. Если бы во время исполнения программы по этому смещению могли находиться как указатель, так и переменная неуказательного типа, то механизм сборки мусора сильно бы усложнился, а то и вовсе стал бы труднореализуемым. Т.к. Вирт уже добавил в язык расширение типа ( =наследование), то потребность в вариантных записях, порождающих эти проблемы, отпала сама собой.
Но возникла другая проблема: а как эффективно определить динамический тип записи?
(Напомню, что факт принадлежности переменной к тому или иному динамическому типу требует всего одного сравнения.)
Решение следующее: каждый тип записи имеет свой уровень расширения. (Базовый тип — уровень 0, прямо ему наследующий — уровень 1 и т.д.) Указатели на дескрипторы с соответствующими уровнями расширения хранятся в массиве в дескрипторе типа. Когда мы проверям переменную на принадлежность типу, мы на самом деле сразу обращаемся к элементу массива с соответствующим индексом. Этот механизм реализован на Обероне настолько эффективно, что сначала в языке даже не было методов, а просто использовалась процедурная переменная в качестве поля записи.
Легко также видеть, что подобная схема плохо сочетается с множественным наследованием.
Т.к. в Обероне единицей инкапсуляции является модуль, а не класс, то множественное наследование оказалось излишним и не попало в язык.
И т.д. и т.п.
Короче говоря, это целая система взаимоувязанных решений.
И нигде до Оберона я не видел такого компактного и гармоничного решения основных языковых проблем.
А табличка, возможно, и правда смотрится несерьезно.
Ну и Бог с ней.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.