Re[35]: Оберон круче всех!
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.07.12 04:47
Оценка:
Здравствуйте, vdimas, Вы писали:
V>Еще раз, для ЯВУ Оберона есть редакторы с полной подсветкой. Вот только что запустил линуховую виртуалку и открыл в ней среду Kate с нужными настройками:
V>
V>Это не текстовый терминал "унутре" среды (а там есть и такая возможность), это просто я нашел TTF-версию комфортного мне шрифта и везде ставлю его по-умолчанию.
Я правильно понимаю, что в этом варианте никакого "гипертекста" и ручной раскраски уже нет?
То есть мой тезис про ценность ручного раскрашивания кода таки подтвердился. Спасибо.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[50]: Оберон круче всех!
От: vdimas Россия  
Дата: 25.07.12 06:42
Оценка:
Здравствуйте, Sinclair, Вы писали:


S>>>А кто проверяет эти security — артефакты, передаваемые в виде аргументов?


V>>Легче спросить — откуда они берутся. Проверяет их пусть софт из того самого "пояса безопасности", организующего системное АПИ.

S>Ок, заодно расскажите, откуда они берутся. А то я, похоже, чего-то фундаментального не понимаю.

А как это организованно в виндах, понимаешь? Ну, чтобы я лишнего не писал.

S>Также, как и того, каким волшебным образом софт из "пояса безопасности" вдруг получит возможность что-то там проверить.


Он должен содержать код проверки, ес-но. Сама по себе из воздуха безопасность не возьмется.

S>Вот у меня "модуль" А вызывает метод объекта из "модуля" B. Допустим, это метод WebRequest.Send(). Как будет осуществляться проверка того, что модулю А можно разрешить эту операцию?


Есть т.н. "политика безопасности". Эта политика — список из десятков/сотен пунктов, по кажому из которых что-то прописано ("можно", "нельзя", "можно только локальному пользователю" и т.д.). См настройку политики в тех же виндах. Любая функциональность, попавшая в пункты из политики, хочешь или нет, должна войти в пояс безопасности.

Конкретно насчет WebRequest.Send(), артефакты безопасности будут переданы при вызове ниже и где-то будет просто уровень TCP-стека, к которому относятся несколько пунктов из политики и которые (эти пункты) будут проверяться в соотв, вызовах TCP. Т.е. модули, отвечающие за сетевой уровень, должны будут попасть внутрь пояса безопасности.

В общем, какая-то часть системного кода должна быть доверенной всё-равно. Должна быть некая точка опоры, от которой мы отталкиваемся. Так вот, остальное меня интересует только с т.з. хакнуть эту систему. Слабые места в ней тоже есть. Причем, слабость этих мест (оп-па!!!) не зависит от того, будет ли злонамеренный модуль изолированным процессом или модулем в общем объектном пространстве. Т.е. вот почему мне эта изолированность не принципиальна, — алгоритмы взлома одни и те же. Факт изолированности имеет значение только в том смысле как говорил Вольфхаунд, например из-за возможности гонок и порчи памяти из-за них. Но, ИМХО, гонки можно выявлять еще на этапе компиляции. А потом еще раз (для надежности) на этапе загрузки байт-кода.
Re[36]: Оберон круче всех!
От: vdimas Россия  
Дата: 25.07.12 06:50
Оценка:
Здравствуйте, Sinclair, Вы писали:

V>>Это я свои реакции вообще-то анализировал. Как бэ право имею, да и реакции были на рекламу технических моментов.

S>Ваша психология тоже здесь никого не интересует. Как и то, почему вы воспринимаете технические обсуждения за рекламу.

Э нет, коллега, есть такое дело, как объективная реальность. Если ты убедительно говорил о том, что будет, и при этом позже шли отчеты о поездках на семинары и общение с инсайдерами и ключевыми разработчиками, то изрекаемое тобой воспринималось как информация о продукте, в т.ч. когда речь шла о будущем направлении развития продукта. Подаваемая исключительно в положительном ключе информация о характеристиках продукта является рекламой по-определению, нравится тебе оно или нет. Так вот, упс в том, что всё это подаваемое на самом деле информацией не являлось, а являлось результатом деятельности твоего мыслительного аппарата, то бишь было сугубо твоим ИМХО. Просто ты регулярно забывал и забываешь упоминать эту важную особенность подачи т.н. "информации" в твоих постах. Вот и всё кино.
Re[36]: Оберон круче всех!
От: vdimas Россия  
Дата: 25.07.12 06:57
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Я правильно понимаю, что в этом варианте никакого "гипертекста" и ручной раскраски уже нет?

S>То есть мой тезис про ценность ручного раскрашивания кода таки подтвердился. Спасибо.

Дык это и не полноценная IDE для Оберона. Это просто редактор с раскраской под мильон языков и возможностью настроить запуск внешнего toolchain на сборку или отладку. Поддержка автокомплита у этой среды идет через внешний тул CTags, а там список языков поскромнее (порядка 40-ка языков). Модула-2 и Оберон в него не входит, т.е. для этих языков есть только поддержка раскраски в IDE.
Re[38]: Оберон круче всех!
От: vdimas Россия  
Дата: 25.07.12 07:06
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Только сейчас заметил, что на картинке не учтено, что у меня высокий DPI — на обычных мониторах текст будет выглядеть слишком большим.


Дело не в DPI, сам рендеринг шрифта кривой. Несимметричные исходно симметричные буквы, неравномерное расстояние м/у буквами, съезжающий со знакоместа курсив. В общем, как рендеринг шрифтов там еще настраивать и настраивать, так и сам шрифт стоит подобрать тщательнее... Глаза — это важный рабочий инструмент нашего брата. ))
Re[11]: Оберон круче всех!
От: vdimas Россия  
Дата: 25.07.12 07:21
Оценка:
Здравствуйте, vdimas, Вы писали:

Очепятка

V>
V>// algorithm node 2
V>SomeObject o = MakeObject(data);
V>astNodes.add((/*o*/)=>listener.process(o));
V>
Re[41]: Оберон круче всех!
От: WolfHound  
Дата: 25.07.12 07:28
Оценка: +1
Здравствуйте, vdimas, Вы писали:

V>Кто тут читать не умеет видно невооруженым взглядом.

Я думаю тут это уже всем видно.

V>Только что была расписана полная семантика. Давай, попробуй опровергнуть без отсылки к вики и прочим неопределенноличнымикиваниями головы в разные стороны. Попкорном я уже запася.

Попробуй написать атомарный
readMVar :: MVar a -> IO a
Если это изменяемая переменная с синхронизацией код будет простым.

Если бы все было, так как ты говоришь, то там была бы одна базовая операция.
modifyMVar :: MVar a -> (a -> IO (a, b)) -> IO b

V>И сейчас нихтферштейн?

Ты точно не понимаешь семантику этого дела.
И почему это крайне сложно привести к разделяемому ресурсу.

V>Угу, как и на альфа-бленде простые вещи вызывают сложности и удивление.

Ты так и не понял что такое альфа бленд.
И почему при бленде остальных каналов нужно использовать не только альфу, с которой происходит смешивание, но и альфу обоих пикселей?

V>Тот факт, что сделали ф-ию, в которой ресурс не только блокируется, но сразу и читается (что естественно в ф-ом языке), а при разблокировке наоборот, на твой взгляд наделяют всю систему какими-то магическими свойствами? Сорри, но второй раз твое удивление при ознакомлении с новым материалом меня не заинтересует.

В том то и дело что тут у нас совершенно иная семантика.
Но ты в очередной раз показываешь, что не в состоянии выделить модель.

V>А с помощью важных слов можно эмулировать умственную деятельность.

Ты тут этим и занимаешься.

V>Это з каробки такая функциональность и есть — переменная с локом. Другое дело, что интерфейс к этой переменной, судя по твоей реакции, не такое как ты привык... Дык, поменьше бы сидел на дотнете, побольше бы смотрел по сторонам, как сейчас делают межпотоковый обмен. Не было бы для тебя ничего нового.

Напиши readMVar :: MVar a -> IO a
А я посмеюсь.

V>Это всего лишь фантазия авторов, как бы они хотели это назвать. Ну, чтобы прикрыть свой срам императивный характер привнесенного расширения. Но нас не проведешь.

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

V>Ну ты, я вижу, почитал и просветлился. Поздравляю с новым знанием. День прошел не зря. )))

V>А я эту кухню был в курсе когда ты еще в школе учился.
Ты не смог проанализировать одну строку документации.
Все твои выводы мусор.

V>Ну, если формула Альфа бленда вызывает сложности и получаются картинки с видимыми на невооруженный глаз искажениями, как ты показал, то таки да... с чтением простейшего материала у кого-то бааальшие проблемы. Могу спорить на что угодно, что в ВУЗе ты безбожно прогуливал.

Это у тебя большие проблемы.
Ибо я сразу сказал что картинка с искажениями получена при использовании формулы которая считает альфаканал равноправным. И смешивает все каналы независимо друг от друга.
Картинка без искажений получена при использовании правильной формулы. Которая при смешивании цветовых каналов использует альфу обоих пикселей.

V>Это не возражение, а ругань. Избрази AWAIT из Оберона в тех же координатах.

Сам изобрази.
Я гору кода писать не хочу.

V>Здесь расписана семантика conditional variable, которая обыгрывается в 90% видимых мною семантик ключевого слова await из различных языков или их расширений.

Твоя не способность понять что происходит в двух строках кода просто поражает.

V>Смешно что ты даешь ссылку, которую не понимаешь. Прямо как про обработку изображений.

Не суди по себе о других.

V>И да, как именно в функциональном стиле организуется последовательность операций разбирали неоднократно. Ищи на этом сайте, повторяться не буду.

Обычно монадами.
Просто заводят эстафетную палочку, которую передают ее от операции операции. В ней накапливаются все побочные эффекты. А всякие там MVar с точки зрения программы неизменяемые значения.
Но на физическом уровне (уже после всех оптимизаций проводимых над чистой программой) происходит магия.
Это позволяет с одной стороны языку оставаться чистым, а с другой стороны иметь строгий порядок выполнения операций там, где оно надо.

V>Наездом это не является, эта монада — банальное выпрямление порядка происходящего. Характерно, что в Хаскеле такая монада не просто задает порядок вычислений но и автоматически разрешает побочные эффекты, то бишь вносит императивность над мутабельным сотсоянием. Упссс... а вот этого ты и не заметил.

Это ты не заметил, что эта монада и есть твои континюэйшены о которых ты говоришь, что они все из себя функциональные.
И то, что использование этой монады будет выглядеть точно так же как использование монады IO.
Ну, просто буква в букву. Только IO будет заменено на Cont.
Монада IO, кстати, тоже вполне себе функциональна.

V>Ты еще не расчитался за мороку головы насчет альфа. Там испарился, здесь возник. Давай ты поступишь наоборот, справедливости ради.

Я просто уже устал повторять, что там нет проблем с гаммой. Там проблемы с тем, что каналы смешивались независимо.
Но ты не в состоянии это понять.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[32]: Оберон круче всех!
От: Klapaucius  
Дата: 25.07.12 08:21
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Легко: VB, VB.Net, Java, C++, C# — близнецы-братья паскалю с объектными расширениями.


То, что они "близнецы" — это серьезное преувеличение. Но в любом случае это не ответ на мой вопрос. Потому, что паскаль сам состоит из заимстований — ничего придуманного Виртом в нем нет. Объектные расширения тоже не Вирт придумал.

V>Другие приводимые языки, типа Лиспа, SmallTalk, Симулы и т.д. настолько из другой оперы, что авторы указанных языков себе явно льстят, когда ссылаются на них.


Ну да, Симула теперь "из другой оперы", хотя это, фактически, Алгол 60 + "мейнстримный" ООП. Под катом пример кода для людей без доступа к википедии:
  Скрытый текст
Begin
   Class Glyph;
      Virtual: Procedure print Is Procedure print;;
   Begin
   End;

   Glyph Class Char (c);
      Character c;
   Begin
      Procedure print;
        OutChar(c);
   End;

   Glyph Class Line (elements);
      Ref (Glyph) Array elements;
   Begin
      Procedure print;
      Begin
         Integer i;
         For i:= 1 Step 1 Until UpperBound (elements, 1) Do
            elements (i).print;
         OutImage;
      End;
   End;

   Ref (Glyph) rg;
   Ref (Glyph) Array rgs (1 : 4);

   ! Main program;
   rgs (1):- New Char ('A');
   rgs (2):- New Char ('b');
   rgs (3):- New Char ('b');
   rgs (4):- New Char ('a');
   rg:- New Line (rgs);
   rg.print;
End;

V>Взять те же паттерны из GOF — они ровно для этой группы языков. Ни Лиспу ни SmallTalk эти паттерны и даром не сдались, у тех свои паттерны.

Наверное поэтому в книжке GOF есть примеры на некоем марсианском языке:

createMaze: aFactory 
        | room1 room2 aDoor | 
        room1 := (aFactory make: #room) number: 1. 
        room2 := (aFactory make: #room) number: 2. 
        aDoor := (aFactory make: #door) from: room1 to: room2. 
        room1 atSide: #north put: (aFactory make: #wall). 
        ...


Вот это он и есть — Смолток.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[17]: Оберон круче всех!
От: Klapaucius  
Дата: 25.07.12 08:47
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Автор Хаскеля


Который из 256?

V>разразился статьей


Тут, по идее, должна была быть ссылка на статью.

V>о том, что коль нам приходится эмулировать императивность в функциональном языке


Ее там не нужно "эмулировать". Там есть самые настоящие изменяемые ссылки и массивы — без всякой эмуляции.

V>и в этой императивности повторимы в точности все побочные эффекты, то никакого смысла делать так на самом деле нет


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

V>Вот тебе результаты всех экспериментов — возвращение на круги своя.


Что и куда вернулось?

V>Потому что моделиировать модель над моделью оказалось излишним.


У моделирования модели над моделью тоже своя ниша есть, но не хотите — не моделируйте. никто не заставляет.

V>Ссылочная прозрачность на основе типобезопасности дает точно такой же эффект контроллируемой мутабельности.


А мы о чем сейчас говорили?

V>А что непонятного? Процесс математических вычислений легко ложится на функциональную чистоту, OK, но последующее полезное использование этих вычисленных данных должно сопровождаться побочными эффектами. Например, с целью сохранить результат вычислений. См. выделенное.


Ну так это же и хорошо. Потому, что ФП существует в том числе и для решения проблем с сайд-эффектами.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[42]: Оберон круче всех!
От: vdimas Россия  
Дата: 25.07.12 09:19
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Если бы все было, так как ты говоришь, то там была бы одна базовая операция.

WH>modifyMVar :: MVar a -> (a -> IO (a, b)) -> IO b

Вот это и есть тдодумывание за оппонента. Я просто хотел, чтобы ты самолично об этом сказал, без юлений и намеков. Спасибо, это более деловой подход. Я теперь хоть смогу возразить по-существу.

Я тоже за тебя додумал, есть такое... но я-то оказался прав, считая, что переменую с локом ты обслуживаешь как-то так (C#):
lock(mutext) {
  resource = value;
 // return resource;
}


А всю твою реакцию здесь можно назвать удивлением, что это может быть не так, как ты привык.

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

V>>И сейчас нихтферштейн?

WH>Ты точно не понимаешь семантику этого дела.
WH>И почему это крайне сложно привести к разделяемому ресурсу.

Ей-богу, ты натурально запарил своей мантрой "ты точно не понимаешь". Давай прямо здесь и сейчас с ней покончим.

Я могу что-то понимать не так как ты, ес-но. Но постоянно забавным выходит то, что я прекрасно понимаю, что именно понимаешь ты, а вот что понимаю я — для тебя темный лес. Первый абзац этого поста был честен с твоей стороны и хорошо показал, что ты НЕ понимаешь, что имено я понимаю. Не утомил еще? ))) В общем, пока ты действительно не воткнешь мою т.з., обвинять меня в непонимании как минимум преждевременно.

Итак, я уже дал все подсказки. Могу повторить:
1. Что такое разделяемый ресурс? Для чего он вообще нужен.
2. Что такое передача данных м/у потоками через разделяемый ресурс?

Для ответа на этот вопрос можно взять любой самый простой язык программирования (C#, например, чтобы все стороны могли легко верифицировать решение), и я прошу тебя нарисовать п.2 через п.1. Если правильно нарисуешь, увидишь кое-какую важную вещь, которая объясняет вообще всё. И тут же поймешь, что именно понимаю я. И почему, когда речь о разделяемом ресурсе, твое предыдущее представление о переменных с локом НЕ работают. Вернее, работают, ес-но, но очень и очень неэффективно. Кстати, если нарисуешь полноценный п.2. через lock(mutex) {}, то увидишь причину неэффективности.

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

Ну а потом как приз могу изобразить аналогичное в lock-free манере, если будет любопытно. (Тут полу-lock-free, точнее, но будет всяко эффективней классическкого варианта)
Re[14]: Оберон круче всех!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.07.12 09:51
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Ну тогда предположу специфику — огромное кол-во типов узлов AST.


Не было там никакого огромного количества. Десятка два может. Проблема не в типах узлов, а в том что в CLR уже есть готовая система примитивных типов и полиморфных операций над ними, а в интерпретаторе это все нужно было сочинять самостоятельно. Сейчас с DLR, наверное, будет уже попроще.
... << RSDN@Home 1.2.0 alpha 5 rev. 52 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[11]: Оберон круче всех!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.07.12 09:59
Оценка:
Здравствуйте, vdimas, Вы писали:

AVK>>Что такое SomeAbstractValue?


V>Это тот самый абстрактный тип, который ты задал по условию.


Я тип — не задавал. Я привел только входные требования к нему.

V> Это либо алгТД


Круто. То есть в качестве примера замены ФлгТД на тру ООП решение ты приводишь код с использованием АлгТД.

V>, либо ОО-интерфейс посещаемой стороны в визиторе


Т.е. таки визитор. Объем писанины в случае АлгТД и визитора сравнивать будем?

V>. По тому факту, какой именно элемент ты наградил абстрактностью, я понял о каком общем виде дизайна идет речь.


Я никакого дизайна не приводил. Я попросил тебя привести дизайн.

V> Внутри в конкретных ветках алоритма, там, где ты ранее создавал значения конкретных типов и упаковывал их в абстрактные типы


Я ничего такого не делал и не писал об этом.

V>Например:

V>
V>// algorithm node 1
V>string s = MakeString(chars, offset, length);
V>listener.process(s);
V>..
V>// algorithm node 2
V>SomeObject o = MakeObject(data);
V>listener.process(o);
V>...
V>


V>
V>class Listener {
V>  public void process(string s);
V>  public void process(SomeObject o);
V>...
V>}
V>


Ну наконец то. Теперь сравни с АлгТД.

V>С учетом этого:

V>

AVK>>Опять ничего не понятно.

V>Даже мало, походу.

Нет, много и не по делу.

V>Я просто понятия не имею с какого уровня подробностей надо что-то объяснять.


Пинцет. Show me your code!!!

V>Заметь, все эти poll-варианты являются вариациями, близкими к визитору по сути происходящего


Хуже то, что они являются его аналогами по объему писанины. И если у тебя хотя бы 5-6 типов значений, то это более менее оправдано, а вот если их 2-3, то это стрельба из пушки по воробьям. При этом АлгТД практически идеальное решение подобных задач.
... << RSDN@Home 1.2.0 alpha 5 rev. 52 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[39]: Оберон круче всех!
От: Cyberax Марс  
Дата: 25.07.12 10:25
Оценка:
Здравствуйте, vdimas, Вы писали:

V>>>В современных редакторах это выглядит намного лучше:

C>>Точно. А для Оберона — ниасилили.
V>И не осилят...
V>У них компоненты миниатюрного размера.
Обычно этот размер тождественно равен нулю. Так как код на Обероне не пишут.
Sapienti sat!
Re[43]: Оберон круче всех!
От: WolfHound  
Дата: 25.07.12 10:32
Оценка: +1
Здравствуйте, vdimas, Вы писали:

V>Всё проще. Помнишь я тебе говорил когда-то, какой примитив синхронизации является базовым? Предположи, сколько этих базовых примитивов синхронизации обслуживают логику MVar. Почему именно так?

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

Но что характерно ты так и не предоставил мне решение одной простой задачки.
Короче напиши readMVar или засчитываю слив.
Авторам библиотеки удалось лишь с такой оговоркой.

This function is atomic only if there are no other producers (i.e. threads calling putMVar) for this MVar.

Попробуй понять почему.

Плюс тебе еще задачка сделать await. На данных примитивах будет просто гора кода.
И я даже не уверен, что его можно сделать с одной MVar.

Всю свою демагогию про продолжения ты тоже, что характерно слил.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[51]: Оберон круче всех!
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.07.12 11:35
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, Sinclair, Вы писали:



S>>>>А кто проверяет эти security — артефакты, передаваемые в виде аргументов?

V>А как это организованно в виндах, понимаешь? Ну, чтобы я лишнего не писал.
Нет. Можно ссылку на MSDN?


V>Конкретно насчет WebRequest.Send(), артефакты безопасности будут переданы при вызове ниже и где-то будет просто уровень TCP-стека, к которому относятся несколько пунктов из политики и которые (эти пункты) будут проверяться в соотв, вызовах TCP. Т.е. модули, отвечающие за сетевой уровень, должны будут попасть внутрь пояса безопасности.

Что такое "внутрь"? Я правильно понимаю, что для вызова WebRequest.Send() мой прикладной модуль должен будет иметь у себя в "артефактах безопасности" пункты, разрешающие TCP/IP?
Если да — то это, простите, дыра.

V>В общем, какая-то часть системного кода должна быть доверенной всё-равно. Должна быть некая точка опоры, от которой мы отталкиваемся.

Вопрос — какая именно часть кода у вас доверенная. Вот, скажем, драйвер GSM-модема от 3rd-party — он доверенный или нет?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[37]: Оберон круче всех!
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.07.12 11:37
Оценка: :)
Здравствуйте, vdimas, Вы писали:

V>Э нет, коллега, есть такое дело, как объективная реальность. Если ты убедительно говорил о том, что будет, и при этом позже шли отчеты о поездках на семинары и общение с инсайдерами и ключевыми разработчиками, то изрекаемое тобой воспринималось как информация о продукте, в т.ч. когда речь шла о будущем направлении развития продукта. Подаваемая исключительно в положительном ключе информация о характеристиках продукта является рекламой по-определению, нравится тебе оно или нет. Так вот, упс в том, что всё это подаваемое на самом деле информацией не являлось, а являлось результатом деятельности твоего мыслительного аппарата, то бишь было сугубо твоим ИМХО. Просто ты регулярно забывал и забываешь упоминать эту важную особенность подачи т.н. "информации" в твоих постах. Вот и всё кино.

Коллега, способы действия вашего и моего мыслительного аппаратов я обсуждать здесь не намерен. Я достаточно понятно пишу слово "оффтоп", или оно должно быть капсом?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[37]: Оберон круче всех!
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.07.12 11:38
Оценка: :)
Здравствуйте, vdimas, Вы писали:

V>Дык это и не полноценная IDE для Оберона. Это просто редактор с раскраской под мильон языков и возможностью настроить запуск внешнего toolchain на сборку или отладку. Поддержка автокомплита у этой среды идет через внешний тул CTags, а там список языков поскромнее (порядка 40-ка языков). Модула-2 и Оберон в него не входит, т.е. для этих языков есть только поддержка раскраски в IDE.

Ну вот и славненько: нет ни того, ни другого. То есть ни гипертекста, ни полноценной IDE.
Это — прямой результат решений, принятых командой разработчиков. Спасибо, что находите подтверждения моим предположениям.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[12]: Оберон круче всех!
От: vdimas Россия  
Дата: 25.07.12 11:43
Оценка:
Здравствуйте, AndrewVK, Вы писали:


AVK>>>Что такое SomeAbstractValue?

V>>Это тот самый абстрактный тип, который ты задал по условию.

AVK>Я тип — не задавал. Я привел только входные требования к нему.


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

V>> Это либо алгТД

AVK>Круто. То есть в качестве примера замены ФлгТД на тру ООП решение ты приводишь код с использованием АлгТД.

Мне вообще всё равно, на каком механизме run-time полиморфизма ты решил сделать свой абстрактный тип данных. Принципиальной разницы у тебя НЕТ. А у меня есть.

V>>, либо ОО-интерфейс посещаемой стороны в визиторе

AVK>Т.е. таки визитор. Объем писанины в случае АлгТД и визитора сравнивать будем?

Нет, это я перечислил пункты твоего условия. Мне не надо сравнивать визитор и АлгТД, я и так знаю. Давай сравнивать их оба с моим вариантом.


V>>. По тому факту, какой именно элемент ты наградил абстрактностью, я понял о каком общем виде дизайна идет речь.

AVK>Я никакого дизайна не приводил. Я попросил тебя привести дизайн.

OMG.

есть некое значение, которое может быть представлено следующим образом: как строка, как поток и как объектная ссылка? Будем руками везде дискриминант анализировать без какого либо контроля? Или городить над 3 вариантами визитор?

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

Я же тебе показываю как недорого убежать от такого дизайна. Получаемые плюшки:
— эффективнее чем алгТД в рантайм;
— короче в коде, чем визитор + обслуживающий код не надо распылять по всем затронутым визитором классам в иерархии;
— меньше потенциальных багов, т.к. мы всегда работаем в системе конкретных типов, без превращения их в абстрактные и обратно.


V>> Внутри в конкретных ветках алоритма, там, где ты ранее создавал значения конкретных типов и упаковывал их в абстрактные типы

AVK>Я ничего такого не делал и не писал об этом.

Я уже процитировал ключевое в твоем вопросе. Обе предложенные техники подразумевают некий промежуточный абстрактный тип, хранимый в узлах AST. Я же предложил:
— не хранить AST вообще, то бишь организовать т.н. "оперативную" обработку (push). Если вы отказались от интерпретатора на работающем AST, то само AST как промежуточный результат под большим вопросом.
— если таки надо хранить AST, то в нем надо хранить простой thunk (poll=>push) на функторе. И да. с т.з. ООП функтор тоже имеет право на жизнь.

AVK>Ну наконец то. Теперь сравни с АлгТД.


Ес-но АлгТД ничуть не лучше:
// дополнительно придется описать абстрактный тип (псевдокод)
enum class AstNode {
  | TextNode { string Text; }
  | ObjNode { SomeObj Obj; }
}
...

// algorithm node 1
string s = MakeString(chars, offset, length);
astNodes.add(new TextNode(s));
..
// algorithm node 2
SomeObject o = MakeObject(data);
astNodes.add(new ObjectNode(o));
...
class AstProcessor {
  public void process(AstNode node) {
    // псевдокод
    match(node) {
      | TextNode textNode => process(textNode.Text);
      | ObjectNode objNode => process(objNode.Obj);
    }
  }

  public void process(string s);
  public void process(SomeObject o);
...
}

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


AVK>Пинцет. Show me your code!!!


Лучше бы ты мне дал свой код и попросил допилить до моего варианта, если тебе не достаточно описания идеи.


V>>Заметь, все эти poll-варианты являются вариациями, близкими к визитору по сути происходящего

AVK>Хуже то, что они являются его аналогами по объему писанины.

Нет, не являются. Не надо всю эту писанину вокруг визитора размазывать по всем файлам и участвующим типам. Кстате, АлгТД тоже этим полезным кач-вом обладает.


AVK>И если у тебя хотя бы 5-6 типов значений, то это более менее оправдано,


Указанный подход вообще всегда оправдан вместо визитора, т.к. позволяет:
1. не описывать абстрактный посещаемый класс;
2. не нужно в наследниках писать visitor.visit(me);
3. зачастую п.2. забывают (потому что это распыление функциональности по классам и файлам), как результат в некоей иерархии классов опять же появляется баг на совершенно ровном месте.

AVK>а вот если их 2-3, то это стрельба из пушки по воробьям.


Та где? Посмотри на мой код в пред. посте внимательней, это ВЕСЬ необходимый код. Остальное будет прикладная логика, одинаковая для всех вариантов. Сравнение с АлгТД я уже привел.


AVK>При этом АлгТД практически идеальное решение подобных задач.


Т.к. ты очень размазано сформулировал критерий идеальности, попробую я. Оно "идеальное" не столько для 2-3-х вариантов типов, оно может быть лучшим решением даже для 20-30 вариантов типов при условии, что сложность обработки каждого варианта умещается в одну-две строчки, т.е. логика не требует оформления в некую единицу языка. То бишь оно идеально там, где в моём матче вместо вызва process(textNode.Text) уместно было бы сразу писать целевой код — тело метода process(string s). Но фактор "однострочности" полезной логики — стремный критерий для принятия решений в дизайне, как по мне, бо имеет обыкновение с течением времени меняться... А уже всё завязано и хрен развяжешь. А в моем варианте, заметь, никакой искуственно введеной дополнительной связанности и прочих зависимостей. О конкретных типах знают только места в алгоритме, которые эти конкретные типы формируют, и обработчик этих конкретных типов. Т.е. от производителя к потребителю значениях всевозможных типов попадают не отсвечивая нигде по пути.
Re[13]: Оберон круче всех!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.07.12 11:50
Оценка:
Здравствуйте, vdimas, Вы писали:

AVK>>Я тип — не задавал. Я привел только входные требования к нему.


V>Ты потребовал его абстрактность, а это нефункциональные требования, то бишь это просто диктуется неким твоим де-факто дизайном операций вокруг AST.


Нет такого. Есть вполне конкретная задача — хранить и использовать значение, которое может быть трех видов.

V>Мне вообще всё равно, на каком механизме run-time полиморфизма ты решил сделать свой абстрактный тип данных. Принципиальной разницы у тебя НЕТ. А у меня есть.


Вот вся суть твоих сообщений. Ты нахватался обрывочных знаний, но как дело доходит до конкретики и применения, то начинаются сплошные разводы на воде. Я тебя с Шериданом не просто так сравнил.
Вобщем, в очередной раз заканчиваю общение с тобой из-за физической невозможности вчитываться в десятки килобайт расплывчатого текста в каждом сообщении.
... << RSDN@Home 1.2.0 alpha 5 rev. 52 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[38]: Оберон круче всех!
От: vdimas Россия  
Дата: 25.07.12 11:55
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну вот и славненько: нет ни того, ни другого. То есть ни гипертекста, ни полноценной IDE.

S>Это — прямой результат решений, принятых командой разработчиков. Спасибо, что находите подтверждения моим предположениям.

Т.е. мы всё это время таки сравнивали язык и среду исполнения с IDE?
Жесть. )))
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.