Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 16 апр 2024, 19:10

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




Начать новую тему Ответить на тему  [ Сообщений: 43 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
СообщениеДобавлено: 06 янв 2014, 08:19 
Не в сети

Сообщения: 203
Не совсем об оберонах, но -- критика "мэйнстрим"-языков

Довольно не новая уже статья автора языка Erlang:

Joe Armstrong "Почему объектно-ориентированное программирование — это отстой" (Оригинал)
Цитата:
Возражение №1. Структуры данных и функции не должны быть привязаны друг к другу

Объекты связывают функции и структуры данных вместе в неделимых сущностях. Я думаю, что это фундаментальная ошибка, потому что функции и структуры данных — понятия, относящиеся к абсолютно разным категориям. Почему это так?

Потому что функции выполняют действия. У них есть входные и выходные значения. Входные и выходные значения — это структуры данных, которые изменяются функциями. Во многих языках функции — это последовательности императивов: «сделай то, потом сделай это». Для понимания сути функции необходимо понять порядок выполнения этих императивов (в ленивых функциональных и в логических языках порядок может значения не иметь).

Структуры данных же просто существуют. Они не выполняют никаких действий. Они исключительно декларативны. «Понимание» структуры данных в разы проще «понимания» функции.

Функции представляются чёрными ящиками, трансформирующими входы в выходы. Если я понимаю вход и выход, то я могу понять и функцию (хотя это вовсе не означает то, что я смог бы эту функцию написать).

Функции обычно «понимаются» как части вычислительной системы, передающие данные из структуры данных типа T1 в структуру данных типа T2.

Поскольку функции и структуры данных — это совершенно разные виды животных, то решение содержать их в одной «клетке» фундаментально неверное.

...

Возражение №4. У объектов есть скрытое состояние.

Состояние — это краеугольный камень всех проблем. В частности — необходимо избегать функций с сайд-эффектами.

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

Что могут предложить языки программирования для работы с этим состоянием из реального мира?

  • Объектно-ориентированные языки программирования скажут «— Надо спрятать состояние от программиста». Состояния скрываются, доступ к ним можно получить только с помощью специальных функций;
  • Обычные языки программирования (C, Pascal) скажут, что видимость переменных состояния должна регулироваться правилами областей видимости языка;
  • Декларативные языки скажут, что состояния нет.

Глобальное состояние системы хранится во всех функциях и вытекает изо всех функций. Используются механизмы навроде монад (для функциональных языков) и DC-грамматик (для логических языков). Эти механизмы прячут состояние от программиста, позволяя ему программировать не принимая состояние во внимание, но при этом позволяя ему и получать доступ к состоянию, если в этом возникнет необходимость.

Подход «спрятать состояние от программиста», выбранный для объектно-ориентированных языков программирования — это наихудший подход из возможных. Вместо того, чтобы приоткрыть состояние и минимизировать его влияние на код, оно скрывается так, как будто оно несущественно.


Почему ООП так популярно?

  • Причина 1 — все думают, что его легко изучить;
  • Причина 2 — все думают, что с его помощью можно повысить степень повторного использования кода;
  • Причина 3 — хайп вокруг ООП;
  • Причина 4 — оно создаёт Новую Индустрию Программирования.

Лично я не вижу свидетельств первой и второй причин. Причины — это то, что находится за технологией. Если технология языка программирования настолько плоха, что создаётся новая индустрия для решения проблем создания этой новой индустрии — то это золотое дно для людей, которые хотят делать деньги, а не работу.

Вот это — то, что реально движет объектно-ориентированным программированием.


Два других возражения мне лично показались неубедительными:
Цитата:
Возражение №2. Всё должно быть объектом

Рассмотрим «время». В объектно-ориентированном языке программирования «время» должно быть объектом. Но в необъектно-ориентированном языке «время» — это экземпляр типа данных. Для примера, в Erlang есть много разных видов «времени», каждый из которых может быть строго и однозначно определён. Например, с помощью таких определений типов:

-deftype day() = 1..31
-deftype month() = 1..12.
-deftype year() = int().
-deftype hour() = 1..24.
-deftype minute() = 1..60.
-deftype second() = 1..60.
-deftype abstime() = {abstime, year(), month(), day(), hour(), min(), sec()}.
-deftype hms() = {hms, hour(), min(), sec()}.
...

Заметьте, что эти определения не принадлежат ни одному конкретному объекту. Они общеиспользуемы без каких-либо ограничений, поэтому такие структуры данных, представлющие «время» могут быть использованы любой функцией.

Кроме того, у них нет никаких связанных методов.


Возражение №3. В объектно-ориентированных языках определения типов размещаются повсеместно

В объектно-ориентированных языках программирования определения типов данных принадлежат объектам. Поэтому я не могу найти все определения типов данных в одном месте. В Erlang или в C я могу определить все мои типы данных в одном-единственном включаемом файле или в словаре данных. В объектно-ориентированных языках программирования я этого сделать не могу — определения типов данных размещаются повсеместно.

Я приведу пример. Предположим, я хочу определить глобально видимый тип данных.

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

При этом общеиспользуемый тип может быть связанным списком, массивом, хэш-таблицей или болеее сложной сущностью, например временем, датой или именем файла.

В объектно-ориентированном языке программирования я должен выбрать некоторый базовый класс, в котором я определю общеиспользуемую структуру данных. Все остальные классы, которые хотели бы использовать эту структуру данных, должны наследовать этот класс. Предположим, теперь я хочу создать объект типа «время», которому принадлежит эта структура, и в котором объект типа «время», которому… ну, вы поняли.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 06 янв 2014, 08:53 
Не в сети

Сообщения: 203
Ещё перевод статьи Джо Армстронга:

"Я придумал Erlang, потому что его не существовало" (оригинальное письмо)

Забавно, в статье "Почему объектно-ориентированное программирование — это отстой" он писал о том что у разработчиков из IBM не было никаких угрызений совести, когда они добавили элементы ООП в Пролог, однако в этой статье он пишет, что его язык Erlang по сути смесь Пролога и Смоллтока.

Ещё его цитата про С++:
Цитата:
Когда начал набирать популярность C++, я попытался прочитать про него книгу… До сих пор осталась вмятина на стене за пианино, куда я ее швырнул в порыве гнева! Ведь я считал, что усовершенствование C должно сделать вещи проще, а все оказалось еще более запутанным!

Любопытный список языков для изучения:
Цитата:
Итак, вот мои рекомендации к изучению:

  • C
  • Prolog
  • Erlang (ням-ням :)
  • Smalltalk
  • Javascript
  • Haskell/ML/OCaml
  • LISP/Scheme/Clojure

Пытался я как-то изучить Пролог, но не проникся, увы...
Чем ему понравился Яваскрипт -- ума не приложу ))


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 06 янв 2014, 16:13 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Список отстой. JS унылое |^o&но. Совет начинать с Си — маразм, особенно при такой слюнобрызгательной критике C++ ;)
Интересно, что Мейер тоже свой Eiffel хвалит, как и каждый кулик — своё болото. Угадайте мой список из двух языков. ;)
Теперь осталось открыть тему "Почему функциональное программирование — это отстой". ;)
Цитата:
Заметьте, что эти определения не принадлежат ни одному конкретному объекту.
Ух ты! Он изобрёл типы без объектов! Какое чудо! ;) Скоро, видимо, изобретут наследование без объектов и инкапсуляцию без объектов, и это будет безусловно прорыв и новое слово в семантике языков. :lol:

А если такой бешеный темп развития будет продолжаться — может даже модульность изобретут. ;)


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 07 янв 2014, 07:44 
Не в сети

Сообщения: 203
Zorko писал(а):
Список отстой. JS унылое |^o&но. Совет начинать с Си — маразм, особенно при такой слюнобрызгательной критике C++ ;)
А как связаны между собой Си и С++? Он критиковал С++ за его переусложнённость, но при этом вполне нормально относится к сям, хотя и признаёт, что пишет дряной код на сях...

Zorko писал(а):
Теперь осталось открыть тему "Почему функциональное программирование — это отстой". ;)
Так открой поскорее! )))

Zorko писал(а):
Цитата:
Заметьте, что эти определения не принадлежат ни одному конкретному объекту.
Ух ты! Он изобрёл типы без объектов! Какое чудо! ;)
О чём это ты? Он просто напомнил, что не все типы данных имеет смысл делать объектами.
И вот тут, кстати, Вирт в своём обероне пошёл не той дорогой -- возложил на расширяемые записи (объекты по сути) функционал перечислимого типа и объединения (union)...

Zorko писал(а):
Скоро, видимо, изобретут наследование без объектов и инкапсуляцию без объектов, и это будет безусловно прорыв и новое слово в семантике языков. :lol:

А если такой бешеный темп развития будет продолжаться — может даже модульность изобретут. ;)
Эти пассажи вообще не понятны. Это конкретно к Джо Армстронгу и его Эрлангу или вообще к индустрии?
Конкретно в Эрланге есть модульность, позволяющая использовать инкапсуляцию -- так же как и в Обероне. Кстати, эти языки имеют одинаковый возраст -- они оба разрабатываются с середины 80-х годов.
Модули Эрланга могут наследовать функционал других модулей, точнее специальных "поведенческих модулей" -- это своего рода наследование без объектов, ведь модули (по-крайней мере в эрланге или в хаскелле) не являются объектами.

Так что твой сарказм непонятен...


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 07 янв 2014, 17:13 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
geniepro писал(а):
А как связаны между собой Си и С++? Он критиковал С++ за его переусложнённость, но при этом вполне нормально относится к сям, хотя и признаёт, что пишет дряной код на сях...
Хорошо. Как нам можно относиться к языкостроителю, который не понимает недостатков Си? :) В лучшем случае просто игнорировать исходящий от него бред. :)

geniepro писал(а):
И вот тут, кстати, Вирт в своём обероне пошёл не той дорогой -- возложил на расширяемые записи (объекты по сути) функционал перечислимого типа и объединения (union)...
Да он просто унифицировал подход. Упростил. Вирт — строитель языка-ядра. В этом ценность его работы. А почему ты решил, что это не та дорога?

geniepro писал(а):
Это конкретно к Джо Армстронгу и его Эрлангу или вообще к индустрии?
Напротив, Армстронг подтверждает мои личные наблюдения. Ну не стоило в Java делать такой сильный упор на ООП, начисто вырезав из языка средства структурного программирования. Но я уверен, что подмечу недостатки Эрланга даже в таком простом примере как хеловорлд, мне просто лень этим заниматься.

geniepro, за всё время пока мы с тобой общаемся меня не покидает чувство, что твоё знакомство со многими языками и парадигмами — чисто умозрительное, как с Алголом-68 (это же надо было сказонуть как тебе нравится этот язык) и Фортраном. Ты не имеешь опыта работы на Форте (ярчайший представитель подхода расширяемого программирования), не оценил (подозреваю, что “ниасилил”) Пролог (представитель парадигмы логического программирования), делаешь упор на ФП, но не предлагаешь единого императивного языка, который более или менее подходил бы для широкого круга задач. Твои восторги в основном касаются фрагментов языков, т.е. этот-то в таком-то языке так люксово, а в том-то вот не так уж хорошо, это ложный путь. Я уже понял из твоих постов, что ты занят решением узкоспециализированных задач в сжатые сроки, поэтому закономерно, что ты рассматриваешь средства разработки исключительно с этой позиции, а не с позиции общего состояния IT в целом, которое имхо весьма плачевно. И ты не предлагаешь ничего, чтобы решать его проблемы более кардинальным способом. Вместо этого ты восхищаешься функциональными языками и императивными новомодными языками, которые являются просто вариациями того же императивного подхода при страшно раздутой или специфической семантике и вычурном синтаксисе (ну вот зачем в Эрланге -deftype? Нахрена там минус спереди? А нахрена типу скобки? Этому есть какое-то разумное объяснение, лежащее вне уродского мировоззрения автора?). Поэтому наше общение похоже на разговор глухого со слепым, и мы в итоге не достигнем какого-то базового соглашения. Но я, как обычно, поразмышляю за жизнь. ;)

Логическое программирование и Пролог. Когда-то на него возлагали большие надежды и называли языком пятого поколения, идеальным средством для разработки ИИ и экспертных систем. Сегодня я бы его рассматривал как крайне мощный подход к организации данных, по сравнению с которым XML и реляционные БД выглядят отстойно. Потому что Пролог позволяет описать взаимоотношение данных с позиции прилежащей к ним метаинформации. Но да, гораздо проще нагородить кучу тегов и плоские базы а-ля таблицы екселя, чем совершенствовать этот очень интересный подход.

Ещё хочу сказать за недостатки обилия ЯП. Чем больше появляется ЯП (а фактически это вариации одних и тех же императивных средств на часто более чем уродском синтаксисе; и это всё нужно сопрягать, соединять, обучать людей использовать эту кашу и т.д.). Т.е. появление каждого нового языка — это не только хорошо, но ещё и плохо, потому что снижает ценность всех остальных уже имеющихся. Ведь многим дегенеративным языкостроителям нужно самоутверждаться. Поэтому они невжисть не станут совершенствовать путём уточнения и отбрасывания малоценных средств существующие языки, нет. Они вместо этого, призвав всю своё извращённое и испорченное (часто сями) языковое мировоззрение, лучше произведут на гора что-то необычайное. Erlang. Eiffel, Ruby. Perl. PHP. Clu. Python. Lua. Go. D. C++. Objective C. C#. Java. И оно хорошо до первого десятка, потом тошнит.

Расширяемое программирование. Ты конечно привык, что язык запаян, готов, обиблиотечен и окомпоненчен, и даётся дрожащему от восторга программисту в запаянном гробике ящичке. Испортить ничего невозможно, у программиста просто не будет такой возможности. Если тебя плющит, смирись, ничего исправить в языке уже нельзя. Таковы Java и C#. Языки-фирмачи с поплющенным сишным синтаксисом. Оберон же (особенно 07) вследствие своего размера является языком-ядром и пошалить в нём ручками — более чем доступное удовольствие. Т.е. с недостатками Java и C# тебе придётся жить. Недостатки Оберона, даже очень серьёзные идеологические просчёты, легко исправимы малыми силами, лишь бы знать в каком месте ударить.

В Форте же, который я всюду приплетаю, можно конструировать всё вплоть до новых конструкций цикла. Форт-система является диалоговой и работает в режиме интерпретации и компиляции, разрешая переключаться между ними. В Форте ты создаёшь примитивы, кубики, слова, из которых потом создаёшь программу. Аналога этому механизму в других известных мне языках нет (если эти языки — не диалекты Форта, хоть и под другим названием). На Форте можно разработать Форт-ассемблер и писать как на ассемблере. А можно Паскаль-слова и писать структурно, как на Паскале. Уверен, что и хаскеловские примитивы тоже могут быть достигнуты на Форте. Почему ты напрочь игнорируешь расширяемое программирование? Да всё просто, надо же заниматься затыканием дыр средствами, на которых легко это делать, и расширяемое программирование в пролёте. Но я желаю тебе смены платформы на что-то другое, отличное от дотнета, может тогда перестанешь считать, что для микроконтроллеров программируют полтора человека в мире. ;)

Модульность. Даже электронщики понимают преимущества модульности. Как решить проблему фрагментации среди появления всё большего количества платформ и дурно спроектированных слепленных языков-уродцев? Как соединить компоненты, которые хотя бы теоретически могут быть соединены? Здесь на передний план выступает единица цельного программного блока, кирпичик. Если будет внедрён механизм таких строительных софтовых блоков-кирпичиков, независимых от языка, на котором они написаны, и платформы, на которой (и только на которой!) их можно будет использовать, от этого выиграют все. Нужно переносить упор с конкретных платформенных и языковых особенностей на интерфейсы для взаимодействия компонентов. Но для этого нужно чтобы горе-языкостроители снабдили свои творения хотя бы каким-то подобием модульности. А ведь, насколько я понимаю, функциональная парадигма не предлагает ничего нового для разрешения проблем межъязыкового взаимодействия. Ровно также как и для реальной императивной работы по отрисовке графических объектов и пересылке байтиков. И когда надо делать реальную работу, а не типы и ленивые вычисления громоздить, функциональные языки всё равно опираются на императив, поэтому компоненты-то как раз будут императивными. И интерфейсы для их взаимодействия тоже. Значит для решения проблемы фрагментации необходимы чёткие, всеми поддержанные интерфейсы. Интерфейсы чего? Классов? Но стоит ли их проектировать в ОО-стиле? Подход ОО конечно бывает полезен, но с наличием настоящей модульности необходимость в нём сильно снижается. А что считать модулем? Мне вот не нравится, что модули имеют разные свойства и называются то классами (классы — не модули!), то пэкэджами, то кластерами, то сборками. Вот суть проблемы. Никто не знает что такое модульность, это слово стало спекуляцией (например, в контексте “такой-то модуль написан на Си”). Мы сталкиваемся с тем, что термин “модуль” не имеет чётких определений. Ну да ладно, пускай даже не модуль, но что тогда считать единицей, программным блоком? У нас вообще упереться не на что, кроме каких-то разнородных языковых извращений. А что такое модуль — по сей день догадываемся. Вот с чёткого определения “программной единицы-блока” — модуля — и нужно начать. Ведь если все языки будут поддерживать модули и компоненты в едином стиле — жизнь станет простой и приятной. Но фирмы-законодатели и клепалы языков-уродцев очень сильно заинтересованы в выработке единых стандартов на программное взаимодействие только в рамках предлагаемой ими платформы или языка. А что могут поменять в этой ситуации кустари-одиночки типа меня? Только одно — сделать свой выбор и проголосовать своим интеллектом в пользу того или иного подхода. А из чего мы вообще можем выбирать? А выбирать практически не из чего. Выбор у нас такой:

  1. DLL/SO + сишные хидеры (*.h) в стиле Windows/Linux. Такое решение крепко привязывает нас к этим ОС в частности и к языку Си вообще (или к языкам, которые будут биндиться к такому интерфейсу). А ещё оно навязывает нам подход к интерфейсу: “реализация отдельно от заголовка, её описывающего”.
  2. Java-классы. Ну, это вообще не модульность. Мне мыслить в категории классов вообще неудобно. Здесь в полной мере чувствуется отстойность всеобщей ООПизации. Плюс мёртвая привязка к виртуальной машине JVM.
  3. Delphi/FreePascal-модули. Цитирую Сержа Тарасова, с которым согласен: “На интуитивном уровне понятно, что класс — не модуль. И пространства имён тоже (в цэ-шарпе пространства не могут содержать данных и функций, могут быть размазаны по файлам с риском конфликтов). Дельфийский модуль (unit) более похож на интуитивный образ: текст ограничен одним файлом, имеются секции интерфейса и реализации, классы инкапсулированы, можно объявлять данные и функции на уровне модуля”. Из недостатков — привязка к коммерческому средству разработки и к платформе Windows. Хотя подход Дельфи показывает, что он может быть эффективно развёрнут и на других платформах (Android, iOS). Так почему Дельфи — это так плохо и “оно навсегда устарело”?
  4. C#-сборки. Привязка к дотнету и ms, фактически рабское следование сомнительному пути коммерческих рисков.

А теперь пару хороших слов про Оберон-технологии. Если я выберу тут щас не C#, не Java и не DLL/SO, а Компонентный Паскаль, то смогу использовать все эти подходы и платформы. Процедурный DLL/SO, объектный Java и “сборочный” шарповый. А если кто-то придумает как скрестить программы на КП с Дельфи-компонентами, такому подходу вообще цены не будет. Шучу. :)

Т.е. я могу сегодня писать компоненты на C#/GPCP и юзать все чудные фичи шарпов, не теряя при этом вкуса к жизни и боязни, что весь мой код завтра “устареет”. Или на Java/GPCP в рамках платформы, а не только языка Java. Более того, я могу BlackBox’ом собрать компонент в DLL или в .SO, конечно если он достаточно независимо написан и не сильно угряз в платформенных особенностях.

Впрочем, я могу делать всё вышеперечисленное без Java, без C# и даже без просто Си или Паскаля. Чисто на Компонентном Паскале. Вот. Меня интересует именно компонентное сборочное программирование, из готовых кубиков. Потому что я не встречал более разумного подхода. Даже телевизоры и компы сегодня собирают из модулей-кубиков, и в этом — много плюсов. А ты тут про Хаскел с Эрлангом. Ну нафига они нам, эти “ням-ням”? Чтобы ещё сильнее фрагментироваться? ;)

Так что для себя я выбрал КП как идеальный язык с хорошо спроектированными возможностями по построению компонентов. И если уж мэйнстримом модульность (и её несомненные достоинства для проектирования) не до конца понята и осознана, то что говорить за настоящую компонентность.

Моё определение модульности (сумбурно, но что поделать):

Модуль — единица компиляции и логическая атомарная единица, служащая для декомпозиции. наружу светится лишь интерфейс модуля, всё остальное сокрыто внутри. Ничего общего не имеет с классом. Несколько классов могут быть реализованы внутри модуля, если так удобно. Но там могут быть и процедуры без всяких объектных обёрток, которые во многих случаях излишни (ООП — отстой! ;) )

Модуль может быть загружен динамически как единица исполняемого кода. И выгружен или слинкован вместе с другими модулями статически. Модуль может экспортировать наружу константы, типы, переменные и сложные структуры — объекты (или классы, если так интереснее). Ещё — процедуры и функции. Переменные могут быть экспортированы только для чтения. Модуль может содержать активные объекты или быть обёрткой, если это удобно. Можно группировать несколько модулей в подсистему. Иметь различные реализации модулей и переключаться между ними. Всё это должно реализовываться прозрачно без опоры на платформенные особенности (по барабану что там внутри — классы, сборки или DLL). Интерфейс модуля строится по исходному коду автоматически. это всё было в Обероне > 25 лет назад.

Вот определение модуля от OberonCore:
http://oberoncore.ru/wiki/модуль

Определение модуля из книги Горбунова-Посадова "Раширяемые программы":
Цитата:
Модуль — выделенная по тем или иным мотивам часть первичного материала программного фонда.
Разумеется, если я замечу более совершенный подход к модульности, обязательно буду рад возможности пересмотреть свои взгляды. Но пока Обероны — это лучшее из всего на эту тему, что я встречал. Идеальное средство для разработки независимых от платформ модулей и компонентов. Идеальный клей между ними.

Ссылки по теме:



Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 08 янв 2014, 08:42 
Не в сети

Сообщения: 203
Zorko писал(а):
Как нам можно относиться к языкостроителю, который не понимает недостатков Си? :) В лучшем случае просто игнорировать исходящий от него бред. :)
Не неси чушь. Си отличный язык если его использовать там где нужно -- для кодогенерации с правильных языков. Ты же сам пропагандируешь такой подход с обероном -- из оберона в си, из сей в машкод нужного процессора...
"Если вы не генерируете Си, то Си генерирует вас!" )))

У сей есть как недостатки, так и достоинства перед тем же обероном. Взять хотя бы перечислимый тип -- да, в сях он отстойный, в с++ или с# он гораздо лучше, но всё же в обероне перечислений и вовсе нет, как и объединений. А ведь эти типы крайне важны в программировании -- перечисления больше в прикладном софте, а объединения в низкоуровневом системном.

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

Zorko писал(а):
geniepro писал(а):
И вот тут, кстати, Вирт в своём обероне пошёл не той дорогой -- возложил на расширяемые записи (объекты по сути) функционал перечислимого типа и объединения (union)...
Да он просто унифицировал подход. Упростил. Вирт — строитель языка-ядра. В этом ценность его работы. А почему ты решил, что это не та дорога?
Такой путь просто противоречит духу строгой статической типизации -- переносить обнаружение ошибок в программах на как можно более ранние стадии разработки программы.
Вместо того что бы компилятор заявил программисту что он пихает не то что нужно не туда куда нужно, программист вынужден заниматься нудным тестированием, которое по определению не способно обнаружить все ошибки в программах.

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

Zorko писал(а):
Ну не стоило в Java делать такой сильный упор на ООП, начисто вырезав из языка средства структурного программирования.
о_О это какие же средства структурного программирования вырезали из Явы???
http://ru.wikipedia.org/wiki/%D1%F2%F0%F3%EA%F2%F3%F0%ED%EE%E5_%EF%F0%EE%E3%F0%E0%EC%EC%E8%F0%EE%E2%E0%ED%E8%E5

1. Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:
последовательное исполнение — в Яве есть
ветвление — также есть
цикл — и это никуда не пропало

2. Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т. н. подпрограмм (процедур или функций).
Возможно тебя удивит, но и подпрограммы из Явы никто не выкидывал.

3. Разработка программы ведётся пошагово, методом «сверху вниз».
Насчёт этого пункта я не уверен, точно знаю что в Обероне это требование структурного программирования не реализовано, а, скажем, в С# или в Хаскелле оно есть. Яву же я не настолько хорошо знаю...

Zorko писал(а):
Но я уверен, что подмечу недостатки Эрланга даже в таком простом примере как хеловорлд, мне просто лень этим заниматься.
Эх, мне бы такую самоуверенность ))) Хеловорлд на эрланге выглядит примерно так:

io:write("Hello world").

Zorko писал(а):
geniepro, за всё время пока мы с тобой общаемся меня не покидает чувство, что твоё знакомство со многими языками и парадигмами — чисто умозрительное, как с Алголом-68 (это же надо было сказонуть как тебе нравится этот язык) и Фортраном.
Да, это действительно так. Мне трудно представить, что бы кто-то имел опыт серьёзной работы хотя бы на двух десятках языков, это, видимо, такие динозавры, что начали писать программы ещё на заре программирования.
Алгол-68 просто красивый язык, имхо, куда красивее того же Оберона, хотя в Алголе-68, несомненно, есть и куча недостатков. Ну так -- 68-75 гг разработки, что уж от него требовать. Но для своего времени это был впечатляющий язык.
На Фортране я, к счастью, не работал, и надеюсь не придётся...

Zorko писал(а):
Ты не имеешь опыта работы на Форте (ярчайший представитель подхода расширяемого программирования), не оценил (подозреваю, что “ниасилил”) Пролог (представитель парадигмы логического программирования)...
В детстве я баловался Фортом, но решил поберечь свой разум и не писать программы в стековом стиле без всяких намёков на типы данных.
Пролог меня когда-то впечатлял, но, к сожалению, не понадобился -- слишком уж он специфичен...

Zorko писал(а):
... делаешь упор на ФП, но не предлагаешь единого императивного языка, который более или менее подходил бы для широкого круга задач.
Ну, тут мне особо нечего предложить, это правда.
Самым качественным универсальным императивным языком я считаю Аду, но по своей работе предпочитаю С# -- при его недостатках он, в принципе, вполне устраивает, учитывая что мне приходится не в одиночку программы писать. Аду мало кто знает, а учить что-то новое -- ещё меньше кто хочет, увы...

Zorko писал(а):
(ну вот зачем в Эрланге -deftype? Нахрена там минус спереди? А нахрена типу скобки? Этому есть какое-то разумное объяснение, лежащее вне уродского мировоззрения автора?).
Синтаксис Эрланга и впрямь нестандартен, однако он крайне прост и по любимой оберонщиками арифметике синтаксиса оставляет обероны далеко позади. Эрланг, возможно, самый простой язык из практичных языков, применяющихся в индустрии.
Что касается уродства мировозрения автора Эрланга. На Обероне просто в принципе недостижим тот уровень надёжности софта, что достигнут в Эрланге -- 99.999% и более. Значит, всё-таки всё нормально с его мировозрением...

Конкретно про -deftype. Я и сам непонял, почему в оригинальной статье использовано слово deftype. В текущем описании языка указано просто type. Возможно, со времени написания статьи произошли изменения в языке. Это, конечно, недостаток, но оберонщикам ли жаловаться на изменения в языке?
Минус же нужен вот по какой причине. В Эрланге модуль кроме определений функций может так же иметь разную метаинформацию, и эта метаинформация записывается в едином стиле:
-Ключ(Значение).
(почему авторы языка выбрали такое представление я не в курсе, увы).
В эту метаинформацию входят такие данные, как имя модуля, список экспорта, типы данных, спецификации типов функций, макросы.
Почему это сделано именно так -- я тоже не в курсе, такой вот дизайн языка, которому уже почти 30 лет...

Zorko писал(а):
Поэтому наше общение похоже на разговор глухого со слепым, и мы в итоге не достигнем какого-то базового соглашения.
Для такого недопонимания придуман специальный термин -- "парадокс Блаба"...
http://ru.wikipedia.org/wiki/Грэм,_Пол

Zorko писал(а):
Расширяемое программирование. Ты конечно привык, что язык запаян, готов, обиблиотечен и окомпоненчен, и даётся дрожащему от восторга программисту в запаянном гробике ящичке. Испортить ничего невозможно, у программиста просто не будет такой возможности. Если тебя плющит, смирись, ничего исправить в языке уже нельзя. Таковы Java и C#. Языки-фирмачи с поплющенным сишным синтаксисом. Оберон же (особенно 07) вследствие своего размера является языком-ядром и пошалить в нём ручками — более чем доступное удовольствие. Т.е. с недостатками Java и C# тебе придётся жить. Недостатки Оберона, даже очень серьёзные идеологические просчёты, легко исправимы малыми силами, лишь бы знать в каком месте ударить.

В Форте же, который я всюду приплетаю, можно конструировать всё вплоть до новых конструкций цикла. Форт-система является диалоговой и работает в режиме интерпретации и компиляции, разрешая переключаться между ними. В Форте ты создаёшь примитивы, кубики, слова, из которых потом создаёшь программу. Аналога этому механизму в других известных мне языках нет (если эти языки — не диалекты Форта, хоть и под другим названием).
О, ты затронул любимый довод лисперов и немерлистов.
Справедливости ради, в Немерле возможности наращивания языка уступают лисповым и тем более фортовским.

Zorko писал(а):
На Форте можно разработать Форт-ассемблер и писать как на ассемблере. А можно Паскаль-слова и писать структурно, как на Паскале. Уверен, что и хаскеловские примитивы тоже могут быть достигнуты на Форте.
Вполне возможно. Ты, наверное, сильно удивишься, но в хаскеле тоже можно сделать фортовские примитивы, к тому же, благодаря статической системе типов в этом eDSL контролируется работа со стеком в процессе компиляции, то есть хаскельная форт-программа не сможет совершить попытку работы с пустым стеком.
Вероятно и в Форте это можно сделать, так же как и создать свою систему типов, но я о таком не слышал.
В Хаскелле, кстати, средства построения eDSL также как и в Форте позволяют сделать встроенный ассемблер, или Бейсик, например...

Zorko писал(а):
Почему ты напрочь игнорируешь расширяемое программирование? Да всё просто, надо же заниматься затыканием дыр средствами, на которых легко это делать, и расширяемое программирование в пролёте.
Да кто же сказал, что я его игнорирую? Потихоньку использую там где нужно. Правда, не на форте, лиспе или немерле с хаскеллем, а в сях -- когда надо делаю макросы, "расширяю язык" )))

У форта проблема в том, что в стандарте языка не прописаны стандартные средства создания структур данных, статической типизации и прочего. Это можно сделать, и кто-то делает, и получается что в разных форт-проектах используются разные по сути языки на основе форта. Хорошо ли это? Спорный вопрос...

Zorko писал(а):
Но я желаю тебе смены платформы на что-то другое, отличное от дотнета, может тогда перестанешь считать, что для микроконтроллеров программируют полтора человека в мире. ;)
С чего ты решил что я пишу программы только под .NET? Ну да, сейчас я ограничиваюсь виндою, потому что другие платформы для меня малоактуальны, однако писал я программы и под микроконтроллеры, лет 10 назад...
А то что под твои любимые ретроплатформы программы пишет ничтожное количество людей -- вряд ли ты сам будешь отрицать этот факт...

ЗЫ. Ох и любишь же ты простыни текста писать... )))


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 08 янв 2014, 09:32 
Не в сети

Сообщения: 203
Ну и в тему будут две парные статьи с одной конференции:

Ричард П. Гэбриэл, "Объектная парадигма провалилась"
и
Гай Л. Стил, Объектная парадигма не провалилась

Что любопытно, оба автора этих статей -- лисперы с большим стажем, однако Гэбриэл делает упор на ФП, а Стил -- на ООП.

ЗЫ. Лисп -- метаязык, в нём можно реализовать как поддержку ФП, так и поддержку ООП...


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 08 янв 2014, 13:03 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
geniepro писал(а):
Си отличный язык если его использовать там где нужно -- для кодогенерации с правильных языков. Ты же сам пропагандируешь такой подход с обероном -- из оберона в си, из сей в машкод нужного процессора...
Я строю мостик от Оберона к нужной мне платформе. Если делать это с нуля (точить напильником из гаек) — это займёт годы, которых для этой работы у меня нет. :) К тому же я не намерен тратить время на поддержку форматов типа .dex, которые появляются и грозят исчезнуть гораздо быстрее, чем я их осваиваю. А Оберон прекрасно подходит для низкоуровневого программирования; уверен, что этот язык по балансу средств в целом гораздо приемлемее Си (когда нужно переходить от гаек к блокам) и C# (когда нужно средство, не привязанное к мэйнстримовским виртуальным машинам).

Так что я не пропагандирую такой подход, а рассматриваю Си как промежуточное представление, а Си-компилятор — как компонент, получающий на входе вывод другого компонента (Ofront'а) и дающий на выходе исполняемый файл нужного мне формата (во FreePascal да и в том же SDCC промежуточных представлений — целая гора, но именно за это их как-то и не критикуют).

geniepro писал(а):
Взять хотя бы перечислимый тип -- да, в сях он отстойный, в с++ или с# он гораздо лучше, но всё же в обероне перечислений и вовсе нет, как и объединений. А ведь эти типы крайне важны в программировании -- перечисления больше в прикладном софте, а объединения в низкоуровневом системном.
Крайне важны — это надо понимать как "я к ним очень привязан". Перечисления и объединения есть в Модуле-2 и M2R10. :) А могут быть добавлены и в Оберон, если они понадобятся. Пока обхожусь.

Смотри во что может обойтись перечислимый тип. Просто перечислением всех констант в одном блоке (с запретом использовать их как числа и неявным присваиванием им значений (от 0 до N, да? Или как в Си — чтобы можно было задавать произвольные значения? Это ещё сильнее усложнит механизм)) тут не обойдёшься. Обязательно понадобятся механизмы перевода перечислимого типа в числовой и наоборот. Понадобится возможность расширения перечисляемого типа (как правильно его расширить?), и понеслось. Если смотреть на это с позиции баланса между перечислениями и сложностью (у введения перечислимого типа есть как свои достоинства, так и недостатки), то я бы выбрал более простой подход, как в Обероне. Хотя если бы в КП были перечислимые типы — я бы конечно ими пользовался. Дело за малым — добавить их. Работка не пыльная, как раз для тебя. Предлагаю заняться, вот и будет конструктив, полюбэ лучше, чем ныть об отсутствии перечислимых типов. ;)

geniepro писал(а):
Если новичок в программировании изучает оберон, то он просто даже и понять не сможет, чего он лишается, и будет плодить говнокод -- нетипизированные константы вместо перечислений, иерархии записей или прямо работу с адресами в памяти вместо цивилизованных объединений.
Новичок в программировании не будет работать напрямую с памятью. Оберон его оберегает от этой стадии. Да и с чего бы новичку плыть против течения, он же не Вирт. ;) Впрочем, это надо обсудить детально, вынес в отдельную тему.

geniepro писал(а):
Вирт просто как серпом прошёлся по яйцам своего языка...
Это он серпом прошёлся по 07. ;) А народ понимает что к чему, поэтому появился КП.

geniepro писал(а):
Такой путь просто противоречит духу строгой статической типизации -- переносить обнаружение ошибок в программах на как можно более ранние стадии разработки программы.
Вместо того что бы компилятор заявил программисту что он пихает не то что нужно не туда куда нужно, программист вынужден заниматься нудным тестированием, которое по определению не способно обнаружить все ошибки в программах.
Вообще если грамотно всё делать — этап тестирования сводится практически к нулю. На Обероне это расстановка ASSERT'ов, да Оберон и сам помогает выявить такие вещи всеми силами, ты просто на нём не работал, поэтому и не имеешь опыта. Так сказать, не знаешь о чём говоришь. :)

geniepro писал(а):
Вирт сделал шаг от статической типизации к динамической, и это, имхо, глубоко неверный путь.
Моё имхо: Вирт же чует куда ветер дует. Если люди делают низкоуровневые движки и используют для кодирования логики встраиваемые скриптовые языки, то Оберон здесь может предложить кое-что получше. Один язык — на всех уровнях работы. А как этого достичь без динамической типизации, которую, кстати, тебя под дулом пистолета никто не заставляет пользовать? :) Рассматривай её просто как возможный языковой бонус.

geniepro писал(а):
о_О это какие же средства структурного программирования вырезали из Явы???
Элементарно. Процедуры без объектов. Ах да, там же объекты вместо модулей, процедуры кагбэ и пихать больше некудыть, да-с? ;)

geniepro писал(а):
3. Разработка программы ведётся пошагово, методом «сверху вниз».
Насчёт этого пункта я не уверен, точно знаю что в Обероне это требование структурного программирования не реализовано, а, скажем, в С# или в Хаскелле оно есть.
Ну это вы гоните, батенька. ;)

geniepro писал(а):
Алгол-68 просто красивый язык, имхо, куда красивее того же Оберона
:shock:

Алгол-68 по всяким извращениям и неявностям переплюнул не только Си, но даже Perl! Бр-рр. Свердлова почитай хотя бы. Ох уж эта мне привычка оценивать языки "умозрительно". Поработал бы хоть на Обероне, потом критиковал бы (НЕ 07!)

geniepro писал(а):
Но для своего времени это был впечатляющий язык.

Виртовский Алгол — впечатляющий язык. 68 же это уродище, если не сказать грубее!

geniepro писал(а):
Пролог меня когда-то впечатлял, но, к сожалению, не понадобился -- слишком уж он специфичен...
Ну как для меня Хаскел. ;)

В Прологе есть очень интересный механизм логического вывода из набора правил (предикатов). Это на порядок отличает Пролог от других способов организации данных. Тем и ценен, надо осваивать подход.

geniepro писал(а):
Самым качественным универсальным императивным языком я считаю Аду, но по своей работе предпочитаю С# -- при его недостатках он, в принципе, вполне устраивает, учитывая что мне приходится не в одиночку программы писать. Аду мало кто знает, а учить что-то новое -- ещё меньше кто хочет, увы...
А в Аде на уровне языковых механизмов нету динамической модульности а-ля Оберон. Плюс соединять её с традиционными средствами это ещё та петрушка. Так что лучше КП в плане баланса языковых средств и совершенной модульности ничего я ещё не видел.

geniepro писал(а):
Эрланг, возможно, самый простой язык из практичных языков, применяющихся в индустрии.
Вот не уверен я, что он так практичен...

geniepro писал(а):
На Обероне просто в принципе недостижим тот уровень надёжности софта, что достигнут в Эрланге -- 99.999% и более. Значит, всё-таки всё нормально с его мировозрением...
А чем ты мерял надёжность софта в процентах? Глюкометром? ;)

geniepro писал(а):
Возможно, со времени написания статьи произошли изменения в языке. Это, конечно, недостаток, но оберонщикам ли жаловаться на изменения в языке?
У Компонентно-Паскалистов с этим порядочек. :)

geniepro писал(а):
В Хаскелле, кстати, средства построения eDSL также как и в Форте позволяют сделать встроенный ассемблер, или Бейсик, например...
Чудо, просто чудо. Ещё бы соединить его как-то безшовно с моей деятельностью. И блямбы поубирать нафиг с кракозяблами. Впрочем, нужно ли это. Я эксель запускаю не чаще пары раз в год, бог миловал. Мне ли учиться мыслить эксельно "Thinking in excel"? ;)

geniepro писал(а):
Да кто же сказал, что я его игнорирую? Потихоньку использую там где нужно. Правда, не на форте, лиспе или немерле с хаскеллем, а в сях -- когда надо делаю макросы, "расширяю язык" )))
Ну блин, макросам Си до возможностей Форта — как до луны. :) Но при этом у Форта свои недостатки, которые я когда-то пытался исправить в своём собственном языке COLOSS, но особых успехов не достиг, поэтому переключился на Оберон. Неидеальный Оберон.

geniepro писал(а):
У форта проблема в том, что в стандарте языка не прописаны стандартные средства создания структур данных, статической типизации и прочего. Это можно сделать, и кто-то делает, и получается что в разных форт-проектах используются разные по сути языки на основе форта. Хорошо ли это? Спорный вопрос...
Да, вот именно. Это проблема. Когда каждый производитель начнёт изобретать свои стандарты на сетевую вилку и коммутацию с наушниками. Гораздо лучше, если они договорятся. Выиграет потребитель. Но почему электронщики могут договориться, а программисты-коммерсанты, мать их так, нет? :shock:

geniepro писал(а):
А то что под твои любимые ретроплатформы программы пишет ничтожное количество людей -- вряд ли ты сам будешь отрицать этот факт...
Однако мне приятно, когда выбранное мною средство позволяет заточить его под ретро моими скромными силами. Это придаёт уверенность в правильном выборе. Ну вот Аду я мог бы заточить под Спектрум? Или C#? Ой, вряд ли. Но ретро здесь не самоцель. Ретро мерило, что средство пригодно ещё на кое-что, кроме затыкания дыр и написания бизнес-логики. Мелочь, блин, а приятно. ;)

geniepro писал(а):
Ох и любишь же ты простыни текста писать... )))
А ты пиши так, чтобы я вообще не отвечал, сэкономим друг другу время. ;) Но мне вообще лестно, что ты из всех местечек в инете выбрал для общения именно наш форум, а в качестве собеседника — именно меня. Тешит самолюбие то, что приятный я собеседник, видимо. :lol:

Ты расскажи лучше как в парадигме ФП решается проблема межъязыкового взаимодействия. ;) Ведь идеального языка-то нет, надо стыковать? ;)


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 08 янв 2014, 14:42 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Про "парадокс Блаба". Кстати, именно из-за него ты ниасилил Пролог и Форт, так что проблема имеет место! ;)

"Я пользую мощные инструменты программирования, очень мощные. Они мощные, мощные, мощные. Все, кто не хочет на них переходить, — полные уроды".

Мантра. Повторять для релаксации не меньше ста раз в сутки. ;) Короткий вариант "я круче тучи" тоже сгодится. ;)

Парадокс Жени Про. Есть люди, которые в упор не понимают недостатков "более эффективных инструментов программирования", которые они несут в своей кошёлке наряду с достоинствами. И не хотят понимать, хоть их носом тычь в это. Остаётся удивляться и драматизировать. ;)

Ахтунг! У нас здесь внештатные сотрудники ms занимаются скрытой рекламой своей продукции! ;)


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 09 янв 2014, 09:47 
Не в сети

Сообщения: 203
Zorko писал(а):
Перечисления и объединения есть в Модуле-2 и M2R10. :) А могут быть добавлены и в Оберон, если они понадобятся. Пока обхожусь.
...
Хотя если бы в КП были перечислимые типы — я бы конечно ими пользовался. Дело за малым — добавить их. Работка не пыльная, как раз для тебя. Предлагаю заняться, вот и будет конструктив, полюбэ лучше, чем ныть об отсутствии перечислимых типов. ;)
То есть ты предлагаешь расширять язык, изменяя компилятор? И при этом ты сам же признаёшь, что у расширяемых языков типа Форта есть проблемы. Так твоё расширение добавляет к этой проблеме ещё одну -- появляется привязка к конкретной версии конкретного компилятора.

Zorko писал(а):
Смотри во что может обойтись перечислимый тип. Просто перечислением всех констант в одном блоке (с запретом использовать их как числа и неявным присваиванием им значений (от 0 до N, да? Или как в Си — чтобы можно было задавать произвольные значения? Это ещё сильнее усложнит механизм)) тут не обойдёшься. Обязательно понадобятся механизмы перевода перечислимого типа в числовой и наоборот.
В сишарпе это сделано без каких-либо проблем, использовать вполне удобно. Зато чуть где накосячишь с перечислимыми -- компилятор тут же по рукам стучит.

Zorko писал(а):
Понадобится возможность расширения перечисляемого типа (как правильно его расширить?), и понеслось.
Что ты имеешь в виду под расширением перечисления? Просто добавление новых вариантов? Какие тут проблемы? Ну добавил, перекомпилировал, где надо -- добавил обработку новых вариантов. Всё просто.
Или ты имел в виду возможность расширяемых перечислений типа как расширяемые записи? Я вот не сталкивался с нуждой в таких расширяемых перечислениях, хотя, говорят, кому-то они нужны. Хотелось бы увидеть реальный пример такой нужды...

Zorko писал(а):
geniepro писал(а):
Вирт просто как серпом прошёлся по яйцам своего языка...
Это он серпом прошёлся по 07. ;) А народ понимает что к чему, поэтому появился КП.
Давай определимся. Во-первых, такого языка как 07 (или Оберон-07) нет, это всего лишь одна из модификаций языка Оберон.
Так же как С++ 85-г, С++98 и С++11 -- это всего лишь разные версии одного и того же языка С++, так и Оберон-07, Оберон-11, Оберон-13 -- это всего лишь версии языка Оберон. Хотя, конечно, в репорте от 2007г появились значительные изменения по сравнению с предыдущим репортом.

Во-вторых, от того что Вирт постоянно кастрирует Оберон (хоть и не до конца последовательно -- всякие PACK/UNPK всё никак не выкинет) этот язык не перестаёт быть пригодным для той задачи, для которой Вирт его создал -- для реализации однозадачной однопользовательской ОС ETH Oberon. Последняя её инкарнация реализована на этом вот кастрате под виртовский FPGA-процессор Ceres-4...

Zorko писал(а):
geniepro писал(а):
Такой путь просто противоречит духу строгой статической типизации -- переносить обнаружение ошибок в программах на как можно более ранние стадии разработки программы.
Вместо того что бы компилятор заявил программисту что он пихает не то что нужно не туда куда нужно, программист вынужден заниматься нудным тестированием, которое по определению не способно обнаружить все ошибки в программах.
Вообще если грамотно всё делать — этап тестирования сводится практически к нулю. На Обероне это расстановка ASSERT'ов, да Оберон и сам помогает выявить такие вещи всеми силами, ты просто на нём не работал, поэтому и не имеешь опыта. Так сказать, не знаешь о чём говоришь. :)
Каким образом ассерт поможет тебе обнаружить баг в программе для устройства, которое не имеет права останавливаться в случае ошибки? Ассерт -- бабах! -- HALT!!! И ракета пролетела мимо нужной планеты, упала на солнце...

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

Zorko писал(а):
geniepro писал(а):
о_О это какие же средства структурного программирования вырезали из Явы???
Элементарно. Процедуры без объектов. Ах да, там же объекты вместо модулей, процедуры кагбэ и пихать больше некудыть, да-с? ;)
В требованиях к стурктурному программированию нигде не сказано, что должны иметься свободные процедуры. Так что тут ООП не противоречит структурному программированию...

Zorko писал(а):
geniepro писал(а):
3. Разработка программы ведётся пошагово, методом «сверху вниз».
Насчёт этого пункта я не уверен, точно знаю что в Обероне это требование структурного программирования не реализовано, а, скажем, в С# или в Хаскелле оно есть.
Ну это вы гоните, батенька. ;)
В последней версии Оберона Вирт выкинул даже прототипы процедур (интересно, а как сделать в таком случае взаимнорекурсивные процедуры? Разносить их по разным модулям???), так что он ещё сильнееухудшил приспособленность его языков к разработке методом "сверху-вниз". Теперь на Обероне возмножно только создание программ методом "снизу--вверх" -- сначала пишем процедурки самого нижнего уровня, затем -- процедуры более высокого уровня, и, наконец, где-то глубоко внизу модуля находятся процедуры верхнего логического уровня.
Это сильно отличается от того, что возможно в Хаскелле или сишарпе...

Zorko писал(а):
geniepro писал(а):
Алгол-68 просто красивый язык, имхо, куда красивее того же Оберона
:shock:

Алгол-68 по всяким извращениям и неявностям переплюнул не только Си, но даже Perl!
Когда появился Алгол-68 никакого перла ещё не было, да и си только-только появился, практически неизвестен был. Так что это си и перл недоплюнули алгола-68 )))

Zorko писал(а):
geniepro писал(а):
На Обероне просто в принципе недостижим тот уровень надёжности софта, что достигнут в Эрланге -- 99.999% и более. Значит, всё-таки всё нормально с его мировозрением...
А чем ты мерял надёжность софта в процентах? Глюкометром? ;)
Есть же простая метрика -- сколько времени софт не работает. 5 девяток -- это 5 мин 16 сек в нерабочем состоянии за год.
В самом известном примере на Эрланге (ATM-коммутатор AXD301) за несколько лет после установки в 2002г произошла лишь одна незначительная неполадка (расчётная надёжность получилась 99,9999999%). Более реальные оценки -- 5 девяток...

Zorko писал(а):
geniepro писал(а):
Возможно, со времени написания статьи произошли изменения в языке. Это, конечно, недостаток, но оберонщикам ли жаловаться на изменения в языке?
У Компонентно-Паскалистов с этим порядочек. :)
И ты предлагаешь по каждому чиху нарушать этот порядок, внося свои недокументированные изменения в компилятор, когда тебе это потребуется? о_О

Zorko писал(а):
geniepro писал(а):
Да кто же сказал, что я его игнорирую? Потихоньку использую там где нужно. Правда, не на форте, лиспе или немерле с хаскеллем, а в сях -- когда надо делаю макросы, "расширяю язык" )))
Ну блин, макросам Си до возможностей Форта — как до луны. :)
Макросов Си вполне хватает что бы дополнять язык новыми конструкциями типа "цикла Дейкстры" не влезая в исходники компилятора. А Оберонщикам пришлось ждать этого ЦД много лет, да и то это им не сильно помогло, ведь этот цикл так и не попал из Оберона в КП...

Zorko писал(а):
Но при этом у Форта свои недостатки, которые я когда-то пытался исправить в своём собственном языке COLOSS, но особых успехов не достиг, поэтому переключился на Оберон. Неидеальный Оберон.
Посмотрел я на твои исходники на Coloss'е -- ужаснулся. Это же надо добровольно обфусцировать свой программный код и быть довольным этому! Неудивительно, что для тебя Оберон показался верхом совершенства -- на фоне форта и колосса это нетрудно...

Zorko писал(а):
geniepro писал(а):
У форта проблема в том, что в стандарте языка не прописаны стандартные средства создания структур данных, статической типизации и прочего. Это можно сделать, и кто-то делает, и получается что в разных форт-проектах используются разные по сути языки на основе форта. Хорошо ли это? Спорный вопрос...
Да, вот именно. Это проблема. Когда каждый производитель начнёт изобретать свои стандарты на сетевую вилку и коммутацию с наушниками. Гораздо лучше, если они договорятся. Выиграет потребитель. Но почему электронщики могут договориться, а программисты-коммерсанты, мать их так, нет? :shock:
И ты ещё предлагаешь модифицировать исходники компилятора, когда захочется добавить нужную фишку???


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

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


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

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


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club