Полярная лиса...
От: Зверёк Харьковский  
Дата: 31.10.04 07:33
Оценка: +6 :))) :)
Здравствуйте, Сергей Губанов, Вы писали:

К>>Значит, ты мало трахался с системами контроля версий.


СГ>Я неоднократно указывал на то что обероны, еще со времен Модулы, являются модульными языками. Но тут, видимо, никто не понимает что это такое. Вот и Вы тоже туда же. Не понимаете в чем состоит преимущество модульности... С модулями не возникает проблем контроля версий. Новому модулю дается новое имя (так же как с COM-интерфейсами). В конце концов, модуль — маленький. 1-модуль : 1-программист. Несколько программистов в один и тот же модуль код никогда не пишут.


Не, ну я так больше не могу!
Отладчик — порочно; контроль версий — порочно; подсветку синтаксиса — сделай сам...

И эти люди...
Я фигею, дорогая редакция...
сам слушаю и вам рекомендую: Разные Люди — Она не вышла замуж
FAQ — це мiй ай-кью!
Re: Oberon???????????????????????????????????
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.10.04 15:06
Оценка: 4 (2) +5 -2
Здравствуйте, LaptevVV, Вы писали:

Оберон — это мертвях. Учить ему будущих программистов все равно что учить латыни будущих переводчиков. Неужели нехватает живых языков? Чем та же Ява или Шарп хуже?
... << RSDN@Home 1.1.4 beta 3 rev. 206>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Oberon???????????????????????????????????
От: ON  
Дата: 21.10.04 21:06
Оценка: :))) :))) :)))
From: WolfHound rsdn ICQ_315059559
LVV>Хочется альтернативный синтаксис показать.
>Зачем?

программист должен уметь языком овладеть задачей, но чтобы та не подхватила синтаксис
Posted via RSDN NNTP Server 1.9 gamma
Re[21]: Мэйнстрим vs. Самосовершенствование :)))
От: Павел Кузнецов  
Дата: 30.10.04 05:17
Оценка: 24 (6) +1 -1
VladD2:

> ПК> Прикол в том, что алгоритмы из Arrays нельзя применить к List или Deque,


> Да уж. Сортированная очередь — это прикол.


Может это, конечно, (для некоторых) и прикол, но сортированные очереди проходят в курсе изучения Computer Science, а некоторым — о ужас! — даже рассказывают о priority sorted queue

> ПК> Одним из фундаментальных принципов которого является Open-Closed Principle. А запихивание всех подряд функций в тот или иной "класс", у которого нет никаких основных атрибутов (поведение, состояние, инварианты), к ООП никакого отношения не имеет.


> Ну, а теперь представь, что кое-то на ООЯ пытается писать в ОО-стиле. Может они конечно и не удовлетворяют твоей концепции, но пользоваться плодами их трудов чертовски удобно.


Это не "мои" концепции, это один из классических критериев качества объектно-ориентированного дизайна.

> По теории ООП все методы объекта желательно помещать в его класс.


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

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

"Попытки писать в ОО-стиле", если подразумевать под этим напихивание в классы всевозможных "утилит", могут "работать" (*), только если весь код, использующий эти классы, находится под прямым контролем разработчиков обсуждаемых классов. Плюс, разработчики готовы платить за поддержание всех наследников этих классов, что в больших проектах может обходиться достаточно дорого. В противном случае, рано или поздно, новые "утилиты" в сами классы добавлять становится невозможным.

Например, представим, что у нас есть скелет простенькой иерархии "библиотечных" контейнеров (псевдокод):
interface Sequence<T>
{
   class Pos;

   uint size();
   bool is_empty();

   Pos begin();
   Pos end();
   Pos next(Pos);

   Pos insert(Pos, T);
   void remove(Pos);
   void clear();
};

interface RandomAccessibleSequence<T> : Sequence<T>
{
   T operator[](int index);
   Pos pos_by_index(int index);
};

class List<T> : Sequence<T>
{
};

class Array<T> : RandomAccessibleSequence<T>
{
};


Итак, мы хотим иметь возможность эти контейнеры сортировать. Допустим, мы решили добавить метод sort() в интерфейс Sequence<>.

Некоторое время мы живем счастливо, но оказывается, что для некоторых задач принципиальным оказывается вопрос: сохраняет ли используемый алгоритм порядок "одинаковых" с точки зрения упорядочивания элементов. Ну, что ж, следуя заведенному порядку, нам будет нужно добавить метод stable_sort().

Но как только мы подобным образом изменим интерфейс Sequence<>, все его наследники "сломаются", т.к. у них-то реализации stable_sort() не будет. Кроме того, есть ли уверенность, что для всех "последовательностей" существуют эффективные методы их сортировки с сохранением порядка "одинаковых" с точки зрения упорядочивания элементов? Ведь у пользователя могут быть свои наследники интерфейса Sequence<T>, о реализации которых мы ничего не знаем... Соответственно, этого делать нельзя, и придется поступать как-нибудь по-другому.

Хорошо, скажем, мы, понимая эту проблему, интерфейс Sequence<> менять не будем, а вместо этого добавим stable_sort(), скажем, в Array<>, где он более всего нужен, и будет иметь реализацию по-умолчанию, на случай, если кто-то от Array<> унаследовался.

Однако на этом наши приключения не заканчиваются: ведь у пользователя, в его наследнике Array<>, уже могла быть своя stable_sort(), обладающая несколько иной семантикой, и эта функция "перекроет" определенную в Array<>. В таком случае новые функции, принимающие Array<>, и предполагающие соответствие семантики stable_sort() той, что заявлена в Array<>, правильно работать не будут.

Далее, если представить себе развитие этой иерархии и возможную потребность добавления в будущем утилит типа find(), find_if(), binary_search() и т.п., то становится очевидно, что в классы этой иерархии эти функции также добавлять будет нельзя.

Есть и еще одна сторона этой проблемы: очевидно, что разработчики библиотеки не могут учесть всех нужд пользователей, и снабдить их всеми нужными им "утилитами". Что же делать пользователям? Следуя "попыткам писать в ОО-стиле", им надо будет унаследоваться от класса, который они захотят "расширить", и добавлять в своего наследника нужные им "утилиты". Но на этом пути их ждет масса трудностей.

Во-первых, вполне может оказаться, что некоторая "утилита" им нужна еще на уровне Sequence<>. Не имея возможности расширять этот интерфейс, пользователи будут вынуждены унаследовать от всех наследников Sequence<> только для добавления этой "утилиты".

Во-вторых, даже проделав всю эту работу, они будут становиться в тупик, получая готовые объекты наследников Sequence<> "извне": ведь эти объекты экземплярами их "расширенных" классов не будут. Их придется копировать, или работать с ними по-другому, чем с "последовательностями", созданными в коде приложения.

Какой же выход?

Выход простой: тем или иным образом вынести эти "утилиты" за пределы самих классов. В любом случае, никакой необходимости для них быть членами обсуждаемых классов нет, т.к. они прекрасно могут быть реализованы через "основной" интерфейс (а если не могут, то "основной" интерфейс не полон). А в качестве приза мы получим невероятную легкость расширения набора этих "утилит", совершенно не затрагивая клиентов классов рассматриваемой иерархии. Более того, пользователи с той же легкостью смогут пополнять набор "утилит" по такому же принципу.

Соответственно, по этому поводу разработчики библиотек Java поступили абсолютно правильно, вынеся sort и остальные утилиты для работы с массивами в совершенно отдельный "класс" java.util.Arrays. Единственное нарекание, что был использован именно класс, а не namespace, т.к. основных атрибутов "настоящих" классов у java.util.Arrays нет, но это уже претензии не к разработчикам библиотек, а к языку, т.к. там такой функциональности просто-напросто нет.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[11]: Обновление
От: Mamut Швеция http://dmitriid.com
Дата: 28.10.04 11:36
Оценка: 41 (5) +2
Коряво программировать в пределах одного модуля — возможно не получится.

Но умение правильно программировать не упирается только в типобезопасность, или в легкость синтаксиса, или удобство подмножества каких-либо операций (арифметических или иных). Такие "фишки" — та самая "слегка" помощь программисту, которая никак не поможет ему в создании сложной системы, например.

Умение правильно программировать — это прежде всего умение понять поставленную задачу, умение планировать, умение разделять задачу на более мелкие задачи, умение отслеживать зависимости и много еще чего.

При этом:

— типобезопасность? Если изначально были неправильно выбраны типы, то горе-программер никуда не уйдет от рефакторинга всего кода, где эти типы использованы (ну или будет использовать какой-нибудь reinterpret_cast в С++).

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

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

Язык не может быть панацеей для программиста. Вне зависимости от языка можно создать монструозные неэффективные программы. И Оберон никак не поможет человеку, нежелающему научится думать и планировать. А для обучения этому С# или Питон ничем не хуже Оберона (или даже лучше — ввиду того, что они широко распространены и активно развиваются)
... << RSDN@Home 1.1.4 beta 3 rev. 185>>


dmitriid.comGitHubLinkedIn
Re[25]: Мэйнстрим vs. Самосовершенствование :)))
От: Павел Кузнецов  
Дата: 01.11.04 19:29
Оценка: 33 (4) +3
VladD2:

> ПК> Я правильно понял, что ты утверждаешь, что Open-Closed Principle не имеет отношения к ОО дизайну? Если ты о чем-то другом, пожалуйста, сформулируй свою мысль яснее.


> Он не имеет отношения к базовым концепциям ООП и приплетается тобой не к месту. Андестенд?


Чего же здесь непонятного? Понятно, что ты даже в www.google.com посмотреть не сходил, прежде чем утверждать подобные вещи.

>>> Более того. В твоем видение она даже становится вредной, так как отрицает базовые концепции вроде инкапсуляции.


> ПК>Это каким же образом? Как именно вынесение sort() за пределы Array нарушает инкапсуляцию?


> Я тебе это уже объяснял. Сортировка — это метод. Имея возможность применять его к более широкому ряду объектов мы нарушаем принцип инкапсуляции.


Как ты себе представляешь нарушение инкапсуляции в данном случае? Если интерфейс класса позволяет передать его в sort(), инкапсуляция не будет нарушена, т.к. и без sort() пользователь может сам проделать эквивалентные действия. Если же предполагается, что эти действия нарушат инварианты класса, то это просто означает, что у данного класса интерфейс составлен неверно, т.к. он не должен позволять нарушать инварианты. В любом случае наличие "внешней" функции sort() инкапсуляцию класса не нарушает.

> ПК>Давай-ка ты подтвердишь это утверждение хоть какими-то ссылками на классику ООП.


> Давай-ка ты пойдеш лесом. А? Я тебе не нанимался искать ссылки по всему Интернету.


Ок. Так и запишем: свое утверждение о нарушении базовых положений ООП в результате вынесения sort() за пределы класса Array Влад доказывать отказался.

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


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

> ПК> Нет, этого "требования инкапсуляции" не говорят. Впрочем, подозреваю, что ты просто можешь очень неточно выражать свои мысли. Чтобы была хоть какая-то ясность, насколько применимы "требования инкапсуляции" в твоей трактовке к классическим образцам дизайна, прокомментируй свое высказывание, процитированное выше, на некоторых из наиболее характерных в этом отношении design patterns: Command, State, Strategy, Visitor, Builder.


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


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

А так... Ты привел свое правило размещения методов в классе:

Если функция изменяет состояние объекта и при этом не воздействует на другие объекты, то эта функция является методом этого объекта. Ну, или должна была им являться.

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

> ПК> Как же так получается, что (потенциальная) модификация объекта специально выносится за его пределы? Неужели все эти паттерны тоже нарушают инкапсуляцию?

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

Я вполне могу, и уже это делал: инкапсуляция нарушается, если интерфейс класса позволяет нарушать его инварианты. Вопреки твоим утверждениям положение функции сортировки вовне класса к таким последствиям не приводит.

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

>
> Если убрать общие слова, то единственной проблемой этого примера является отсуствие инкапсуляции. О чем и шла речь.

Пока что ты так и не показал, как же именно нарушается инкапсуляция в случае вынесения функции sort() за пределы класса Array. От того, что ты утверждаешь, что это так, истинным это утверждение не становится.

>>> Внешние функции той же сортировки — это как раз такое нарушение.

>
> ПК> В случае сортировки никакие инварианты класса Array не нарушаются.
>
> Агащасблин. Сортировка очередей и потоков — это нормально? Не нужно пытаться уйти от обсуждения вопросвов инкапсуляции к черте чему.

Все зависит от определений. В любом случае, если очереди нельзя сортировать, то они не будут предоставлять интерфейс, нужный функции sort(). Если они уже предоставляют такой интерфейс, то наличие "внешней" функции sort() никак на ситуацию не влияет, т.к. пользователь уже волен это делать своими действиями.

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


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

> Стремление к супер универсальности и выносе всего в глобальные методы как раз и приводит к подобным причинам.


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

> А уж напичкивание классов типа вектора несвойственными ему методами вроде pop и т.е. просто провацирует к применению классов не по назначению.


Каким образом метод pop() нарушает инкапсуляцию класса vector? И чем, с твоей точки зрения данный метод отличается от Add() или аналогичного?

> ПК>Раздувание интерфейсов классов без необходимости противоречит грамотному проектированию.


> Словоблудие.


Очень странно, что с такого словоблудия начинаются большая часть более-менее объемных книжек по ООП

> Ты можешь хоть на ушах ходить, но пользоваться дотнетными коллекциями проще, удобнее и безопаснее.


Удобнее пользоваться чем какими коллекциями? Напоминаю, что речь шла о массивах в Java.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[12]: Обновление
От: Кодт Россия  
Дата: 29.10.04 11:23
Оценка: +7
Здравствуйте, Сергей Губанов, Вы писали:

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


Если это шпиля в мой адрес, то это попросту не так.
Уж на чём я по-настоящему воспитан, так это именно на Паскале. Более того, 6 лет это был основной язык разработки.
Хотя руки дотягивались до тучи языков, включая экзотические.

И мой кругозор позволяет без особых усилий писать код любого качества (от стройного до обфусканного) и с любой ведущей парадигмой на любом языке. (Самый мрачный экзерсис, который я когда-то делал — это ООП поверх БД на древнем Клиппере. В качестве курсовика. Эта хреновина даже работала).

Дейкстра не зря говорил про детей, искалеченных бейсиком. Искалечить можно любым языком! Особенно, если догматически впихивать.
Перекуём баги на фичи!
Re[27]: Мэйнстрим vs. Самосовершенствование :)))
От: Павел Кузнецов  
Дата: 02.11.04 15:46
Оценка: 50 (5) -1
AndrewVK:

> <...> чем такой вариант:

>
> public interface ISortable
> {
>     void Sort();
> }
>
> public class SomeList : IList, ISortable
> {
>     ...
>     public void Sort() {...}
> }
>
> ...
> someListInstance.Sort();
>

>
> хуже такого:

По-моему, ниже опечатка, и ISupportSort от IList унаследован быть не должен.

>
> public interface ISupportSort : IList
> {
>     int CompareElements(int index1, int index2);
>     void Exchange(int index1, int index2);
> }
>
> public class SomeList : IList, ISupportSort
> {
>     ...
>     int ISupportSort.CompareElements(int index1, int index2) {}
>     void ISupportSort.Exchange(int index1, int index2) {}
> }
>
> ...
> SomeSortFunction(someListInstance);
>


Имхо, в последнем варианте функция сравнения элементов в ISupportSort быть не должна по нескольким причинам, но это уже вопрос отдельный, хотя и похожий на обсуждаемый.

Первый вариант хуже по нескольким причинам:

Сортировка не является основной функциональностью SomeList

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

В частности:
  • Сохраняется ли в результате сортировки порядок элементов, для которых CompareElements возвращает 0 (т.е. они "равны" с точки зрения функции сравнения). Для некоторых использований это является критичным моментом.
  • Какова алгоритмическая сложность используемого алгоритма. Не секрет, что разные алгоритмы сортировки работают принципиально по-разному на разных входных данных. Например, классическая "быстрая сортировка" очень плохо подходит для "почти упорядоченных" последовательностей, в том смысле, что она работает намного хуже других алгоритмов, если не на месте стоят всего несколько элементов. И во многих случаях только пользователь может знать характер "входных" данных.
  • Каковы требования к памяти используемого алгоритма. Для большинства использований, особенно если используются "простые" алгоритмы, типа той же "быстрой сортировки", это не суть важно, но там, где это имеет значение, обойти эту проблему весьма непросто.
    И т.д., и т.п.

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

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

    Есть множество аналогичных алгоритмов, которые нужны пользователю

    И если пытаться тем или иным образом включить все эти алгоритмы в SomeList, возникает множество проблем, аналогичных описанным для сортировки, плюс еще некоторые.
  • Часть из этих алгоритмов нуждается в том же интерфейсе, что и сортировка. Например, в ряде приложений необходимым является использование так называемой "частичной сортировки", т.е. алгоритма, приводящего последовательность к такому виду, что все элементы "меньшие" заданного, находятся "слева" от него, а все "большие" — "справа". По сути этот алгоритм является одним из шагов "быстрой сортировки".
  • Другие алгоритмы могут отличаться по назначению. Например, поиск. К поиску необходимость возможности "настройки" пользователем применима в неменьшей степени, чем к сортировке. И в неменьшей степени очевидно, что предоставить в классе SomeList, для которого поиск является "вспомогательной" функциональностью, все нужные пользователю, но вполне аналогичные алгоритмы не реально.
  • В любом случае, разработчики "библиотеки" предусмотреть все нужные пользователю алгоритмы не могут принципиально.

    Повторное использование алгоритмов

    Сортировка, поиск и множество других алгоритмов может быть повторно использовано, как для других "библиотечных" контейнеров, так и для контейнеров, создаваемых пользователем.
  • Во втором случае все предоставляемые библиотекой алгоритмы доступны пользователю сразу, "с конвейера", без дополнительных усилий со стороны разработчиков библиотеки.
  • В первом случае у разработчиков библиотеки никакой объективной потребности предоставлять алгоритмы в "отдельном" виде нет, а если они и пошли на этот шаг "доброй воли", то алгоритмы пользователя, аналогичные "библиотечным", к "библиотечным" классам применяться не смогут.

    Расширяемость множества алгоритмов

    Это важный момент, и хотя он связан с предыдущими пунктами, он стоит отдельного упоминания.

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

    Никаких из этих проблем не возникает, если "вспомогательные" алгоритмы (то есть не основные для самого класса, в данном случае SomeList) будут вынесены за пределы класса.
    Posted via RSDN NNTP Server 1.9 gamma
  • Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[5]: Oberon???????????????????????????????????
    От: bkat  
    Дата: 21.10.04 08:34
    Оценка: 1 (1) +5
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, bkat, Вы писали:


    B>>этот язык не очень-то популярен


    СГ>Именно об этом Вирт и рассказывает в своем докладе:

    СГ>

    СГ>Преподавание информатики: потерянная дорога
    СГ>Приветствие на открытии Международной конференции по преподаванию информатики ITiCSE
    СГ>г. Аархус (Дания), 24 июня 2002 г.

    СГ>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm

    Да, я это читал. Что это меняет?
    Повторюсь, студентам об Обероне (и не только) стоит рассказать.
    Но будет жестоко по отношению к ним делать упор именно на Оберон.
    В самом EHT, как я понял, Оберон позиционируется как исследовательский язык.
    И это нормально. Но это не язык индустриального программирования.
    Я конечно понимаю желание изменить мировые тенеденции.
    Но студенты то тут причем?
    Прагматичные швейцарцы вот учат Java, С++, C# и еще многое по мелочам...

    В конце концов мы же все прекрасно понимаем, что язык — это дело десятое.
    Реальные проблемы лежат в совсем иной плоскости...
    Re[15]: Обновление
    От: Зверёк Харьковский  
    Дата: 29.10.04 08:08
    Оценка: 1 (1) +5
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Представьте себе таку вещь:

    СГ>
    СГ>PROCEDURE Pr1();
    СГ>BEGIN
    СГ> (* ... *)
    СГ>END Pr1;
    СГ>    +-------------+
    СГ>    | Нажми меня  |
    СГ>    +-------------+
    СГ>

    СГ>где под прямоугольником с надписью "Нажми меня" я попытался изобразить обыную виндозную кнопку. То есть прямо в текст проги можно запихнуть кнопку, и, например, ассоциировать ее с процедурой Pr1(). Нажимаешь на кнопку — процедура выполняется!

    Круто!!! А зачем?
    Это мы, Зверьки! << Metallica — The Memory Remains >>
    FAQ — це мiй ай-кью!
    Re[15]: Обновление
    От: WFrag США  
    Дата: 29.10.04 08:15
    Оценка: 1 (1) +5
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Но! Обращаю Ваше внимание, что для того чтобы смотреть исходники скачать и установить BlackBox Вам все равно придется, так как формат в котором хранятся исходные тексты программ не plain-text, а бинарный формат *.odc (Oberon Document). odc-файл это файл в котором в бинарном виде сохранен конгломерат взаимоссылающихся друг на друга объектов (сериализованные объекты). Благодаря этому, oberon document представляет собой среду напоминающую MS Word, то есть текст можно форматировать (шрифт, цвет, размер, стиль — каждой буквы). Можно вставлять картинки, управляющие кнопки, едиты и прочие контролы, а в принципе, даже работающие программы.


    Боюсь, не по вкусу это придется всяким любителям Unix-way и plain-текст форматов

    Что мы теряем: системы контроля версий придется затачивать под этот формат, всяческие поиски/find/grep/e.t.c идут лесом, и.т.д. По сути, нужно выкидывать все наработанные средства работы с plain-текстом и нарабатывать новые. А разработывать средства под каждый формат — никакого здоровья не хватит.

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

    Это все будет более-менее работать, пока не потребуется сделать что-нибудь сверх возможностей редактора. Например, поиск регулярного выражения, diff, замены по регулярному выражению. Да хоть бы даже число слов в программе подсчитать.
    Re[6]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 25.10.04 16:21
    Оценка: +3 :)))
    Здравствуйте, VladD2, Вы писали:

    [флейм о борландо-филах я выгрыз. старо.]

    VD>...почему бы не учить на том, что может с большой вероятностью быть востребовано, а не на мертвяке?

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

    For I=1 To 10
    Next

    (с) VB

    или

    for i:=1 to 10 do
    begin
    end;

    (c) Pascal

    нежели
    for(int i = 0; i < 10; ++i)
    {
    }

    (c) а то сам не видишь...

    равно как и с некоторыми другими концепциями, где Паскаль жертвует гибкостью ради очевидности.
    (Ахтунг! Контр-примеры на Шарпе не приводить! Я просто иллюстрировал точку зрения)

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

    ЗХ>>Go! — язык, заточенный под программирование агентов.

    VD>Киборги?
    Нееее. Матрица.

    [смолток выгрызен. Вроде договорились.]

    VD>..Но перед тем же Шарпом... Шарп спроектирован как миниуму не хуже (а по сути значительно лучше)... После Шарпа...легко изучить и другие языки... можно даже демонстрировать функциональный стиль...

    Влад, вообще нравственный посыл первого моего поста был таков: нефиг.
    Честно говоря, в свете развязавшейся тут войны, плавно перетекшей в Шарп против Оберона, Шарп против Питона, Шарп против СмолТока твой фанатизм немногим лучше фанатизма Губанова (только тем, что он защищает мертвый язык, а ты — живой. Ну и общаешься ты существенно корректнее)
    В каждом языке есть свои кайфы, и холиваром ничего не докажешь.

    Хотя круче С++ языка нет, не было, и не надо, а C# — конъюнктурная поделка Мелкософта
    FAQ — це мiй ай-кью!
    Re[16]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 27.10.04 07:56
    Оценка: :))) :)))
    Здравствуйте, Sinclair, Вы писали:

    S>Не факт, что это достоинство. Фактически, это означает необходимость везде использовать Fully Qualified Names. В среде с развитыми библиотеками это привело бы к идентификаторам кошмарной длины. Как вам имя класса System.Data.SqlClient.SqlConnection?


    Фигня. Бывает и покруче. Например:
    System.Runtime.Remoting.Channels.Tcp.TcpServerChannel
    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
    System.Runtime.InteropServices.CustomMarshalers.EnumeratorToEnumVariantMarshaler
    System.EnterpriseServices.CompensatingResourceManager.ApplicationCrmEnabledAttribute

    И, наконец, рекордсмен в 1.1
    System.Windows.Forms.ComponentModel.Com2Interop.GetTypeConverterAndTypeEditorEventHandler

    2.0 в этом плане естественно более продвинут
    Microsoft.Internal.Deployment.Isolation.Manifest.CMS_ASSEMBLY_REFERENCE_DEPENDENT_ASSEMBLY_FLAG
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    AVK Blog
    Re[17]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 27.10.04 12:04
    Оценка: +6
    Здравствуйте, Kh_Oleg, Вы писали:

    K_O>Насчет ключевого слова MODULE было сказано так: в программе ДОЛЖНЫ обязательно присутствовать MODULE ProgramName, BEGIN и END ProgramName. До BEGIN объявляем переменные, после BEGIN — пишем код.


    Ну то есть чисто на заучивание. Ну так никто не мешает точно так же объяснить и про классы в шарпе. Надо писать и все .
    ... << RSDN@Home 1.1.4 beta 3 rev. 209>>
    AVK Blog
    Re[22]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 13:18
    Оценка: +5 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>И что с Вами таким делать? Либо аргументированно это объясните, либо я опять скажу (со ссылкой на info21), что компетентные в этом вопросе люди утверждают прямо противоположное.


    В вашей компетенции тут уже никто не сомневается.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[18]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 12:16
    Оценка: -5 :)
    Здравствуйте, VladD2, Вы писали:

    VD> Так проблема в том, что она не нужна, или в том что делать некому?


    Я когда первый раз увидел БлэкБокс, то тоже подумал какого черта нет подсветки синтаксиса. Даже хотел сам написать, благо сделать это не сложно — доступ к вьюхе документа свободный. Потом, по здравому размышлению, согласился с мнением изложенным у info21. Дело в том, что в оберонах служебные слова набираются заглавными буквами, и выделять их цветом уже не надо — и так все видно. Зато цвет можно использовать совершенно для других целей. Например, если нужно, по той или иной причине акцентировать внимание на каком-то участке кода, то просто берешь и красишь его в красный цвет (весь, вместе со служебными словами) или каким-то другим способом изменяешь шрифт на необычный.
    Re[32]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 03.11.04 04:47
    Оценка: 40 (5)
    Undying,

    > ПК> В "Дизайн и эволюция C++" Страуструп описывал, что в ранних редакциях C++ такая возможность была, но ввиду того, что пользователи очень много ошибались, ее используя (подробности, по-моему, не приведены), ее решили убрать.


    > Как я понимаю, концепции интерфейсов тогда еще не было или уже была?


    Была. Кстати, оказалось, что я помнил неверно, и некоторые трудности, с которыми столкнулись пользователи, Страуструп привел:

    Делегирование

    В первоначальном проекте множественного наследования, который был представлен на Европейской конференции группы пользователей UNIX, состоявшейся в Хельсинки в мае 1987 г. [Stroustrup, 1987], фигурировало понятие делегирования [Agha, 1986].

    Пользователю разрешалось задать указатель на некоторый класс вместе с именами базовых классов в объявлении класса. Описанный таким образом объект использовался точно так же, как если бы это был объект, представляющий базовый класс. Например:

    class B { int b; void f(); };
    class C : *p { B* p; int c; };

    Нотация : *p означает, что объект, на который указывает p, будет использоваться так, будто он представляет базовый класс для C.
    void f(C* q)
    {
       a->f(); // означает q->p->f()
    }

    <...>

    Концепция выглядела многообещающей для представления структур, требующих большей гибкости, чем может дать обычное наследование. В частности, присваивание делегирующему указателю могло бы использоваться для изменения конфигурации объекта во время исполнения. Реализация была бы тривиальной, затраты — минимальными. Поэтому данную идею испытали несколько пользователей. Много времени и сил здесь пололжил Билл Хопкинс (Bill Hopkins). К сожалению, все пользователи, применившие механизм делегирования, пострадали от серьезных ошибок и путаницы. Из-за этого возможность была исключена как из проекта, так и из Cfront версии 2.0.

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

    Ясно, что две эти проблемы взаимосвязаны. Разумеется, пользователи были предупреждены. Предостережения не помогли. Более того, я сам забыл собственные правила, и попался в ловушку. Таким образом, проблему нельзя было назвать мелким огрехом, который исправляется с помощью обучения и предупреждений компилятора. В то время она казалась непреодолимой.

    Сегодня мне кажется, что указанные проблемы имеют фундаментальный характер. Для решения первой потребовалось бы изменять таблицу виртуальных функций объекта, которому делегируется управление, если он связан с делегирующим объектом. Это плохо согласуется с языком в целом и с большим трудом поддается разумному определению. Кроме того, обнаружились примеры, когда мы хотели, чтобы два разных объекта делегировали управление одному и тому же "разделяемому" объекту. Нашлись и такие задачи, в которых нужно было делегировать управление через B* объекту производного класса D.


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


    > На плюсы все-равно не перейду, могу только восхищаться людьми, которые столько всяких мелочей помнят.


    Да уж... Что есть, то есть: язык монстриком получился. И со временем упрощаться не собирается...
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[19]: Обновление (73 KB)
    От: Mamut Швеция http://dmitriid.com
    Дата: 29.10.04 10:15
    Оценка: 19 (3) +2
    Здравствуйте, Сергей Губанов, Вы писали:

    Извините, но вы в этом собираетесь обучать детей????? Умоляю, возьмите в руки Турбо Паскаль/Турбо С и пропагандируйте, чтобы они еще лет десять оставались главным средством обучения. Или учите людей пользоваться коммандной строкой. Прошу и умоляю. НО НЕ ЭТО:



    Это УБОЖЕСТВО, с которым невозможно работать.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[2]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 24.10.04 11:51
    Оценка: 12 (1) +4
    Здравствуйте, VladD2, Вы писали:

    VD>Оберон — это мертвях. Учить ему будущих программистов все равно что учить латыни будущих переводчиков. Неужели нехватает живых языков? Чем та же Ява или Шарп хуже?


    Дорогой Влад!

    "Я тебе один умный вещь скажу, только ты не обижайся" (с) мой папа.

    Наблюдаю я уже который день за этой дискуссией вокруг Оберона-СмолТолка-Питона-и др. и возникло у меня такое впечатление.
    Имхо, ты везде приводишь более-менее верные и логичные аргументы, но не прав в главной своей мысли: "Все пишут на Яве и Шарпе, поэтому учить больше ничего не надо".
    Я считаю, что изучение других языков программирования идет не в минус (забиваем голову ненужной информацией), а в плюс. И не потому, что СмолТолк кому-то может пригодиться (ой, сумлеваюсь), а по очень простой причине: расширение кругозора. Просто понять, что "и такое бывает". Подцепить полезный метод или идею. В конце концов (в парадигме начального вопроса Валерия Викторовича) — просто осознать, "что не в любом языке программирования есть фигурные скобки".

    Возьмем, например, меня .
    В контексте давнего спора про то, какой язык кому нравится, могу слегка скорректировать свое тогдашнее мнение: "я люблю С++ и пока это возможно, буду писать только на нем", но сейчас собираюсь покупать Рихтера про Шарп. Не потому, что хочу на него перейти — интересно, что нового, чем он отличается; как нужно "думать на Шарпе". А и кроме того, книжки, которые валяются на винте, и которые я уже изучил или собираюсь в ближайшем будушем, посвящены языкам: Ada, Assembler, Awk, C--, C++, C#, Delphi, Eiffel, Euphoria, Forth, Go!, Haskell, Java, Lisp, OCaml, Oz, Perl, PHP, Prolog, Python, Refal, Small, Smalltalk, Tcl, VB.

    А еще кто-то умный говорил, что программисту полезно знать основы генетики. Сильно развивает восприятие.
    Думаю, про многие другие науки/дисциплины можно сказать то же самое (что их полезно знать программисту).

    Во. Типа dixi.
    FAQ — це мiй ай-кью!
    Re[9]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 13:01
    Оценка: 8 (1) +4
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Но он действительно по-дилетантски спроектирован.


    Автор этих строк спроектировал хотя бы один язык? Я уже не говорю о том, что на С++ работает половина программистов.

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

    Ну, а подобные заявления выдают в авторе крикливого дилетанта. В общем, на вашем месте я спягчил бы формулировку. А то как-то совсем не серьезно.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[29]: Мэйнстрим vs. Самосовершенствование :)))
    От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
    Дата: 02.11.04 14:32
    Оценка: 7 (3) +1 :)
    Здравствуйте, VladD2, Вы писали:

    VD>Специльно не поскипал твою тираду. Так где из всех этих метс я перешел к навазыванию "такого расположения функции sort"? Зачем столько слов? Может быть просто признать тот факт, что это ты пыташся выдать свое мнение за единстванно верное и тем самым навязать его, а я все го лишь говорю, что считаю иначе?


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

    В самом деле, цитировать довольно объёмные бумажки по OCP, LSP и т.п. в форуме довольно затруднительно, поскольку цитирование неизбежно будет в той или иной степени вырванным из контекста и вызовет ещё более бурное флеймогонство и "ниспровержение авторитетов".
    ... << RSDN@Home 1.1.3 stable >>
    Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
    P.S.: Винодельческие провинции — это есть рулез!
    Re[12]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 28.10.04 03:46
    Оценка: +4 :)
    Sinclair:

    > INT> То же, что и в Яве, то, что в нем объектом приходится делать даже то, что объектом не является.


    > Во как интересно. Например, что?


    Например, я не вполне понимаю, зачем обобщенные алгоритмы типа сортировки делать методами классов Вот пример такого, с позволения сказать, класса: http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html — ни состояния, ни поведения, ни инвариантов
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[18]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 31.10.04 07:22
    Оценка: :))) :))
    Здравствуйте, Кодт, Вы писали:

    К>Значит, ты мало трахался с системами контроля версий.


    Я неоднократно указывал на то что обероны, еще со времен Модулы, являются модульными языками. Но тут, видимо, никто не понимает что это такое. Вот и Вы тоже туда же. Не понимаете в чем состоит преимущество модульности... С модулями не возникает проблем контроля версий. Новому модулю дается новое имя (так же как с COM-интерфейсами). В конце концов, модуль — маленький. 1-модуль : 1-программист. Несколько программистов в один и тот же модуль код никогда не пишут.
    Re[13]: Обновление
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 31.10.04 13:04
    Оценка: +2 :)))
    Здравствуйте, VladD2, Вы писали:

    VD>Совсем согласен. Но все же когда язык или среда подталкивают все же лучше. Не все же программисты супер-ассы. Да и ассы в запарке лажу гонят.


    Влад, сколько можно говорить — асс это задница.
    ... << RSDN@Home 1.1.4 beta 3 rev. 216>>
    AVK Blog
    Re[19]: Обновление
    От: Sergey J. A. Беларусь  
    Дата: 01.11.04 07:48
    Оценка: +1 :))) :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Я неоднократно указывал на то что обероны, еще со времен Модулы, являются модульными языками. Но тут, видимо, никто не понимает что это такое. Вот и Вы тоже туда же. Не понимаете в чем состоит преимущество модульности... С модулями не возникает проблем контроля версий. Новому модулю дается новое имя (так же как с COM-интерфейсами). В конце концов, модуль — маленький. 1-модуль : 1-программист. Несколько программистов в один и тот же модуль код никогда не пишут.


    Круто.... Меня эти откровения так втыкают
    Я — свихнувшееся сознание Джо.
    Re[22]: Обновление
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 01.11.04 17:03
    Оценка: :))) :))
    Здравствуйте, Mamut, Вы писали:

    M>Опять же, повторюсь: Почему среды разработки Турбо Паскаль/Турбо С лучше Блэкбокса
    Автор: Mamut
    Дата: 01.11.04

    Не, ты не понял. Основной принцип Вирта — "Тяжело в учении, легко в бою". Например, его стремление изничтожить дебаггер за то, что он видишь ли поощряет ленивых программистов, говорит именно об этом. Он хочет, чтобы программер всегда проигрывал логику метода в уме, а где надо — строил ассерты. С его логикой довольно трудно спорить — она сродни логике армейского сержанта. Это прикладных товарищей из коммерческого мира интересуют исключительно вопросы снижения входной планки в индустрию, поэтому они продвигают "рюшечки для инвалидов" типа визуального проектирования, код комплишна, подсветки синтаксиса и прочие пошаговые отладчики. Армейский сержант наборот — будет класть всех мордой в грязь и будить посреди ночи. Зато те, кто выживут — вот те будут кодить правильно просто на уровне рефлексов. Угу. Я, кстати, не понимаю, почему это он не поставил ограничение на частоту компиляции. Нефиг! Ведь это стимулирует написание кода кое-как — фигня, компилятор поправит. Потом тупо берем и бездумно подавляем каждое сообщение компилера. Не хватает скобки — на тебе скобку. Не определен Irerator — доопределим ирератор. Очень это подозрительно. Должно быть так: запускаешь проект на компиляцию — и тебе компилер выкидывает типа удалось/не удалось. А чтобы понять, где не удалось — фтыкаешь через нужный интервал прагму, которая коммент емиттит в аутпут. А потом читаешь листинг компилера — и догадываешься, что типа докуда докомпилялось. Угу.

    В общем, я зверств-то не хуже Вирта могу попридумывать.
    Вот только некоторые вещи в нашей индустрии совершенно неочевидны. И глупо думать, что один человек, даже самый гениальный, придумает решения всех проблем. Не существует пророков, на которых надо молиться. Как и серебряных пуль. Вирт — просто пожилой человек, со своими (местами оригинальными) взглядами на программирование вообще, и на его преподавание в частности. Надо понимать, что темпы развития технологий таковы, что разработки десятилетней давности могут скорее повредить, чем помочь. Знаете, как смешно читать рассуждения спецов по UI образца 1991 года? Интернет совершенно перевернул многие концепции. То, что прошло проверку временем — остается. Но экспериментальные разработки тем и экспериментальные, что могут оказаться тупиками.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[27]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 01.11.04 18:55
    Оценка: 43 (3) +1
    VladD2:

    > ПК> Ерунда. Разговор был о наличии конкретной функции sort() в интерфейсе конкретного класса Array.


    > И что в этом есть проблемы?


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

    > ПК> Напротив, это ты перешел к навязыванию такого расположения функции sort(),

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

    INTP_mihoshi сказал
    Автор: INTP_mihoshi
    Дата: 27.10.04
    :

    VD>И кстати, что тебе не нравится в Шарпе с точки зрения ООП?

    То же, что и в Яве, то, что в нем объектом приходится делать даже то, что объектом не является.

    (как мы уже выяснили
    Автор: INTP_mihoshi
    Дата: 28.10.04
    , он немного неточно выразился, и имел в виду не объекты, а классы)

    Sinclair (http://rsdn.ru/forum/?mid=870335):
    Автор: Sinclair
    Дата: 27.10.04

    Во как интересно. Например, что?


    Т.к. я испытываю тот же дискомфорт, что и INTP_mihoshi, я привел
    Автор: Павел Кузнецов
    Дата: 28.10.04
    конкретный пример такого "класса", который классом быть не должен, а должен был быть namespace:

    Например, я не вполне понимаю, зачем обобщенные алгоритмы типа сортировки делать методами классов Вот пример такого, с позволения сказать, класса: http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html — ни состояния, ни поведения, ни инвариантов


    На что ты бросился в бой
    Автор: VladD2
    Дата: 29.10.04
    , причем, споря совершенно о другом:

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


    Как видишь, это замечание совершенно не в тему, т.к. в примере, который я привел (java.util.Arrays) ничего при нажатии на точку не выскочит. Единственная претензия, которая была у меня к приведенному примеру — использование "класса" не по делу, там где по всему видно, что должен был быть namespace, о чем я и написал
    Автор: Павел Кузнецов
    Дата: 29.10.04
    . О помещении sort() в класс Array, как ты это подразумевал в своем сообщении, я только сказал, что это вопрос спорный, и привел основание против таких действий: нарушение некоторых из принципов ООП.

    Далее ты начал начал говорить о том, что вынесение sort() за пределы класса Array нарушает инкапсуляцию и т.п. И хотя это уже просто чистой воды ерунда, я все-таки продолжил с тобой разговор. Сейчас вижу, что совершенно зря, т.к. мы говорим на разных языках. Буду рад обнаружить, что я не прав, и ты способен продолжать дискуссию в нормальном тоне.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[13]: Мэйнстрим vs. Самосовершенствование :)))
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 02.11.04 06:06
    Оценка: 43 (2) +2
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Например, я не вполне понимаю, зачем обобщенные алгоритмы типа сортировки делать методами классов Вот пример такого, с позволения сказать, класса: http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html — ни состояния, ни поведения, ни инвариантов

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


    Давайте разберемся. Во-первых, речь идет о как минимум двух разных явлениях. Первое — использование класса в качестве неймспейса для утилитных процедур. Второе — помещение в класс утилитных методов.

    По поводу свободных процедур у меня возникают некоторые сомнения. Дело в том, что с точки зрения ООП все должно быть объектом. Я бы выделил методы типа Sort в специальные объекты, реализующие некоторые алгоритмы. Примерно так:
    public interface ISort {
      public ISequentiallyAccessibleCollection Sort(IArbitraryAccessCollection source);
    }

    Таким образом, мы изолировали требования к алгоритму от его реализации. Теперь мы можем предоставлять пользователю классы алгоритмов, которые возможно требуют дополнительной инициализации:
    public class HeapSort: ISort {
      public HeapSort(); // инициализация не нужна
      public ISequentiallyAccessibleCollection Sort(IArbitraryAccessCollection source);
    }
    public class QuickSort: ISort  {
      public QuickSort(); // инициализация не нужна
      public ISequentiallyAccessibleCollection Sort(IArbitraryAccessCollection source);
    }

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

    Теперь по поводу размещения утилитных методов. Владу не понравится ни решение с объектами алгоритмов, ни со статик методами утилитных классов. Потому как он хочет объектно-ориентированного интерфейса разработчика, т.е. "тыкая" в объект мы сразу поняли, что с ним можно делать. Либо через броузер, либо code completion... В некоторых случаях это может быть даже оправдано. Ну, вот к примеру наш гипотетический ISort всегда пользуется IArbitraryAccessCollection. Было бы здорово, если бы мы могли как-то найти все эти алгоритмы, глядя на какой-нибудь int a[4000]. Увы, пока что это не представляется возможным. Я вижу два варианта:
    1. Изменить язык и дать возможность вносить фиксированные реализации методов в интерфейсы. Хотя бы статиков. Тогда мы могли бы записать все, что нам нужно, в интерфейс для source, и жить себе не тужить.
    2. Оставить язык в покое и сделать более продвинутый редактор. Например, при помощи атрибутов расширять CodeCompletion. Примерно так:
      public class Algorithms{
      [ExtendCodeCompletionFor(typeof(IArbitraryAccessCollection))]
      public static ISequentiallyAccessibleCollection HeapSort(IArbitraryAccessCollection source);
      [ExtendCodeCompletionFor(typeof(IArbitraryAccessCollection))]
      public static ISequentiallyAccessibleCollection QuickSort(IArbitraryAccessCollection source);
      }
    И когда мы нажимаем Ctrl-Space на b = a, редактор помимо родных методов для int[] высвечивет также и Algorithms.QuickSort и Algorithms.HeapSort. При их выборе в код вставляется соответствующий вызов. В данном случае предложено как раз джаваподобное решение, которое конечно же косяк, но я привел его только для полноты ощущений. Подумав, можно научить редактор жить и с кодом из первой части — когда функциональность реализуют именно объекты.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Интерактивный режим питона
    От: eugals Россия  
    Дата: 24.10.04 10:55
    Оценка: 27 (3) :)
    Здравствуйте, VladD2, Вы писали:

    VD>Еще раз. Нет проблем сделать снипит-компилятор скроющий все детали.

    Питоновский интерактивный режим простым снипит-компилятором не взять.
    Он вот что умеет:
    >>> a = 1
    >>> b = "строка"
    >>> # - вот ребята, сейчас мы с вами объявили свои первые переменные
    >>> # давайте посмотрим, добавились ли они в глобальную область имен:
    >>> dir()
    ['__builtins__', '__doc__', '__name__', 'a', 'b']
    >>> # - Видите! Добавились!
    >>> # Обратите внимание, что кроме наших переменных в ней уже присутствовали 
    >>> # несколько встроенных системных имен.
    >>> # Ну, что такое __name__ и __doc__ я вам рассказывал на предыдущм занятии,
    >>> # а сейчас давайте посмотрим на __builtins__ - это модуль содержащий все 
    >>> # встроенные функции и переменные.
    >>> # Давайте посмотрим, что он содержит:
    >>> dir(__builtins__)
    ['ArithmeticError', 'AssertionError', 'AttributeError', 'DeprecationWarning', 'E
    OFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FloatingPointEr
    ror', 'FutureWarning', 'IOError', 'ImportError', 'IndentationError', 'IndexError
    ', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', '
    None', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'Ove
    rflowWarning', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'R
    untimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning'
    , 'SystemError', 'SystemExit', 'TabError', 'True', 'TypeError', 'UnboundLocalErr
    or', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTransla
    teError', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionE
    rror', '_', '__debug__', '__doc__', '__import__', '__name__', 'abs', 'apply', 'b
    asestring', 'bool', 'buffer', 'callable', 'chr', 'classmethod', 'cmp', 'coerce',
     'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod
    ', 'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter', 'float', 'getattr'
    , 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'intern', '
    isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'long', '
    map', 'max', 'min', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'quit', '
    range', 'raw_input', 'reduce', 'reload', 'repr', 'round', 'setattr', 'slice', 's
    taticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 'vars
    ', 'xrange', 'zip']
    >>> # - Воо-о-от. Постепенно мы с вами изучим, что все они означают.
    >>> # Начнем, пожалуй, с функции dir(), которую я только что использовал.
    >>> # Давайте помотрим, что нам скажет про неё другая встроенная функция (help)
    >>> help(dir)
    Help on built-in function dir:
    
    dir(...)
        dir([object]) -> list of strings
    
        Return an alphabetized list of names comprising (some of) the attributes
        of the given object, and of attributes reachable from it:
    
        No argument:  the names in the current scope.
        Module object:  the module attributes.
        Type or class object:  its attributes, and recursively the attributes of
            its bases.
        Otherwise:  its attributes, its class's attributes, and recursively the
            attributes of its class's base classes.
                    
    >>> # ну и т.д.
    ... << RSDN@Home 1.1.4 @@subversion >>
    Почему бинарные исходники - плохо
    От: Mamut Швеция http://dmitriid.com
    Дата: 29.10.04 13:35
    Оценка: 5 (3) +1
    По-моему, это очевидно, но все же...

    1. Как бы мы не крутили, а исходники все равно читает и редактирует человек. Если исходник — текстовый файл, то неважно, чем он пользуется. Для Винды — это Блокнот (Notepad), Word, MS Word, или например Dreamweaver. У меня был случай, когда редактировал код на PHP в Delphi, потому что под рукой не было другого редактора, сохраняющего отступы при переводе строки.

    Что отсюда следует? Легкость в использовании. Пример: Как бы ни были хороши были документы в формате PDF или doc, а для их чтения и редактирования нужен специальзированный вьюер/редактор. С другой стороны, несмотря на то что мне выпала возможность работать с библиотекой Qt, я иногда просматриваю ее исходники в блокноте — и ничего.

    2. Текстовый формат = доступность средств для разработки. Любому компилятору, разрабатываему даже энтузиастами-студентами не надо будет дополнительно разбираться в неком проприетарном формате. Вдобавок, не надо будет дополнительно отделять зерна от плевел (код от ресурсов от контролей и форм).

    3. Текстовый формат как защита от дурака. Предположим, вы напортачили что-либо в коде. Или нафиг выбило пробки из-за сварщиков на третьем этаже.

    В случае текстового формата попорченный файл открывается любым из перечисленных выше средств, находятся ошибки и неправильные символы, все работает. В случае бинарного формата все полетит нафиг. Редактор в жизни не откроет файл, в котором в ключевом месте стоит 1 вместо 0.

    История из жизни. Опять Qt, компиляция. Компьютер вылетает нафиг, при перезагрузке файл WinNT.h оказывается попорчен, часть символов заменена контрольными символами < 32 ASCII. Как назло, поблизости не было SDK и пришлось эти самые символы вправлять ручками. 5-10 минут и компиляция пошла дальше. А если бы тот файл был бинарным?

    Я думаю, меня здесь поддержат дельфийцы/билдеровцы, которым приходилось ручками править *.dfm файлы когда не переустанавливался какой-нибудь левый компонент.

    Опять же, из жизни. Надо было в проекте в Builder'e заменить все компоненты TButton на TCoolButton. Find&Replace в заголовочных файлах и Find&Replace в *.dfm. Вуаля! С бинарниками такое не прокатит.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[30]: Мэйнстрим vs. Самосовершенствование :)))
    От: prVovik Россия  
    Дата: 01.11.04 17:10
    Оценка: 4 (3) +1
    Здравствуйте, prVovik, Вы писали:

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


    AVK>>О! Осталось только понять что многие алгоритмы сортировки требуют доступа к внутренним структурам

    V>Вот для контейнеров, сортировка которых действительно требует доступа к внутренней структуре ее, конечно, надо делать внутренним методом.
    V>Для всего остального подойдет внешний обобщенный алгоритм сортировки типа std::sort()

    Добавлю также, что если интерфейс контейнера позволяет реализовать алгоритм без обращений к внутренней структуре и без значимых потерь в производительности, то этот алгоритм надо делать внешним, а не добавлять его в интерфейс.
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[5]: арифметические, логические, бинарные
    От: eugals Россия  
    Дата: 21.10.04 07:28
    Оценка: 3 (1) :)))
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Ну, чтобы уж совсем не отрываться от действительности
    Оговорка по Фрейду
    ... << RSDN@Home 1.1.4 beta 2 >>
    Re[12]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 11:16
    Оценка: 2 (2) +1 :)
    Здравствуйте, Sinclair, Вы писали:

    S>Здравствуйте, Сергей Губанов, Вы писали:

    MODULE MyModule;
    
    IMPORT StdLog;
    
    BEGIN
      StdLog.String("Здравствуй мир!");
    
    END MyModule;


    S>И чем же этот хрен слаще вот такой редьки:

    using System;
    class Class1
    {
        static void Main()
        {
            Console.WriteLine("Hello World");
        }
    }



    Лучше тем что использовано меньше понятий, судите сами:

    Оберон:

    1) Существуют модули
    2) Один модуль может импортировать другой модуль
    3) В модулях есть подпрограммы, которые можно вызывать из других модулей

    C#:

    1) Существуют пространства имен (уже непонятность — а что, собственно, еще за пространство да еще и имен? Где они расположены? А как они выглядят эти пространства?)
    2) Существуют классы (еще одна непонятность — что еще за классы? Классы чего? Мы в седьмом классе учимся и что с того?)
    3) У классов есть статические методы (опять ребенку непонятно что такое статические и что такое методы, в чем разница между подпрограммами и методами?). Что такое void? Почему именно Main?
    4) Как понять что Console как-то связана с приведенной выше using System;
    Re[2]: Oberon???????????????????????????????????
    От: Kluev  
    Дата: 20.10.04 12:33
    Оценка: +4
    V>Здравствуйте, LaptevVV, Вы писали:

    На питоне надо новичков учить. Прост как три копейки и в командном режиме может работать как калькулятор.
    Более того в джаве только классы, а в питоне можно и с функций начать.
    Re[9]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 13:01
    Оценка: +3 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Частная инициатива пытающаяся влиять на государство с целью того, чтобы в средней школе информатику преподавали на основе языка Component Pascal в среде BlackBox.


    Ясно. Будем надеяться оно не поддастся.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 08:03
    Оценка: -3 :)
    Здравствуйте, VladD2, Вы писали:

    VD>Существенный недостаток есть. Язык не применим на практике. Он мертв. И учить на нем детей — значит обрекать их на дополнительное самообучение с переламыванием себя.


    Я уже не раз указывал Вам на Вашу некомпетентность в этом вопросе. Но Вы продолжаете повторяться вновь и вновь.
    Re[16]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 31.10.04 07:25
    Оценка: :))) :)
    Здравствуйте, VladD2, Вы писали:

    VD>Ага. Вместо того чтобы сделать подсветку синтаксиса.



    Нужна — сделай сам. Все в твоих руках. Система открытая.
    Re[13]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 24.10.04 10:39
    Оценка: 13 (2) +1
    Здравствуйте, VladD2, Вы писали:
    VD>Не дай бог.
    Поздняк метаться. C# 2.0 already came.

    VD>Где бы нарыть смайлик плюющий через плече и рестящийся?


    VD>В общем, за такое нужно
    Помяни мои слова, Влад, через год ты сам будешь приводить подобные тексты в битвах с апологетами конкурирующих платформ
    Конечно же, данный конкретный пример плох. По крайней мере нам с тобой легче читать именно
    foreach(int each in Range(1, 10))
    {
      Transcript.Show(each);
    }

    Но вот развитие идей разделения генерации последовательностей и их обработки неизбежно приводит к чему-то типа:

    public void PrintNonDividable(Range r, int divisor)
    {
       Print(r.Filter(delegate(int item){return (item % divisor) != 0;}));
    }

    Что, имхо, гораздо лучше чем
    public void PrintNonDividable(Range r, int divisor)
    {
      Range r2 = new Range();
      foreach(int item in r)
        {
          if ((item % divisor) != 0)
              r2.Append(item);
        }
      Print(r2);
    }

    И лучше по двум основным причинам:
    1. Меньше строчек — меньше ошибок.
    2. Можно оперировать бесконечными (или очень длинными) последовательностями значительно оптимальнее. Этот Range запросто может быть генератором, а не коллекцией. Наложение Filter на него совершенно не обязательно вынуждает немедленно получить другую коллекцию. Собственно, yield-инг результатов (возможно) начнется только на месте употребления. И все это мы имеем совершенно забесплатно.
    Цена этому — обучение программистов новой конструкции — анонимным методам.
    Получив в руки такой могучий инструмент, сразу хочется выкинуть все "лишнее". Ведь теперь нам собственно никакие управляющие конструкции не нужны — мы можем их эмулировать при помощи обычных методов
    Что такое If как не метод, принимающий булевый делегат и два воид-делегата?
    Цикл превращается в метод Apply у IEnumerable. Ну и так далее. Страшно, да?
    Вот к чему приводит стремление к "нормализации"! Сахар в языке — вещь полезная .
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[4]: арифметические, логические, бинарные
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.10.04 07:12
    Оценка: 8 (2) :)
    Здравствуйте, VladD2, Вы писали:

    VD>...Только логических операций лучше на нем не давать. Они в нем такие же кривые как в Паскле (бен разделения на бинарные илогические).


    Ну Вы опять говорите о Паскале имея в виду тот древний, который прямой потомок Алгола. В современном (от 1994 года) Component Pascal (тот который есть модифицированный Oberon-2) бинарных операций с числами нет вообще. Число — это математическая абстракция, программист не должен знать как она реализована на конкретной машине. Это делает язык переносимым между любыми архитектурами компьютеров. Для бинарных операций существует специальный тип данных — SET (множество). Множество — тоже математическая абстракция, и тут снова программист не должен знать как она реализована на конкретной машине. Для SET-ов реализованы все характерные для множеств операции (объединение, разность, пересечение, симметричная разность).

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

    И так, в современном Паскале (1) арифметические, (2) логические и (3) бинарные операции можно осуществлять только над соответствующими типами данных: (1) числовыми, (2) буллевым, (3) множествами. То есть, все безупречно purify! Для школьников и студентов — то что доктор прописал!


    P. S.
    Ну, чтобы уж совсем не отрываться от действительности, и иметь возможность использовать обероны в системном программировании, так уж и быть (хотя с точки зрения математики это и бессмысленно), предусмотрены инструкции конвертации чисел во множества, и множеств в числа:
    set     := BITS(integer);
    integer := ORD(set);

    при этом, разумеется, учитываются архитектурные особенности представления чисел на используемом компьютере, так что программа остается переносимой.
    Re[2]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.10.04 07:33
    Оценка: 5 (1) +1 :)
    Здравствуйте, VladD2, Вы писали:

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


    VD>Оберон — это мертвях. Учить ему будущих программистов все равно что учить латыни будущих переводчиков. Неужели нехватает живых языков? Чем та же Ява или Шарп хуже?


    Оберон не мертвяк, то что Вы о нем ничего не знаете говорит о Вас и только о Вас.

    Ява и Шарп хуже Оберона тем, что Оберон проще, чище и меньше и в то же время он полный, в смысле, достаточный современный объектно ориентированный модульный императивный язык общего назначения со строгой статической типизацией и встроенными механизмами безопасности (проверка индексов, правильное приведение типов, сборка мусора).

    О превосходстве оберонов над Явой на ее родном поле боя — в интернете, можно почитать там:
    http://www.uni-vologda.ac.ru/oberon/

    Juice-технология

    Летом 1996 года профессором Калифорнийского университета в Ирвине, учеником Н.Вирта Михаэлем Францем и его аспирантом Томасом Кистлером была представлена технология распространения исполнимого кода в Интернет, названная авторами Juice (по-русски — сок). Juice основан на использовании Оберона и влючает с одной стороны инструментальную компоненту для Оберон-системы Oberon System 3, обеспечивающую компиляцию написанных на Обероне модулей в платформно-независимое представление. Второй частью Juice является дополнение (plug-in) к Интернет-браузерам, обеспечивающее компиляцию получаемого Juice-кода "на лету" в родной код, его загрузку и исполнение.

    Juice превосходит Java-технологию во всем кроме величины затрат на рекламу:

    1) Основан на более простом и совершенном языке
    2) Обеспечивает существенно большую скорость исполнения аплетов
    3) Код Juice-аплета компактнее байт-кода Java

    Re[5]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.10.04 20:44
    Оценка: 1 (1) +2
    Здравствуйте, Serginio1, Вы писали:

    S> Ну зачем же. Я бы добавил еще и 1С!!!


    Точно 1Эс и всех в клинику. А еще лучше сразу молотком по голове чтобы не мучались.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: Oberon???????????????????????????????????
    От: Kluev  
    Дата: 26.10.04 13:42
    Оценка: 1 (1) +1 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    <поскипано>

    S>>Итак, пока что у нас Оберон — C# идут один-в-один, за исключением void. Во всем остальном паритет.

    СГ>А еще за исключением class, Main, static,...

    Зачем так жарко спорить когда питон уже всех "порвал" своей простотой
    Re[19]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 29.10.04 22:51
    Оценка: 1 (1) +2
    Здравствуйте, VladD2, Вы писали:

    ПК>> В том, что для добавления нового алгоритма (например, partial_sort, binary_search и т.п.), руководствуясь таким дизайном, будет нужно модифицировать определение класса.


    VD>Ужас какой? Хорошо хоть все эти алгоритмы уже лет дать как описаны.


    Прикол в том, что алгоритмы из Arrays нельзя применить к List или Deque, соответственно, при разработке последних придется создать Lists и Deques с тем же содержимым, что в Arrays. Плюс, когда окажется, что авторы Arrays не прописали давно изученный и описанный алгоритм в Arrays, надо будет этот "класс" модифицировать. А вслед за ним и Lists, и Deques.

    VD> Да и спасибо ООП.


    Одним из фундаментальных принципов которого является Open-Closed Principle. А запихивание всех подряд функций в тот или иной "класс", у которого нет никаких основных атрибутов (поведение, состояние, инварианты), к ООП никакого отношения не имеет.
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[22]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 30.10.04 05:29
    Оценка: 1 (1) +1 :)
    Павел Кузнецов:

    > Выход простой: тем или иным образом вынести эти "утилиты" за пределы самих классов.


    Кстати, забыл привести один яркий пример очень неудачного напихивания класса "утилитами", иллюстрирующий проблему еще с одной стороны: это шаблон класса стандартной библиотеки C++, std::basic_string<> (aka std::string, std::wstring).

    Куча "утилит", находящихся в этом шаблоне (find_first, find_last_of и т.п.), которые, очевидно, могли быть вынесены как "свободные" функции, плоха по, как минимум двум соображениям:
  • когда по тем или иным причинам приходится делать свой класс для замены std::basic_string, также приходится заново реализовывать в своем классе все эти "утилиты";
  • эти "утилиты" невозможно использовать для "строк" char*, а копировать полученную char* в std::string не всегда хорошо.
    Будь они "свободными" функциями, оперирующими с диапазонами итераторов, жизнь была бы намного легче.
    Posted via RSDN NNTP Server 1.9 gamma
  • Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[16]: Обновление
    От: KDelpher Россия  
    Дата: 02.11.04 09:16
    Оценка: 1 (1) +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>> Забавно. Работаешь на одном, а рекламирушь другое... Не находиш — это странным?


    СГ>Нахожу. А что делать? Не работать или не рекламировать? Тут и так не особо врубаются почему я на Дельфи пишу, а не на С++. А уж если я на БлэкБоксе на работе начну писать, то мне сразу скажут: "А что если ты когда-нибудь уволишься, то где мы найдем еще одного оберонщика чтобы сопровождать уже написанные программы?". А научиться — ни вкакую.


    Попробуйте сами обосновать точку зрения начальства. Это не подколка. Это и в самом деле ценный прием. Вы представляете себя на месте начальника и объясняете кому-то, почему предпочтительнее не переучиваться. Возможно, после этого позиция начальства станет понятнее. А так же, возможно, найдутся новые аргументы против позиции начальства. А когда этот внутренний диалог закончится, итог его можно уже выложить сюда. Что-то вроде игры в шахматы сам с собой. Когда твой противник — ты сам, то с одной стороны приходится отыскивать у себя самого наиболее слабые доводы и бить именно по ним. А со второй — эти слабые доводы приходится укреплять, а то и осознавать свои ошибки. Взгляните на проблему с обоих сторон.
    Re[5]: Oberon???????????????????????????????????
    От: Kluev  
    Дата: 21.10.04 07:35
    Оценка: +3
    Здравствуйте, VladD2, Вы писали:

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


    FR>>Я тоже думаю что питон очень хороший вариант для обучения.

    FR>>Тем более позволяет продемонстрировать все наиболее распрастраненые подходы к программированию и процедурное и функциональное и ООП и обобщенное программирование.
    FR>>У него только один недостаток динамическая типизация.

    VD>Я вот тут скачал книжку по Питону. Поглядел. Есть конечно в Питоне интересные решения. Но рельных приемуществ пред тем же шарпом нет. А вот недостатки вроде отсуствия типизации есть. Нормальный программист должен понимать что такое типы и статическая типизация.


    Я сам упертый Cpp-шник начинавший с паскаля (потом джава был, потом плюсы). Если бы я начал с нуля то начал бы именно с питона. Отсутсвие типизации на началном этапе это не минус а плюс. А чтобы оценить кайф скачай не книгу а среду. Учится можено прямо в интеракивном режиме плавно переходя от калькулятора к программированиюю Иеальный вариант чтобы обяснить все быстро и на пальцах. Вот пример

    # начали с калкулятора
    >>> 2+2
    4
    
    # перешли к функции
    >>> def sum(a,b) : return a+b
    
    # заюзали функцию
    >>> sum(2,2)
    4
    
    # теперь к классу:
    >>> class Summator:
        a = 0
        b = 0
        def sum(self):
            return self.a + self.b
    
    # сразу заюзали класс:    
    >>> s = Summator()
    >>> s.a = 1
    >>> s.b = 2
    >>> s.sum()
    3
    >>>
    Re[3]: Oberon???????????????????????????????????
    От: Obel  
    Дата: 21.10.04 11:24
    Оценка: -3
    СГ>1) Основан на более простом и совершенном языке
    Который сокращает время разработки? Васик еще проще и совершеннее.
    СГ>2) Обеспечивает существенно большую скорость исполнения аплетов
    Это не является приоритетной задаче для апплетов.
    СГ>3) Код Juice-аплета компактнее байт-кода Java
    Это не так важно в современном интернете.

    СГ>компиляцию получаемого Juice-кода "на лету" в родной код


    А вот одним из приоритетных направлений является безопасность. Скомпилировать и запустить в браузере
    что-то из инета? В родной код???
    Re[4]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.10.04 13:25
    Оценка: -3
    Здравствуйте, Obel, Вы писали:

    СГ>>1) Основан на более простом и совершенном языке

    O>Который сокращает время разработки? Васик еще проще и совершеннее.

    Ну, вот, еще один "спец" нашелся. Утверждает что Васик проще и совершеннее Оберона.

    СГ>>2) Обеспечивает существенно большую скорость исполнения аплетов

    O>Это не является приоритетной задаче для апплетов.

    СГ>>3) Код Juice-аплета компактнее байт-кода Java

    O>Это не так важно в современном интернете.

    А Вы случаем не на компанию по производству компьютеров и коммуникаций работаете? Они очень заинтересованы в том чтобы людям надо было как можно более мощное и быстрое оборудование.


    СГ>>компиляцию получаемого Juice-кода "на лету" в родной код


    O>А вот одним из приоритетных направлений является безопасность. Скомпилировать и запустить в браузере

    O>что-то из инета? В родной код???

    Именно в родной код. Безопасность встроена в сам язык. В оберонистой программе никогда не бывает переполнения буфера (range index check). И Вам никогда не удасться что-то читать или писать по неправильному адресу, просто потому что в языке нет такого понятия как адрес, адресная арифметика, и самого адресного пространства как такового.
    Re[8]: Oberon???????????????????????????????????
    От: FR  
    Дата: 23.10.04 09:21
    Оценка: +2 -1
    Здравствуйте, serg_mo, Вы писали:


    FR>>по моему как тут уже сказали птичий язык

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

    Он не похож вообще на другие языки.
    Простота не всегда хорошо, что хорошо видно здесь на примере того же оберона.

    _>Вот, например, статья, в которой на 11 странцах, с щутками и прибаутками, с массой примеров, дано практически всеобъемлющее описание синтаксиса Смолтока. Используя информацию из этой статьи, пользователь сможет прочитать _любой_ код на Смолтоке, даже если не понимает, что этот код делает.


    А какой смысл читать код не понимая что он делает? Это примерно как выучить латинский алфавит и кричать что хорошо знаешь латынь?

    _>Возьмем для иллюстрации приведенный выше пример:

    _>
    _>1 to: 10 do: [:each | Transcript show: each]
    _>

    _>Что можно сказать, используя наши знания о синтаксисе:
    _>а) Имеет место посылка сообщения (или, по-другому, вызов метода) обьекта, стоящего крайним слева: 1.
    _>б) Вызывается метод to:do:, принимающий 2 параметра.
    _>в) Первый параметр, очевидно, число 10. Второй параметр сложнее. Допустим, я не знаю, что это, но я могу быть уверен, что это один из немногих специализированных конструкторов какого-то объекта. Почему я уверен? Да потому, что синтаксически альтернативы нет.

    _>И действительно, конструкция [] — это "синтаксически подслащенный" конструктор класа BlockClosure — блока. Блоки имеют фундаментальное значение в Смолтоке, поэтому, наряду с немногими другими (например, строками и массивами), для создания объектов этого класса есть специальная синтаксическая конструкция. В частности, с помощью блоков реализуются все управляющие конструкции (как в этом примере — цикл со счетчиком).


    По моему такое длиное объяснение такого элементарного понятия как цикл, уже показывает что с языком что-то не так. Во всяком случае для обучения точно это плохо.

    _>Недостатком С-подобных языков, на мой взгляд, является то, что при их изучении приходится зазубривать огромное количество синтаксических конструкций и правил. Условные операторы — бац: кучка конструкций, циклы — еще одна кучка, арифметические операции — их приоритеты... Смолтокер, в свою очередь, может быть уверен, что синтаксические правила, данные в первой лекции (одной лекции будет вполне достаточно), универсальны, и сюрпризов его не ждет..


    Вот только мне кажется что ближе к человеческому мышлению как раз большое количество синтаксических конструкций как и в естественных языках.
    ... << RSDN@Home 1.1.3 stable >>
    Re[6]: Vlad2
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 08:28
    Оценка: -3
    Здравствуйте, VladD2, Вы писали:

    VD>Я вообще не пойму зачем вы пришли сюда? Посоветоваться? Дык вам дали совет не морочте демять голову Обероном в начале их пути. Но вы услышав почти однозначное осуждение своего мнения все равно проталкиваете свою идею.


    А Вы посмотрите вокруг, Вы один тут делаете нападки на Оберон, только Вы один вынесли "однозначное осуждение", остальные находятся либо в нейтралитете, либо не ведут себя так же агрессивно как Вы, либо перестали утверждать что либо по этому поводу так как не считают себя компетентными в этой области. Уважаемый LaptevVV даже заинтересовался вопросом преподавания Оберона первокурсникам, Kluev заинтересовался оператором WITH. А вот Вы VladD2 неоднократно были уличены в незнании вопроса о котором ведете речь, то есть именно своей некомпетентности в этом вопросе. Ваш последний пёрл на счет RETURN-на чего только стоит. Я мол на нем даже программировал давно, ля-ля, а как Вы на нем программировали, а из процедур RETURN ни разу значит не делали, упс... А теперь, значит, Вы спрашиваете зачем я пришел сюда. Это как понимать: форум RSDN и некий VladD2 это близнецы-братья? Чего я пришел на RSDN означает чего это я пришел к VladD2? Так чтоли? Раз я несколько раз ткнул Вас носом, то мне теперь и на RSDN ходить нельзя? RSDN — это форум, а Вы тут участник. Я пришел на форум, а не лично к Вам.

    VD>Точно такое же осуждение вы получили на королевстве дельфи.


    Да осуждение я там получил, вот такое:

    Почитал несколько веток с Вашим участием...
    У каждой такой "тусовки" есть своя специфика, со своим контИнгентом участников... RSDN в этом отношении — ярчайший и показательный пример. Волею судеб, я оказался вовлечён в работу харьковского семинара по QNX ( http://qnxclub.net ). Наиболее активный наш участник, Olej, захаживал как-то на RSDN, в ветки, посвящённые Юникс-системам и ОСРВ. То, с чем он там столкнулся (уровень знаний, информированность в "сопредельных с виндой областях", а главное — просто-таки параноидальная вера в собственную "правильность" и непогрешимость практически во всех поднимаемых на форуме вопросах), заставило Olej высказать несколько замечаний "по делу". С момента, когда RSDNовские ребята поняли, что их макают носиком в собственные примеры некомпетентности, нас забанили...

    В Вашем случае от них "аж прэ" не то, что не понимание поднимаемых вопросов, а нет даже желания вынырнуть из собственного мирка...
    Вот на это Вы и должны делать "поправку"...
    Вам разве не ясно, что они уже всё в этой жизни поняли? :о)

    Просто делайте своё дело. Всё остальное оно само сделает (и скажет) за Вас.

    http://www.delphikingdom.com/asp/talktopic.asp?ID=285
    Re[4]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 18:24
    Оценка: +1 -2
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Сегодня сайт проекта Информатика 21 был серьезно обновлен. Заходите смотрите.


    VD>А что у вас со стилем? Неужели нет людей со вкусом? Ну, такой ужасный попугай. Просто в глазах рябит.


    Так ведь, опять же, у Вас-то не спросили. Вот кабы спросили, то не рябило бы, а так вот что есть...
    Re[16]: Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 27.10.04 06:34
    Оценка: +2 :)
    Здравствуйте, VladD2, Вы писали:

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


    LVV>>

    главный язык программирования — т.наз. C# — смоделирован во многом, в том числе и в отношении безопасности программирования, по образцу Оберона.

    LVV>>

    VD>Да тут ничего смешного то нет. И слова эти чистая правда. Шарп и Оберон действительно языки в которых типобезопасноать выведена на первое место. Разница межу ними только в том, что Шарп жив, а Оберон остался научным эксперементом. Как результат этого научного эксперемента тот же Шарп получил прекрасную систему типов и принцыпы работы с ними. Заслуга ребят из МС в том, что они сумели совместить удобство и типобезопасность.


    Не, заслуга ребят из MS только в том, что они из MS — был бы Вирт в MS, еще неизвестно, какой язык был бы живым, а какого даже в проекте не было б.
    С# жив только потому, что его не в академических кругах написали, а самая мощная корпорация — так с любым языком будет. Возьмется MS Oberon продвигать, и куда остальные с подводной лодки денуться?

    Потому и смешно.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[16]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 08:50
    Оценка: :)))
    Здравствуйте, Sinclair, Вы писали:

    S>Здравствуйте, Сергей Губанов, Вы писали:

    СГ>>Ну вот, правильно, типичный принцип сокрытия "сокровенных знаний"....

    СГ>>А разница между прочим на столько громадна, что даже не смешно. Перво-наперво надо объяснить КУДА писать исходный код программы. Модуль — это и есть то самое место куда надо писать исходный код программы, в том числе код классов надо писать внутрь модуля. Но Вы, будучи воспитанными на немодульных языках программирования, этого не знаете и код программы Вы пишите просто в текстовый файл.

    S>Гм. А можно критерии отличия текстовых файлов от модулей? А то я может, по незнанию, совсем не туда код-то пишу...

    Модуль — это самая большая структурная единица программы, содержащая внутри себя все остальные.
    Re[6]: Oberon???????????????????????????????????
    От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
    Дата: 28.10.04 14:47
    Оценка: :)))
    Здравствуйте, VladD2, Вы писали:

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


    S>> Ну зачем же. Я бы добавил еще и 1С!!!


    VD>Точно 1Эс и всех в клинику. А еще лучше сразу молотком по голове чтобы не мучались.

    Экий ты оказывается Враг Родины. Без 1С эконмика страны работать перестанет!!!!!
    Да и Больше НАС. И молотков столько не наберете
    и солнце б утром не вставало, когда бы не было меня
    Re[14]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 28.10.04 23:51
    Оценка: +2 :)
    VladD2:

    > ПК> Например, я не вполне понимаю, зачем обобщенные алгоритмы типа сортировки делать методами классов


    > Логично! Надо было воткнуть в массив метод нахождения косинуса. А в Мачь залить обобщенный поиск. Было бы по СТЛ-ному, и вообще по сишному.


    Нет, просто ни в какие классы эти функции не пихать, т.к. множество алгоритмов открыто, и, соответственно, помещение их в класс нарушает Open-Closed Principle.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[17]: Обновление
    От: Кодт Россия  
    Дата: 29.10.04 11:29
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:

    WF>> Что мы теряем


    СГ>А зато что приобретаем: *.odc — это хранилище сериализованных объектов в (бинарном виде) — так загрузите эти объекты и работайте с самими объектами, а не с текстом как таковым — уровень абстракции резко повышается.


    Значит, ты мало трахался с системами контроля версий.
    Там даже XML доставляет головную боль (а казалось бы, текстовый...)
    А тут — какой-то проприетарный бинарный формат.

    В редакторах явки, шарпа, да чего уж там — quick basic 4.5! — есть возможность структурированной работы с исходным кодом, как с совокупностью объектов языка: процедур, классов, метаинформации.
    Перекуём баги на фичи!
    Re[23]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 01.11.04 03:07
    Оценка: +2 -1
    VladD2:

    >>> Ну, а теперь представь, что кое-то на ООЯ пытается писать в ОО-стиле. Может они конечно и не удовлетворяют твоей концепции, но пользоваться плодами их трудов чертовски удобно.

    >
    > ПК>Это не "мои" концепции, это один из классических критериев качества объектно-ориентированного дизайна.
    >
    > Ты ее навязываешь, значит она твоя. К ОО-дизайну она в общем-то отношения не имеет.

    Я правильно понял, что ты утверждаешь, что Open-Closed Principle не имеет отношения к ОО дизайну? Если ты о чем-то другом, пожалуйста, сформулируй свою мысль яснее.

    > Более того. В твоем видение она даже становится вредной, так как отрицает базовые концепции вроде инкапсуляции.


    Это каким же образом? Как именно вынесение sort() за пределы Array нарушает инкапсуляцию?

    > ПК> Вопрос как раз в том, в какой степени та или иная функция принадлежит интерфейсу класса.

    >
    > Тут как бы все очень просто. Если функция изменяет состояние объекта и при этом не воздействует на другие объекты, то эта функция является методом этого объекта. Ну, или должна была им являться.

    Давай-ка ты подтвердишь это утверждение хоть какими-то ссылками на классику ООП. А то как-то не очень понятно, кому же эта функция должна...

    > Это не теории ООП. Это теория, которую ты пытаешься неверно применить. Включить все действия над объектом в его класс просто физически тяжело. К тому же некоторые действия могут затрагивать и другие объекты. Однако, требования инкапсуляции говорят о том, что желательно включать методы внутрь объекта.


    Нет, этого "требования инкапсуляции" не говорят. Впрочем, подозреваю, что ты просто можешь очень неточно выражать свои мысли. Чтобы была хоть какая-то ясность, насколько применимы "требования инкапсуляции" в твоей трактовке к классическим образцам дизайна, прокомментируй свое высказывание, процитированное выше, на некоторых из наиболее характерных в этом отношении design patterns: Command, State, Strategy, Visitor, Builder.

    Как же так получается, что (потенциальная) модификация объекта специально выносится за его пределы? Неужели все эти паттерны тоже нарушают инкапсуляцию?

    > Простенький примерчик (хотя странно, что тебе его нужно приводить). Конечно, многие вычисления можно произвести и на универсальных объектах. Так для хранения времени прекрасно подходят целые или числа с плавающей точной. Все вычисления можно реализовать отдельными функциями, обосновав это применением метода "отрытый-клозет" , ну, например:

    >
    > int AddMinutes(int time, int minutes)
    > {
    >     return time + minutes * 60;
    > }
    >


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

    > Внешние функции той же сортировки — это как раз такое нарушение.


    В случае сортировки никакие инварианты класса Array не нарушаются.

    > Ведь я потенциально могу применить функцию сортировки к объекту, который не должен поддерживать данного действия (метода). Так моя очередь или стэк может хранить данные в определенном порядке (смешно было бы, если это было бы не так!). Интерфейс этих классов походит для применения внешнего метода сортировки.


    Если интерфейс некоторого класса допускает такое изменение его внутреннего состояния, которое нарушит инварианты, то тут одно из двух: либо инварианты определены неверно, либо интерфейс им не соответствует. Будет ли размещена функция, нарушающая инварианты внутри или вовне класса, абсолютно никакого значения не имеет, т.к. инкапсуляция уже нарушена.

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

    >
    > "Может" — вряд ли должно являться критерием доказательства. С тем же успехом и безапелляционностью могу заявить, что грамотное проектирование иерархии наследования может существенно сократить затраты на поддержку больших проектов.

    Раздувание интерфейсов классов без необходимости противоречит грамотному проектированию.

    > Собственно в отличии от твоего заявления мое подтверждается теорией и практикой ООП.


    И теория, и практика ООП отлично подтверждают вред раздувания интерфейсов. Более того, даже название этому явлению придумали: "жирные" интерфейсы, interface bloat. Плюс сформулировали определенные критерии качества ОО дизайна, направленные на минимизацию обязанностей, и, как следствие, интерфейсов классов: Open Closed Principle (косвенно), Single Responsibility Principle, Interface Segregation Principle и т.д.

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


    Лозунги, лозунги...

    > ПК>Например, представим, что у нас есть скелет простенькой иерархии "библиотечных" контейнеров (псевдокод):

    > ПК>
    > ПК>interface Sequence<T>
    > ПК>{
    > ПК>   class Pos;
    >
    > ПК>   uint size();
    > ПК>   bool is_empty();
    >
    > ПК>   Pos begin();
    > ПК>   Pos end();
    > ПК>   Pos next(Pos);
    >
    > ПК>   Pos insert(Pos, T);
    > ПК>   void remove(Pos);
    > ПК>   void clear();
    > ПК>};
    >
    > ПК>interface RandomAccessibleSequence<T> : Sequence<T>
    > ПК>{
    > ПК>   T operator[](int index);
    > ПК>   Pos pos_by_index(int index);
    > ПК>};
    >
    > ПК>class List<T> : Sequence<T>
    > ПК>{
    > ПК>};
    >
    > ПК>class Array<T> : RandomAccessibleSequence<T>
    > ПК>{
    > ПК>};
    > ПК>

    >
    > ПК>Итак, мы хотим иметь возможность эти контейнеры сортировать. Допустим, мы решили добавить метод sort() в интерфейс Sequence<>.
    >
    > Не ожидал от тебя столько детский ошибок в таком простом варианте.

    Зато я ожидал различных эпитетов меня и моих действий

    > В описанной выше иерархии имеется класс RandomAccessibleSequence — это подразумевает, что ее предок не должен иметь средств прямого доступа к последовательности, а значит методы:

    >
    > Pos next(Pos);
    > Pos insert(Pos, T);
    > void remove(Pos);
    >

    > не имеют права находиться в этом классе.

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

    > Более того. Под большим вопросом находится целесообразность размещения в последовательности методов:

    >
    > uint size();
    > bool is_empty();
    > Pos begin();
    > Pos end();
    >

    > так как они, например, не дают работать с последовательностями читаемыми по сети.

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

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


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

    > Правильным дизайном <...>


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

    > Однако даже в таком виде это шедевр ОО-дизайна по сравнению с СТЛ которую ты тут защищаешь.


    Повторю: речь шла о библиотеке языка Java, и о том, где в ней находится функция сортировки массивов. Никакого отношения к STL это не имеет.

    > ПК>Некоторое время мы живем счастливо, но оказывается, что для некоторых задач принципиальным оказывается вопрос: сохраняет ли используемый алгоритм порядок "одинаковых" с точки зрения упорядочивания элементов. Ну, что ж, следуя заведенному порядку, нам будет нужно добавить метод stable_sort().

    >
    > ПК>Но как только мы подобным образом изменим интерфейс Sequence<>, все его наследники "сломаются", т.к. у них-то реализации stable_sort() не будет.
    >
    > Гы. Видимо это от безграмотного проектирования. Собственно об этом сказано выше.

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

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

    >
    > [i]Паша, наделав таких детских ошибок в проектировании иерархии классов, ты задаешься столь не детскими вопросами. Может они не спроста сделаны? [/q]

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

    > Более того еще большой вопрос нужно ли вводить метод сортировки в последовательность не обеспечивающую прямой доступ.


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

    > ПК> Однако на этом наши приключения не заканчиваются: ведь у пользователя, в его наследнике Array<>, уже могла быть своя stable_sort(), обладающая несколько иной семантикой, и эта функция "перекроет" определенную в Array<>. В таком случае новые функции, принимающие Array<>, и предполагающие соответствие семантики stable_sort() той, что заявлена в Array<>, правильно работать не будут.

    >
    > Хочу тебя расстроить. Этот случай никакого отношения к "утилитам", как ты изволил выразиться, не имеет. Введение любого нового метода чревато подобными проблемами.

    Поэтому существует такая вещь, как Design by contract, подобные трюки запрещающая, а также давным давно сформулирован Open-Closed Principle, который уже упоминался. Судя по всему ты так и не удосужился с ним ознакомиться. А гласит он, что в частности классы по возможности следует проектировать так, чтобы в дальнейшем их не модифицировать, а только расширять поведение, пользуясь их интерфейсом, наследованием и добавлением новых сущностей, с данными классами взаимодействующими.

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

    > максимум что мы получим — это варнинг (в Шарпе и ничего в C++), который успешно уберем за пару минут.


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

    > Реализовав подобные методы как статические ты так же можешь нарваться на перекрытие.


    Интересно, как это ты нарвешься на "перекрытие", если stable_sort() была реализована "внешней" функцией, определенной в namespace или классе пользователя, а ты добавил новую внешнюю функцию, в своем, "библиотечном", namespace? Приведи пример, а то, похоже, я тебя уже окончательно перестал понимать...

    > ПК>Выход простой: тем или иным образом вынести эти "утилиты" за пределы самих классов. <...>


    > Вывод неверный. Думаю, мои комментарии это хорошо продемонстрировали.


    Твои комментарии если что и продемонстрировали, то совсем не это.

    > При создании методов нужно соблюдать принципы: инкапсуляции, полиморфизма


    "Без базара, сахар белый". Жаль только, что никакого отношения к обсуждаемому вопросу это не имеет.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[36]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 12:23
    Оценка: :)))
    Здравствуйте, WolfHound, Вы писали:

    СГ>>АКТИВНЫЕ ОБЪЕКТЫ,

    WH>А чем оно лучше потоков?

    Потоки — это чуждая (внешняя) для ОО сущность.
    Re[23]: Oberon???????????????????????????????????
    От: faulx  
    Дата: 17.11.04 06:58
    Оценка: +3
    F>> Всплывающая подсказка — не свойство языка.

    VD>От части свойство. Где ты видел подсказки на встроенные операторы? К тому же тут рассматриваются два конкретных случая. Так есть по факту. И думать, что там гипотетически возможно просто бессмысленно.


    Еще раз, медленно. Исходное сообщение звучало так:

    VD> Все эти х[3:5] долеко не очевидны. Они требуют объяснения на пальцах. А вот x.substring(3, 5) как раз можно понять и без объяснения.


    Факт заключается в следующем. Я увидел эту фразу, в которой приводились два примера синтаксиса. На для первого, ни для второго примера мой веб-браузер не выдал мне никакой всплывающей подсказки. Далее, в фразе приводилось общее утверждение, что синтаксис х[3:5] не очевиден, а x.substring(3, 5) — очевиден. Это утверждение вступило в противоречие с моим первым интуитивным представлением (совершенно объективным, поскольку меня не интересуют судьбы Питона, и этого синтаксиса Питона я тогда не знал). Этот факт показался мне, во-первых, достаточно забавным, чтобы обнародовать его, а во-вторых, опровергающим общность утверждения исходной фразы (поскольку имеется, по крайней мере, одно исключение).

    VD>Очень разумно. Только это убдет частный случай. А вот высказывание "Шарп более прост в освоении нежели Оберон так как по Шарпу есть огромное комьюнити." как раз очень даже верно.




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


    VD>Да. Давай доведем все до состояния сферического коня в вакуме и начнем утверждать все что захотим. Вот только зачем? Есть реальная сисуация. От абстрактных размышления она не изменится. По факту для методов Шарпа, Явы, ВБ подсказки есть. А для Питона нет. И вряд ли когда появятся подсказки для встроенных операторов. Так что понимать их совершенно невозможно. Их можно только заучивать.


    В моем веб-браузере, гдя я увидел эти примеры, подсказок не было.

    F>>Я не говорил про написание (тем более в "средах"), а только про чтение с листа.


    VD>И где же ты читаешь код с листа?


    В данном конкретном случае — в веб-браузере. Еще я читаю код с листа в



    F>> Следовательно, существуют люди, которым это понятнее. Следовательно, нельзя говорить, что запись x[3:5] менее интуитивно понятна для всех. Следовательно, интуитивная понятность — субъективное понятие. Что и требовалось доказать.


    VD>Я вообще не понимаю как можнов ести речь о интуитивной понятности частного синтаксиса.


    А "интуитивная понятность" — это то же самое, что "очевидность" и "понятность без объяснения"? Тогда этот вопрос лучше задать самому себе, поскольку, повторяю, было сказано:

    VD> Все эти х[3:5] долеко не очевидны. Они требуют объяснения на пальцах. А вот x.substring(3, 5) как раз можно понять и без объяснения.
    Re[28]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 03.11.04 11:01
    Оценка: 57 (2)
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Сортировка не является основной функциональностью SomeList


    Вопрос спорный. Не стоит кидаться в крайности. Затаскивание всего в класс глупо и сложно поддерживаемо. Но ровно так же глупо следование принципам до конца — многие вещи неразрывно связаны с контейнерами, выносить их наружу неудобно, поскольку усложняет структуру библиотеки. Осюда оптимальным является некоторое среднее решение, когда часто используемые и семантически (прошу обратить внимание, семантически, а не формально) неразрывно связанные вещи вносятся в класс, а более отдаленные выносятся наружу.
    Пример из дотнета — подсистема, о которой уже неоднократно здесь упоминалось, но исключительно по ее кусочкам, без знания картины в целом. Подсистема преобразования типов.
    Преобразования большинства примитивных типов из строки присутствуют ввиде статических методов в интерфейсах самих типов, преобразование объекта в строку вобще является методом общего корня всех объектов. Это первый, самый жесткий уровень, поскольку преобразования из строки/в строку используются очень часто. Заметь, признак неформальный, формально строка среди всех прочих типов ничем не выделяется. При том всем прекрасно понятно что фактически строка является важнейшим способом представления данных для человека, и некий оверхед по наличию преобразований вполне оправдан.
    Следующий уровень, менее жесткий — преобразования некоего набора типов между собой. Набор этот выведен исходя опять же из фактического набора неких базовых типов, применяющихся очень часто.
    bool
    byte
    char
    DateTime
    decimal
    double
    short
    int
    long
    sbyte
    single
    string
    Type
    ushort
    uint
    ulong

    Типы эти между собой конертируюся классом Convert и преобразуются при помощи интерфейса IConvertible. Набор этот частично можно расширить, реализовав IConvertible в собственном классе.
    Наконец самый гибкий, но притом и самый сложный способ преобразования — механика, предоставляемая TypeDescriptor — специализированные классы, наследники TypeConverter. Эта механика предоставляет возможность преобразования произвольных тппов между собой.
    Итого мы имеем трехуровневую систему преобразований, гибкую и удобную одновременно, свободную от недостатков обоих крайностей. Для обучения(вспоминая исходную тему обсуждения) это конечно не зашибись, зато обалденно удобно.

    ПК>Есть множество аналогичных алгоритмов, которые нужны пользователю


    См. выше.

    ПК>Повторное использование алгоритмов


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

    ПК>Расширяемость множества алгоритмов


    ПК>Это важный момент, и хотя он связан с предыдущими пунктами, он стоит отдельного упоминания.


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


    ПК>Никаких из этих проблем не возникает, если "вспомогательные" алгоритмы (то есть не основные для самого класса, в данном случае SomeList) будут вынесены за пределы класса.


    Опять то же самое — ты подменяешь проблемы интерфейсов проблемами реализации.
    ... << RSDN@Home 1.1.4 beta 3 rev. 219>>
    AVK Blog
    Re[11]: Oberon???????????????????????????????????
    От: eugals Россия  
    Дата: 25.10.04 06:40
    Оценка: 30 (2)
    Здравствуйте, VladD2, Вы писали:

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

    Это да . К счастью, у _vovin-а на сайте есть пара интересных howto по Dolphin-у: Dolphin Smalltalk, Part I и Dolphin Smalltalk, Part I.
    Очень помогают от барановоротного эффекта
    ... << RSDN@Home 1.1.4 beta 2 >>
    Re[9]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 21.10.04 13:16
    Оценка: 25 (2)
    Здравствуйте, FR, Вы писали:

    FR>#$%^&*^*((*&&((?


    Тулзень есть такая, которая позволяет просто выполнять код на шарпе. http://www.sliver.com/dotnet/SnippetCompiler/
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    AVK Blog
    Re[18]: Мэйнстрим vs. Самосовершенствование :)))
    От: FR  
    Дата: 28.10.04 14:10
    Оценка: 17 (1) +1
    Здравствуйте, VladD2, Вы писали:


    VD>Руби — это один из самых интересных исследовательских языков программирования созданных за последнее время. Я сам его не видел, но часто слышал как его приводят в пример. Ктому же именно его так никто толком и не описан на русском (вроде).


    Тут http://devlink.crimea.ua/articles/article.php?article_id=20 краткое описание.
    Вообще Ruby в общем конкурент питона, но по моему синтаксис у него менее понятный, и он ближе к функциональным языкам.
    ... << RSDN@Home 1.1.3 stable >>
    Re[11]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 00:03
    Оценка: 9 (2)
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>ЗЫ: А вот Шарп — он расширяет сознание, как по-твоему?


    Шап — это конечно не вэй. Шарп — это ХАЙВЭЙ.

    Что-то я как-то про него сегодня скромно.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[31]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 05:00
    Оценка: 6 (1) +1
    VladD2:

    > Скорее всего тут проблемы в понимании приципов ООП.


    No comment.

    > Мыслить от "утилиты"/"сотелиты" вообще вредно. Сделай декомпозицию на уровне классов и скорее всего окажется, что функция является методом некоторого другого класса.


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

  • Есть два класса: Date и String. Методом какого класса является функции: 1) преобразования даты в строку; 2) преобразования строки в дату?

  • Методом какого класса является функции преобразования: 1) целого в строку; 2) строки в целое? Есть ли какое-либо отличие этого примера от предыдущего?

  • Есть два класса: Date и DateDifference. Методом какого класса являются функции: суммы/разницы двух дат, суммы/разницы двух DateDifference, суммы Date и DateDifference?

  • Есть классы: Matrix и Vector. Методами какого класса являются функции: 1) умножения матрицы на вектор (результат — матрица); 2) умножения двух векторов по схеме "строка на столбец" (результат — матрица); 3) скалярного умножения векторов (результат — число); 4) афинных трансформаций вектора в соответствии с заданной матрицей преобразования?

    И, наконец:

  • Есть классы, контролирующие размерность: Velocity (v, скорость), Acceleration (a, ускорение), Length (l, длина), Time (t, время). Методами каких классов являются функции, соответствующие следущим выражениям: 1) l = v * t; 2) v = l / t; 3) v2 = v * v; 4) a = v / t; 5) v = a * t; 6) t2 = t * t; 6) l = 1 / 2 * a * t * t
    Posted via RSDN NNTP Server 1.9 gamma
  • Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[27]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 05:07
    Оценка: 6 (1) +1
    VladD2:

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


    > Мне то зачем? Ты что-то хочешь доказать. Вот и гугли.


    Я? Кому? Тебе, что ли? Это абсолютно бесперспективное занятие без твоего желания что-то узнать. Ты задавал вопросы, я на них отвечал. Не надо — отлично, разговор окончен. В следующий раз здорово сэкономишь нам обоим время, если больше вопросов, на которые тебе не нужны ответы, задавать не будешь.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[4]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 08:01
    Оценка: 1 (1) -1
    Здравствуйте, VladD2, Вы писали:

    VD> Мертвяк. Причем чистейший воды. Ни одного комерческого проекта.


    Вы не компетенты в вопросах об оберонах. Я уже приводил ссылки, среди которых, например, упоминается коммерческий проект создания ПО для ЭЛЕКТРОСТАНЦИИ (не хило не так-ли?), в ссылках сайта info21 есть военный проект по управлению беспилотными летающими аппаратами (опять не хило?).

    VD> Развитие Оберона с 96 года нет.


    Мало того что Вы не компетентны в вопросах об оберонах, но Вы еще и просто не внимательны. Совсем недавно, на этом форуме обсуждались "активные объекты". Вы случаем не обратили внимание на фигурирующие в даваемых ссылках даты? Создание Aos ~ 2000 год, диссертация Мюллера 2002 год. Работа над Zonnon идет по сей день.

    Посмотрите даты проектов: http://www.cs.inf.ethz.ch/gutknecht/
    Re[11]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 26.10.04 10:06
    Оценка: 1 (1) +1
    Здравствуйте, Сергей Губанов, Вы писали:

    И чем же этот хрен слаще вот такой редьки:
    using System;
    class Class1
    {
        static void Main()
        {
            Console.WriteLine("Hello World");
        }
    }

    ?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[10]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 26.10.04 17:52
    Оценка: 1 (1) :)
    Здравствуйте, VladD2, Вы писали:

    INT>>Я не уверен, что хочу начинать с объектного. И тем более не уверен, что я хочу останавливаться на объектах в том виде, в котором их представляет C#.


    VD>Ну, сам понимашь, что на Окамле точно никто начинать учить не будет.

    VD>И кстати, что тебе не нравится в Шарпе с точки зрения ООП?

    Окамл vs. Шарп еще не было!

    Кстати, если серьезно. Есть идея написать "сравнительную" статейку по куче языков. Причем сравнительную не в смысле "язык А лучше тем что ..., а язык Б вообще говно", а, скажем так, расширяющую сознание. Идея — ответить на вопрос "я уже знаю то, это и еще вот это вот, на что еще можно посмотреть?"
    Каково? Я бы взялся... если бы ее в бумажный журнал... "Очень я это богатство люблю и уважаю" (с) Падал прошлогодний снег

    [офтоп]
    во время первоапрельской звуковой шутки мой профайл озвучивался фразой "А хотя бы я и жадничаю! Зато — от чистого сердца!"
    Вот и докажите теперь, что это рандомом было сделано
    [/офтоп]
    FAQ — це мiй ай-кью!
    Re[33]: Component Pascal
    От: WFrag США  
    Дата: 29.10.04 08:53
    Оценка: 1 (1) +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, WFrag, Вы писали:


    WF>>И еще, объясни, чем эта концепция definition-implementation-object отличается от C++-ых классов?



    СГ>Только definition — является единицей наследования (Экземпляров definition создавать нельзя). definition можно подвергнуть refine (по русски говоря отнаследоваться от него, причем это наследование обычное, а не множественное). И в каждой из refin'ов можно дать новые реализации-по-умолчанию некоторых методов. Object может реализовывать несколько definition, но сам object НЕ ЯВЛЯЕТСЯ единицей наследования, зато экземпляры object-ов создавать можно.



    СГ>Каждая definition рефайнится по своему дереву (иерархии наследования). Объекты реализуют несколько definition, но сами не участвуют в механизме наследования (т.е. от объекта отнаследоваться нельзя). Таким образом, как я уже раза три повторил, мы получаем все положительные стороны множественного наследования, но в то же время не зарабатываем никаких побочных эффектов.



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

    Всегда можно сказать:
    1. не создавай экземпляры этого класса, пусть там будут только абстрактные методы. Это будет definition.
    2. не создавай экземпляры этого класса, пусть он наследуется от definition и реализует некоторые методы. Это будет implementation.
    3. не наследуйся от этого класса, но создавай его экземпляры. Это будет object.

    Re[33]: Component Pascal
    От: Schade Россия  
    Дата: 29.10.04 10:09
    Оценка: 1 (1) +1
    Здравствуйте, Сергей Губанов, Вы писали:

    <тут была песнь о DEFINITION>
    А в итоге — все тот же самый interface. Только называется по-другому, зато это же кострукция совершенного языка из oberon-family . Тот же бред, что и возмущения по поводу = и ==.
    ... << RSDN@Home 1.1.4 @@subversion >>
    Re[25]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 01.11.04 01:38
    Оценка: 1 (1) +1
    VladD2:

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


    > Нет, Паша, именно это ты и предлагаешь.


    Ерунда. Разговор был о наличии конкретной функции sort() в интерфейсе конкретного класса Array. К тому же, если посмотреть на историю ветки, то можно увидеть, что я ничего не предлагал. Напротив, это ты перешел к навязыванию такого расположения функции sort(), в то время, как в примере, который я привел (по совершенно другому поводу), функция sort() находится не в классе Array, а в отдельном "классе", имитирующем namespace, java.util.Arrays.

    > И именно это звучит очень смешно. В попытках обосновать дизайн СТЛ ты готов весь ООП вверх ногами перевернуть.


    Где именно я "переворачиваю весь ООП вверх ногами"? То, что тебе оно знакомо в перевернутом виде, вовсе не означает, что это и есть правильная картина.

    > <... эмоции и переходы к обсуждению взглядов оппонента вместо аргументации обсуждаемого вопроса поскипаны ...>


    Так и запишем: по существу тебе сказать особенно нечего.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[33]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 22:08
    Оценка: 1 (1) +1
    VladD2:

    >>> Скорее всего тут проблемы в понимании приципов ООП.


    > ПК> No comment.


    > А кстати, зря. Так как именно тут у нас основное разногласие.


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

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


    Смотрел я когда-то на него. Как скриптовый язык хорош. Для написания больших систем — вряд ли. Можно ограничиться одним моментом:

    In Ruby, classes are never closed: you can always add methods to an existing class.

    В больших системах минимизация зависимостей, выделение стабильных подсистем, использование одних и тех же подсистем различными клиентами и т.п. — одни из главных забот, а при таком подходе, плюс тотальная "виртуальность" методов, для больших систем, имхо, это просто кошмар.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[9]: арифметические, логические, бинарные
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 22.10.04 07:41
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>>Здравствуйте, Сергей Губанов, Вы писали:


    VD>>Это конечно несколько лучше чем в Паскале/Дельфи. Но все же я не понимаю на фиг так извращаться.


    СГ>А где, собственно, извращение? В том что с числами запрещены бинарные операции? Так это, как бы, правильно — кесарю кесарево, а слесарю слесарево. В тоже время это не вредит системному программированию, так как всегда можно преобразовать число в множество (BITS) и множество в число (ORD). Например, пусть есть число i: INTEGER, хотите обнулить старшие четыре бита, вуаля:

    СГ>
    СГ>i := ORD( BITS(i) - {28,29,30,31} );
    СГ>


    Нет, ну я фигею, что за изврат, а...
    Тут без бутылки фиг поймёшь, это ты и называешь понятным и классным?
    по мне дак вот такая бы запись была бы гораздо понятней:

    i := ORD(BITS(i) AND BITS (0,0,0,0, 1,1,1,1, 1,1,1,1, 1,1,1,1,)


    а вычитание совсем не логичная операция, да и запись битов тоже хрен разберёшь,
    я понимаю, что по вирту, чем туманней, тем круче, но жизнь требует совсем иного, имхо
    Re[4]: Oberon???????????????????????????????????
    От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
    Дата: 22.10.04 15:59
    Оценка: :))
    Здравствуйте, VladD2, Вы писали:

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


    LVV>>Хочется альтернативный синтаксис показать.


    VD>1. Что в нем альтернативного? Та же императивщина, толко вместо скобок бегин с эндом, а вместо "=" используется ":=". Если уж показывать, то наврено лучше действительно какие-нибудь Хаскели и Питоны.

    VD>2. Показать и научить две большие разницы. Показывать можно сколько влезет хоть десять языков. А на учение время нужно.

    LVV>>Хотя я и о яве, и о дотнете с до диезом думал.


    VD>Я бы на этом и остановился.


    Ну зачем же. Я бы добавил еще и 1С!!!
    Оптимально 1С,С#,Delphi + Хаскели и Питоны
    и солнце б утром не вставало, когда бы не было меня
    Re[2]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.10.04 00:07
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Форум открыт по просьбам читателей сайта проекта


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

    СГ>для обсуждения Оберона/Компонентного Паскаля/Блэкбокса как технологической платформы для современной общей системы преподавания программирования, параллельной и дополняющей систему преподавания математики. Мнения за и против, вопросы как и почему, и т.п.


    СГ>Характер форума предполагает максимальную корректность высказываний: модераторы удалят без предупреждения любые сообщения с вульгарным или неуместным контентом, переходом на личности и т.п.


    А высказываения "против" являются вульгарным или неуместным контентом?

    И вообще, это что такая завуалированная просба пойти высказаться против всех желающих? По-моему, большинство высказавшися в этом форуме однозначно дали понять, что детей не нужно учить мертвячине вроде Оберона. Учите их современным языкам вроде Явы и Шарпа (как кстати и написано в конце первого пункта этой программы). Поверьте, эти языки ни чем не хуже Оберона, но они рельно применяются на практике, а не являются академическими изысками.

    ЗЫ

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

    ЗЗЫ

    Почитал форум по данной ссылке... Забавно там вам тоже доказывают, что не нужно морочить Обероном голову детям. Но вы не завайтесь!
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[11]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 24.10.04 08:44
    Оценка: +2
    Здравствуйте, VladD2, Вы писали:

    VD>Еще раз повторюсь. Шарп я смотрел после С++ и Дельфи. Языки конечно разные (и сильно) но концепции то схожи. И благодоря интуитивности синтаксиса чтение мануалов не требуется. Смолток же это вещь в себе. Его принципы очнь долеки как от мэйнстрим-продуктов, так и от оптимальной реализации. Спасибо этому почтенному языку за то, что двинул всю индустрию в перед. Пусть теперь отдахнет на пенсии.

    Ну, Влад, просто имхо дело в том, что при разработке C# были вложены нехилые бабки именно в то, чтобы ты сел за него, и практически без книжек в него вьехал. Это не случайность, это просто полное понимание разработчиками языка потребностей своей аудитории. А смоллток разрабатывался не заради аудитории, а заради возможностей. Кстати, его принципы ты поминаешь совершенно зря. Некоторые вещи, от которых ты сейчас так плюешься, перекочуют в С# в самом ближайшем будущем. Как там у нас на Старшей речи было?
    1 to: 10 do: [:each | Transcript show: each]


    Ага. Давайте переведем на C#:
    Transcript = new TextCollector();
    foreach(int each in Range(1, 10))
    {
      Transcript.Show(each);
    }

    Это мы предположили, что Range возвращает IEnumerable.
    Или даже так:
    Transcript = new TextCollector();
    Range(1, 10).Do(delegate(int each) { Transcript.Show(each); });

    Я, конечно же, схитрил. Для того, чтобы получить полный аналог SmallTalk, пршлось бы добавить метод ToDo в System.Int32(как это, собственно, и сделано в SmallTalk.):
    1.ToDo(10, delegate(int each) { Transcript.Show(each); });
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[3]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.10.04 13:15
    Оценка: +2
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>Имхо, ты везде приводишь более-менее верные и логичные аргументы, но не прав в главной своей мысли: "Все пишут на Яве и Шарпе, поэтому учить больше ничего не надо".


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

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

    Однако я совершенно не понимаю зачем начинать учить детей с экзотики вроде СмолТока или с мертвячины вроде Оберона. Если человеку будет интересно, он этот Оберон и сам выучит. Ну, а не хватит времени или усидчивости, так и фиг с ним. А так получится, что человек выучит оберон, прийдет на работу, а там: С++, Ява, Дельфи, Шарп и т.п. Хочешь не хочешь, а прийдется переучиваться. Причем именно переучиваться, так как Вирт принципиально навязывает свои "привычки". Даже в Дельфи и Васике появился оператор "ретон". А у Вирта свой взгляд на мир. Он учит if-ы вкладывать. Причем начиная учить детей на Обероне им в первую очередь навязывают стиль, а не объясняют принципы построения грамотного кода. В итоге получим зазубрышей резко отвергающих то все промышленные языки и не знакомых банальными понятиями вроде абстракции, наследования, полиморфизма.

    ЗХ>Я считаю, что изучение других языков программирования идет не в минус (забиваем голову ненужной информацией), а в плюс. И не потому, что СмолТолк кому-то может пригодиться (ой, сумлеваюсь), а по очень простой причине: расширение кругозора. Просто понять, что "и такое бывает". Подцепить полезный метод или идею. В конце концов (в парадигме начального вопроса Валерия Викторовича) — просто осознать, "что не в любом языке программирования есть фигурные скобки".


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

    ЗХ>Возьмем, например, меня .

    ЗХ>В контексте давнего спора про то, какой язык кому нравится, могу слегка скорректировать свое тогдашнее мнение: "я люблю С++ и пока это возможно, буду писать только на нем", но сейчас собираюсь покупать Рихтера про Шарп. Не потому, что хочу на него перейти — интересно, что нового, чем он отличается; как нужно "думать на Шарпе". А и кроме того, книжки, которые валяются на винте, и которые я уже изучил или собираюсь в ближайшем будушем, посвящены языкам: Ada, Assembler, Awk, C--, C++, C#, Delphi, Eiffel, Euphoria, Forth, Go!, Haskell, Java, Lisp, OCaml, Oz, Perl, PHP, Prolog, Python, Refal, Small, Smalltalk, Tcl, VB.

    Здорово. На винтах у меня правда тоже валяется черти что. Но о некоторых языках я даже не слышал. Например, что такое Refal и Go! я не знаю.

    Кстати, очень хороший списак. Как по твоему Оберон и СмолТок заслуживают больщего внимания чем все перечисленные тобой тут языки?

    Вот по-моему нет. Вот я и предлагая в качестве первого языка выбрать один из языков мэйнстрима, а потом уже приступать к изучению всего остального. Я даже считаю, что здорово было бы изучать параллельно языки имеющие разные парадигмы. Тогда возможно было бы можно избежать ломки понимания.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[4]: Мэйнстрим vs. Самосовершенствование :)))
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 25.10.04 08:07
    Оценка: -2
    Здравствуйте, VladD2, Вы писали:

    VD>.....появился оператор "ретон". А у Вирта свой взгляд на мир. Он учит if-ы вкладывать.


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


    VD>.....Причем начиная учить детей на Обероне им в первую очередь навязывают стиль, а не объясняют принципы построения грамотного кода....


    А вот компетентные в этом вопросе люди утверждают обратное. Ссылки я уже неоднократно приводил.
    Re[8]: Мэйнстрим vs. Самосовершенствование :)))
    От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
    Дата: 26.10.04 04:35
    Оценка: :))
    Здравствуйте, VladD2, Вы писали:

    ЗХ>>Хотя круче С++ языка нет, не было, и не надо, а C# — конъюнктурная поделка Мелкософта

    VD>Однако учить С++ лучше уже окрпшим умом. А то можно и кршу потерять.

    Истинно так. Так и становятся програмистами. Ну, теми, для которых программирование — диагноз.
    ... << RSDN@Home 1.1.3 stable >>
    Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
    P.S.: Винодельческие провинции — это есть рулез!
    Re[3]: Мэйнстрим vs. Самосовершенствование :)))
    От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
    Дата: 26.10.04 04:35
    Оценка: :))
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>А еще кто-то умный говорил, что программисту полезно знать основы генетики. Сильно развивает восприятие.

    ЗХ>Думаю, про многие другие науки/дисциплины можно сказать то же самое (что их полезно знать программисту).

    Угу:
    — философия;
    — риторика;
    — психология и азы психиатрии;
    — логика;
    — основы лингвистики.

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

    ЗХ>Во. Типа dixi.

    ... << RSDN@Home 1.1.3 stable >>
    Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
    P.S.: Винодельческие провинции — это есть рулез!
    Re[10]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 09:42
    Оценка: :))
    Здравствуйте, Sinclair, Вы писали:

    СГ>>То есть сначала надо будет объяснить что такое namespace, class, static void Main, ее аргумент string[] args, вот этого кракозябла [STAThread] — объяснить. Не хило?


    S>А можно в ответ привести минимальную программу на обероне?

    MODULE MyModule;
    
    IMPORT StdLog;
    
    BEGIN
      StdLog.String("Здравствуй мир!");
    
    END MyModule;



    Примеры простейших программ:
    http://www.inr.ac.ru/~info21/cpascal/primery.htm
    Re[4]: Обновление
    От: LaptevVV Россия  
    Дата: 26.10.04 12:38
    Оценка: :))
    Здравствуйте, Kh_Oleg, Вы писали:

    СГ>>Сегодня сайт проекта Информатика 21 был серьезно обновлен. Заходите смотрите.

    СГ>>Основная новость: к концу 2004 года ожидается открытие исходного кода BlackBox.

    K_O>А мне очень понравилась вот эта статья:

    K_O>О дисциплине программирования
    А вот с того же сайта

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

    В начале 2002 г. Майкрософт на месяц приостановила нормальную работу, чтобы программистский персонал мог специально сосредоточиться на проблемах безопасности и надежности программ. Если оценить количество программистов Майкрософт в 20 тысяч человек при зарплате от $150 тыс. в год и выше, то стоимость месячника повышения квалификации выйдет не меньше 250 миллионов долларов. Майкрософт в состоянии это себе позволить. Остальным, видимо, все же дешевле перейти на инструменты программирования, где проверки индексов массивов не отключаются. Впрочем, и сама компания Майкрософт в настоящее время переходит на платформу .NET, в которой главный язык программирования — т.наз. C# — смоделирован во многом, в том числе и в отношении безопасности программирования, по образцу Оберона.

    К вопросу о священной войне Губанова и Влада
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[14]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 13:38
    Оценка: -1 :)
    Здравствуйте, Sinclair, Вы писали:

    СГ>>1) Существуют модули

    S>Что такое модули? Или это в седьмом классе понятно всем и без объяснения?

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

    СГ>>2) Один модуль может импортировать другой модуль

    S>Что значит импортировать?

    Опять на это можно прямо пальцем показать, вот так, мол, смотрите, один модуль пользуется услугами другого модуля...

    СГ>>2) Существуют классы (еще одна непонятность — что еще за классы? Классы чего? Мы в седьмом классе учимся и что с того?)

    S>Верно. Что-то все-таки надо детям рассказывать.

    То-то и оно!

    СГ>>3) У классов есть статические методы (опять ребенку непонятно что такое статические и что такое методы, в чем разница между подпрограммами и методами?).

    S>А при чем тут подпрограммы? Кто-то считает понятие подпрограммы присутствующим в детской голове прямо с рождения? Лично я в седьмом классе колбасил арканоиды безо всяких подпрограмм. Так что это — заблуждение. И вводить понятие метода ничуть не хуже, чем начинать с каких-то подпрограмм.

    Метод — это подпрограмма (процедура) ассоциированная с контекстом исполнения — объектом, т.е. ввести понятие метода сложнее чем ввести понятие подпрограммы (процедуры).

    СГ>>Что такое void? Почему именно Main?

    S>Да. с Void придется повозиться.

    Опять, то-то и оно.

    S>Итак, пока что у нас Оберон — C# идут один-в-один, за исключением void. Во всем остальном паритет.


    А еще за исключением class, Main, static,...
    Re[15]: Oberon???????????????????????????????????
    От: Павел Кузнецов  
    Дата: 26.10.04 17:44
    Оценка: +2
    VladD2:

    > Он не типизированный.


    Не путаем "не типизированный" и "динамически типизированный" — суть разные вещи
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[17]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 26.10.04 18:52
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Что непонятного-то, выбросил пространтсво имен — вот упрощенная версия,

    Что значит "выбросил"? Не стал использовать — это более правильно.
    СГ>захотел написал System.Console, а захотел не написал.
    СГ>Захотел написал тег [чего-то], а захотел не написал — все это является "сокровенным", неявным, недоговоренным.
    Я фигею. То есть ты сначала критикуешь программу на C# за то, что в ней используется больше концепций, чем в Обероне. А затем ты критикуешь другую программу за то, что в ней не используются эти концепции, так что ли? По-моему, у тебя с логикой некоторые проблемы.
    СГ>А в Обероне программа что для школьника будет такой как я ее написал, что точно так же для профессионала — никаких изменений и корректировок.
    Ничего не понимаю. То есть в Обероне нет никаких концепций, кроме несчастных четырех ключевых слов и термина "подпрограмма"? Что-то мне подсказывает, что на Обероне можно не только хелловорлды писать. Давай я сейчас твою программу поругаю за то, что ты мог использовать классы, но не использовал. Мог применить WITH — но не применил. Что за недоговоренности? Скрываем от детей правду?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[11]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 26.10.04 18:54
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А в оберонах ее скрывать не надо — ее там нет. Нет "сокровенных", "замалчиваемых", "скрытых", "недоступных для широких слоев" тайной информации.

    Вообще-то ее и в Шарпе нет. Спецификация открыта. Так что не надо ля-ля среди взрослых людей заниматься.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[14]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 07:44
    Оценка: -1 :)
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Между модулями и классами-то?


    VD>Да. Для начального понимания разницы почти не какой. Та же область определения методов и переменных.


    Ну вот, правильно, типичный принцип сокрытия "сокровенных знаний"....

    А разница между прочим на столько громадна, что даже не смешно. Перво-наперво надо объяснить КУДА писать исходный код программы. Модуль — это и есть то самое место куда надо писать исходный код программы, в том числе код классов надо писать внутрь модуля. Но Вы, будучи воспитанными на немодульных языках программирования, этого не знаете и код программы Вы пишите просто в текстовый файл.
    Re[15]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 27.10.04 07:51
    Оценка: :))
    Здравствуйте, Сергей Губанов, Вы писали:
    СГ>Ну вот, правильно, типичный принцип сокрытия "сокровенных знаний"....

    СГ>А разница между прочим на столько громадна, что даже не смешно. Перво-наперво надо объяснить КУДА писать исходный код программы. Модуль — это и есть то самое место куда надо писать исходный код программы, в том числе код классов надо писать внутрь модуля. Но Вы, будучи воспитанными на немодульных языках программирования, этого не знаете и код программы Вы пишите просто в текстовый файл.

    Гм. А можно критерии отличия текстовых файлов от модулей? А то я может, по незнанию, совсем не туда код-то пишу...
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[17]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 27.10.04 09:10
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>не синтаксическая конструкция? Модуль вполне можно локализовать как синтаксически, так и физически (единица компиляции и единица исполнения). А пространство имен локализовать нельзя, оно размазано по куче файлов. А для того чтобы показать пальцем надо именно локализовать.


    А зачем его локализовывать? Влад ведь правильно сказал — пространство имен это чисто логическая концепция, физически никакого пространства имен не существует. Если начать без юзингов, а потом объяснить что юзинг это просто способ избавится от лишней писанины (как with к примеру), то даже школьники все прекрасно поймут, поскольку концепция не требует абсолютно никаких дополнительных знаний.
    А вот модуль уже куда более сложная концепция, поскольку чтобы ответить на вопрос "а нафига он вобще нужен" требуется объяснять принцип разделения кода по физическим единицам хранения, в отличие от дотнета, в котором до поры до времени можно на понятие сборки спокойно забить.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    AVK Blog
    Re[17]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 27.10.04 09:14
    Оценка: +1 :)
    Здравствуйте, Сергей Губанов, Вы писали:
    S>>Гм. А можно критерии отличия текстовых файлов от модулей? А то я может, по незнанию, совсем не туда код-то пишу...

    СГ>Модуль — это самая большая структурная единица программы, содержащая внутри себя все остальные.

    А, ну тогда все в порядке. Поскольку эта структурная единица содержит в себе все остальные, то я никак не промахнусь с написанием кода. Вот ведь как получается-то! Я оказывается код тоже в модулях писал. А вовсе не в каких-то текстовых файлах, как меня WinDiff убеждает.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[25]: Component Pascal
    От: Kluev  
    Дата: 27.10.04 09:51
    Оценка: :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Чем Вам такая штуковина не нравится в качестве интерфейса:


    СГ>
    СГ>TYPE
    СГ>  Store = POINTER TO ABSTRACT RECORD
    СГ>    (s: Store) Internalize- (VAR rd: Reader), NEW, EMPTY;
    СГ>    (s: Store) Externalize- (VAR wr: Writer), NEW, EMPTY;
    СГ>  END;
    СГ>


    СГ>
    СГ>TYPE
    СГ>  MyObject = RECORD (Store)
    СГ>    ...    
    СГ>    (t: MyObject) Internalize- (VAR rd: Reader);
    СГ>    (t: MyObject) Externalize- (VAR wr: Writer);
    СГ>    ...
    СГ>  END;
    СГ>


    Что не нравится лично мне так это синтаксис. Самое смешное что почтенный дядюшка Вирт наезжал на сишный оператор присваивания = , типа мол не могу обяснить сыну почему х = y это не тоже самое что у = х.

    Интересно TYPE Store = POINTER TO ABSTRACT RECORD это тоже самое что POINTER TO ABSTRACT RECORD = TYPE Store или что-то другое?
    Re[19]: Мэйнстрим vs. Самосовершенствование :)))
    От: kbasil Россия  
    Дата: 28.10.04 01:38
    Оценка: +2
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>>>>>ОК, учтем. PL/I я просто не видел еще, интересно.

    AVK>>>>Лучше бы тебе его не видеть
    ЗХ>>>Теперь точно буду смотреть... Заинтригован.

    LVV>>Тогда ищи книжку Лепин-Дмитрюков. Программирование на PL/I (или ПЛ/1 )

    ЗХ> И где мне ее искать? В инете нету, а к библиотекам институтов доступу, как сами понимаете, уже тоже нету

    В букинистическом магазине Вариант: поищи на ВЦ, где стояли ЕС-ки и т.п. М.б. в макулатурных завалах документация осталась. Только учти — документация на ПЛ/1 неообозрима
    Re[27]: Component Pascal
    От: WFrag США  
    Дата: 28.10.04 12:07
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Вот напугал. А в Zonnon-е есть абстракция еще более крутая чем интерфейс, называется definition.


    СГ>definition подобны interface плюс следующие фичи:


    СГ>1) definition кроме методов могут включать в себя еще и переменные

    СГ>2) definition может иметь предопределенную реализацию (implementation) некоторых методов.

    Проанализируем с точки зрения Java (хоть она и не упоминалась в контексте предыдущего сообщения).

    Для Java (например) это были бы вредные фичи. Интерфейс — это контракт на поведение, абсолютно без намеков на реализацию.

    Пункт второй привносит зависимость от реализации в интерфейсе (интерфейс здесь и ниже имеется ввиду как Java-интерфейс + 2 вышеприведенных пункта) — что нарушает такой принцип как stable Abstractions Principle — абстрактные сущности должны быть стабильны. А зависимость от реализации делает сущность (интерфейс + 2 приведенных пункта) нестабильной.

    Пункт первый, кстати, вреден по той же причине. Переменные — часть реализации. А вот свойства — это часть интерфейса, они хоть и зло (поскольку описывают не поведение, а содержание), но зло меньшее чем переменные (переменные в моем понимании — поля в Java-классах).

    Так что с моей точки зрения эта "более крутая абстракция" либо плоха, либо просто предлагает другую концепцию, нежели "классическое"ООП (в моем понимании, конечно ).

    P.S. Тем не менее я согласен с тем, что подключения предопределенных реализаций интерфейсов полезная штука (при отсутствии множественного наследования).

    P.P.S. Так, мысли вслух, про Zonnon ничего не знаю
    Re[22]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 13:01
    Оценка: -2
    Здравствуйте, eugals, Вы писали:

    E>Кстати, очень удобно. Ещё никто не жаловался, даже наоборот...


    Ну, да. Очень удобно. Если не думать о последствиях. На Перле тоже очень удобно писать...

    E>Если сильно захотеть, это можно конечно назвать неявным приведением к типу, но можно и не называть.


    Это если очень захотеть, то можно попробывать не назвать вещи своими именами. А по факту — это неявное приведение с понижением. Половина опечаток пропрет даже глазом не моргнешь.

    E>В шарпе, при подстановке в foreach у последовательностей неявно запрашивается IEnumerable. Это тоже плохо?


    Это понижающее приведение. С ним ошибок быть не может.

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


    При понижающем приведении это нормально. Но когда int приводится к bool или список приводится к bool, то это уеж чревато ошибками.

    Ну, а объявление переменной при первом использовании, да еще и внутри вложенных блоков с видимостью во вне — это просто бардак. Тут еже баги будут пить дать.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[11]: Обновление
    От: _Obelisk_ Россия http://www.ibm.com
    Дата: 28.10.04 13:18
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Именно поэтому все из перечисленных Вами языков были отвергнуты. В качестве стандарта был выбран Component Pascal на котором коряво программировать не получится.


    На любом ЯП допускающим определение переменных и процедур (функций) можно написать корявую программу просто
    проименовав все переменные как V1, V2,V3,...V1001 и процедуры как P1,P2,...P1234 и не ставить коментарии вовсе.



    Душа обязана трудиться! (с) Н.Заболоцкий.
    Re[10]: Обновление
    От: Павел Кузнецов  
    Дата: 28.10.04 19:49
    Оценка: +2
    VladD2:

    > СГ> Но он действительно по-дилетантски спроектирован.


    > С теми условиями (сохранение обратной совместимости с С) сделать нечто другое было просто невозможно. Почти все отрицательные черты являются следствием наследия С. А то что спроектировал Страуструп более мнее неплохого качества. Можно было конечно сделать и лучше, но уж дилетанством — это не назавешь.


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

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

    Существенных недостатков у Оберона & co. в качестве учебных языков тоже особенно не видно, поэтому говорить о том, что на Обероне обучать плохо, тоже, по-моему, ни к чему. Кому нравится — пусть обучает на этих языках... В общем, учебные языки, как учебные языки

    По-моему, намного большее значение для обучения программированию имеет не язык, а квалификация преподавателей, коей лучше бы и уделялось должное внимание. А в остальном, как давно установлено, there is no silver bullet.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[14]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:00
    Оценка: :))
    Здравствуйте, Sinclair, Вы писали:

    S>Ну, ребята. Нельзя же так вольно с терминологией! Ну где ты увидел здесь объект, который объектом не является?


    Не не въехал! Там же нет префикса std::, а это теперь считается неграмотным. И вообще, если все методы (пусть и статические) помещать в класс к которому они относятся, то любой дурак нажав точку в IDE получит их список. А это уже покушение на место проффесиональных программистов! Ведь раньше только они знали где отрыть нужный метод! Вот как по-твоему найти метод бинарного поиска в СТЛ? Аа... слабо?! (зларадно) А вот Паша уже знает. И он нам свое место не за что не уступит.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[9]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Какие Вы демонстрируете глубоки познания! exit — это в Си/Си++ завершение приложения, а в борландовском Delphi/Pascal exit — это выход из процедуры, а завершение программы Halt();


    С каких пор Паскаль стал равен Дельфи?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[8]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 29.10.04 21:05
    Оценка: +2
    Здравствуйте, VladD2, Вы писали:

    AVK>>Дело не в этом, дело в том что на изучение шарповских фичек нужно банально больше времени.


    VD>Дык никто же не заставляет все учить.


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

    VD> Но уж за время обучения в институте такой язык как шарп можно уж точно освоить.


    Это если он один. В институте (по крайней мере на специальностях 220Х) ведь никто не читает курс язык программирования ХХХ. Курсы называются "основы системного программирования", "системное программное обеспечение", "алгоритмы и структуры данных" и т.п. Никто неставит целью именно изучить язык, надо побыстрее научить что то делать на каком либо языке, а потом объяснять основное наполднение курса. На фоне этого языки с удобными, но неконцептуальными наворотами менее выгодны.

    AVK>> Например посмотри реализацию событий. В джаве события реализуются при помощи интерфейсов, т.е. если человек уже знает про концепцию интерфейсов, то про события ему вобщем то уже объяснять не нужно.


    VD>Гы. Хороший пример. Боюсь на объяснение концепций событий из Явы уйдет в разы больше времени, чем на объяснение событий в Шарпе.


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

    VD> А если вспомнить все эти неявные ссылки на родительские классы из вложенных...


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

    AVK>> В шарпе же нужно объяснить что такое делегат, потом что такое мультикаст делегат, потом что такое собственно эвент.


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


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

    AVK>>Единственное в чем джава сложнее шарпа, это в концепции вложенных классов.


    VD>Гы. А не на них ли теперь события делают?


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

    VD>К тому же сложностей хватет. В Яве все недостоющее эмулируется. А эти эмуляции тоже объяснять нужно.


    Значительно проще, поскольку вся механика явная.

    VD> То же применение массивов вместо ref/out модификаторов у параметров объяснять прийдется очень подробно.


    Еще раз — применение массивов это чисто практическая фишка, для обучения ее объяснять не нужно и даже вредно. В стандартной библиотеке такой финт ушами не используется.

    AVK>>Тебе часто приходится использовать ref и out?


    VD>Приходится. А что? Или типа передача ссылок и out-параметры — это не важный аспект обучения?


    Смотря какого. Для ремесленника важный, для инженера не очень.

    AVK>>И опять же — для обучения предпочтительнее для этого использовать ... нет, не массивы, а специально созданные классы, содержащие совокупность параметров.


    VD>Ну, это верх изврата.


    Нет, это правильный подход к проектированию, когда лень не мешает это делать. Сколько раз встречаются ref и out в библиотеке фреймворка?

    AVK>>От некоторых вещей отмазаться не получится, например от боксинга и структур.


    VD>Опять же или прийдется эмулировать их, или умолчать. Оба случая не в пользу Явы.


    Явная механика боксинга для обучения безусловно предпочтительнее, поскольку все сразу видно. А вот неявный боксинг приведет новичков к проблемам. Что регулярно находит подтверждение в дотнетовском форуме.
    ... << RSDN@Home 1.1.4 beta 3 rev. 216>>
    AVK Blog
    Re[25]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 30.10.04 16:22
    Оценка: +2
    Undying:

    > ПК> Дык, это уже речь пошла о каких-то более специализированных классах, не столь универсальных, как стандартные Array, List etc. В этих специализированных классах, для которых сортировка является не "утилитой", а основным поведением, сам байт велел делать функцию sort() членом.


    > Говорим-то мы о общих подходах к проектированию.


    +1. Я только хотел подчеркнуть, что, с моей точки зрения, общим подходом должно быть принятие подобных решений в частном порядке. И иногда, учитывая все за и против, прибегать к более сложным паттернам, а не просто ограничиваться наследованием и "ужирнением" интерфейсов (interface bloat), "пытаясь писать в ОО-стиле".

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


    В качестве одного из предусловий я упомянул, что код, использующий классы, разработчиками напрямую не контролируется. Соответственно, к изменению семантики некоторой функции в библиотечном классе я отношусь крайне настороженно, представляя последствия замены использования в методе Array.sort() функции stable_sort() (сохраняющей порядок "одинаковых" элементов) на более быструю (в некоторых случаях) quick_sort()... В этих условиях, имхо, изменение семантики как раз совершенно недопустимо.

    Да и в других случаях, когда весь код в нашем распоряжении, мы далеко не всегда готовы проводить анализ всех использований, необходимый для подобных "молчаливых" изменений семантики базовых компонент. Я бы скорее согласился, если бы были изменены места, где используется данный класс. Естественно, если все было спроектировано на совесть, дублирования аналогичных вызовов Array.sort быть не должно, т.к. доступ к некоторому Array должен контролироваться одним классом, и, соответственно, в данном классе, представляющем абстракцию уровня кода приложения, изменять семантику подобных методов вполне допустимо. Воздействие таких изменений, в отличие от правки общих компонент, ограничены и предсказуемы, т.к. соответствующая сортировка привязана к контексту, и ожидания от нее хорошо известны.

    > Я могу с тобой согласиться, что решение с добавлением Sort'а в коллекции является не совсем концептуально чистым (прежде всего из-за использования реализаций классов, а не минимально нужного набора интерфейсов — в статичном Array.Sort в частности), но пользоваться этими коллекциями очень удобно <...>


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

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


    Ага. А теперь представляем ситуацию, что часть ArrayList'ов мы получаем в "готовом" виде, из библиотечных функций, а часть, своих оберток, создаем сами... Боюсь, в результате, работать по-разному с по-сути одинаковыми контейнерами будет не очень удобно. Впрочем, здесь каждый сам для себя выбирает...

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


    Я придерживаюсь концепции, рекомендующей по умолчанию помещать методы в класс, являющий субъектом, а не объектом действия, предоставляя в объекте достаточный для реализации намерений субъекта интерфейс. В частности, возвращаясь к твоему примеру, мы говорим: "(Мы) толкнем шарик с силой F" (скорее, даже: "Передать шарику импульс P") Но это уже софистика, т.к. в том, что у шарика неизбежно будет какой-то метод, принимающий воздействие, ты, естественно, прав.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[20]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 15:45
    Оценка: :))
    Здравствуйте, Mamut, Вы писали:

    M>А если я всю программу заглавными буквами напишу?


    Дык, Вам ни что не мешает и разными цветами каждую букву раскрасить, благо возможности редактора это позволяют.
    Re[23]: Обновление
    От: Кодт Россия  
    Дата: 01.11.04 17:39
    Оценка: +1 :)
    Здравствуйте, Sinclair, Вы писали:

    S>В общем, я зверств-то не хуже Вирта могу попридумывать.


    Примерно так народ с перфокартами трахался.
    Только там был ещё один пункт, о котором ты забыл: write-only memory. То есть ты, как дурак, топчешь клавиатуру перфоратора, а он тебе показывает лишь номер текущей позиции. Сбился? Отмена, и всю строку заново. Как пароль со звёздочками (до 72 штук). Вот только если ты облажался с паролем, тебе сразу скажут. А перфоратор — он тупой. Пробивает перфокарту, ты берёшь эту колоду и идёшь к машине. Пуск... Авотхрен.
    В больших ВЦ, помимо этого, существовал пространственно-временной лаг между программистом и машиной — девочки-наборщицы. Там время перекомпиляции (иногда по вине девочки) занимало до суток — пока очередь подойдёт.

    (Мне в детстве удалось поиграть у отца на работе — Fortran-4 на ЕС-1035. Вещ. С непривычки по полколоды шло сразу в макулатуру. Потом наловчился).
    Перекуём баги на фичи!
    Re[30]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 19:16
    Оценка: -2
    Здравствуйте, prVovik, Вы писали:

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

    V>Для всего остального подойдет внешний обобщенный алгоритм сортировки типа std::sort()

    А для всех остальных он просто не нужен. Он реально нужен именно в классе вроде вектора.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[31]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 04:36
    Оценка: +2
    VladD2:

    > Процетирую последнюю ссылку: <...> В ней только стеб над твоей любовью к std:: и нежелаение признавать, что и по другому можно. Призывов делать только так как сделано в Яве и дотнете нет. В прочем как и их упоминания.


    1) Я не упоминал STL.
    2) Я вполне согласен, что можно делать по-другому. Также я понимаю и недостатки делания "по-другому" (впрочем, равно как и достоинства). Именно поэтому в первом сообщении я сказал, что вопрос это спорный.
    3) В Java сделано не так, как в .Net. А именно, в Java, как уже много раз было указано, функция sort() вместе с остальными утилитами типа binarySearch(), fill() и т.п. вынесена в "namespace" java.util.Arrays, который сделан классом только из-за невозможности иметь в Java "свободные" функции. Так что, если уж поминать STL, то в этом отношении в Java сделано скорее ближе к тому, как в STL, чем к тому, как в .Net

    >>> Может быть просто признать тот факт, что это ты пыташся выдать свое мнение за единстванно верное и тем самым навязать его, а я все го лишь говорю, что считаю иначе?


    > ПК>Какое именно мое мнение?


    > О том что все не приметивные методы нужно делать глобальными функциями.


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

    > И наезды на статические методы Sort в Яве.


    sort() в Java является статической функцией отдельного "класса" java.util.Arrays, не Array. Сделан он классом чисто номинально, т.к. "свободных" функций в Java нет. Никаких претензий или наездов на библиотеку Java по этому поводу у меня нет. Единственное, на что я обратил внимание, так это на то, что авторам библиотеки пришлось имитировать namespace с помощью класса из-за своеобразности языка. Об этом же, насколько я его понял, говорил и INTP_mihoshi. Синклер попросил пример — ему его привели. Точка.

    Вся дальнейшая дискуссия — результат твоих реплик по совершенно другой теме, а именно предпочтению тобой размещения sort() "в самом классе, к которому она относится", "чтобы IDE показывала список методов при нажатии на точку".

    > ПК> Ты опять пропустил, что началось все с того, что ты зачем-то приплел в разговор размещение sort() и т.п. "в классе, к которому они относятся", хотя речь шла совершенно о другом. Как я мог навязывать кому-то свое мнение, если я до твоего высказывания даже не упоминал?


    > Нда. Связь с реалией снова потерен.


    Очень похоже на то.

    > Вот сообщение
    Автор: Павел Кузнецов
    Дата: 28.10.04
    в котором ты ты приплел Явовский класс со списком исключительно статических методов (гы-гы) и начал изливаться про инварианты. А вот здесь ты как раз преплел методы sort из этого многострадального класса.


    И? Как это все относится к тому, помещать ли функцию sort() в класс Array?

    > Далее тебе кто-то замети, что методы статические, но тебя было уже не остановить. Ты и это как-то обосновал.


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

    > Хотя как в Яве могут быть методы не экземплярные и не статические одновременно?


    Елки-палки, лес густой Я именно об этом вместе с INTP_mihoshi и говорил, что в Java нет "свободных" функций, и поэтому приходится создавать "липовые" "классы" вместо namespace. Никаких претензий к дизайну библиотеки Java в этом отношении у меня нет и не было: разработчики сделали лучшее, что позволил им язык.

    Чтобы тебе было окончательно ясно, вот ссылка
    Автор: Павел Кузнецов
    Дата: 29.10.04
    на мое первое к тебе сообщение, в котором я, на мой взгляд, вполне ясно говорю о том, что твои претензии совершенно не по адресу, и что положение функции sort() вопрос абсолютно отдельный, не связанный с тем примером, который я привел.

    P.S. Честно говоря, я уже окончательно потерял надежду что-то тебе объяснить. Сам не знаю, зачем я это сообщение написал, ибо, думаю, абсолютно бесполезно это...
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[22]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 02.11.04 10:59
    Оценка: -2
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>Набирать ключевые слова большими буквами противоестественно


    ЭТО ВСЕГО ЛИШЬ ВОПРОС ПРИВЫЧКИ.
    Re[29]: Мэйнстрим vs. Самосовершенствование :)))
    От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
    Дата: 02.11.04 14:32
    Оценка: +2
    Здравствуйте, AndrewVK, Вы писали:

    V>>

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


    AVK>О! Осталось только понять что многие алгоритмы сортировки требуют доступа к внутренним структурам, а, следовательно, являются примитивными методами. Так что цитата твоя таки не в тему.


    Парадоксально, но факт. Если алгоритм сортировки требует доступа к внутренним структурам, то это уже повод задуматься о добавлении соответствующих примитивных операций в интерфейс контейнера. Или... о том, что контейнер спроектирован с ошибками.
    ... << RSDN@Home 1.1.3 stable >>
    Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
    P.S.: Винодельческие провинции — это есть рулез!
    Re[28]: Мэйнстрим vs. Самосовершенствование :)))
    От: Undying Россия  
    Дата: 02.11.04 22:56
    Оценка: +1 :)
    Здравствуйте, Павел Кузнецов, Вы писали:

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


    ПК>Никаких из этих проблем не возникает, если "вспомогательные" алгоритмы (то есть не основные для самого класса, в данном случае SomeList) будут вынесены за пределы класса.


    Если говорить о утилитных классах, то в общем я с тобой согласен. Т.е. код программы можно разделить на три уровня: утилиты — обертки над ними — прикладной код

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

    Реальный код часто одновременно является и прикладным и оберткой, в этом случае он должен пользоваться обертками для всех ситуаций, кроме тех, которые он оборачивает.
    ... << RSDN@Home 1.1.2 stable >>
    Re[32]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 03.11.04 22:06
    Оценка: +1 -1
    Здравствуйте, Павел Кузнецов, Вы писали:

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


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

    ПК>
  • Есть два класса: Date и String. Методом какого класса является функции: 1) преобразования даты в строку; 2) преобразования строки в дату?

    Очень сильно зависит от того как интерпретировать Date (в дотнете он называется DateTime) строку у же давно почти все рассматривают как встроенный тип. По этому наличие в интерфейсе других типов методов преобразования в строку уже никого не спущет. Ну, почти никого. Стало быть метод типа to_s/ToStrong() прекрасно проходит. C Date сложнее. Тут можно считать, что это такой же системный тип и его применение тастолько часто, что удобно иметь его под ругой. С другой стороны можно скзать, что тип вроде DateTime все же не стольк часто используем и метод преобразования в строке хотя и был бы наиболее удобен, но приведет к захламлению строкового класса. В этом случае имеет смысл вынести метод преобразования в отдельный класс. Однако уж если мы работаем с DateTime, то преобразование в строку точно является часто используемой операцией.

    Тут можно применить некий компромисный подход. Можно реализовать метод конвертации в строку как экземплярный метод класса DateTime, а образтное преобразование поместить в статический метод DateTime. Собственно по этому пути пошли дотнетчики. В классе DateTime имется методы Parse, преобразующие строку в дату.

    Однако ребатки из МС все же дадумались реализовать специальный интерфейс для IConvertible позволющий преобразовывать стандартные типы универсальным обрзом. К сожалению реализация этого интерфейса не выведена наружу. Но если очень хочется можно воспользоваться приведением. Опять же в дело вступает ООП со вторым своим принципом — полиморфизмом:
    // Вариант с динамической типизацией
    static DateTime ToDateTime(object obj)
    {
        return ((IConvertible)obj).ToDateTime(null);
    }
    
    static string ToString(object obj)
    {
        return ((IConvertible)obj).ToString(null);
        // или: return obj.ToString();
    }
    
    // Вариант со статической типизацией в C# 2.0
    static DateTime ToDateTime<T>(T value) where T : IConvertible
    {
        return value.ToDateTime(null);
    }
    
    static string ToString<T>(T value) where T : IConvertible
    {
        return value.ToString(null); // IConvertible.ToString(IFormatProvider)
    }
    
    static void Main(string[] args)
    {
        Console.WriteLine(ToDateTime("01.02.2004").AddYears(2));
        Console.WriteLine(DateTime.Parse("01.02.2004").AddMinutes(10));
    }


    Кроме того имеется класс Convert туевой хучей методов, но они уже не примитивный парсинг или первед в строку, а довольно сложный и интеллектуальный конвертер иногда делающий дополнительные неявные приведения типов и т.п.


    ПК>
  • Методом какого класса является функции преобразования: 1) целого в строку; 2) строки в целое? Есть ли какое-либо отличие этого примера от предыдущего?

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

    ПК>
  • Есть два класса: Date и DateDifference. Методом какого класса являются функции: суммы/разницы двух дат, суммы/разницы двух DateDifference, суммы Date и DateDifference?

    Сумма двух дат это полный бред, а разница совершенно нормальное явление. Собственно разница и есть то что ты называешь DateDifference. В дотнете это называется TimeSpan. Совершенно интуитивно понятно, что работать в этом случае удобно (а значит нужно) с помощью перегруженных операторов. Честно говоря где объявлены эти операторы мне по барабану. Главное чтобы они не были объявлены глобальными функциями

    Пошел... глянул как осбтоят дела в дотнете. Операторы DateTime/TimeSpan и DateTime/DateTime объявлены в классе DateTime. Операторы TimeSpan/TimeSpan в классе TimeSpan. DateTime/TimeSpan можно было бы разместить где и в TimeSpan, а DateTime/DateTime физически нелзя разместить в чужом классе (намеренные ограничения языка).

    ПК>
  • Есть классы: Matrix и Vector. Методами какого класса являются функции: 1) умножения матрицы на вектор (результат — матрица); 2) умножения двух векторов по схеме "строка на столбец" (результат — матрица); 3) скалярного умножения векторов (результат — число); 4) афинных трансформаций вектора в соответствии с заданной матрицей преобразования?

    Пусть о Matrix и Vector голова болит у тех кто занимается математикой. Думаю, что рзницы с теми же DateTime/TimeSpan особой нет.

    ПК>И, наконец:


    ПК>
  • Есть классы, контролирующие размерность: Velocity (v, скорость), Acceleration (a, ускорение), Length (l, длина), Time (t, время). Методами каких классов являются функции, соответствующие следущим выражениям: 1) l = v * t; 2) v = l / t; 3) v2 = v * v; 4) a = v / t; 5) v = a * t; 6) t2 = t * t; 6) l = 1 / 2 * a * t * t

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

    Вот, кстати, хорошим прмером являются методы AddXxx из того же дотнетного DateTime-а:
    public DateTime Add(TimeSpan value);
    public DateTime AddDays(double value);
    public DateTime AddHours(double value);
    public DateTime AddMilliseconds(double value);
    public DateTime AddMinutes(double value);
    public DateTime AddMonths(int months);
    public DateTime AddSeconds(double value);
    public DateTime AddTicks(long value);
    public DateTime AddYears(int value);

    конечно без проблем было бы вынести это дело в отдельные функции. Но это было бы неудобно и приводило бы к возможности случайного неверного использования. Не создавать же для минут, секунд, часов и т.п. отдельные типы данных? Или не заниматься явной конвертацией этих понятий в TimeSpan? Когда я вызвают данне методы у экземляра даты, я прекрасно понимаю, что делаю и мои действия идут четко в конве моего мышления. Если же я вынесу их в глобальные функции, то я срузу получу:
    1. Жутчайшее неудобство поиска этих функций. На практике это приведет к тому, что многие их просто ненайдут и, в итоге, напишут собственные реализации (обычно более кривые).
    2. Мышление в привычных мозгу терминах и понятиях (добавить к дате временной срез, вычесть и даты другую...).
    3. Меньшую длинну имени функции, так как AddYearsToDateTime. Ну, или имена приводящие к неверному использованию этих методов.

    При этом я не вижу ни одного минуса у данного подхода в данном случае. И не нужно тут петь про наследование и т.п. Это, во-первых, не проблема (придуманная проблема не существующая в реальной жизни), а во-вторых, DateTime — это структура от котрой нельзя наследоваться.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
  • Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[21]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 07.11.04 13:32
    Оценка: -1 :)
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Называлась только ориентировочная дата, 2008 год.


    Гы. К этому моменту МС и Сан еще по ревизии языка произведут. Ох боюсь этот стандарт к тому времени уже мало актиульным станет.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[26]: Мэйнстрим vs. Самосовершенствование :)))
    От: Undying Россия  
    Дата: 01.11.04 20:57
    Оценка: 36 (1)
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>+1. Я только хотел подчеркнуть, что, с моей точки зрения, общим подходом должно быть принятие подобных решений в частном порядке. И иногда, учитывая все за и против, прибегать к более сложным паттернам, а не просто ограничиваться наследованием и "ужирнением" интерфейсов (interface bloat), "пытаясь писать в ОО-стиле".


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

    ПК>В качестве одного из предусловий я упомянул, что код, использующий классы, разработчиками напрямую не контролируется. Соответственно, к изменению семантики некоторой функции в библиотечном классе я отношусь крайне настороженно, представляя последствия замены использования в методе Array.sort() функции stable_sort() (сохраняющей порядок "одинаковых" элементов) на более быструю (в некоторых случаях) quick_sort()... В этих условиях, имхо, изменение семантики как раз совершенно недопустимо.


    Название функции должно однозначно определять то, что она делает, т.е. если функция называется Sort, то использование ее в качестве StableSort, даже если она в текущий момент действительно реализует сортировку сохраняющую порядок элементов, является хаком, а при использовании хака не нужно удивляться, если он отвалится в следующей версии.

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


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

    ПК> Естественно, если все было спроектировано на совесть, дублирования аналогичных вызовов Array.sort быть не должно, т.к. доступ к некоторому Array должен контролироваться одним классом, и, соответственно, в данном классе, представляющем абстракцию уровня кода приложения, изменять семантику подобных методов вполне допустимо. Воздействие таких изменений, в отличие от правки общих компонент, ограничены и предсказуемы, т.к. соответствующая сортировка привязана к контексту, и ожидания от нее хорошо известны.


    Вот это не понял, можно пояснить мысль примером.

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


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

    ПК>Ага. А теперь представляем ситуацию, что часть ArrayList'ов мы получаем в "готовом" виде, из библиотечных функций, а часть, своих оберток, создаем сами... Боюсь, в результате, работать по-разному с по-сути одинаковыми контейнерами будет не очень удобно. Впрочем, здесь каждый сам для себя выбирает...


    Не понял в чем проблема и зачем с ними по разному работать? Естественно у обертки есть конструктор принимающий ArrayList, соответственно преобразование в обертку производится одной строчкой: new Wrapper(arrayList).

    ПК>Я придерживаюсь концепции, рекомендующей по умолчанию помещать методы в класс, являющий субъектом, а не объектом действия, предоставляя в объекте достаточный для реализации намерений субъекта интерфейс. В частности, возвращаясь к твоему примеру, мы говорим: "(Мы) толкнем шарик с силой F" (скорее, даже: "Передать шарику импульс P") Но это уже софистика, т.к. в том, что у шарика неизбежно будет какой-то метод, принимающий воздействие, ты, естественно, прав.


    Но "Мы" опять же объект, а не функция.

    ПК>P.S. Кстати, хорошую аналогию ты подобрал. Представим, что нам часто приходится катать шарик по кругу. С моей точки зрения функция go_round интерфейсу шарика не принадлежит, являясь наглядным примером вспомогательного алгоритма, который стоит реализовать через "основной" интерфейс "шарика" (accept_impulse etc.).


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

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

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


    Т.е. рефакторинг ты не используешь? Т.к. рефакторинг как раз означает модифицирование кода с целью уменьшения имеющихся хаков (в частности "лишних" наследований) к минимуму.
    ... << RSDN@Home 1.1.2 stable >>
    Re[4]: Oberon???????????????????????????????????
    От: Kluev  
    Дата: 20.10.04 12:55
    Оценка: 21 (1)
    Здравствуйте, LaptevVV, Вы писали:

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


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


    K>>На питоне надо новичков учить. Прост как три копейки и в командном режиме может работать как калькулятор.

    K>>Более того в джаве только классы, а в питоне можно и с функций начать.
    LVV>Спасибо за идею. Литературу не подскажете, чтоб на любуду не отвлекаться.

    В качестве примера кодец на питоне:

    >>> for i in range(10) : print i
    
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>>


    Выполняется прямо в командной строке без компиляции, написания функции и т.п. ИМХО если учить то лучше питона не найти
    Re: BlackBox
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 13:54
    Оценка: 21 (1)
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Почитал я тут защитников Оберона, и задумался. Надо первачков учить.


    Слава богу!

    Смотрите проект Информатика 21

    http://www.inr.ac.ru/~info21/

    Цели проекта

    Помочь преподавателям вузов и школьным учителям информатики поднять обучение программированию до уровня сформировавшейся к началу XXI века стандартной парадигмы программирования, представленной системами Оберон/Компонентный Паскаль, Java и C#.

    Предоставить программистам (прежде всего "непрофессионалам": физикам, математикам, химикам, экономистам, лингвистам ...) ультра-современные — простые, эффективные и мощные — средства программирования для создания программ от процедур в 15 строк до комплексов с современными графическими интерфейсами.

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


    Самая академически выверенная версия Оберона на сегодняшний день есть Component Pascal. Реализация среды разработки под Windows от Oberon Microsystems среда называется BlackBox. Она совсем недавно стала бесплатной. Скачивать отсюда:

    http://www.oberon.ch/blackbox.html

    У info21 есть русификатор BlackBox-а, так что можно программы писать прямо на русском языке.

    Для более-менее начала серьезного знакомства гляньте сюда

    http://cern.ch/oberon.day

    В разделе Presentations особо гляньте на доклад:

    C. Pfister (Oberon microsystems)
    BlackBox: An Industrial-Strength Oberon Implementation
    http://cern.ch/oberon.day/talks/pfister.pdf

    Там хвастаются как на этом самом BlackBox написано ПО для ЭЛЕКТРОСТАНЦИИ!!!


    Форумы где можно пообщаться:

    http://progz.ru/forum/viewforum.php?f=49&amp;sid=1b298709ca8f03f474379a8a4b76f943
    http://www.delphikingdom.com/asp/talktopic.asp?ID=285
    http://qnxclub.net/modules.php?name=Forums&amp;file=viewforum&amp;f=14&amp;sid=2b25169c0d44448ddeb4180d614e9c7d
    Re[24]: Мэйнстрим vs. Самосовершенствование :)))
    От: Undying Россия  
    Дата: 30.10.04 14:27
    Оценка: 18 (1)
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Еще больше в "классическом ООП" принято "пинать" за работу непосредственно с классом, а не через какой-либо интерфейс.


    Согласен.

    ПК> Соответственно, если поступать по канонам, то в приведенном примере иерархию нужно будет чуть-чуть усложнить:

    ПК>
    ПК>interface Sequence<T>;
    ПК>interface RandomAccessSequence<T>;
    ПК>interface List<T> : Sequence<T>;
    ПК>interface Array<T> : RandomAccessSequence<T>;
    ПК>class ListImpl<T> : List<T>;
    ПК>class ArrayImpl<T> : Array<T>;
    ПК>

    ПК>соответственно, т.к. клиентам классы ListImpl<T> и ArrayImpl<T> не видны, добавить что-либо типа sort() мы можем только начиная с уровня List<T> или Array<T>, которые конкретными классами не являются, и добавление чего-либо в эти интерфейсы приводит к тем же проблемам, что были рассмотрены при модификации Sequence<T>.

    Никто не мешает добавить интерфейс ISort и использовать множественное наследование интерфейсов. Но тут понятно есть другая проблема, что в общем виде на каждую комбинацию наследуемых интерфейсов нам нужно иметь свой обобщающий интерфейс, т.е. всего лишь при 4 базовых интерфейсах нам может потребоваться аж 11 обобщающих. В этом пожалуй главный недостаток такого подхода. Его бы можно было нивелировать, если разрешить такое задание типов: IList&IEnumerator&ICollection, но почему-то пока такие конструкции в языки не вводят.

    ПК>Дык, это уже речь пошла о каких-то более специализированных классах, не столь универсальных, как стандартные Array, List etc. В этих специализированных классах, для которых сортировка является не "утилитой", а основным поведением, сам байт велел делать функцию sort() членом.


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

    ПК>Однако если речь идет об "универсальных" коллекциях, то тут так просто отбиться не получится, т.к. кроме сортировки есть еще очень большое количество вспомогательных алгоритмов, которые хочется иметь возможность для этих коллекций использовать. Более того, множество нужных алгоритмов очень сильно зависит от конкретного применения той или иной коллекции, и, соответственно, заранее предсказать все нужные "утилиты" на уровне, скажем, стандартной библиотеки языка и близко не получится.


    Я могу с тобой согласиться, что решение с добавлением Sort'а в коллекции является не совсем концептуально чистым (прежде всего из-за использования реализаций классов, а не минимально нужного набора интерфейсов — в статичном Array.Sort в частности), но пользоваться этими коллекциями очень удобно, так как концептуальная нечистость мешает только в том случае, если мы собираемся использовать свои альтернативные реализации коллекций, а на практике это практически не встречается.

    ПК>Мне? Более чем Даже еще хуже: моя религия это не только позволяет, но и предписывает. Это я просто позволил себе, быть может, не очень ясно, проехаться по практике наследования для "расширения" функциональности.


    Тогда поддерживаю, по сей практике проехаться дело святое.

    U>>Можно для них ввести дополнительный интерфейс и реализовывать его будут только те классы, которым это действительно надо.


    ПК>А что мы будем делать, когда нам понадобится новый "универсальный" алгоритм (скажем, partial_sort), которого в стандартном Array нет? Все равно, рано или поздно, мы придем к тому, что нам будут нужны "внешние" по отношению к классу "утилиты".


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

    U>>Тебя чем не устраивает связка статичные функции + инкапсулирование вызовов этих функций методами класса?


    ПК>Методами какого класса, унаследованного от "библиотечного"?


    Методами класса реализующего в том числе интерфейс библиотечного.

    ПК>"Внешние"/статические функции меня устраивают. Я только не вижу оснований делать к ним переходники в виде членов класса, пока это поведение не становится ключевым для рассматриваемых объектов. В частности, сортировка или поиск "универсальных" массивов и списков, на мой взгляд, к таковым не относятся.


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

    ПК>Безусловно. Поэтому надо смотреть в каждом конкретном случае исходя из назначения класса, а не безусловно пихать все подряд нужные "утилиты" в виде членов класса, наравне с "основными" функциями класса. Тем более, выбор того, делать ли некоторую функцию членом класса, не должен базироваться на том, как на это дело смотрит Intellisence ("любой дурак нажав точку в IDE получит их список")


    Но фактор Intellisence при этом не нужно сбрасывать со счетов при принятии решения.
    ... << RSDN@Home 1.1.2 stable >>
    Re[31]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 03.11.04 09:14
    Оценка: 16 (1)
    Здравствуйте, Павел Кузнецов, Вы писали:

    >> Дотнет умеет при помощи TransparentProxy, но ценой заметной потери производительности.


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


    Увы, ценой все той же потери производительности, притом уже везде.

    ПК>Кстати, вопрос: а производительность "просаживается" и в том случае, если вызываемый метод явно определен в делегирующем классе, или только в случае, когда происходит "автоматическое" делегирование? Например:

    ПК>
    ПК>// Класс, которому будем делегировать.
    ПК>class A
    ПК>{
    ПК>   public void a() { }
    ПК>   public void b() { }
    ПК>};
    
    ПК>// Класс, который делегирует
    ПК>class B
    ПК>{
    ПК>   // Явное делегирование
    ПК>   public void a() { a_.a(); }
    
    ПК>   // Какая-то "магия" c TransparentProxy, чтобы остальные методы тоже делегировались.
    ПК>   // . . .
    
    ПК>   private A a_;
    ПК>};
    ПК>

    ПК>Будет ли в данном случае потеря производительности при вызове обоих методов, a() и b(), через интерфейс класса B, или же только при вызове b(), который делегируется неявно?

    TP работает иначе. Класс В создается неявно рантаймом. Один из способов примерно такой:
    MyRealProxy rp = new MyRealProxy(classAInstance);
    ClassA classAWrapper = (ClassA)rp.GetTransparentProxy();


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

    После этого все обращения к методам ClassA будут проходить через вызовы MyRealProxy.Invoke, который может выглядеть примерно так:
    public override IMessage Invoke(IMessage msg)
    {
        IMethodCallMessage mcm = (IMethodCallMessage)msg;
        IMethodReturnMessage rm = RemotingServices.ExecuteMessage(m_Instance, mcm);
        // Some stuff
        return rm;
    }


    Т.е. схема примерно такая — реальная работа по обработке вызовов производится RealProxy, но RP по типам с оборачиваемым классом несовместим. Для совместимости рантайм генерирует специальный псевдообъект — TP, единственная работа которого состоит в трансляции всех вызовов родительскому RP.
    ... << RSDN@Home 1.1.4 beta 3 rev. 219>>
    AVK Blog
    Re[29]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 02.11.04 08:03
    Оценка: 15 (1)
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>(*) Насколько я представляю, большинство статически типизированных языков этого не умеют. Впрочем, я знаком только с более-менее практически использующимися статически типизированными языками, поддерживающими ООП, и не со всеми одинаково хорошо, так что тут могу легко заблуждаться.


    Дотнет умеет при помощи TransparentProxy, но ценой заметной потери производительности.
    ... << RSDN@Home 1.1.4 beta 3 rev. 219>>
    AVK Blog
    Re[3]: Oberon???????????????????????????????????
    От: Tan4ik Россия  
    Дата: 29.10.04 08:04
    Оценка: 14 (1)
    Здравствуйте, LaptevVV, Вы писали:

    LVV>>>Кстати, какие альтернативы оберону есть, кто-нить представляет?

    V>>Java? На ней олимпиады проводятся?
    LVV>Нет, не проводятся.
    Java — давно один из официальных языков ACM World Finals. На полуфинале он также есть. Четвертьфиналы немного отстают, но, я думаю, что скоро и на них он станет доступным (у нас желающих особо не было, вот и не стали заморачиваться).

    LVV>Это конечно мысль. Или еще можно С# попробовать. Но хотелось бы не Сишного синтаксиса — для алтернативы.

    Стоит пробовать. Студенты должны выходить подготовленными к жизни (если учатся на программистов). Хотя бы поверхностные знания основных промышленных языков вуз просто обязан дать (сейчас C++, C#, Java, возможно VB, что-то забыл?).

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

    P.S. Чтобы не били ногами, ко всем фразам нужно приписать ИМХО
    ---
    С уважением,
    Лазарев Андрей
    Re[3]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 21.10.04 19:03
    Оценка: 10 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Оберон не мертвяк, то что Вы о нем ничего не знаете говорит о Вас и только о Вас.


    Мертвяк. Причем чистейший воды. Ни одного комерческого проекта.

    СГ>Ява и Шарп хуже Оберона тем, что Оберон проще


    Простота должна иметь разумные пределы.

    СГ>, чище


    Вот это уже неправда.

    СГ> и меньше и в то же время он полный, в смысле, достаточный современный объектно ориентированный


    Вот ОО в нем — это извращение. Собственно познакомившись (несколько лет тому назад) со взглядами Вирта на ООП я и понял, что жить этому извращению не прийдется.

    СГ>модульный


    А типа Ява и Шарп не модульные.

    СГ>императивный язык общего назначения со строгой статической типизацией


    Ага. Ну, просто "он один такой".

    СГ> и встроенными механизмами безопасности (проверка индексов, правильное приведение типов, сборка мусора).


    Ага. Ну, куда там той же Яве и Шарпу до него?

    СГ>О превосходстве оберонов над Явой на ее родном поле боя — в интернете, можно почитать там:

    СГ>http://www.uni-vologda.ac.ru/oberon/
    СГ>[q]
    СГ>Juice-технология

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

    СГ>Летом 1996 года профессором Калифорнийского университета в Ирвине, учеником Н.Вирта Михаэлем Францем и его аспирантом Томасом Кистлером была представлена технология распространения исполнимого кода в Интернет, названная авторами Juice (по-русски — сок). Juice основан на использовании Оберона и влючает с одной стороны инструментальную компоненту для Оберон-системы Oberon System 3, обеспечивающую компиляцию написанных на Обероне модулей в платформно-независимое представление. Второй частью Juice является дополнение (plug-in) к Интернет-браузерам, обеспечивающее компиляцию получаемого Juice-кода "на лету" в родной код, его загрузку и исполнение.


    Вот этими самыми пресрелизами все эти соки и заночилсь. Как раз в том самом 96-ом.

    СГ>Juice превосходит Java-технологию во всем кроме величины затрат на рекламу:


    СГ>1) Основан на более простом и совершенном языке


    Гы-гы. Совершенство еще то.

    СГ>2) Обеспечивает существенно большую скорость исполнения аплетов


    Два раза Гы-гы. Раскажи это тем кто не запускал ХотСпот. И вообще судить по 96-му году очень забавно.

    СГ>3) Код Juice-аплета компактнее байт-кода Java


    И как Ява живет со столь ужасно распухшим байткодом? Он же всего в двое компактнее аналогичного х86 кода?!

    В общем, не смешите мои тапочки. Оберон мертворожденное детя интерес к которому испытывает только те самые проффесоры обученые Виртом. При всем моем к нему почтении ему бы хоть чуть-чуть реалистом быть.

    Развитие Оберона с 96 года нет. Ява же бурно развивается и в основном в правильную сторону. Возможно в ней до сих пор хватает недочетов. Но это проверенный практикой язык (и технология). Она более чем пригодна для обучения. Так что не нужно запудривать людям мозги мертвятиной вроде Оберона. Им все же в будущем программы писать. И на не гипотетических языках. А на реальных.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[33]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 03.11.04 09:45
    Оценка: 10 (1)
    Здравствуйте, prVovik, Вы писали:

    V>1) Можно ли этот ТР использовать для своих нужд, то есть не только для ремотинга?


    Можно. Хотя "не для ремоутинга" не очень корректно говорить, поскольку TP это собственно ремоутинг и есть. Есть даже специальная штука для его использования в собственных нуждах в пределах одного домена — ContextBoundObject.

    V>2) А как оно работает? Через рефлекшн + эмит?


    Что именно? Если вызов метода закрываемого класса, то по дефолту рефлекшен, хотя ты можешь придумать что то свое. Если трансляция в TP, то это unmanaged stub, даже джитом не обрабатываемый.
    ... << RSDN@Home 1.1.4 beta 3 rev. 219>>
    AVK Blog
    Re[7]: вопрос знатокам SmallTalk
    От: Poisson Россия  
    Дата: 25.10.04 17:18
    Оценка: 6 (1)
    Здравствуйте, lesha-v, Вы писали:

    LV>Здравствуйте,

    LV>Решил я посмотреть на SmallTalk... скачал VisualWorks7.2.1, установил...
    LV>аа шрифт в диалогах прочитать не возможно что делать, подскажите ? неужели так и не удасться познакомиться со смолтолком...
    Да, есть там такая милая бага (проявляется с русской локалью).

    Лечится так: значение (не помню какое) в WinXPLookPolicy class>>defaultSystemFontScale надо заменить на 0.8 или в WinXPLookPolicy class>>defaultSystemFontDescription заменить 'arial' на 'arial*'
    ... << RSDN@Home 1.1 beta 2 >>
    Re[9]: Мэйнстрим vs. Самосовершенствование :)))
    От: serg_mo  
    Дата: 29.10.04 11:13
    Оценка: 6 (1)
    Здравствуйте, eugals, Вы писали:

    E>Драгдилер, блин

    E>по $350 за коробан гребёт
    Есть такое

    E>Смолток хороший язык, что меня в нем смущает, так это доступность реализаций.


    E>Под C++ есть куча компиляторов. Есть бесплатный gcc. Есть опенсорсные среды разработки. Море библиотек.

    E>У шарпа, кроме него самого, есть моно и дотгну.
    E>У питона есть питон.
    E>А что со смолтоком? gnusmalltalk, насколько я вижу, ни жив ни мерт
    E>Есть конечно VW NС, но это дело такое — сегодня они его поддерживают, а завтра бросят...
    E>Стремно как-то основывать долгоживущие разработки на такой основе.
    E>Даже если честно купить коробку, всё равно стрёмно. Вдруг они завтра разорятся (продажи-то небольшие, небось).
    Черт их знает, говорят, что у них все тип-топ. Ну а как дела обстоят на самом деле, никто не знает. Конечно, риск существует. Но, с другой стороны, этот риск существует всегда при использовании коммерческих продуктов. Та же Delphi. Та же Java, мне кажется — перестанет вдруг Сан ее развивать, и ага. Да что уж говорить, такой риск существует и при покупке сторонних библиотек.

    E>А как обстоит дело с совместимостью?

    E>Насколько реально перевести крупный проект с VW на Dolphin или обратно?
    Я не занимался, но мне кажется, что будет довольно сложно. Хотя тут зависит от специфики проекта, конечно. Например, UI придется, видимо переделывать заново, т. к. у Долфина и VW фреймворки построены на различных концепциях. Также, VW намного богаче в плане разработки распределенных приложений, Web-приложений.
    ... << RSDN@Home 1.1.3 stable >>
    Re[9]: Мэйнстрим vs. Самосовершенствование :)))
    От: faulx  
    Дата: 15.11.04 09:00
    Оценка: 5 (1)
    Здравствуйте, eugals, Вы писали:

    E>А что со смолтоком? gnusmalltalk, насколько я вижу, ни жив ни мерт

    E>Есть конечно VW NС, но это дело такое — сегодня они его поддерживают, а завтра бросят...
    E>Стремно как-то основывать долгоживущие разработки на такой основе.
    E>Даже если честно купить коробку, всё равно стрёмно. Вдруг они завтра разорятся (продажи-то небольшие, небось).
    E>Или продадутся какому-нибудь SUN-у (как с Self-ом было).
    E>А как обстоит дело с совместимостью?
    E>Насколько реально перевести крупный проект с VW на Dolphin или обратно?

    Seaside переносили со squeak на VW, здесь есть описание. Кажется, вполне реально.

    Кстати, Seaside — очень любопытная штука, я и Smalltalk смотрел только из-за него.
    Re[2]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 08:44
    Оценка: 3 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, LaptevVV, Вы писали:


    LVV>>Почитал я тут защитников Оберона, и задумался. Надо первачков учить.


    СГ>Смотрите проект Информатика 21


    СГ>http://www.inr.ac.ru/~info21/


    Сегодня сайт проекта Информатика 21 был серьезно обновлен. Заходите смотрите.

    Основная новость: к концу 2004 года ожидается открытие исходного кода BlackBox.
    Re[21]: Читайте хелп
    От: Mamut Швеция http://dmitriid.com
    Дата: 31.10.04 09:51
    Оценка: 2 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mamut, Вы писали:


    M>>...невозможно работать.


    СГ>Из приведенного рисунка видно следующее:


    СГ>1) Вы зачем-то засунули в Log текст программы и пару контролов... Log — предназаначен для вывода сообщений.


    Log вообще не должен позволять в нем хоть что-то писать. Лог вообще не должен что-либо делать, кроме как показывать диагностические сообщения. Это Log

    СГ>2) Для того чтобы написать свою программу нужно создать новый документ.


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

    СГ>3) Контролы, вообще-то, принято помещать на формы.


    Контролы, вообще-то, не принято вставлять внутрь исходного кода программы.

    А как создается новая форма? Controls -> New form? Что такое Link? Ладно, лезем в желп, жмем Empty. А дальше? Боже! Это — визуальная среда? В коммандной строке и то информативности больше.


    Вердикт. Oberon Microssystems наткнулась на книжицу "MFC in 21 days" и сейчас показывает нам, чему они научились. Сам такие поделки еще в прошлом году создавал (это я о среде BlackBox). Не удивлюсь, если сериализация/десериализация у них стандартными средствами MFC выполнена. И вы не поверите, но на исходники BlackBox я даже смотреть не буду. Повторяю, такие поделки выполняются на коленке в течение ... ну ... двух-трех часов. Ну и, возможно, час планирования.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[29]: Мэйнстрим vs. Самосовершенствование :)))
    От: prVovik Россия  
    Дата: 01.11.04 17:05
    Оценка: 2 (1)
    Здравствуйте, AndrewVK, Вы писали:

    AVK>О! Осталось только понять что многие алгоритмы сортировки требуют доступа к внутренним структурам

    Вот для контейнеров, сортировка которых действительно требует доступа к внутренней структуре ее, конечно, надо делать внутренним методом.
    Для всего остального подойдет внешний обобщенный алгоритм сортировки типа std::sort()
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[22]: Обновление
    От: Kh_Oleg  
    Дата: 02.11.04 12:04
    Оценка: 2 (1)
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>Тем хуже для оберона. Набирать ключевые слова большими буквами противоестественно (все время зажимать шифт или дергать капс лок). Костыли, встроенные в BlackBox (клавиатурная комбинация для смены регистра последнего слова) — всего лишь костыли.

    ЗХ>Об этом при проектировании языка никто не задумался?

    Да фиолетово Оберону. В IDE для языка Modula-2 от фирмы TopSpeed ключевые слова поднимались в верхний регистр при нажатии на пробел после ключевого слова. Поскольку почти всегда после ключевого слова требуется пробел, то это происходило автоматически и было очень удобно.

    Кстати, в Zonnon'e изначально ключевые слова тоже были в верхнем регистре, но потом синтаксис пересмотрели и решили, чтоб они были в нижнем.
    Re[5]: Oberon???????????????????????????????????
    От: Poisson Россия  
    Дата: 21.10.04 18:12
    Оценка: 1 (1)
    Здравствуйте, Kluev, Вы писали:


    K>>>На питоне надо новичков учить. Прост как три копейки и в командном режиме может работать как калькулятор.

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

    — как обстоят дела с GUI? В смысле, насколько легко привязывается интерфейс к коду?
    — есть ли готовые библиотеки распределенного взаимодействия (a la .net remoting)?
    — как дела с IDE? С отладчиком, refactoring browser'ом ну и всем чем полагается.
    — легко ли обеспечить взаимодействие с OS? Если говорить о win32 — использование dll, COM..

    В случае VisualWorks Smalltalk эти вопросы решены на 4-5, а browser/debugger — на 5+.

    K>В качестве примера кодец на питоне:

    >>>> for i in range(10) : print i

    Вот тоже кодец, похожий, на Smalltalk'е =)

    1 to: 10 do: [:each | Transcript show: each]


    K>Выполняется прямо в командной строке без компиляции, написания функции и т.п. ИМХО если учить то лучше питона не найти


    Аналогично, выполняется в Workspace'е, без [явной] компиляции. Однако, в отличие от питона, я могу посмотреть, а что же такое происходит при выполнении этого куска кода. Дело в том что to:do: — это метод класса Number, на исходник котороо можно посмотреть или зайти отладчиком. А show: — метод класса TextCollector, опять-таки все можно посмотреть-потрогать руками и даже изменить. Ну и так далее.

    Вся прелесть смоллтока как языка для обучения в том, что в нем нет ключевых слов вроде for, while, if и т.п. — все ветвления и циклы реализованы за счет стандартного механизма посылки сообщенияй объектам. Browser в руки и вперед.
    ... << RSDN@Home 1.1 beta 2 >>
    Re[6]: Oberon???????????????????????????????????
    От: FR  
    Дата: 21.10.04 21:21
    Оценка: 1 (1)
    Здравствуйте, Poisson, Вы писали:

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



    K>>>>На питоне надо новичков учить. Прост как три копейки и в командном режиме может работать как калькулятор.

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

    конечно совершено на придирки не похоже

    P>- как обстоят дела с GUI? В смысле, насколько легко привязывается интерфейс к коду?


    нормально с GUI, доступны tk, wxWindows, Qt, MFC ( ) и WinAPI

    P>- есть ли готовые библиотеки распределенного взаимодействия (a la .net remoting)?


    да

    P>- как дела с IDE? С отладчиком, refactoring browser'ом ну и всем чем полагается.


    скорее на тройку, хотя для интерпретатора это не так важно.

    P>- легко ли обеспечить взаимодействие с OS? Если говорить о win32 — использование dll, COM..


    легко, используя библиотеку PyWin

    P>В случае VisualWorks Smalltalk эти вопросы решены на 4-5, а browser/debugger — на 5+.


    K>>В качестве примера кодец на питоне:

    >>>>> for i in range(10) : print i

    P>Вот тоже кодец, похожий, на Smalltalk'е =)


    P>
    P>1 to: 10 do: [:each | Transcript show: each]
    P>


    по моему как тут уже сказали птичий язык

    K>>Выполняется прямо в командной строке без компиляции, написания функции и т.п. ИМХО если учить то лучше питона не найти


    P>Аналогично, выполняется в Workspace'е, без [явной] компиляции. Однако, в отличие от питона, я могу посмотреть, а что же такое происходит при выполнении этого куска кода. Дело в том что to:do: — это метод класса Number, на исходник котороо можно посмотреть или зайти отладчиком. А show: — метод класса TextCollector, опять-таки все можно посмотреть-потрогать руками и даже изменить. Ну и так далее.


    В питоне тоже почти все можно посмотреть и зайти отладчиком.

    P>Вся прелесть смоллтока как языка для обучения в том, что в нем нет ключевых слов вроде for, while, if и т.п. — все ветвления и циклы реализованы за счет стандартного механизма посылки сообщенияй объектам. Browser в руки и вперед.


    У смолтока очень большой недостаток для целей обучения, он слишком не похож на самые распрастраненые языки.
    ... << RSDN@Home 1.1.3 stable >>
    Re[15]: Oberon???????????????????????????????????
    От: prVovik Россия  
    Дата: 22.10.04 18:14
    Оценка: 1 (1)
    Здравствуйте, VladD2, Вы писали:

    VD>Начальный код можно исполнять и в специльно созданного для этого обертке.

    Но только это уже будет НЕ С#, а получится какой-то свой собственный доморощенный язык
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[7]: Vlad2
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 26.10.04 08:44
    Оценка: 1 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А Вы посмотрите вокруг, Вы один тут делаете нападки на Оберон, только Вы один вынесли "однозначное осуждение", остальные находятся либо в нейтралитете, либо не ведут себя так же агрессивно как Вы, либо перестали утверждать что либо по этому поводу так как не считают себя компетентными в этой области.

    Ну, это, мягко говоря, не совсем так.
    СГ>[q]
    СГ>Почитал несколько веток с Вашим участием...
    СГ>У каждой такой "тусовки" есть своя специфика, со своим контИнгентом участников... RSDN в этом отношении — ярчайший и показательный пример. Волею судеб, я оказался вовлечён в работу харьковского семинара по QNX ( http://qnxclub.net ). Наиболее активный наш участник, Olej, захаживал как-то на RSDN, в ветки, посвящённые Юникс-системам и ОСРВ. То, с чем он там столкнулся (уровень знаний, информированность в "сопредельных с виндой областях", а главное — просто-таки параноидальная вера в собственную "правильность" и непогрешимость практически во всех поднимаемых на форуме вопросах), заставило Olej высказать несколько замечаний "по делу". С момента, когда RSDNовские ребята поняли, что их макают носиком в собственные примеры некомпетентности, нас забанили...
    Это не тот ли суперкомпетентный Olej, который критиковал www.TPC.org и утверждал, что прохождение его тестов стоит больших денег, что и сдерживает его гениальных друзей от занимания там первых строчек? А "ветки, посвященные ОСРВ и Unix" — это печально известный флейм Win vs Lin? Ах да, его же забанили за матерные высказывания. Прекрасный у тебя нашелся помощник .
    СГ>В Вашем случае от них "аж прэ" не то, что не понимание поднимаемых вопросов, а нет даже желания вынырнуть из собственного мирка...
    Ну, если бы ты меньше игнорировал "неудобные" тебе аргументы, и следил за логикой своих постингов, а также делал поменьше утверждений о компетентности собеседников — вот тогда подобные заявления еще могли бы снискать популярность. А так все это выглядит не более чем раскидыванием понтов. Да, Влад — человек довольно резкий. Но он говорит дело, и ты зря к нему не прислушиваешься. Доскональное знание Оберона — не критерий. Дыры в твоих рассуждениях видны невооруженным взглядом безо всякого Оберона. Влад же вполне готов вынырнуть из собственного мирка. Вот как раз ты из своего — не готов. Это называется "религиозный фанатизм".
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[7]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 09:33
    Оценка: 1 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Как возник этот проект

    СГ>http://www.inr.ac.ru/~info21/kak.htm

    Кстати, слова "по-дилетантски спроектированного" выдают скорее дилетантство писавших статью.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[27]: Component Pascal
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 13:01
    Оценка: 1 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Вот напугал. А в Zonnon-е...


    Ну, т.е. согласен что Оберон нужно на помойку отправить?

    ЗЫ

    Что же касается "полезности" перечисленных фич в интефейсе, то это кривой дизайн. Пора бы уже знать почему в интерфейсы не суют определение данных.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[31]: Мэйнстрим vs. Самосовершенствование :)))
    От: prVovik Россия  
    Дата: 02.11.04 23:48
    Оценка: 1 (1)
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Кстати, автоматическое делегирование, фактически, эквивалентно наследованию, минус автоматическое приведение к базовому классу.

    Ну не совсем. Тут ведь вся фишка в том, что делегированного объекта можно в рантайме задавать.
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[3]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 20.10.04 15:06
    Оценка: +1
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Это конечно мысль. Или еще можно С# попробовать. Но хотелось бы не Сишного синтаксиса — для алтернативы.


    ВБ.НЭТ потянет? Сточки зрения простоты синтакиса и отсутствия сишных скобок самое оно. Только логических операций лучше на нем не давать. Они в нем такие же кривые как в Паскле (бен разделения на бинарные илогические).
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[6]: Oberon???????????????????????????????????
    От: FR  
    Дата: 21.10.04 06:40
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

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


    K>>Выполняется прямо в командной строке без компиляции, написания функции и т.п. ИМХО если учить то лучше питона не найти


    VD>Разницы с тем же шарпом никакой. Что до компиляции, то нажать на F5 или написать "csc filename.cs" вряд ли окажется проблемой.


    Как раз для обучения разница большая, можно начать с однострочных программ, с обычного процедурного программирования не забивая голову не нужными в начале обучения class и public static void Main()
    ... << RSDN@Home 1.1.3 stable >>
    Re[3]: Oberon???????????????????????????????????
    От: WFrag США  
    Дата: 21.10.04 13:44
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Ява и Шарп хуже Оберона тем, что Оберон проще, чище и меньше и в то же время он полный, в смысле, достаточный современный

    СГ>объектно ориентированный модульный императивный язык общего назначения со строгой статической типизацией и встроенными
    СГ>механизмами безопасности (проверка индексов, правильное приведение типов, сборка мусора).

    Чище чем Java в каком плане?

    Всякие проверки и сборка мусора есть и в Java. Или ты о чем?

    Рефлекшн, кстати, в нем есть?

    СГ>О превосходстве оберонов над Явой на ее родном поле боя — в интернете, можно почитать там:

    СГ>http://www.uni-vologda.ac.ru/oberon/
    СГ>[q]
    СГ>Juice-технология

    По-моему, родное поле Java — middleware. Апплеты мне попадаются существенно реже, чем, например, stand-alone приложения на Java.

    СГ>Juice превосходит Java-технологию во всем кроме величины затрат на рекламу:


    СГ>1) Основан на более простом и совершенном языке


    Что значит более простой язык?

    СГ>2) Обеспечивает существенно большую скорость исполнения аплетов


    Видимо, за счет some kind Woodoo Magic? Откуда "существенность"-то взялась? Ну или хотя бы ссылочку бы на статистику.

    СГ>3) Код Juice-аплета компактнее байт-кода Java


    Тут ничего не скажу, страничка Juice не открывается.
    ... << RSDN@Home 1.1.4 beta 3 rev. 205>>
    Re[9]: Oberon???????????????????????????????????
    От: FR  
    Дата: 21.10.04 22:45
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

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


    FR>>Угу С# тоже никаких преимуществ перед плюсами не имеет так небольшие фичи


    VD>Это не ответ. А приемущества перед плюсами можно перечислять часами. Хотя это и не избавляет от некоторых недостатков.


    Так у тебя тоже не ответ.
    Любое преимущество можно обозвать отдельными фичами, а можно и часами его перечислять
    ... << RSDN@Home 1.1.3 stable >>
    Re[7]: Oberon???????????????????????????????????
    От: Poisson Россия  
    Дата: 22.10.04 05:10
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

    VD>Здается мне, что в Питоне понятнее и логичнее.

    Дело вкуса.

    VD> А смотреть на то как работают операторы и встроенные функции как-то даже в голову не приходит.

    Понятно, что смотреть на устройство какого-нибудь print и увидеть дизассемблированный код, ну или
    даже код на C/C++ (сам питоновсаий интерпретатор вроде на C++ написан?) не очень интересно. Но в случае со смоллтоком мы видим код на том же смоллтоке (где-то в глубине упирающийся, конечно, в вызов примитива VM), что для начинающего очень и очень удобно — есть откуда брать массу полезных примеров.
    ... << RSDN@Home 1.1 beta 2 >>
    Re[6]: Oberon???????????????????????????????????
    От: Kluev  
    Дата: 22.10.04 07:47
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

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


    K>>
    >>>>> for i in range(10) : print i
    K>>


    K>>Выполняется прямо в командной строке без компиляции, написания функции и т.п. ИМХО если учить то лучше питона не найти


    VD>Ну, и чем это отличается от Шарпа:

    VD>
    VD>foreach (int i Range(10))
    VD>    Console.WriteLine(i);
    VD>

    VD>?

    Чем отличается? тем что как уже было сказано:
    K>>Выполняется прямо в командной строке без компиляции, написания функции и т.п.

    А минимальная шарп программа это как минимау класс со статической main к которой среда еще и аттрибут подосовывает. Плюс using, плюс namespace, плюс среда, плюс компиляция. Вообщем не многовато ли для начинающего?
    Re[5]: Oberon???????????????????????????????????
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 22.10.04 08:07
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>> Мертвяк. Причем чистейший воды. Ни одного комерческого проекта.


    СГ>Вы не компетенты в вопросах об оберонах. Я уже приводил ссылки, среди которых, например, упоминается коммерческий проект создания ПО для ЭЛЕКТРОСТАНЦИИ (не хило не так-ли?), в ссылках сайта info21 есть военный проект по управлению беспилотными летающими аппаратами (опять не хило?).


    VD>> Развитие Оберона с 96 года нет.


    СГ>Мало того что Вы не компетентны в вопросах об оберонах, но Вы еще и просто не внимательны. Совсем недавно, на этом форуме обсуждались "активные объекты". Вы случаем не обратили внимание на фигурирующие в даваемых ссылках даты? Создание Aos ~ 2000 год, диссертация Мюллера 2002 год. Работа над Zonnon идет по сей день.


    СГ>Посмотрите даты проектов: http://www.cs.inf.ethz.ch/gutknecht/


    А ты очень компетентен, прям жуть?
    Вот приведи статистику по числу раб. мест на обероне?
    Хотябы в Швейцарии есть такие вообще?
    Возьми теперь и сравни даты, числа и объёмы с тем же C#, да я думаю даже со смолтолком оберон будет очень хило выглядеть (эй смолтолковцы, замолвите словечко )
    Re[7]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.10.04 14:09
    Оценка: -1
    Здравствуйте, Kluev, Вы писали:

    K>Чем отличается? тем что как уже было сказано:

    K>>>Выполняется прямо в командной строке без компиляции, написания функции и т.п.

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

    K>А минимальная шарп программа это как минимау класс со статической main к которой среда еще и аттрибут подосовывает. Плюс using, плюс namespace, плюс среда, плюс компиляция. Вообщем не многовато ли для начинающего?


    Для минимальной ни юсинги ни нэймспэйсы не нужны. А один класс можно пережить. Зато с самого начала народ будет приучаться к объектной ориентации и в последствии будет меньше вопросов. Опять так если уж сильно напрягает класс, то не проблем создать программку которая автоматически обернет код в класс.

    В общем, это все не серьезные аргументы. А вот то отсуствие типов сильно попортит восприятие у начинющих. Типы концепция обязательная. Без нее еще ту кашу можно создать.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[8]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.10.04 14:09
    Оценка: +1
    Здравствуйте, FR, Вы писали:

    FR>Точно из питона сперли


    Питона еще на свете не было когда в ВБ for each появился.

    FR>В питоне for помощнее он может работать с любыми итераторами.


    Гы-гы. С какими итераторами не сможет работать foreach из Шарпа? А дельфийский как раз с него слизан по повду перехода дельфи под дотнет.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[6]: Oberon???????????????????????????????????
    От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
    Дата: 22.10.04 15:34
    Оценка: :)
    Здравствуйте, VladD2, Вы писали:

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


    S>> То есть ты видишь разницу между побитовыми и булевыми операциями????


    VD>Ага. Причем мне откровенно жать тех кто ее не видит.


    VD>Вот простенькие примеры:

    VD>
    VD>if (a == b && b < c)
    VD>    ...
    VD>

    VD>И такой же код на Паскле:
    VD>
    VD>if a = b and b < c then
    VD>    ...
    VD>



    Твое отношение к скобкам известно. Мне лично не нравятся приоритеты особенно в длинных выражениях.
    Зачем нуэно разграничение операторов если их применение зависит от типа?????
    Плодить никому ненужные сущности????

    VD>выглядят одинаково? А смысл совершенно разный. Смысл пасклая бует таким:

    VD>
    VD>if ((a == (b & b)) < c)
    VD>    ...
    VD>


    Это бред для любого языка. Сравнивать булевы величины с числовыми.
    С точки зрения представления в байтах это роли не играет. Но bool, wordbool итд выглядят по разному.
    0 true -1 false. А в некоторых языках интерпретирутся false==0, true<>0.

    VD>что несоменнео бред для этого языка. Так что прийдется сувать скобки и провкрки:

    VD>
    VD>if (a = b) and (b < c) then
    VD>    ...
    VD>


    Вот правильный аналог твой записи.
    при int a,b,c.
    if integer(a = (b and b))<c then

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


    VD>Собственно разница между битовыми операциями и логическими очень важна и полезна. Она позволяет писать более чистый коди и обезопасить программиста от ошибок еще на стадии компиляции.


    Все и так безопасно за счет типизации.

    S>> И представление булевых переменных в битовом представлении???

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

    S>> В Delphi (Паскале) ты можешь применять те или иные операции основываясь на их типе.


    VD>Нда. Причем тут это?


    Все при том же. Ты не сможешь приенить битовые операторы к булевым и булевы к небулевым.
    S>> Без приведения к булевому типу
    S>> Меня лично в c# бесит это разграничение.

    VD>C# не для тебя. Он для тех кому дороги слова типобезопасность и для тех кто не будет уродовать код ради лишней милисикунды.

    А ты помнишь песню "Есть только миг между прошлым и будущим, именно он называется жизнь".
    Все в этом мире относительно.

    Ну Паскаль всегда был типобезопасным в отличие от некоторых языков, Иногда правда и во вред.
    Но любые ограничения легко обходятся.
    S>> Так что кривизна больше не в Паскале.

    VD>Твоме мнение о "кривизне" мне извесно. Боюсь с ним будет несогласно большинство приличных программистов.

    Ага в Яве и C# болше влияния Delphi (Паскаля) нежели C++.
    (Всетаки Delphi был раньше Явы)
    и солнце б утром не вставало, когда бы не было меня
    Re[7]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.10.04 20:44
    Оценка: :)
    Здравствуйте, Serginio1, Вы писали:

    S> Твое отношение к скобкам известно. Мне лично не нравятся приоритеты особенно в длинных выражениях.


    Приоритеты тут в общем-то не причем. Хотя они тоже вещь полезная.

    VD>>выглядят одинаково? А смысл совершенно разный. Смысл пасклая бует таким:

    VD>>
    VD>>if ((a == (b & b)) < c)
    VD>>    ...
    VD>>


    S> Это бред для любого языка. Сравнивать булевы величины с числовыми.


    Знаток, блин... Надыбай компилятор С++ определи переменные с типом int и поробуй скомпилировать. Уверяю тебя, что все скомпилируется без проблем.

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

    S> Все при том же. Ты не сможешь приенить битовые операторы к булевым и булевы к небулевым.


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

    VD>>C# не для тебя. Он для тех кому дороги слова типобезопасность и для тех кто не будет уродовать код ради лишней милисикунды.

    S> А ты помнишь песню "Есть только миг между прошлым и будущим, именно он называется жизнь".
    S> Все в этом мире относительно.



    S> Ну Паскаль всегда был типобезопасным в отличие от некоторых языков, Иногда правда и во вред.


    Паскаль то может и был. А вот Дельфи никгда. Там типобезопасность очень быстро порезализ для производственных нужд. Оно и понятно. Жизнь есть жинь. Но разум то нужно иметь...

    S> Но любые ограничения легко обходятся.


    А, ну, вот пусть фанаты и обходят. А детей учить на этом убожище не стоит.

    S> Ага в Яве и C# болше влияния Delphi (Паскаля) нежели C++.


    Ага. Ну, просто одно влияние дельфи... если другого не видил. Дельфи вышло в 95-ом. К этому моменту Ява уже разрабатвалась несколько лет.

    S> (Всетаки Delphi был раньше Явы)


    Ага. Примерно на пол года. Вот как они успели то все передрать.

    И главное, как грамотно подрали то! Ни одной проблемы у дельфи не переняли.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[7]: Oberon???????????????????????????????????
    От: serg_mo  
    Дата: 23.10.04 00:08
    Оценка: +1
    Здравствуйте, FR, Вы писали:

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


    P>>Вот тоже кодец, похожий, на Smalltalk'е =)


    P>>
    P>>1 to: 10 do: [:each | Transcript show: each]
    P>>


    FR>по моему как тут уже сказали птичий язык

    Смолток действительно не похож на С-подобные языки. Тем не менее, анатомия языка чрезвычайно проста и подчиняется очень небольшому количеству правил, которые, так сказать, являются универсальными законами во вселенной Смолтока
    Вот, например, статья, в которой на 11 странцах, с щутками и прибаутками, с массой примеров, дано практически всеобъемлющее описание синтаксиса Смолтока. Используя информацию из этой статьи, пользователь сможет прочитать _любой_ код на Смолтоке, даже если не понимает, что этот код делает.
    Возьмем для иллюстрации приведенный выше пример:
    1 to: 10 do: [:each | Transcript show: each]

    Что можно сказать, используя наши знания о синтаксисе:
    а) Имеет место посылка сообщения (или, по-другому, вызов метода) обьекта, стоящего крайним слева: 1.
    б) Вызывается метод to:do:, принимающий 2 параметра.
    в) Первый параметр, очевидно, число 10. Второй параметр сложнее. Допустим, я не знаю, что это, но я могу быть уверен, что это один из немногих специализированных конструкторов какого-то объекта. Почему я уверен? Да потому, что синтаксически альтернативы нет.

    И действительно, конструкция [] — это "синтаксически подслащенный" конструктор класа BlockClosure — блока. Блоки имеют фундаментальное значение в Смолтоке, поэтому, наряду с немногими другими (например, строками и массивами), для создания объектов этого класса есть специальная синтаксическая конструкция. В частности, с помощью блоков реализуются все управляющие конструкции (как в этом примере — цикл со счетчиком).

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

    FR>У смолтока очень большой недостаток для целей обучения, он слишком не похож на самые распрастраненые языки.

    Ну, это зависит от целей обучения
    Re[16]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 23.10.04 01:30
    Оценка: :)
    Здравствуйте, FR, Вы писали:

    FR>Ну пришли.


    http://gzip.rsdn.ru/File/73/RasdCalc.zip толко он требует второго фрэймворка. Развлекался понимаш с менюшками и т.п.

    FR>Будет, тут недавно пришлось знакомым которые купили, и практически в первый раз увидели компьютер, показывать как им пользоваться, так это просто кошмар. Любая мелочь которую ты даже не замечаешь для них чуть ли не откровение. Вроде люди не глупые все понимают, а вот на мелочах застревают и все.


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

    FR>Понимаешь это все настолько субъективно что вряд-ли, в общем пора закруглятся.


    Наверно. Кстати, возможно что фичи второго шарпа во многом тырили именно с питона.

    FR>Очень даже способны делать код и проще и понятней, просто тебе шоры си образного синтаксиса мешают.


    Ничего мне не мешат. Я довольно адекватно могу оценивать достоинства если они очевидны. Все эти х[3:5] долеко не очевидны. Они требуют объяснения на пальцах. А вот x.substring(3, 5) как раз можно понять и без объяснения. Тому способствует то что все методы имеют единый принцип и описание видное в редакторе. Я, например, долго тупо смотрел на х[3:5] пока не прочел о сути синтаксиса в книжке что ты привел. Когда понял, что это такой зазиповванный синтаксис для substring, то все стало проще. До сих пор, кстати, не пойму почему они для добавления элементов к спискам не сделали аналогичный синтаксис.

    FR>Так я никогда и не утверждал что питон во всем лучше шарпа.


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

    FR>только если все учить то на работу вообще времени не останется


    Да кому нужна эта работа...
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Oberon???????????????????????????????????
    От: FR  
    Дата: 23.10.04 09:21
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

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


    FR>>Ну пришли.


    VD>http://gzip.rsdn.ru/File/73/RasdCalc.zip толко он требует второго фрэймворка. Развлекался понимаш с менюшками и т.п.


    посмотрю как доберусь до второго фрамеворка.

    VD>Еще раз. Нет проблем сделать снипит-компилятор скроющий все детали. Да и дети те сначал будут сма компьютер изучать. Так что к этому моменту они уже будут далеко не ламерами.


    В программировании будут

    FR>>Понимаешь это все настолько субъективно что вряд-ли, в общем пора закруглятся.


    VD>Наверно. Кстати, возможно что фичи второго шарпа во многом тырили именно с питона.


    Сейчас уже и не определишь кто и что откуда стырил, коммунизм практически

    FR>>Очень даже способны делать код и проще и понятней, просто тебе шоры си образного синтаксиса мешают.


    VD>Ничего мне не мешат. Я довольно адекватно могу оценивать достоинства если они очевидны. Все эти х[3:5] долеко не очевидны. Они требуют объяснения на пальцах. А вот x.substring(3, 5) как раз можно понять и без объяснения. Тому способствует то что все методы имеют единый принцип и описание видное в редакторе. Я, например, долго тупо смотрел на х[3:5] пока не прочел о сути синтаксиса в книжке что ты привел. Когда понял, что это такой зазиповванный синтаксис для substring, то все стало проще. До сих пор, кстати, не пойму почему они для добавления элементов к спискам не сделали аналогичный синтаксис.


    Как только понял что это такое, очень даже очевидна, я же говорю тебе мешают привычки, мне тоже мешали.
    Как это не сделали? Они на строки со списков и переползли.
    >>> print [0, 1, 2, 3, 4][1:3]
    [1, 2]


    >>> l = [0, 1, 2, 3, 4, 5]
    >>> l[1:3] = [9, 9]
    >>> print l
    [0, 9, 9, 3, 4, 5]


    FR>>Так я никогда и не утверждал что питон во всем лучше шарпа.


    VD>Ты заявлял что он более высокоуровнев. А я вот изучая его нашел как приемущества, так и недостатки. Но никак не превосходство в уровен.


    Я же говорю это субъективно. Много людей которые так же утверждают что шарп на одном уровне с плюсами.
    Я и сам так думал, пока питон не начал изучать
    ... << RSDN@Home 1.1.3 stable >>
    Re[9]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.10.04 00:07
    Оценка: +1
    Здравствуйте, FR, Вы писали:

    FR>Вот только мне кажется что ближе к человеческому мышлению как раз большое количество синтаксических конструкций как и в естественных языках.


    Я бы скзал не большое, а адекватное. Выразительные средства должны быть адекватны выражаемым мыслям.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.10.04 10:07
    Оценка: :)
    Здравствуйте, Sinclair, Вы писали:

    S>Некоторые вещи, от которых ты сейчас так плюешься, перекочуют в С# в самом ближайшем будущем.


    Не дай бог.

    S>Я, конечно же, схитрил. Для того, чтобы получить полный аналог SmallTalk, пршлось бы добавить метод ToDo в System.Int32(как это, собственно, и сделано в SmallTalk.):

    S>
    S>1.ToDo(10, delegate(int each) { Transcript.Show(each); });
    S>


    Где бы нарыть смайлик плюющий через плече и рестящийся?

    В общем, за такое нужно
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Oberon?
    От: eugals Россия  
    Дата: 24.10.04 10:55
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

    VD>Тут долго пояснять.

    Вряд ли во всём перечисленном у шарпа есть существенные преимущества.
    Наверняка кое в чем он даже уступает.

    VD> Это и динамическая загрузка скомпилированных модулей,

    Без проблем. Питон динамический язык, соответственно и динамическая загрузка модулей в нем имеется. Отгрузка и перезагрузка, кстати, тоже
    VD> и интерфейсы,
    В питоне, как и в смолтоке, любому объекту можно послать любое сообщение. Куда уж гибче интерфейс.
    VD> и рефлекшен,
    Ну, тут сам б-г велел. Разве что называется по-другому (кстати, имхо, ближе к сути): интроспекшн
    VD> и дизайнеры компонентов/контролов,
    А что дизайнеры? Под питон еть порт всех популярных оконных (и вообще, компонентных) библиотек/технологий: PyQT, PythonNet, PyCOM, PyXPCOM, PyVCL...
    Вот я, например, одним из таких приложений сейчас занимаюсь
    Автор: eugals
    Дата: 04.08.04

    VD> и генерация мсила,
    Опять же, в динамическом ЯП, это всё гораздо прозрачнее, чем Reflection.Emit.
    Вот пример функции, которая генерирует новый класс (сколько раз её позовешь, столько раз и сгенерирует):
    def genClass( ):
        class AClass( object):
            # member declarations
        return AClass

    VD>и интеграция с другими языками.
    Смотри выше. Порты есть. В том числе и в дотнет. Плюс удобное Python-Си апи, А С(++), несмотря на майкрософтовский прессрелизы, всё ещё главный мировой язык для разработки библиотек.

    VD>В общем, возможность манимулирования не кодом, а готовыми бинарными модулями.

    Ну, в питоне свой формат прекомпилированных файлов. Вполне себе бинарные модули. Не хуже мсильных сборок.

    VD> Причем практически без потери производительности.

    Вот, собственно, ключевая оговорка
    Здесь да, спорить бессмысленно — шарп пока быстрее.
    Зато питон гибче и лаконичнее. Плюс у него есть много других преимуществ (встроенные возможности АОП, например).
    Но только какое отношение преимущество шарпа в скорости имеет к заявленным тобой "компонентным возможностям"? Имхо, второстепенное.

    ЗЫЖ На хочется в очередной раз начинать на этом форуме холивар Static vs. Dynamic.
    _vovin, в свое время, довольно хорошо про это написал тут. Вряд ли я смогу добавить что-то принципильно новое. А даже если и смогу, тебя всё равно не переубедить, это общеизвестно
    ... << RSDN@Home 1.1.4 @@subversion >>
    Re[4]: Мэйнстрим vs. Самосовершенствование :)))
    От: prVovik Россия  
    Дата: 24.10.04 14:00
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

    VD>Однако я совершенно не понимаю зачем начинать учить детей с экзотики вроде СмолТока или с мертвячины вроде Оберона.

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


    VD>Вот по-моему нет. Вот я и предлагая в качестве первого языка выбрать один из языков мэйнстрима, а потом уже приступать к изучению всего остального.

    Проблема мэйнстрима в том, что он все время меняется. И важно сделать так, чтобы студенты не зацикливались на нем. А если вдалбливать мэйнстриме с "самого раннего детства", то, возможно, студент и зациклится. Хотя,

    P.S.: разговаривать мы тут можем сколько угодно, но проблема в том, что наш разговор похож на обсуждение красоты заката среди слепых. Выбирать язык для начального обучения программированию должен профессиональный преподаватель с хорошим опытом преподавания. Ему виднее.
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[18]: Oberon?
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 24.10.04 14:33
    Оценка: +1
    Здравствуйте, eugals, Вы писали:

    E>Зато питон гибче и лаконичнее. Плюс у него есть много других преимуществ (встроенные возможности АОП, например).


    В дотнет тоже есть встроенный АОП — Transparent Proxy. Знаешь в чем проблема? В производительности этого решения.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    AVK Blog
    Re[19]: Oberon?
    От: eugals Россия  
    Дата: 24.10.04 18:01
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

    VD> С твоими любимыми сообщениями большое приложение рассыпится от рантаймных багов.

    Пока ещё у меня ни одно не "рассыпалось".

    VD>Забавно так же отсутствие модификаторов доступа (видимости). Все паблик, и все виртуальное. Во, блин, решение. Ни надежности, ни скорости.

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

    E>> Под питон еть порт всех популярных оконных (и вообще, компонентных) библиотек/технологий: PyQT, PythonNet, PyCOM, PyXPCOM, PyVCL...

    VD>Во-во. Порт недо-технологий перехивших свой век.
    Ты сказал, что в питоне нет дизайнеров компонентов. Я ответил, что есть — в тех самых компонентных технологиях PyQT, PyCOM-е и т.д.
    Что же касается утверждения, что QT и .NET "пережили свой век", то тебе конечно видней, но меня лично и такое старьё устраивает пока

    E>>Вот я, например, одним из таких приложений сейчас занимаюсь
    Автор: eugals
    Дата: 04.08.04

    VD>Забавно. Ну, значит должен понимать сколько кода нуно докрутить к чистому Питону, чтобы с ним работать в компонентном стиле.
    Не много. В том и прелесть питона, что в нем такие "докручивания" делаются на раз.

    VD>Еще раз. Прозрачность должна еще должна быть зачем-то нужна. Если я получаю в 10 раз блее медленное решение, то уж лучше я обойдусь менее прозрачным.

    Не в десять.
    Тут недавно пробегало сравнение реализации решета эратосфена на Clean-е и C++.
    Вот пример на питоне:
    from time  import time
    from array import array
    
    def test( size):
        arr = array( "b", "\1" * size)
        arr[ 0] = 0
        for i, val in enumerate( arr):
            if val:
                for j in xrange( i + i, size, i):
                    arr[ j] = 0
        arr[ 0] = 1
            
    tm = time()
    test( 100000000)
    tm = time() - tm
    print tm

    Разница с вариантам WolfHound-а у меня была примерно в 3 раза.
    Вполне терпимо, для интерпретатора. Наверное можно было бы сократить отставание до двух или даже полуторакратного, если слегка подправить питоновские библиотеки array и itertools. В принципе, ничто не мешает мне, при необходимости, ввести PEP (Python Enchancement Proposal) на этот счет — отцы питона вполне либеральны в отношении таких предложений.
    Хотя решето эратосфена, мягко говоря, не самая типичная задача. В GUI, например, всё равно все события через очередь окна пропускаются, питон здесь не будет узким местом (знаю — пробовал).
    Вообще, такие сверхтребовательные к ресурсам алгоритмы составляют всё меньший и меньший процент от текущих проблем.
    Если мне нужна быстрая метематическая библиотека, то я не буду писать на питоне или шарпе свою, а возьму интеловскую MKL. Нужен универсальный парсер — ANTLR или Бизон или Кока, твой любимый. XML — expat или xerces-c. 3D — OpenGL и т.д.

    E>> Плюс удобное Python-Си апи, А С(++), несмотря на майкрософтовский прессрелизы, всё ещё главный мировой язык для разработки библиотек.

    VD>Да? И какие ты библиотеки на С++ знаешь?
    Да любые необходимые. Парсеры, Средства доступа к БД, Графические библиотеки, Всякие сетевые клиенты/серверы...

    VD> А на счет удобства. Что может быть удбонее чем просто использование в одном проекте длл-ек написанных на разных языках?

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

    VD>>>В общем, возможность манимулирования не кодом, а готовыми бинарными модулями.

    E>>Ну, в питоне свой формат прекомпилированных файлов. Вполне себе бинарные модули. Не хуже мсильных сборок.
    VD>На склько я знаю каждая версия Питона имеет отличный формат и по этому бинарниками никто не поьзуется.
    Это да. Не то чтобы совсем уж несовместимы, но лучше пикод от разных версий не использовать . Хотя не знаю, может в 2.4 по этому поводу что-нибудь уже и придумали
    VD> Более того они вроде не обязательны. Не создался и ладно...
    Не. Если нужен — создастся.

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

    Само собой. Если бы питон не устраивал нас по производительности, мы бы его не использовали. Устраивает.

    E>>Здесь да, спорить бессмысленно — шарп пока быстрее.

    VD>Покая? Шарпу 2 года. И с каждым годом он становится все быстрее и быстрее. Думаю, ко времени когда МС начнет массовый выпуск продуктов на дотнете они доведут джит и пре джит до уровня своих С++-ных компиляторов (которые у них одни из самых лучших).
    Ну догонит он, а дальше что? Правильно — упрется в железо и остановится.
    А скорость питона растет от версии к версии. Не так быстро как хотелось бы, но растет ведь. И потолок тот же — железо.

    E>>Зато питон гибче и лаконичнее.

    VD>Ну, да экономим на объявлениях типов, перменных, и т.п. В итоге получаем багодром. Гибкость должна иметь разумные пределы. Как и контроль. Баланс, вот что важно. Нужна и скорость кодирования, и скорость получаемого кода, и гибкость, и контроль. Собственно именно разумное сочетание ингридиенов и порождает в итоге конечный продукт.
    Ну, тут не поспоришь

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

    VD>Осталось выбросить статические параметры,
    Это что?
    VD>добавять обязательное объявление переменных
    Обязательное не нужно. Опциональное — может быть. Чтобы можно было оптимизнуть ( или "констрейнтнуть") "по месту".
    VD>Думаю, такой бы язык затмил бы все на своем пути (особенно если при все при этом его компиляторы порождали бы шустрый код). Но это мечта об идиале. А он, как известно, не достижим.
    Ну вот, а как же шарп???

    E>> Плюс у него есть много других преимуществ (встроенные возможности АОП, например).

    VD>Вот об этом интересно было бы послешать по подробнее.
    Почитай про метаклассы.
    Если вкратце, то вот пример, как можно единообразно сделать журналирование вызовов любых методов конкретного класса, а также всех его наследников:
    def createLoggingProxyFor( func):
        def logging_proxy( *args, **kwargs):
            func( *args, **kwargs)
            print "%s called" % func
        print "replacing %s by %s" % ( func, logging_proxy)
        return logging_proxy
    
    class LoggingMetaClass( type):
        """ Метакласс, создающий журналирующую обертку вокруг всех методов своих классов
        """
        def __init__( cls, name, bases, dct):
            type.__init__( cls, name, bases, dct)
            for name, val in dct.iteritems():
                if callable( val) and val != LoggingMetaClass:
                    setattr( cls, name, createLoggingProxyFor( val))
    
    class Test( object):
        __metaclass__ = LoggingMetaClass
        
        def foo( self):
            print "foo"
    
        def bar( self):
            print "bar"
    
    print "starting test"
    t = Test()
    print "calling foo"
    t.foo()
    print "calling bar"
    t.bar()

    Кстати, с помошью метаклассов, можно прикрутить к методам и проверку типов передаваемых в них параметров (и вообще, пред- и постусловий).
    Особенно после того, как в Python 2.4 появились атрибуты (декораторы), навроде шарповских (вообще, они и раньше типа были, но не такие удобные).

    E>>Но только какое отношение преимущество шарпа в скорости имеет к заявленным тобой "компонентным возможностям"? Имхо, второстепенное.

    VD>Гы. А кому нужны игрушки? Если собранное из компонентов ПО рассыпится или будет напоминать пошаговую стратегию, то пользователь пошлет такой софт к черту и будет пользоваться глючным С++-ным.
    Не рассыпается. Стратегию не напоминает. Пользователи не посылают.
    ... << RSDN@Home 1.1.4 @@subversion >>
    Re[5]: Мэйнстрим vs. Самосовершенствование :)))
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 25.10.04 08:09
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>>.....появился оператор "ретон". А у Вирта свой взгляд на мир. Он учит if-ы вкладывать.


    СГ>Любой человек хоть немного знакомый с оберонами, не говоря уже о компетентных в этих вопросах людях, знает, что для выходя из процедуры в оберонах используется именно тот самый оператор RETURN. А вот, Вы об этом до сих пор не знаете, а еще чего-то против высказываете.



    VD>>.....Причем начиная учить детей на Обероне им в первую очередь навязывают стиль, а не объясняют принципы построения грамотного кода....


    СГ>А вот компетентные в этом вопросе люди утверждают обратное. Ссылки я уже неоднократно приводил.


    Сергей, это уже выглядит далеко не корректно про компетентных
    Если у тебя нет аргументов так и скажи, а нехрен посылать столько раз всех.
    Re[10]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 09:37
    Оценка: :)
    Здравствуйте, Sinclair, Вы писали:

    СГ>>То есть сначала надо будет объяснить что такое namespace, class, static void Main, ее аргумент string[] args, вот этого кракозябла [STAThread] — объяснить. Не хило?


    S>А можно в ответ привести минимальную программу на обероне?

    MODULE MyModule;
    
    IMPORT StdLog;
    
    BEGIN
      StdLog.String('Здравствуй мир!');
    
    END MyModule;



    Примеры простейших программ:
    http://www.inr.ac.ru/~info21/cpascal/primery.htm
    Re[6]: Мэйнстрим vs. Самосовершенствование :)))
    От: INTP_mihoshi Россия  
    Дата: 26.10.04 09:40
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

    VD>Объясните мне чем вам не угодил C#?


    Мне в нем не нравится (с точки зрения обучения) только одно — то, что он навязывает ООП.
    Re[13]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 26.10.04 10:47
    Оценка: +1
    Здравствуйте, Kluev, Вы писали:

    K>И то и другое плохо.

    K>Вот питон здесь рулит однозначно:
    K>
    Ну, лично меня ты практически убедил
    В качестве учебного языка мне он уже нравится. Я так понял, что единственное, что ему вменяется как помеха промышленному применению — так это производительность. Зато есть шанс показать все (или почти все) концепции современного программирования в одном флаконе. Это очень круто.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[13]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 26.10.04 12:50
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Лучше тем что использовано меньше понятий, судите сами:


    Опять передергиваем. Ай, как нехорошо. Разберемся подробнее:
    Г>Оберон:

    СГ>1) Существуют модули

    Что такое модули? Или это в седьмом классе понятно всем и без объяснения?
    СГ>2) Один модуль может импортировать другой модуль
    Что значит импортировать?
    СГ>3) В модулях есть подпрограммы, которые можно вызывать из других модулей
    СГ>C#:

    СГ>1) Существуют пространства имен (уже непонятность — а что, собственно, еще за пространство да еще и имен? Где они расположены? А как они выглядят эти пространства?)

    Прошу прощения, а где у нас про пространства имен?
    СГ>2) Существуют классы (еще одна непонятность — что еще за классы? Классы чего? Мы в седьмом классе учимся и что с того?)
    Верно. Что-то все-таки надо детям рассказывать.
    СГ>3) У классов есть статические методы (опять ребенку непонятно что такое статические и что такое методы, в чем разница между подпрограммами и методами?).
    А при чем тут подпрограммы? Кто-то считает понятие подпрограммы присутствующим в детской голове прямо с рождения? Лично я в седьмом классе колбасил арканоиды безо всяких подпрограмм. Так что это — заблуждение. И вводить понятие метода ничуть не хуже, чем начинать с каких-то подпрограмм.
    СГ>Что такое void? Почему именно Main?
    Да. с Void придется повозиться.
    СГ>4) Как понять что Console как-то связана с приведенной выше using System;
    Хорошо, свяжем их явно.
    class Class1
    {
        static void Main()
        {
            System.Console.WriteLine("Hello World");
        }
    }

    Итак, пока что у нас Оберон — C# идут один-в-один, за исключением void. Во всем остальном паритет.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[6]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 26.10.04 13:17
    Оценка: +1
    Здравствуйте, serg_mo, Вы писали:

    _>Здравствуйте, Зверёк Харьковский, Вы писали:


    ЗХ>>СмолТок — воистину. Именно за счет того, что сильно отличается от всего остального. Просто для раздвижения, так скзть, горизонтов. Но учить его первым — по-моему, искалечить восприятие.


    _>Искалечить восприятие чего?


    Тю... Шарпа, естественно.

    А если серьезно — это возвращение к идее мэйнстрима. Грубо говоря, уж очень СмолТок не похож на то, куда движется развитие языков.
    Именно поэтому, имхо, если начать изучать программирование вообще именно со СмолТока — потом будет тяжелее. Привыкнуть, что for — это не сообщение, принимаемое цифрой 1
    FAQ — це мiй ай-кью!
    Re[14]: Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 26.10.04 13:24
    Оценка: :)
    Здравствуйте, Sinclair, Вы писали:

    S>Итак, пока что у нас Оберон — C# идут один-в-один, за исключением void. Во всем остальном паритет.

    Ага, почитайте вот это

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

    В начале 2002 г. Майкрософт на месяц приостановила нормальную работу, чтобы программистский персонал мог специально сосредоточиться на проблемах безопасности и надежности программ. Если оценить количество программистов Майкрософт в 20 тысяч человек при зарплате от $150 тыс. в год и выше, то стоимость месячника повышения квалификации выйдет не меньше 250 миллионов долларов. Майкрософт в состоянии это себе позволить. Остальным, видимо, все же дешевле перейти на инструменты программирования, где проверки индексов массивов не отключаются. Впрочем, и сама компания Майкрософт в настоящее время переходит на платформу .NET, в которой главный язык программирования — т.наз. C# — смоделирован во многом, в том числе и в отношении безопасности программирования, по образцу Оберона.

    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[14]: Oberon???????????????????????????????????
    От: cat-man-do  
    Дата: 26.10.04 14:06
    Оценка: -1
    Здравствуйте, Sinclair, Вы писали:

    СГ>>4) Как понять что Console как-то связана с приведенной выше using System;

    S>Хорошо, свяжем их явно.
    S>
    S>class Class1
    S>{
    S>    static void Main()
    S>    {
    S>        System.Console.WriteLine("Hello World");
    S>    }
    S>}
    S>

    S>Итак, пока что у нас Оберон — C# идут один-в-один, за исключением void. Во всем остальном паритет.

    В Oberon-е мне нравится _однозначность_ его конструкций. Например, то что в C# можно написать System.Console.WriteLine и Console.WriteLine _я_ уже считаю недостатком языка. Если я в программе на Oberon вижу цепочку identifier1.identifier2.identifier3, то всегда знаю что identifier1 объявлен в текущем модуле и могу быстро посмотреть что он означает. Если мне встречается Console.WriteLine в программе на C# я не смогу сразу понять что такое Console и откуда оно взялось, я в курсе, что современные IDE легко позволяют мне это определить, но это решение одного из проявлений проблемы, а не ее самой. В Delphi похожие недоработки языка приводили к необходимости, в сложных библиотеках, идентификаторов состоящих из 8-10 слов.
    В Oberon невозможно обратится к полям/методам результата функции, его можно только присвоить переменной или передать в другую функцию/процедуру, после Delphi это очень раздражало, но то, что вызов метода выглядит как вызов метода (последовательности действий, возможно изменяющих переменные/поля) и отличается от обращения к полям _я_ засчитываю как достоинство языка.
    Re[11]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>
    СГ>MODULE MyModule;
    
    СГ>IMPORT StdLog;
    
    СГ>BEGIN
    СГ>  StdLog.String("Здравствуй мир!");
    
    СГ>END MyModule;
    СГ>



    Кстати, получается, что разница только в том, что объяснять прийдется про модуль вместо класса. Да уж это татальная разница.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re: Oberon???????????????????????????????????
    От: Зверёк Харьковский  
    Дата: 26.10.04 18:31
    Оценка: :)
    Здравствуйте, LaptevVV, Вы писали:

    Кстати, один неглупый человек уверяет, что надо на С начинать детей учить... Чтоб жизнь малиной.
    http://russian.joelonsoftware.com/Articles/BacktoBasics.html

    Он, кстати, довольно убедителен
    Я бы сказал, что это возврат к вопросу об академических языках (на которых кульно учиться, но становится плохо, когда тот же человек пытается на этом языке работать).
    FAQ — це мiй ай-кью!
    Re[10]: Oberon???????????????????????????????????
    От: prVovik Россия  
    Дата: 26.10.04 19:10
    Оценка: :)
    Здравствуйте, VladD2, Вы писали:

    VD>Блин, дайте мне несколько детей и через неделю они будут писать на шарпе программки.

    А ещё ему море по колено, и горы по плечу
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[18]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 23:11
    Оценка: -1
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Да, конечно, бывают. Ассемблеры, Форт и т.п.


    Ассемблер не высокоуровневый язык. Форт я как-то даже не видел.

    >> В общем, как это не называй. А слабая типизация плоха.


    ПК>В Питоне типизация не слабая. Слабая типизация, скажем, в C. А в Питоне ошибки приведений типов все диагностируются.


    Фиг. Там допустимы приведения между булевыми, целыми, списками и т.п.

    Ну, и опять же вся диагностика в рантайме. Что чревато.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[23]: Component Pascal
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 27.10.04 08:23
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>На Component Pascal естественно, даже не просто на нем, а на нем в (бесплатной) компонентной среде разработки и исполнения программ BlackBox от Oberon Microsystems, исходный код который обещали открыть к концу 2004 года. Именно Компонентному Паскалю посвящен проект Информатика 21

    Ну, в нем-то вроде бы список сущностей не ограничивается модулями и процедурами. Вирт таки ввел туда ООП, хотя и довольно-таки экзотическим способом. Отсутствие концепции интерфейса не даст возможности разделить спецификацию поведения от ее реализации. Я понимаю — он пытается до последнего цепляться за свое утверждение "алгоритмы+структуры=программы". Имхо подобное преподавание ООП оставит о нем совершенно неверное представление в головах учеников.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[13]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 27.10.04 08:49
    Оценка: +1
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>

    ЗХ>Языки примерно такие думал брать:
    ЗХ>Ada
    ЗХ>Eiffel
    ЗХ>Forth
    ЗХ>Oz
    ЗХ>Smalltalk
    ЗХ>(что еще подкинете, может быть?)
    ЗХ>+
    ЗХ>скриптовые, в которых есть интересеные (для меня) подходы:
    ЗХ>Perl
    ЗХ>Python
    ЗХ>Tcl
    ЗХ>+
    ЗХ>есть такое желание, но пока не копал — всякое старье, с которым я, за малостью лет, не сталкивался:
    ЗХ>PL/I
    ЗХ>Fortran
    ЗХ>Simula

    ЗХ>вот где-то так.

    ЗХ>


    ЗХ>Предложения, ясен корень, приветствуются.


    ИМХО надо добавить Ruby и выкинуть PL/1.

    ЗХ>2Модераторz: не знаю, чи в отдельную ветку это выкинуть?


    Думаешь стоит?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    AVK Blog
    Re[18]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 10:04
    Оценка: :)
    Здравствуйте, AndrewVK, Вы писали:

    AVK>...Если начать без юзингов...


    Дык а вывод на экран как делать без экспорта библиотечных функций?
    Re[15]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 27.10.04 10:14
    Оценка: +1
    Здравствуйте, Зверёк Харьковский, Вы писали:

    AVK>>ИМХО надо добавить Ruby и выкинуть PL/1.

    ЗХ>ОК, учтем. PL/I я просто не видел еще, интересно.

    Лучше бы тебе его не видеть

    ЗХ>>>2Модераторz: не знаю, чи в отдельную ветку это выкинуть?

    AVK>>Думаешь стоит?
    ЗХ>хз... вот сейчас снесут весь топик в войны

    Да вроде никто пока за это не голосовал. Впрочем если снесут, то эту ветку я обратно вытащу.

    ЗХ>да и офтоп это здесь...


    Да нет вроде пока. Сравнение языков самый что ни на есть онтоп.

    ЗХ>может вообще порубать ее к чертям топиков на 5-6?


    А смысл?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    AVK Blog
    Re[19]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 27.10.04 10:24
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    AVK>>...Если начать без юзингов...


    СГ>Дык а вывод на экран как делать без экспорта библиотечных функций?


    Импорта наверное ты хотел сказать? using это не импорт, это то что я сказал, а именно фичка компилятора, позволяющая писать меньше текста. Импорт в шарпе указывается в параметрах компилятора, а не в исходном коде.
    ... << RSDN@Home 1.1.4 beta 3 rev. 209>>
    AVK Blog
    Re[16]: Oberon???????????????????????????????????
    От: Kh_Oleg  
    Дата: 27.10.04 11:51
    Оценка: :)
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>А разница между прочим на столько громадна, что даже не смешно. Перво-наперво надо объяснить КУДА писать исходный код программы. Модуль — это и есть то самое место куда надо писать исходный код программы, в том числе код классов надо писать внутрь модуля.


    AVK>Представь что я школьник и ответь на простой вопрос — а зачем все это?


    Десять лет назад я сам был школьником, которому в рамках школьной программы объясняли азы программирования. При этом использовался язык Modula-2. Уже на втором занятии нам дали задание самим написать программу вычисления корней квадратного уравнения.

    Насчет ключевого слова MODULE было сказано так: в программе ДОЛЖНЫ обязательно присутствовать MODULE ProgramName, BEGIN и END ProgramName. До BEGIN объявляем переменные, после BEGIN — пишем код. То же самое с функциями ввода-вывода: учитель показал как ими пользоваться
    FROM IO IMPORT WrStr, WrLn;
    BEGIN
    WrStr("Hello!"); WrLn;

    и этого было предостаточно, чтобы мы смогли ими пользоваться.
    Re[9]: Oberon???????????????????????????????????
    От: serg_mo  
    Дата: 27.10.04 18:07
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

    VD>Предлагая (ну, так для разнообразия) открыть современную стреду вроде VS, Эклипса или Идеи и поглядеть как обстаят дела с пониманием кода в них. Уверю, что будет очень интересно. И окажется, что языки вроде Явы и Шарпа тоже можно успешно изучат без документации.


    Представь себе, открывал неоднократно, и VS и IDEA. Действительно, было интересно, особенно то, что для того, чтобы поэкспериментировать с каким-либо классом, приходилось создавать новый проект, компилять его... И все для того, чтобы посмотреть, как работает какой-то метод. А уж если в процессе отладки вдруг пришла бы мысль пройтись дебаггером по какой-то отдельно взятой строчке кода... Или вызвать еще раз метод двумя шагами выше по стеку... Отставить! Действительно интересно потраченное время Впрочем, может, я просто не знаю, как это делается?
    Хотя, до того, как я перешел на Смолток, жил я без этих возможностей и даже не замечал неудобства. Но и времени на изучение тех же библиотек уходило не в пример больше.

    VD>Прадва на счет тоже я бы усомнился. Я вот как-то пробовал покапаться в смолтоке и быстро бросил. Так как концепции не похожи на прижившиеся в современных языках. А мучиться не хотелось. За то вот Шарп и Яву я освоил очень быстро и без заглядывания в мануалы.


    Думаю, тут надо сказать "пасибо" языку С
    Я абсолютно согласен, зная С/С++, изучение Явы или Шарпа не будет большой проблемой (ну, может, разве что анонимные классы в Яве поднапрягут слегка . Но это при условии, что ты знаком с С. Я знаю людей, которые шли по пути Pascal/Delphi и имели большие трудности с освоением синтаксиса C#, хотя люди были хорошие программисты. Правда, справедливости ради надо сказать, что и Смолток их не вдохновил .

    А для начала работы со Смолтоком тебе естественно, пришлось бы прочитать туториал страниц на 10.
    Правда, изучение Self, например, после Смолтока прошло бы так же незаметно, как сейчас для тебя — C#
    ... << RSDN@Home 1.1.3 stable >>
    Re[10]: Oberon???????????????????????????????????
    От: FR  
    Дата: 27.10.04 18:12
    Оценка: +1
    Здравствуйте, serg_mo, Вы писали:

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


    FR>>Он не похож вообще на другие языки.

    FR>>Простота не всегда хорошо, что хорошо видно здесь на примере того же оберона.

    _>Пусть вещи будут простыми, но не проще, чем нужно . Я хочу сказать, что в основе Смолтока лежит очень небольшое количество правил, используя которые можно построить весьма сложные конструкции.


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

    FR>>А какой смысл читать код не понимая что он делает? Это примерно как выучить латинский алфавит и кричать что хорошо знаешь латынь?


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


    гораздо полезнее паралельно читать документацию к этому языку

    FR>>По моему такое длиное объяснение такого элементарного понятия как цикл, уже показывает что с языком что-то не так. Во всяком случае для обучения точно это плохо.

    _>Ну, я всего лишь хотел быть предельно понятным. Моей целью было не объяснить, что такое цикл, а проанализировать этот кусок кода.

    я плохо понял, хотя если честно не особо вникал

    FR>>Вот только мне кажется что ближе к человеческому мышлению как раз большое количество синтаксических конструкций как и в естественных языках.

    _>Ну, думаю, тут можно спросить мнение человека, разбирающегося с применением артикля в английском языке или со спряжением глаголов в Passato Remoto в итальянском .
    _>На мой взгляд, наиболее просты для обучения вещи, имеющие четкую схему с минимумом отклонений от нее.

    На мой взгляд проще для изучения вещи которые хорошо ложатся на мышление "обычного" человека, не зависимо от сложности реализации этих вещей на языке програмирования. И судя по тому как распределятеся популярность языков, то именно обычные императивные языки и являются такими.
    И еще обучение это одно, а использование другое, по моему слишком простым тяжело полльзоватся.
    ... << RSDN@Home 1.1.3 stable >>
    Re[20]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 10:07
    Оценка: +1
    Здравствуйте, Sinclair, Вы писали:

    Я о том и говорю, человек делал простой язык. Как и с Паскалем идея была только учить на нем детей. Вот только такая учеба сравни с колеченьем.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[25]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 10:29
    Оценка: -1
    Здравствуйте, VladD2, Вы писали:

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


    S>>Отсутствие концепции интерфейса не даст возможности разделить спецификацию поведения от ее реализации. Я понимаю — он пытается до последнего цепляться за свое утверждение "алгоритмы+структуры=программы". Имхо подобное преподавание ООП оставит о нем совершенно неверное представление в головах учеников.


    VD>Гы. Там не только интерфейсов нет. Там даже человеческой защиты нет. Поинтерисуйся о методах скрытия (инкапсуляции) применяемых в Обероне 2.


    Кстати, хорошая тема, надо будет ее как-нибудь развить в отдельной ветке. Сейчас только вскользь упомяну, что с инкапсуляцией в оберонах все в порядке.
    Re[9]: Обновление
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.10.04 11:03
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>>Как возник этот проект

    СГ>>>http://www.inr.ac.ru/~info21/kak.htm

    VD>>Кстати, слова "по-дилетантски спроектированного" выдают скорее дилетантство писавших статью.


    СГ>Но он действительно по-дилетантски спроектирован.


    В отношении программирования ситуация очень похожа: навыки беспорядочного, "корявого" программирования быстро становятся привычкой и формируют совершенно неадекватное программистское мышление...


    Умение "правильно" программировать ИМХО не зависят от языка программирования. Можно коряво программировать и на Пакале и на Обжект Паскале (ака Дельфи) и на С и на С++ и на Яве и ...

    На любом языке программирования можно создавать неработоспособные или неэффективные системы.

    Другое дело, что язык и/или среда программирования может слегка корректировать программиста, но это никогда не остановит программиста от создания монстров.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[10]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 11:14
    Оценка: :)
    Здравствуйте, Mamut, Вы писали:

    M>Умение "правильно" программировать ИМХО не зависят от языка программирования. Можно коряво программировать и на Пакале и на Обжект Паскале (ака Дельфи) и на С и на С++ и на Яве и ...


    Именно поэтому все из перечисленных Вами языков были отвергнуты. В качестве стандарта был выбран Component Pascal на котором коряво программировать не получится.
    Re[29]: Component Pascal
    От: WFrag США  
    Дата: 28.10.04 13:51
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) на счет переменных в definition. Найдите отличия:



    СГ>
    СГ>MyInterface = interface
    СГ>  function  GetMyVariable: integer;
    СГ>  procedure SetMyVariable(NewValue: integer);
    СГ>  //...
    СГ>end;
    
    СГ>MyDefinition = definition
    СГ>  var MyVariable: integer;
    СГ>  //...
    СГ>end;
    СГ>


    Разница — просто огромная. Первый вариант предлагает контракт, без его реализации. Второй вариант — с зависимостью от конкретной реализации.

    Простой пример. В первом варианте я могу подменить реализацию (заменить .jar-ку с имплементирующими интерфейс классами, в случае с Java), совершенно не изменяя остальной код и интерфейсы. А вот во втором варианте если я захочу заменить на вычисляемое поле, то придется править интерфейсы — это и есть лишняя зависимость.


    СГ>2) на счет предопределенной реализации — она не такая как в "виртуальных" функциях, т.е. не имеет побочных эффектов. Подробности смотрите в ссылке.


    Без разницы. Я про зависимости говорил.
    ... << RSDN@Home 1.1.4 beta 3 rev. 205>>
    Re[31]: Component Pascal
    От: WFrag США  
    Дата: 28.10.04 14:43
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Да-а-а-а????????????? В ссылочку значит так и не глянули???????????????? А напрасненько-напрасненько. Очень рекомендую. Дело в том, что реализация этого определения может выставить на MyVariable get/set методы, и то что снаружи выглядит как простая переменная в разных реализациях может быть и функцией. А ссылочку-то Вы посмотрите, чтоб в следующий раз так просто в просак-то не попадать.


    OK, принято.

    Видишь ли, если уж говоришь в контектсе C# (о интерфейсах), то и называй понятия так, как это там принято. Я говорил про переменные. То что ты сейчас озвучил — это "свойство" в понимании (C#/Java). В C# они поддерживаются на уровне языка, а в Java — на уровне соглашения. Получается, что это уже есть. И тогда я совсем не понимаю, к чему твои слова о "дополнительных фичах".

    Тогда чем эти твои "переменные интерфейса" концептуально отличаются от свойств C#?

    СГ>>>2) на счет предопределенной реализации — она не такая как в "виртуальных" функциях, т.е. не имеет побочных эффектов. Подробности смотрите в ссылке.


    WF>>Без разницы. Я про зависимости говорил.


    СГ>Так расшифруйте что это означает:

    СГ>

    СГ>зависимость от реализации в интерфейсе

    СГ>разумеется, предварительно все же взглянув на ссылочку.

    Ладно, тут моя ошибка.

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


    Ну и документации я хорошей не нашел. Я читал Zonnon_Language_Report_v02r01_7_y040416.pdf, так там собственно ничего и не сказано по сути языка.
    ... << RSDN@Home 1.1.4 beta 3 rev. 205>>
    Re[34]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 14:49
    Оценка: :)
    Здравствуйте, Курилка, Вы писали:

    К>И остаётся только свято верить в непогрешимость Вирта и собратьев!


    Да, вот, судьба такая...
    Re[6]: Мэйнстрим vs. Самосовершенствование :)))
    От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
    Дата: 28.10.04 15:09
    Оценка: :)
    Здравствуйте, VladD2, Вы писали:


    VD>Ну, почему же не пригодность? У Паскаля есть работоспособное развите — Дельфи. Вот только результатом такой приверженности Паскалю явилось, то что появилась целая плияда ламеров непонимающих в программировании как таковом за-то знающих синтаксис Паскаля и потому выбирающих Дельфи. Вот только Дельфи — это современный ООЯ. Пусть не очень качественно споектированный, но все же современный. И его тоже нужно уметь использовать. Но наши преподаватели остановились на голом Паскале. В итоге "программист" осваивает работу с дизайнером форм, даблкликает по кнопки и фигачит там код на том самом Пасклае. Все! На большее он не способен. Хотя нет... еще при появлении какой-нибудь не тривиальной задачи он лезет в Интернет и спрашивает "А где надыбать хомпонент ХХХ для решения задачи УУУ?".


    Значит таже участь ждет и нетчиков

    VD>Вот и не нужно объяснять это на "выдуманных" язвках. Объясняйте это на вымученных языках. Современные ЯП являются такими какми они являются от того, что в них вложен опыт реального программирования на многих предшествующих языках. Ну, не просто так в Яве и Шарпе остались continue и есть return. Та же Дельфи и Васик долго жили без них, но в итоге и в них были добавлены эти конструкции. Вред этих конструкций высасан из пальца.


    Ну ты знаток Delphi. exit был еще в Паскале. Про continue могу сомневаться .Может подскажешь в какой версии появился???
    и солнце б утром не вставало, когда бы не было меня
    Re[7]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 19:58
    Оценка: -1
    Здравствуйте, Serginio1, Вы писали:

    S> Ну ты знаток Delphi. exit был еще в Паскале. Про continue могу сомневаться .Может подскажешь в какой версии появился???


    В Паскале Exit-а небыло. Тогде у Вирта совсем крышу рвало. Но Exit это завершение приложения и к return-у он отношение не имеет. Так что о чем ты ведешь речь, как всегда понять сложно.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[8]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:00
    Оценка: +1
    Здравствуйте, serg_mo, Вы писали:

    _>Кстати, почему, например, не выбрали Java? Потому что C++ считался "мэйнстрим".



    Ява давно уже мэйнстрим и во всем ире кучи универов обучают именно на ней.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[21]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:00
    Оценка: :)
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>А вот вам к вопросу о живости языка:

    ЗХ>

    ЗХ>IBM PL/I for AIX, V2.0
    ЗХ>IBM United States Software Announcement
    ЗХ>June 22, 2004


    Ага. Кто-то мудрый, из программеров, подсуетился в 1563 году скриптик прикрутил. Теперь версия всегда всвежая.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[21]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:00
    Оценка: :)
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>Неее, РЕФАЛ-то у мине лежит, ждет своего часу. Я где-то тут даже Владу пояснял, что это за язык.

    ЗХ>Да только не императивный он, вроде?

    Зато больно на моп-твою-ять похож.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[22]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 28.10.04 23:32
    Оценка: :)
    VladD2:

    > ПК>P.S. Отзыва не нашел.


    > А гед искал?


    www.google.com
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[15]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 29.10.04 00:10
    Оценка: +1
    VladD2,

    > Не не въехал! Там же нет префикса std::, а это теперь считается неграмотным.


    Не совсем: префикс там есть, java.util.Arrays.

    > И вообще, если все методы (пусть и статические) помещать в класс к которому они относятся, то любой дурак нажав точку в IDE получит их список.


    Ты говоришь о другой ситуации, а именно о помещении функции sort в класс Array. Дело спорное, т.к. нарушает Open-Closed Principle, но вопрос совсем отдельный.

    В данном случае речь идет о том, что из-за отсутствия в Java "свободных" функций, приходится создавать совершенно искуственный "класс" java.util.Arrays, только для того, чтобы можно было написать функции для манипуляции массивами. Ничего при нажатии на точку в данном случае в IDE не выпадет. Снова-таки, множество этих функций нормальному расширению не поддается, т.к. "доопределять" класс в других файлах невозможно.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[22]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 29.10.04 00:53
    Оценка: :)
    Здравствуйте, VladD2, Вы писали:

    ЗХ>>Неее, РЕФАЛ-то у мине лежит, ждет своего часу. Я где-то тут даже Владу пояснял, что это за язык.

    ЗХ>>Да только не императивный он, вроде?

    VD>Зато больно на моп-твою-ять похож.


    Зато — наши люди сделали! Ты лучше гордись, чем критиковать!

    Есть такие языки — Esoteric programming languages
    Ну, которые сделаны для прикола или из вредности... Вроде BrainFuck или Whitespace
    Так вот, на одном из сайтов, посвященных таким языкам, в список эзотерических попал

    AKI (AvtoKod Ingenera, "engineer's autocode") for Minsk family of computers

    Так что — могем!
    Это мы, Зверьки! << Metallica — Low Man's Lyric >>
    FAQ — це мiй ай-кью!
    Re[8]: Мэйнстрим vs. Самосовершенствование :)))
    От: alive Россия  
    Дата: 29.10.04 07:09
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

    S>> Ну ты знаток Delphi. exit был еще в Паскале. Про continue могу сомневаться .Может подскажешь в какой версии появился???


    VD>В Паскале Exit-а небыло. Тогде у Вирта совсем крышу рвало. Но Exit это завершение приложения и к return-у он отношение не имеет. Так что о чем ты ведешь речь, как всегда понять сложно.


    В Delphi Exit это не завершение приложения, а аналог return-а, хотя объективно говоря return удобней.
    ... << RSDN@Home 1.1.4 beta 3 rev 207 >> <<Урфи Джюс — Мегаломания>>
    Keep yourself alive
    Re[14]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 07:50
    Оценка: :)
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Конечно можно. Скачивайте отсюда http://www.oberon.ch/blackbox.html


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


    1) У меня нет моих людей. И я не учитель, как Вы почему-то подумали.
    2) На сайте info21 есть ссылки на другие сайты где кучами лежат компоненты под BlackBox. А еще, там же есть, например, ссылка на сборник олимпиадных задач для школьников.

    Но! Обращаю Ваше внимание, что для того чтобы смотреть исходники скачать и установить BlackBox Вам все равно придется, так как формат в котором хранятся исходные тексты программ не plain-text, а бинарный формат *.odc (Oberon Document). odc-файл это файл в котором в бинарном виде сохранен конгломерат взаимоссылающихся друг на друга объектов (сериализованные объекты). Благодаря этому, oberon document представляет собой среду напоминающую MS Word, то есть текст можно форматировать (шрифт, цвет, размер, стиль — каждой буквы). Можно вставлять картинки, управляющие кнопки, едиты и прочие контролы, а в принципе, даже работающие программы. Представьте себе таку вещь:
    PROCEDURE Pr1();
    BEGIN
     (* ... *)
    END Pr1;
        +-------------+
        | Нажми меня  |
        +-------------+

    где под прямоугольником с надписью "Нажми меня" я попытался изобразить обыную виндозную кнопку. То есть прямо в текст проги можно запихнуть кнопку, и, например, ассоциировать ее с процедурой Pr1(). Нажимаешь на кнопку — процедура выполняется!
    Re[16]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 08:37
    Оценка: :)
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Представьте себе таку вещь:

    СГ>>
    СГ>>PROCEDURE Pr1();
    СГ>>BEGIN
    СГ>> (* ... *)
    СГ>>END Pr1;
    СГ>>    +-------------+
    СГ>>    | Нажми меня  |
    СГ>>    +-------------+
    СГ>>

    СГ>>где под прямоугольником с надписью "Нажми меня" я попытался изобразить обыную виндозную кнопку. То есть прямо в текст проги можно запихнуть кнопку, и, например, ассоциировать ее с процедурой Pr1(). Нажимаешь на кнопку — процедура выполняется!

    ЗХ>Круто!!! А зачем?


    Так просто, например, рептилоидов поражать. В то время когда это уже было в оберонах MS Word только только делал первые шаги...
    Re[6]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 29.10.04 08:37
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

    VD>Ну, это ты зря. В Шарпе все концептуально полно.


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

    VD> Уж массивы для передачи по ссылке использовать не прийдется.


    Тебе часто приходится использовать ref и out? Мне вот крайне редко, в основном при работе с P/Invoke. Так что это не страшно. И опять же — для обучения предпочтительнее для этого использовать ... нет, не массивы, а специально созданные классы, содержащие совокупность параметров. Концептуально это даже чище ref и out. Понятно что писанины при этом больше, но при обучении это не страшно.

    VD> Ну, а то что пока не нужно можно и не преподовать.


    От некоторых вещей отмазаться не получится, например от боксинга и структур.
    ... << RSDN@Home 1.1.4 beta 3 rev. 214>>
    AVK Blog
    Re[17]: Обновление
    От: WFrag США  
    Дата: 29.10.04 08:49
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, WFrag, Вы писали:


    WF>> Что мы теряем


    СГ>А зато что приобретаем: *.odc — это хранилище сериализованных объектов в (бинарном виде) — так загрузите эти объекты и работайте с самими объектами, а не с текстом как таковым — уровень абстракции резко повышается.


    Ты не понимаешь в полном объеме, что мы теряем, я не понимаю, что мы приобретаем конкретно при таком подходе

    Мы имеем более высокий уровень абстракции при этом жертвуя более низким. Собственно, против этого пожертвования я и выступаю — все хорошо, пока этот высокий уровень абстракции покрывает наши желания.

    Например, в Eclipse я вижу исходники Java в виде дерева пакетов/классов/методов. Это более высокий уровень абстракции, чем текст? Несомненно. Но при этом у меня остается возможность работать и с более низким — например, подсчитать количество слов в программе. Или сравнить два исходника.
    Re[34]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 08:56
    Оценка: :)
    Здравствуйте, WFrag, Вы писали:

    WF>Всегда можно сказать:

    WF>1. не создавай экземпляры этого класса, пусть там будут только абстрактные методы. Это будет definition.
    WF>2. не создавай экземпляры этого класса, пусть он наследуется от definition и реализует некоторые методы. Это будет implementation.
    WF>3. не наследуйся от этого класса, но создавай его экземпляры. Это будет object.

    Дык, Zonnon от Си++ много чем отличается: АКТИВНЫЕ ОБЪЕКТЫ, Протокол общения между объектами в форме EBNF, сборка мусора в конце концов....
    Re[35]: Component Pascal
    От: WolfHound  
    Дата: 29.10.04 12:58
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Дык, Zonnon от Си++ много чем отличается:

    СГ>АКТИВНЫЕ ОБЪЕКТЫ,
    А чем оно лучше потоков?
    СГ>Протокол общения между объектами в форме EBNF,
    Ты так и не сказал на кой черт оно надо
    СГ>сборка мусора в конце концов....
    Вот уж нафиг не упало.
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[15]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка: :)
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Нет, просто ни в какие классы эти функции не пихать, т.к. множество алгоритмов открыто, и, соответственно, помещение их в класс нарушает Open-Closed Principle.


    Ага. Я вот как смотрю на классы Шарпа и сразу вспоминаю, что нарушены все принципы. А как смотрю на СТЛ, так сразу ... маму вспоминаю.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[9]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка: +1
    Здравствуйте, Serginio1, Вы писали:

    S> Exit это выход из процедуры.


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

    S> А Continue и Break еще во 2 Delphi были


    Дельфи к Паскалю имеет отдаленное отношение.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[9]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 21:56
    Оценка: +1
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Увы, некоторые фишки щарпа встроены в язык намертво и используются в стандартной библиотеке. Можно конечно про них умалчивать, но задолбаешься потом флажки развешивать, куда не ступать.


    Например?

    AVK>Это если он один. В институте (по крайней мере на специальностях 220Х) ведь никто не читает курс язык программирования ХХХ. Курсы называются "основы системного программирования", "системное программное обеспечение", "алгоритмы и структуры данных" и т.п. Никто неставит целью именно изучить язык, надо побыстрее научить что то делать на каком либо языке, а потом объяснять основное наполднение курса. На фоне этого языки с удобными, но неконцептуальными наворотами менее выгодны.


    Незнаю, незнаю. Я бы вещи вроде Шарпа и Плюсов читал бы в обязательном порядке. Шарп по раньше, плюсы по позже. Так же бы читал какой-нить ФЯ, но не Лисп или Схем.

    AVK>Ничего там не уйдет. Там вобще как таковой отдельной концепции нет.


    Агащасблин. На них и визуальные контролы завязаны и ЁЖиБи.

    AVK> Просто в некоторых библиотеках появляются listeners, причем как ими пользоваться понятно сразу же при просмотре первого примера.


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

    AVK> Что же такое эвенты, по моим наблюдениям, точно не знают весьма немалый процент профессиональных программистов. Посмотри с какой регулярностью в форуме возникает вопрос — "чем эвенты отличаются от делегатов".


    Дык с тем же успехом взникают вопросы "чем переменные отличаются от свойств".

    В принципе, при наличии делегатов можно было бы обойтись без событий. Просто для CLI это более общая идеома. В Васике, например, события совсем иначе выглядят.

    AVK>Я уже сказал — здесь джава действительно требует больше усилий, нежели шарп.


    Ну, и выходит даш на даш.

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


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

    AVK>Это смотря какую цель преследовать. Если изучение языка, то возможно. Только это уровень техникума, а не института.


    Ну, уж извини.

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


    Вот только этот прием теперь во всех книжках по Яве идет как базовый способ реализации событий. Еще бы (?!) он же в половине библиотек испльзвется.

    VD>>К тому же сложностей хватет. В Яве все недостоющее эмулируется. А эти эмуляции тоже объяснять нужно.


    AVK>Значительно проще, поскольку вся механика явная.


    Не батенька. Когда явной механики вагон и нехилая тележка, то объяснять задолбаешся. Иначе бы С++ был бы самым простым языком в мире.

    AVK>Еще раз — применение массивов это чисто практическая фишка, для обучения ее объяснять не нужно и даже вредно. В стандартной библиотеке такой финт ушами не используется.


    Здорово. Значит часть возможностей языка не объясняем. Тогда уж извини. Необъяснять можно что угодно. Эдак любую закрытую дыру в яве можно не объяснять и языки станут идентичеными. Вот только работать на таком языке человек на практике не сможет. Один хрен прийдется изучать "приемы" как обойти дыру.

    В Яве уже появилась куча возможностей из Шарпа. Те же атрибуты, например. Их тоже прикажешь не учить? Тогда можно вообще к Яве 1.0 обратиться. Уж там учить еще меньше.

    VD>>Приходится. А что? Или типа передача ссылок и out-параметры — это не важный аспект обучения?


    AVK>Смотря какого. Для ремесленника важный, для инженера не очень.


    Реального. Или мы учим детей играться в программирование. Или учим программировать.

    AVK>Нет, это правильный подход к проектированию, когда лень не мешает это делать. Сколько раз встречаются ref и out в библиотеке фреймворка?


    Много. Но это к делу не относится.

    AVK>Явная механика боксинга для обучения безусловно предпочтительнее, поскольку все сразу видно. А вот неявный боксинг приведет новичков к проблемам. Что регулярно находит подтверждение в дотнетовском форуме.


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

    В общем, ерунду ты говоришь. Чем язык более высокоуровнев, тем проще на нем научиться программировать. Проще выучить больше мелких фишек, чем осознать все подводные процессы что присходят в их кишках. Тот же боксинг на ранних стадиях не нужен. Он выглядит как приведение типов. А его рзультаты очень полезны. Человек сможет мыслить в едином пространстве типов, что снимет кучу ненужных подробностей.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Мэйнстрим vs. Самосовершенствование :)))
    От: Undying Россия  
    Дата: 29.10.04 23:11
    Оценка: +1
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Прикол в том, что алгоритмы из Arrays нельзя применить к List или Deque, соответственно, при разработке последних придется создать Lists и Deques с тем же содержимым, что в Arrays. Плюс, когда окажется, что авторы Arrays не прописали давно изученный и описанный алгоритм в Arrays, надо будет этот "класс" модифицировать. А вслед за ним и Lists, и Deques.


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

    ПК>Одним из фундаментальных принципов которого является Open-Closed Principle. А запихивание всех подряд функций в тот или иной "класс", у которого нет никаких основных атрибутов (поведение, состояние, инварианты), к ООП никакого отношения не имеет.


    Можно объяснить принцип Open-Closed Principle?
    ... << RSDN@Home 1.1.2 stable >>
    Re[12]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 23:27
    Оценка: +1
    Здравствуйте, Mamut, Вы писали:

    Совсем согласен. Но все же когда язык или среда подталкивают все же лучше. Не все же программисты супер-ассы. Да и ассы в запарке лажу гонят. Это на детских примерах хорошо говорить, что continue не нужен, или что, мол, вот как все просто и красиво. А когда в программе стоят параллельно требования сделать быстро, производительно, надежно и красиво, то обязательно чем-то придется жертвовать. И такие фишки как типобезопасность, поддержка того же рефакторинга средой, читаемость кода начинают играть большую роль. Но, безусловно, в руках у неандертальца все эти фишки даже бесполезнее чем каменный топор (так как им то они пользоваться умеет).
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[10]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 30.10.04 09:18
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

    AVK>>Увы, некоторые фишки щарпа встроены в язык намертво и используются в стандартной библиотеке. Можно конечно про них умалчивать, но задолбаешься потом флажки развешивать, куда не ступать.


    VD>Например?


    Так примеры я уже неоднократно приводил — эвенты, боксинг, двойственная сущность енумов и т.п.

    AVK>>Ничего там не уйдет. Там вобще как таковой отдельной концепции нет.


    VD>Агащасблин. На них и визуальные контролы завязаны и ЁЖиБи.


    Интересно что у Java Beans и EJB общего кроме слова бобы? Опять же, Java Beans это не часть языка, это обычная библиотека.

    AVK>> Просто в некоторых библиотеках появляются listeners, причем как ими пользоваться понятно сразу же при просмотре первого примера.


    VD>Ну, как поьзоваться событиями дотнета становится понятно значитель быстрее.


    Пользоваться безусловно, я об этом и говорил. А вот разобраться как оно работает намного сложнее.

    AVK>> Что же такое эвенты, по моим наблюдениям, точно не знают весьма немалый процент профессиональных программистов. Посмотри с какой регулярностью в форуме возникает вопрос — "чем эвенты отличаются от делегатов".


    VD>Дык с тем же успехом взникают вопросы "чем переменные отличаются от свойств".


    Ни разу не видел.

    VD>В принципе, при наличии делегатов можно было бы обойтись без событий. Просто для CLI это более общая идеома. В Васике, например, события совсем иначе выглядят.


    Все оно так, но к сожалению эта фишка встроена в CLR и язык, и игнорировать ее при обучении будет очень сложно.

    AVK>>Я уже сказал — здесь джава действительно требует больше усилий, нежели шарп.


    VD>Ну, и выходит даш на даш.


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

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


    VD>Да я как бы Яву на уровне языка знаю не плохо. Там скорее дыр больше, чем неявностей. Все неявности Шарпа — это залатывания дыр Явы. Да Шарп, от части, и родился как предлжение по модификации Явы.


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

    VD>Вот только этот прием теперь во всех книжках по Яве идет как базовый способ реализации событий.


    Синтаксис короче. Вполне допустимо после того как человек научится реализовать интерфейсы подписки явно. К сожалению, тут я с тобой согласен, в большинстве книжек сразу начинают использовать анонимные классы, в свое время меня это сильно озадачило.
    Впрочем шарп 2.0 в этом отношении ничуть не лучше — анонимные методы фактически та же фигня, особенно когда внутри ты начинаешь использовать локальные переменные.

    VD> Еще бы (?!) он же в половине библиотек испльзвется.


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

    AVK>>Значительно проще, поскольку вся механика явная.


    VD>Не батенька. Когда явной механики вагон и нехилая тележка, то объяснять задолбаешся.


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

    VD> Иначе бы С++ был бы самым простым языком в мире.


    Без шаблонов и множественного наследования вобщем то это достаточно простой язык.

    VD>Здорово. Значит часть возможностей языка не объясняем.


    Это не возможности языка, это паттерн.

    VD>В Яве уже появилась куча возможностей из Шарпа. Те же атрибуты, например. Их тоже прикажешь не учить? Тогда можно вообще к Яве 1.0 обратиться. Уж там учить еще меньше.


    Возможно ты и прав. Хотя как язык джава практически не менялась вплоть до версии 5.0. Так что 1.4 будет самое оно.

    AVK>>Смотря какого. Для ремесленника важный, для инженера не очень.


    VD>Реального. Или мы учим детей играться в программирование. Или учим программировать.


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

    AVK>>Нет, это правильный подход к проектированию, когда лень не мешает это делать. Сколько раз встречаются ref и out в библиотеке фреймворка?


    VD>Много.


    Где? Примеры приведи. Желательно в часто используемых классах, а не в каком нибудь интеропе.

    VD> Но это к делу не относится.


    ИМХО очень даже относится . Показывает реальную применимость ref и out.

    VD>А, ну, зашибись! Тогда учить нужно явно на плюсах. А то и на С. Там как раз минимум неявностей.


    Зато там много аппаратуры, что не есть гуд. Надо искать золотую середину, а не кидаться в крайности.
    ... << RSDN@Home 1.1.4 beta 3 rev. 216>>
    AVK Blog
    Re[21]: Обновление (73 KB)
    От: Schade Россия  
    Дата: 30.10.04 10:14
    Оценка: :)
    Здравствуйте, VladD2, Вы писали:

    VD>Кстати, сдества отладки там тоже потрясающие. И это при бесплатном Эклпипсе и VS Express.


    Ну что ты! Это же еще одна гениальная идея Вирта! Отладчик — это еще более страшное зло, чем "=="!
    ... << RSDN@Home 1.1.4 @@subversion >>
    Re[22]: Мэйнстрим vs. Самосовершенствование :)))
    От: Undying Россия  
    Дата: 30.10.04 10:28
    Оценка: +1
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>"Попытки писать в ОО-стиле", если подразумевать под этим напихивание в классы всевозможных "утилит", могут "работать" (*), только если весь код, использующий эти классы, находится под прямым контролем разработчиков обсуждаемых классов. Плюс, разработчики готовы платить за поддержание всех наследников этих классов, что в больших проектах может обходиться достаточно дорого.


    Поэтому за наследование от неабстрактных классов в общем случае нужно пинать ногами.

    ПК>Некоторое время мы живем счастливо, но оказывается, что для некоторых задач принципиальным оказывается вопрос: сохраняет ли используемый алгоритм порядок "одинаковых" с точки зрения упорядочивания элементов. Ну, что ж, следуя заведенному порядку, нам будет нужно добавить метод stable_sort().


    А если возникла задача определять вид сортировки по внутреннему состоянию класса, то что будешь делать? Если Sort это метод класса, то все просто добавляем Sorter sorter = SorterFactory.Create(this, params) и в Array.Sort вызываем sorter.Sort(), а что он там дальше делает не наша проблема. А в случае внешних функций?

    ПК>Однако на этом наши приключения не заканчиваются: ведь у пользователя, в его наследнике Array<>, уже могла быть своя stable_sort(), обладающая несколько иной семантикой, и эта функция "перекроет" определенную в Array<>. В таком случае новые функции, принимающие Array<>, и предполагающие соответствие семантики stable_sort() той, что заявлена в Array<>, правильно работать не будут.


    А вместо наследования от Array делегировать его религия не позволяет?

    ПК>Далее, если представить себе развитие этой иерархии и возможную потребность добавления в будущем утилит типа find(), find_if(), binary_search() и т.п., то становится очевидно, что в классы этой иерархии эти функции также добавлять будет нельзя.


    Можно для них ввести дополнительный интерфейс и реализовывать его будут только те классы, которым это действительно надо.

    ПК>Есть и еще одна сторона этой проблемы: очевидно, что разработчики библиотеки не могут учесть всех нужд пользователей, и снабдить их всеми нужными им "утилитами". Что же делать пользователям? Следуя "попыткам писать в ОО-стиле", им надо будет унаследоваться от класса, который они захотят "расширить", и добавлять в своего наследника нужные им "утилиты". Но на этом пути их ждет масса трудностей.


    Тебя чем не устраивает связка статичные функции + инкапсулирование вызовов этих функций методами класса?

    ПК>Выход простой: тем или иным образом вынести эти "утилиты" за пределы самих классов. В любом случае, никакой необходимости для них быть членами обсуждаемых классов нет, т.к. они прекрасно могут быть реализованы через "основной" интерфейс (а если не могут, то "основной" интерфейс не полон). А в качестве приза мы получим невероятную легкость расширения набора этих "утилит", совершенно не затрагивая клиентов классов рассматриваемой иерархии. Более того, пользователи с той же легкостью смогут пополнять набор "утилит" по такому же принципу.


    Конечно, часть проблем это решает, но часть и создает, так что на серебрянную пулю не тянет.
    ... << RSDN@Home 1.1.2 stable >>
    Re[13]: Обновление
    От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
    Дата: 31.10.04 05:23
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    VD>>Существенный недостаток есть. Язык не применим на практике. Он мертв. И учить на нем детей — значит обрекать их на дополнительное самообучение с переламыванием себя.

    СГ>Я уже не раз указывал Вам на Вашу некомпетентность в этом вопросе. Но Вы продолжаете повторяться вновь и вновь.

    Извини, дорогой. Если ты компетентен, то не грех указать на конкретные ошибки собеседника. А так, доверие к тебе ещё сильнее падает. Знаешь, орать "сам дурак" мы все умеем.
    ... << RSDN@Home 1.1.3 stable >>
    Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
    P.S.: Винодельческие провинции — это есть рулез!
    Re[22]: Обновление (73 KB)
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 08:19
    Оценка: :)
    Здравствуйте, Schade, Вы писали:

    S>Ну что ты! Это же еще одна гениальная идея Вирта! Отладчик — это еще более страшное зло, чем "=="!


    Незнал. Жаль, что он не слыашал о функциональных языках. Глядишь все его бредовые идеи обрели бы осмысленность. В них какраз реализуются все за чем он гонется. Вот только понимать их для многих сложновато.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[24]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 08:42
    Оценка: -1
    Здравствуйте, Павел Кузнецов, Вы писали:

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


    Нет, Паша, именно это ты и предлагаешь. И именно это звучит очень смешно. В попытках обосновать дизайн СТЛ ты готов весь ООП вверх ногами перевернуть.

    ПК>Речь шла только о том, что ответ на вопрос о том, принадлежит ли некоторая функция некоторому интерфейсу, не так очевиден, как может показаться с первого взгляда.


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

    ПК>Безусловно. Поэтому надо смотреть в каждом конкретном случае исходя из назначения класса, а не безусловно пихать все подряд нужные "утилиты"


    О! Ну, почти прогресс.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[11]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 09:16
    Оценка: -1
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Так примеры я уже неоднократно приводил — эвенты, боксинг,


    Ну, это замазывание дыр Явы. Так что это явный плюс.

    AVK> двойственная сущность енумов и т.п.


    Это еще что?

    Соновцы не реализовали энумы под предлогом того, что они не объектно ориентированы. А ты я гляжу уже новый предлог под это дело подводишь.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[22]: Читайте хелп
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 12:34
    Оценка: :)
    Здравствуйте, Mamut, Вы писали:


    M>Вердикт. Oberon Microssystems наткнулась на книжицу "MFC in 21 days" и сейчас показывает нам, чему они научились. Сам такие поделки еще в прошлом году создавал (это я о среде BlackBox). Не удивлюсь, если сериализация/десериализация у них стандартными средствами MFC выполнена. И вы не поверите, но на исходники BlackBox я даже смотреть не буду. Повторяю, такие поделки выполняются на коленке в течение ... ну ... двух-трех часов. Ну и, возможно, час планирования.


    Да ты чё? Они там нибусь весь rtf-редактор вручную забубенили.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[19]: Обновление
    От: Кодт Россия  
    Дата: 01.11.04 09:53
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    К>>Значит, ты мало трахался с системами контроля версий.


    СГ>Я неоднократно указывал на то что обероны, еще со времен Модулы, являются модульными языками. Но тут, видимо, никто не понимает что это такое. Вот и Вы тоже туда же. Не понимаете в чем состоит преимущество модульности... С модулями не возникает проблем контроля версий. Новому модулю дается новое имя (так же как с COM-интерфейсами). В конце концов, модуль — маленький. 1-модуль : 1-программист. Несколько программистов в один и тот же модуль код никогда не пишут.


    "Remember: one shot, one body!"

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

    Потом, вот захотел ты вместо модуля A пользоваться его обновлением.
    1)Пришлось переименовать его на B.
    2)Значит, всюду, где это требуется (наверное, не всюду-всюду-всюду, а только в отдельных модулях) поправил import A на import B.
    3)Прекрасно! Модули маленькие, поэтому количество таких поправок будет преизрядным. Ты это всё в голове будешь держать? Нет? — значит, берём систему контроля версий... Чтобы через два дня не забыть, где что расковырял.
    4)Далее всплывает один очень неприятный момент. Пусть в этом изменённом модуле был класс C. Его полностью квалифицированное имя — это A.C, но благодаря директиве import мы вводим алиас C в пространства имён тех модулей, где это было прописано. И вот в одном модуле (D) мы написали import B, а в другом (E) забыли и оставили import A.
    Теперь алиасу C соответствуют B.C и A.C. Если модули D и E что-то экспортируют друг другу с использованием класса C, то программа внезапно перестаёт компилироваться.

    Вот ты и получил library hell. Он не так страшен, как DLL hell, когда программы начинают валиться на ровном месте. Просто не компилируются.

    Но посмотри, как это сделано в .Net — система нумерации версий приводит, в общем-то, к тому же самому, но полностью подконтрольно, во-первых, и гораздо менее трудоёмко, во-вторых.

    А твои мысли про COM — тут даже комментировать нечего.
    Перекуём баги на фичи!
    Re[26]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 01.11.04 15:23
    Оценка: +1
    Здравствуйте, prVovik, Вы писали:

    V>Примитивными являются только такие операции, которые требуют доступа к внутренней реализации абстракции. Так, в примере с классом Set операция Add (добавление к множеству элемента) примитивна, а операция добавления четырех элементов не будет примитивной, так как она вполне эффективно реализуется через операцию добавления одного элемента.

    V>[/q]

    V>Или Буч для тебя не авторитет?


    Ну померь скорость последовательного вызова 4 Add и 1 AddRange для ArrayList. Когда померишь продолжим разговор.

    P.S. Цитата не к месту. Буч говорил об конкретной реализации, а не о контейнерах вобще.
    ... << RSDN@Home 1.1.4 beta 3 rev. 219>>
    AVK Blog
    Re[23]: Обновление
    От: Mamut Швеция http://dmitriid.com
    Дата: 01.11.04 17:48
    Оценка: +1
    Здравствуйте, Sinclair, Вы писали:

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


    M>>Опять же, повторюсь: Почему среды разработки Турбо Паскаль/Турбо С лучше Блэкбокса
    Автор: Mamut
    Дата: 01.11.04

    S>Не, ты не понял. Основной принцип Вирта — "Тяжело в учении, легко в бою".



    S>...Я, кстати, не понимаю, почему это он не поставил ограничение на частоту компиляции. Нефиг! Ведь это стимулирует написание кода кое-как — фигня, компилятор поправит.

    Я бы, кстати, ввел бы Очень бы научило думать

    S>В общем, я зверств-то не хуже Вирта могу попридумывать.


    Бррр... Не надо
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[24]: Обновление
    От: prVovik Россия  
    Дата: 01.11.04 18:05
    Оценка: :)
    Здравствуйте, Кодт, Вы писали:

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


    S>>В общем, я зверств-то не хуже Вирта могу попридумывать.


    К>Примерно так народ с перфокартами трахался.

    К>Только там был ещё один пункт, о котором ты забыл: write-only memory. То есть ты, как дурак, топчешь клавиатуру перфоратора, а он тебе показывает лишь номер текущей позиции. Сбился? Отмена, и всю строку заново. Как пароль со звёздочками (до 72 штук). Вот только если ты облажался с паролем, тебе сразу скажут. А перфоратор — он тупой. Пробивает перфокарту, ты берёшь эту колоду и идёшь к машине. Пуск... Авотхрен.
    К>В больших ВЦ, помимо этого, существовал пространственно-временной лаг между программистом и машиной — девочки-наборщицы. Там время перекомпиляции (иногда по вине девочки) занимало до суток — пока очередь подойдёт.

    К>(Мне в детстве удалось поиграть у отца на работе — Fortran-4 на ЕС-1035. Вещ. С непривычки по полколоды шло сразу в макулатуру. Потом наловчился).


    Да... Похоже, не одного Вирта настольгия мучает
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[28]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 23:16
    Оценка: -1
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Да, конечно. Они уже были перечислены. Кратко: размещение вспомогательных функций в виде членов класса требует последующих модификаций класса при добавлении очередных вспомогательных функций.


    Это не проблема. К тому же не у всех классов предпологаются наследники.

    >> ПК> Напротив, это ты перешел к навязыванию такого расположения функции sort(),

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

    ПК>INTP_mihoshi сказал
    Автор: INTP_mihoshi
    Дата: 27.10.04
    :

    ПК>

    VD>>И кстати, что тебе не нравится в Шарпе с точки зрения ООП?

    ПК>То же, что и в Яве, то, что в нем объектом приходится делать даже то, что объектом не является.

    ПК>(как мы уже выяснили
    Автор: INTP_mihoshi
    Дата: 28.10.04
    , он немного неточно выразился, и имел в виду не объекты, а классы)


    ПК>Sinclair (http://rsdn.ru/forum/?mid=870335):
    Автор: Sinclair
    Дата: 27.10.04

    ПК>

    ПК>Во как интересно. Например, что?


    ПК>Т.к. я испытываю тот же дискомфорт, что и INTP_mihoshi, я привел
    Автор: Павел Кузнецов
    Дата: 28.10.04
    конкретный пример такого "класса", который классом быть не должен, а должен был быть namespace:

    ПК>

    ПК>Например, я не вполне понимаю, зачем обобщенные алгоритмы типа сортировки делать методами классов Вот пример такого, с позволения сказать, класса: http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html — ни состояния, ни поведения, ни инвариантов


    ПК>На что ты бросился в бой
    Автор: VladD2
    Дата: 29.10.04
    , причем, споря совершенно о другом:

    ПК>

    ПК>если все методы (пусть и статические) помещать в класс к которому они относятся, то любой дурак нажав точку в IDE получит их список.


    ПК>Как видишь, это замечание совершенно не в тему, т.к. в примере, который я привел (java.util.Arrays) ничего при нажатии на точку не выскочит. Единственная претензия, которая была у меня к приведенному примеру — использование "класса" не по делу, там где по всему видно, что должен был быть namespace, о чем я и написал
    Автор: Павел Кузнецов
    Дата: 29.10.04
    . О помещении sort() в класс Array, как ты это подразумевал в своем сообщении, я только сказал, что это вопрос спорный, и привел основание против таких действий: нарушение некоторых из принципов ООП.


    ПК>Далее ты начал начал говорить о том, что вынесение sort() за пределы класса Array нарушает инкапсуляцию и т.п. И хотя это уже просто чистой воды ерунда, я все-таки продолжил с тобой разговор. Сейчас вижу, что совершенно зря, т.к. мы говорим на разных языках. Буду рад обнаружить, что я не прав, и ты способен продолжать дискуссию в нормальном тоне.


    Специльно не поскипал твою тираду. Так где из всех этих метс я перешел к навазыванию "такого расположения функции sort"? Зачем столько слов? Может быть просто признать тот факт, что это ты пыташся выдать свое мнение за единстванно верное и тем самым навязать его, а я все го лишь говорю, что считаю иначе?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[21]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 23:16
    Оценка: +1
    Здравствуйте, prVovik, Вы писали:

    V>Еще хуже то, что раскрашивать это надо вручную. Имхо, это не применимо.


    Я думаю, что под расскарской имелось в виду выделение отдельных частей кода с целей акцентировать на них внимание. Мы часто применяем такой прием в статьях на сайте. В принципе это действительно удобно. Но подсветки синтаксиса это не заменяет и не отменяет.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[29]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 01.11.04 23:45
    Оценка: +1
    VladD2:

    > ПК>На что ты бросился в бой
    Автор: VladD2
    Дата: 29.10.04
    , причем, споря совершенно о другом:

    > ПК>

    > ПК>если все методы (пусть и статические) помещать в класс к которому они относятся, то любой дурак нажав точку в IDE получит их список.
    > ПК>

    > ПК>Как видишь, это замечание совершенно не в тему <...> Далее ты начал начал говорить о том, что вынесение sort() за пределы класса Array нарушает инкапсуляцию и т.п. <...>

    > Специльно не поскипал твою тираду. Так где из всех этих метс я перешел к навазыванию "такого расположения функции sort"?


    В последнем процитированном сообщении, и далее по ветке. При этом постоянно поминая инкапсуляцию:

    По теории ООП все методы объекта желательно помещать в его класс. Ну, а как они там внутри реализованы... дык на то есть инкапсуляция.

    и обвиняя оппонента в "детских ошибках".

    > Может быть просто признать тот факт, что это ты пыташся выдать свое мнение за единстванно верное и тем самым навязать его, а я все го лишь говорю, что считаю иначе?


    Какое именно мое мнение? Ты опять пропустил, что началось все с того, что ты зачем-то приплел в разговор размещение sort() и т.п. "в классе, к которому они относятся", хотя речь шла совершенно о другом. Как я мог навязывать кому-то свое мнение, если я до твоего высказывания даже не упоминал?
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[21]: Обновление
    От: Зверёк Харьковский  
    Дата: 02.11.04 10:41
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    VD>>Насколько я понял парсеру Оберона плевать на кегель букв (или я ошибаюсь?).


    СГ>Обероны, еще со времен Модулы регистрозависимые (БОЛЬШИЕ и маленькие буквы — считаются разными символами), это только Паскаль был регистронезависимым.


    Тем хуже для оберона. Набирать ключевые слова большими буквами противоестественно (все время зажимать шифт или дергать капс лок). Костыли, встроенные в BlackBox (клавиатурная комбинация для смены регистра последнего слова) — всего лишь костыли.
    Об этом при проектировании языка никто не задумался?
    сам слушаю и вам рекомендую: Разные Люди — Отчизна
    FAQ — це мiй ай-кью!
    Re[14]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 14:43
    Оценка: +1
    Sinclair:

    > ПК> Например, я не вполне понимаю, зачем обобщенные алгоритмы типа сортировки делать методами классов Вот пример такого, с позволения сказать, класса: http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html — ни состояния, ни поведения, ни инвариантов


    > В общем, мое понимание этого таково: твой поинт в том, что существуют некоторые алгоритмы, которые никак не относятся к конкретному объекту, а скорее "плавают в воздухе".


    Ага, точно.

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


    Имхо, авторы Java в вынесении Sort() за пределы Array как раз ближе к "классике" ООП, нежели Влад. Но это, естественно, очень сильно зависит от точки зрения.

    > По поводу свободных процедур у меня возникают некоторые сомнения. Дело в том, что с точки зрения ООП все должно быть объектом.


    Да, согласен, "классика" ООП не предполагает существования функций за пределами классов. Однако, имхо, создание "свободной" функции намного четче отражает подобный дизайн, нежели создание "липового" класса, только чтобы было где разместить статические "методы". В любом случае, по крайней мере, в C++, уже давно убедились, что "чистое" ООП панацеей не является, и использование комбинированных подходов намного более наглядно. Естественно, это все в значительной мере дело вкуса, поэтому спорить об этом, наверное, не очень осмысленно.

    > Я бы выделил методы типа Sort в специальные объекты, реализующие некоторые алгоритмы. Примерно так:


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

    > Теперь по поводу размещения утилитных методов. Владу не понравится ни решение с объектами алгоритмов, ни со статик методами утилитных классов. Потому как он хочет объектно-ориентированного интерфейса разработчика, т.е. "тыкая" в объект мы сразу

    поняли, что с ним можно делать.

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

    > Изменить язык и дать возможность вносить фиксированные реализации методов в интерфейсы. Хотя бы статиков. Тогда мы могли бы записать все, что нам нужно, в интерфейс для source, и жить себе не тужить.


    Забавно, что в C++ рассматривается предложение, которое позволит убить всех подобных зайцев сразу: разрешить синтаксис a.foo() для вызова "свободных" функций, если в классе, объектом которого является a, нет фунции foo(). Впрочем, будет ли оно принято, и каковы реальные последствия такого шага, пока не ясно... Но направление мыслей достаточно похожее.

    > Оставить язык в покое и сделать более продвинутый редактор. Например, при помощи атрибутов расширять CodeCompletion.


    Да, согласен: если у разработчиков есть нужда более быстро находить другие классы и функции, связанные с некоторым классом, то было бы только естественным развитие средств навигации по коду в этом направлении.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[31]: Мэйнстрим vs. Самосовершенствование :)))
    От: Undying Россия  
    Дата: 02.11.04 23:06
    Оценка: :)
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>В "Дизайн и эволюция C++" Страуструп описывал, что в ранних редакциях C++ такая возможность была, но ввиду того, что пользователи очень много ошибались, ее используя (подробности, по-моему, не приведены), ее решили убрать.


    Как я понимаю, концепции интерфейсов тогда еще не было или уже была?

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


    На плюсы все-равно не перейду, могу только восхищаться людьми, которые столько всяких мелочей помнят.

    ПК>Увеличение объема подобной ручной работы, если это является общей практикой, для больших систем может стоить достаточно дорого. А, главное, имхо, совершенно на ровном месте, где без этих проблем можно было обойтись.


    Кто ж спорит-то.

    ПК>Кстати, автоматическое делегирование, фактически, эквивалентно наследованию, минус автоматическое приведение к базовому классу.


    Так в этом-то и достоинство. В случае делегирования мы можем выбрать только те интерфейсы, которые нам действительно нужны, в случае же наследования мы такой возможности лишены.
    ... << RSDN@Home 1.1.2 stable >>
    Re[29]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 03.11.04 01:05
    Оценка: +1
    Undying,

    > Если говорить о утилитных классах, то в общем я с тобой согласен. Т.е. код программы можно разделить на три уровня: утилиты — обертки над ними — прикладной код <...>


    Против такого подхода у меня нет принципиальных возражений. Разве что я для себя провожу разделение по границе "повторно используется"/"повторно используется мало"/"повторно не используется", а не "утилиты"/"обертки"/"прикладной код" — но это уже, по-моему, разница в названиях

    И при таком разделении есть наблюдение, что периодически компоненты, которые повторно не предполагалось использовать, перетекают в категорию повторно используемых, и в этот момент хочется делать их дизайн более гибким. Поэтому обычно я люблю перестраховываться, и заранее проектировать компоненты чуть гибче, чем нужно в данный момент. Но здесь, согласен, очень важно не переступать грань, иначе overengineering ("избыточно общее проектирование"?) уже начинает становиться неудобным, затрудняя понимание системы в целом.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[21]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 03.11.04 22:06
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Обероны, еще со времен Модулы регистрозависимые (БОЛЬШИЕ и маленькие буквы — считаются разными символами), это только Паскаль был регистронезависимым.


    Ключевые слова заглавными буквами читаются крайне тяжело. Так что это еще один минус.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[32]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 03.11.04 22:06
    Оценка: :)
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>1) Я не упоминал STL.


    Да ты из нее постоянно исходиш.

    ПК>3) В Java сделано не так, как в .Net.


    Ошибашся. Все практически идентично.

    ПК> А именно, в Java, как уже много раз было указано, функция sort() вместе с остальными утилитами типа binarySearch(), fill() и т.п. вынесена в "namespace" java.util.Arrays, который сделан классом только из-за невозможности иметь в Java "свободные" функции.


    В первый раз ты вообще-то другое написал. Ну, да ладно.

    Для особо разбирающихся в Яве и дотнете привиду другую ссылку:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemArrayClassTopic.asp

    Что называется найдите десять отличий. Те же статические сорты и бинарные поиски. Только класс называется Array. В дотнете вообще введена единая иерархия для всех типов. В Яве деление на системные и классы более явное. В дотнете даже полиморфизм массивов есть.

    ПК> Так что, если уж поминать STL, то в этом отношении в Java сделано скорее ближе к тому, как в STL, чем к тому, как в .Net


    И чем же ты возмущался тогда? Кстати, ради хомхмы попробуй найти в Яве метод сортировки для ArrayList (именно у него в дотнете метод сортировки сделан).

    ПК>Нет у меня такого мнения. Сложность метода никакого отношения к тому, делать ли его членом или нет, с моей точки зрения, не имеет. Для меня основное — степень его отношения к основной задаче, выполняемой классом.


    А к основной задаче относится или почти все или минимальный набор примитивов.

    >> И наезды на статические методы Sort в Яве.


    ПК>sort() в Java является статической функцией отдельного "класса" java.util.Arrays, не Array. Сделан он классом чисто номинально, т.к. "свободных" функций в Java нет.


    Модульность и области видимости однако. Понятно что после дремучего С++ — это кажется странным. Но поверь — это очень разумно.

    ПК> Никаких претензий или наездов на библиотеку Java по этому поводу у меня нет.


    Ссылку я вроде давал.

    ПК> Единственное, на что я обратил внимание, так это на то, что авторам библиотеки пришлось имитировать namespace с помощью класса из-за своеобразности языка.


    Ничего им имитировать не пришлось. В Яве есть пакеты. 1:1 нэймспэйсы. Просто язык ОО, и модульность делается на уровне классов. Класс == модуль. Плюсь собрали все связанные вещи в одном классе. Хотя бы не нужно мучиться искать. Я вот всегда хренел с того насколько сложно найти СТЛ-ные методы. Их нужно или заучить или рыться по инклюдам.

    ПК> Об этом же, насколько я его понял, говорил и INTP_mihoshi. Синклер попросил пример — ему его привели. Точка.


    Он говорил вообще о другом. Он все гнет линию, что лучшие ЯП — это ФЯ, а остальное бренно.

    ПК>Вся дальнейшая дискуссия — результат твоих реплик по совершенно другой теме, а именно предпочтению тобой размещения sort() "в самом классе, к которому она относится", "чтобы IDE показывала список методов при нажатии на точку".


    Да нет. Я как раз именно на то откуда ноги ростут обратил внимание. Плевать тебе на то что является объектом, а что классом. Вот не по-твоему сделно — это да. А рас так то нужно потоптать.

    ПК>И? Как это все относится к тому, помещать ли функцию sort() в класс Array?


    Про сортировку ты разговор начал
    Автор: Павел Кузнецов
    Дата: 29.10.04
    . Так что с тебя и спрос.

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


    А про объект Синклер у меня спрашивал? Или вот это не твои слова:

    > И вообще, если все методы (пусть и статические) помещать в класс к которому они относятся, то любой дурак нажав точку в IDE получит их список.

    Ты говоришь о другой ситуации, а именно о помещении функции sort в класс Array. Дело спорное, т.к. нарушает Open-Closed Principle, но вопрос совсем отдельный.


    >> Хотя как в Яве могут быть методы не экземплярные и не статические одновременно?


    ПК>Елки-палки, лес густой Я именно об этом вместе с INTP_mihoshi и говорил,


    Напомню, утверждение INTP_mihoshi-а:

    То же, что и в Яве, то, что в нем объектом приходится делать даже то, что объектом не является.


    ПК> что в Java нет "свободных" функций, и поэтому приходится создавать "липовые" "классы" вместо namespace.


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

    ПК> Никаких претензий к дизайну библиотеки Java в этом отношении у меня нет и не было: разработчики сделали лучшее, что позволил им язык.


    Разработчики сделали язык таким чтобы он позволял в основном лучшее.

    ПК>Чтобы тебе было окончательно ясно, вот ссылка
    Автор: Павел Кузнецов
    Дата: 29.10.04
    на мое первое к тебе сообщение, в котором я, на мой взгляд, вполне ясно говорю о том, что твои претензии совершенно не по адресу, и что положение функции sort() вопрос абсолютно отдельный, не связанный с тем примером, который я привел.


    Гы. Именно в этом сообщении ты Sort и приплел. Заметь, я тебе сказал:

    И вообще, если все методы (пусть и статические) помещать в класс к которому они относятся, то любой дурак нажав точку в IDE получит их список.


    На что ты ответил:

    Ты говоришь о другой ситуации, а именно о помещении функции sort в класс Array.


    При том, что я ни слова не сказал, ни про Array (хотя какая разница Array или Arrays?), ни про sort.

    ПК>P.S. Честно говоря, я уже окончательно потерял надежду что-то тебе объяснить.


    А что объяснить то пытался?

    ПК> Сам не знаю, зачем я это сообщение написал, ибо, думаю, абсолютно бесполезно это...


    Да, уж больно тяжело навязывать нудобные подходы обосновывая их необходиость простотой поддржки и гибкостью. Хотя ни одного примера усложнения или негибкости привести не удается.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[30]: Мэйнстрим vs. Самосовершенствование :)))
    От: Undying Россия  
    Дата: 06.11.04 21:48
    Оценка: +1
    Здравствуйте, Павел Кузнецов, Вы писали:

    >> Например, заменить пузырьковую сортировку быстрой.


    ПК>Если речь идет о функции с абстрактным названием sort, то это же можно сделать и для "внешней" функции...


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

    ПК>Уж точно не буду под это дело модифицировать функцию sort() класса Array Это как раз тот случай, когда я говорил о знании контекста. Для контейнера деталей у нас будет свой класс, изолирующий нас от знания, на каком из "базовых" контейнеров он построен. У этого класса, оперирующего понятиями предметной области, вполне может быть функция sort(), т.к. она является одной из его прямых обязанностей.


    А какие правила ты используешь, чтобы отличить прямую обязанность класса от непрямой?

    ПК> Правда, скорее, не в самом классе контейнера деталей, а в каком-то классе, обозначающем стратегию его сортировки, с которым у контейнера деталей, если и будет связь, то ассоциативная (в смысле association — без понятия, как правильно переводится ). Вот ее-то и можно будет менять и в хвост, и в гриву по требованию заказчика.


    Т.е. контейнер деталей в общем случае должен включать некий Sorter? Должен ли при этом метод Sorter.Sort() выставляться в интерфейс контейнера деталей или ты считаешь приемлимой запись вида detail.Sorter.Sort()?

    ПК>По умолчанию в подобных алгоритмах используется функтор std::less<T>, который, в свою очередь, по умолчанию использует операцию "<" для данного типа. Соответственно, пользователь имеет выбор из трех возможностей настройки поведения "стандартных" алгоритмов:

    ПК>
  • определить для своего типа операцию "<" (наиболее простой вариант)
    ПК>
  • передать в алгоритм свой функтор (самый гибкий вариант, позволяющий задавать критерии сортировки для каждого вызова каждого из алгоритмов отдельно)
    ПК>
  • написать специализацию для std::less<> для своего типа (пожалуй, наиболее редко используемая возможность)

    Понятно.

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


    ПК>Может, да, может, нет.


    Хочешь сказать, что толкаться не прямая обязанность объекта?

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


    Так ты все-таки в проектах используешь библиотеки напрямую или пишешь над ними обертки?

    ПК> В этом случае наиболее удобным оказывается следование в этих библиотеках каким-то универсальным соглашениям (например, использование внешней функции "<" для сравнения), нежели требование к пользователю библиотечного класса реализовывать какой-то заданный интерфейс, т.к. эти интерфейсы тогда "плодятся" со страшной скоростью, свои для различных библиотек...


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

    ПК>Во многих внутренних проектах можно (а в некоторых и нужно) рефакторить налево и направо Плюс, в "конечных" проектах присутствует знание предметной области, и методы "основных" интерфейсов классов более высокоуровневые. Поэтому, как в примере выше, и sort() в них вполне может попасть. Но, имхо, рефакторинг даже внутренних проектов все время направлен на все большую гибкость компонент, а следовательно, все меньшую между ними зависимость,


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

    ПК> и все меньшее количество обязанностей, "висящих" на каждом из классов.


    Что ты понимаешь под обязанностями класса?

    ПК>А от некоторых из внутренних проектов зависит большое количество других подсистем, соответственно, они должны быть более стабильными, чем остальные, и, следовательно, к ним в большей степени уже применимы "библиотечные" методы (обратная совместимость), чем методы "активной разработки" (рефакторинг).


    Если библиотека хорошо спроектирована, то в ней можно применять большинство видов рефакторинга.

    ПК>Как ты часто повторяешь одно из моих любимых высказываний: there's no silver bullet


    Но к ней нужно стремиться.
    ... << RSDN@Home 1.1.2 stable >>
  • Re[45]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 07.11.04 14:48
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

    AVK>>Ага. И называется эта поддержка TransparentProxy


    VD>Ты уверен?


    Абсолютно.

    VD> По-моему она называется CCW/RCW.


    Так, CCW это вобще не из той оперы, это unmanaged СОМ-сервер внутрях mscoree. Что же касается RCW, то это как раз и есть специальная COM-RP, с TP которой ты и работаешь в случае общения с СОМ.
    ... << RSDN@Home 1.1.4 beta 3 rev. 224>>
    AVK Blog
    Re[29]: Мэйнстрим vs. Самосовершенствование :)))
    От: vdimas Россия  
    Дата: 09.11.04 00:54
    Оценка: +1
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Итого мы имеем трехуровневую систему преобразований, гибкую и удобную одновременно, свободную от недостатков обоих крайностей. Для обучения(вспоминая исходную тему обсуждения) это конечно не зашибись, зато обалденно удобно.


    Да нет, не обалденно, разумеется
    это все от того что в дотнете отсутствуют мультиметоды и глобальные ф-ии.

    Скажем так, располагая средствами дотнета, это есть "самое компромисное решение", не более того...

    (Операторы преобразования типов — первые кандидаты на мультиметоды, однако у нас под рукой только методы классов.)
    Re[17]: Oberon???????????????????????????????????
    От: faulx  
    Дата: 11.11.04 12:30
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:


    VD>Ничего мне не мешат. Я довольно адекватно могу оценивать достоинства если они очевидны. Все эти х[3:5] долеко не очевидны. Они требуют объяснения на пальцах. А вот x.substring(3, 5) как раз можно понять и без объяснения.


    Кстати, интересное наблюдение. О синтаксисе х[3:5] и x.substring(3, 5) я впервые узнал из этого сообщения, однако еще до того, как прочитал, что речь идет о подстроках, понял смысл выражения х[3:5], а когда дошел до x.substring(3, 5), сразу возник вопрос: а 5 — это последний символ или длина подстроки? (Ответа вопрос не требует)

    Так что "очевидность" — вещь субъективная.
    Re[18]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 11.11.04 14:47
    Оценка: +1
    Здравствуйте, faulx, Вы писали:

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



    VD>>Ничего мне не мешат. Я довольно адекватно могу оценивать достоинства если они очевидны. Все эти х[3:5] долеко не очевидны. Они требуют объяснения на пальцах. А вот x.substring(3, 5) как раз можно понять и без объяснения.


    F>Кстати, интересное наблюдение. О синтаксисе х[3:5] и x.substring(3, 5) я впервые узнал из этого сообщения, однако еще до того, как прочитал, что речь идет о подстроках, понял смысл выражения х[3:5],


    Да? И что же по-твоему означает 5? И как ты пришел к этому выводу.

    F> а когда дошел до x.substring(3, 5), сразу возник вопрос: а 5 — это последний символ или длина подстроки? (Ответа вопрос не требует)


    Очень даже требует. Substring — это метод. И как и любой метод он имеет описание (всплывающую подсказку). Так что как только ты подводишь к нему мышь или когда вбиваешь открывающую скобку, то сразу видишь что значит 3 и 5.

    F>Так что "очевидность" — вещь субъективная.


    До определенной степени.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[19]: Oberon???????????????????????????????????
    От: faulx  
    Дата: 15.11.04 07:56
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:


    VD>Да? И что же по-твоему означает 5? И как ты пришел к этому выводу.


    Интуитивно понял

    F>> а когда дошел до x.substring(3, 5), сразу возник вопрос: а 5 — это последний символ или длина подстроки? (Ответа вопрос не требует)


    VD>Очень даже требует. Substring — это метод. И как и любой метод он имеет описание (всплывающую подсказку). Так что как только ты подводишь к нему мышь или когда вбиваешь открывающую скобку, то сразу видишь что значит 3 и 5.

    Странно, у меня в браузере ничего не показывается А если серьезно, то это не аргумент. Может, у x[3:5] тоже есть всплывающая подсказка?

    F>>Так что "очевидность" — вещь субъективная.


    VD>До определенной степени.


    Но в данном конкретном случае — субъективная. И я хотел сказать только это.
    Re[20]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 15.11.04 13:25
    Оценка: -1
    Здравствуйте, faulx, Вы писали:

    VD>>Да? И что же по-твоему означает 5? И как ты пришел к этому выводу.


    F>Интуитивно понял


    Так и все же что?

    F>>> а когда дошел до x.substring(3, 5), сразу возник вопрос: а 5 — это последний символ или длина подстроки? (Ответа вопрос не требует)


    F>Странно, у меня в браузере ничего не показывается А если серьезно, то это не аргумент. Может, у x[3:5] тоже есть всплывающая подсказка?


    Нет.

    F>Но в данном конкретном случае — субъективная. И я хотел сказать только это.


    Думаю, что субъективность резко развеится если попытаться написать реальный код на обоих средах. Синтаксис x[3:5] хорош тем, что он резко компактнее, но понятен он даже хуже чем метод.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[21]: Oberon???????????????????????????????????
    От: faulx  
    Дата: 16.11.04 07:25
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

    VD>>>Да? И что же по-твоему означает 5? И как ты пришел к этому выводу.


    F>>Интуитивно понял


    VD>Так и все же что?


    Думаю, подстроку с 3 по 5 элемент. Нет?

    F>>>> а когда дошел до x.substring(3, 5), сразу возник вопрос: а 5 — это последний символ или длина подстроки? (Ответа вопрос не требует)


    F>>Странно, у меня в браузере ничего не показывается А если серьезно, то это не аргумент. Может, у x[3:5] тоже есть всплывающая подсказка?


    VD>Нет.


    Не убедил. Всплывающая подсказка — не свойство языка. Иначе можно сказать, например, что язык X более понятен, чем Y, потому что у меня есть знакомый специалист по X, который мне все объяснит. Давай поставим языки в равные условия: пусть тексты программ на них напечатаны на бумаге без всяких подсказок, раскраски синтаксиса и т.п.

    F>>Но в данном конкретном случае — субъективная. И я хотел сказать только это.


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


    Я не говорил про написание (тем более в "средах"), а только про чтение с листа.

    VD>Синтаксис x[3:5] хорош тем, что он резко компактнее, но понятен он даже хуже чем метод.


    А мне он показался понятнее. Следовательно, существуют люди, которым это понятнее. Следовательно, нельзя говорить, что запись x[3:5] менее интуитивно понятна для всех. Следовательно, интуитивная понятность — субъективное понятие. Что и требовалось доказать.
    Re[28]: Oberon???????????????????????????????????
    От: _FRED_ Черногория
    Дата: 16.11.04 15:36
    Оценка: :)
    Здравствуйте, eugals, Вы писали:

    _FR>>Очень красиво и приятно! Но, видимо, пока не надоест отступать от более признанных форм.

    E>Это для тебя проблема? Усвоить какую-то новую ("приятную" и "красивую") парадигму?

    На то она и есть парадигма, что бы сдаваться с трудом и со скрипом.
    Кода много всякого смотреть приходится. Ладно там стили оформления, но специфические конструкции —
    В своё время на басике очень радовался конструкциям с GoTo и Return — для не посвящённых
    Private Sub SetRangeBorderColor(ByVal rg As Excel.Range, _
                                    ByVal nIndex As Excel.XlBordersIndex, _
                                    Optional ByVal Color As OLE_COLOR = -1)
      If Color <> -1 Then
        Dim b As Excel.Border
        Set b = rg.Borders(nIndex)
        GoSub Sub_SetBorder
    
        Set b = ReverseBorder(b, nIndex)
        If Not b Is Nothing Then
          GoSub Sub_SetBorder
        End If
      End If
    
      Exit Sub
    
    Sub_SetBorder: 'Дабы не дублировать код и не заводить отдельных, 
        With b     'нигде не нужных функций, делаю так
          .Color = Color
          .Weight = xlThin
        End With
      Return
    End Sub

    Это ещё цветочки, так по прошествии трёх лет, когда в это заново нужно влезть и где-то поменять логику
    Поэтому то, что не кажется естественным, делать, если хочешь чтоб всё было хорошо, не надо, каким бы привлекательным это не казалось.
    Такой вот горький опыт.
    Help will always be given at Hogwarts to those who ask for it.
    Re[26]: Oberon???????????????????????????????????
    От: Трурль  
    Дата: 18.11.04 07:08
    Оценка: +1
    Здравствуйте, faulx, Вы писали:

    F> Впрочем, я не знаю, почему именно запись [3:5] показалась мне понятной, возможно, из-за каких-то виденных мною в других языках конструкций, которых я сейчас не могу вспомнить. Разумеется, другим людям эта запись ничего не будет напоминать, поэтому она для них не будет интуитивно понятной. Поэтому интуитивная понятность — субъективное понятие.


    Рискну предположить, что [3:5] напоминает [3,5] (отрезок на числовой прямой) и [3..5].
    Re[27]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 18.11.04 12:10
    Оценка: +1
    Здравствуйте, Трурль, Вы писали:

    F>> Впрочем, я не знаю, почему именно запись [3:5] показалась мне понятной, возможно, из-за каких-то виденных мною в других языках конструкций, которых я сейчас не могу вспомнить. Разумеется, другим людям эта запись ничего не будет напоминать, поэтому она для них не будет интуитивно понятной. Поэтому интуитивная понятность — субъективное понятие.


    Т>Рискну предположить, что [3:5] напоминает [3,5] (отрезок на числовой прямой) и [3..5].


    Как мы вроде выяснили все таки [3..5).

    P.S. Об этом как то никто не упомянул, но str.Substring(3, 5) означает подстроку с 3 символа 5 символов длиной, а не подстроку с 3 по 5 символ.
    ... << RSDN@Home 1.1.4 beta 3 rev. 232>>
    AVK Blog
    Re[18]: Oberon???????????????????????????????????
    От: Undying Россия  
    Дата: 20.11.04 11:39
    Оценка: -1
    Здравствуйте, faulx, Вы писали:

    F>Кстати, интересное наблюдение. О синтаксисе х[3:5] и x.substring(3, 5) я впервые узнал из этого сообщения, однако еще до того, как прочитал, что речь идет о подстроках, понял смысл выражения х[3:5], а когда дошел до x.substring(3, 5), сразу возник вопрос: а 5 — это последний символ или длина подстроки? (Ответа вопрос не требует)


    [3:5] это специальная конструкция введенная в язык и даже будь она очевидна (а для меня это совершенно не так), ее все равно приходилось бы заучивать. Сразу же возникает вопрос: достаточно ли часто в программах используется операции модифицирующие строку, чтобы имело смысл добавление в язык специальной конструкции?

    Лично я модифицирую строки далеко не каждый день и не вижу в такой конструкции никакого смысла.

    F>Так что "очевидность" — вещь субъективная.


    В данном случае объективная. Имея x.Substring(3, 5) я могу, во-первых, навестись мышой на название метода и получить подсказку типа:
    string String.Substring(int startIndex, int length), во-вторых, поставить курсор на название метода и, нажав F1, получить полное описание метода.

    Что мне нужно сделать, чтобы получить аналогичную информацию о x[3:5]?
    ... << RSDN@Home 1.1.2 stable >>
    Re[21]: Oberon???????????????????????????????????
    От: eugals Россия  
    Дата: 20.11.04 20:34
    Оценка: +1
    Здравствуйте, Undying, Вы писали:

    E>> Всё зависит от IDE которой ты пользуешься. Или будешь утверждать, что распознать выражение "\[\d*:\*\]" сложнее, чем сначала найти "[_\w][_\w\d]*", а потом поискать найденное слово в индексе хелпа?

    U>Сложнее. В случае x[3:5] уже нужно уметь распознавать контекст, т.е. наличие двоеточия.
    Ой, да ладно пугаться-то ...всё это легко решается на регулярных выражениях.

    U> Питон, кстати, подсказывать умеет?

    Питон — просто интерпретатор. он ничего подсказывать и не должен.
    Точно так же как и C# сам по себе тоже ничего не подсказывает — этим занимается IDE, т.е. VS. Под питон есть несколько IDE, но умеет ли какая-нибудь из них показывать в данном контексте подсказку я не знаю. Не сильно удивлюсь, если нет.

    U>Кроме того многовато операций на [] возлагается. Скажем есть два варианта: Substring(int startIndex, int length) и Substring(int startIndex). Если использовать x[3:5], то реализовать второй вариант уже не получится,

    Получится
    Автор: eugals
    Дата: 16.11.04
    . И второй вариант и третий и ещё кое-какие другие.

    E>>2. Ты же не задаешь вопрос, что нужно нажать, чтобы узнать смысл вот такого выражения: "a? b: c"

    U>Задаю. Весьма неинтуитивная конструкция, кстати говоря, которая требует обязательного предварительного заучивания.
    И сколько требуется на заучивание? Две минуты? Три?
    ... << RSDN@Home 1.1.4 @@subversion >>
    Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 20.10.04 12:15
    Оценка:
    Почитал я тут защитников Оберона, и задумался. Надо первачков учить. Раньше мы, естественно, первый семестр учили на Турбо-паскале. А потом переходим на С и С++ — и понеслась. Турбо-паскаль нужен нам был, что на чемпионате мира меньше проблем было. А теперь турбо=паскаль умер, и надо что-то выбирать. С++ как первый язык давать не хочу — поймут отнюдь не все. Студенты есть из сел, поэтому сначала их надо в проблематику написания программ ввести, не касаясь сильно компьютерных особенностей, особенно указателей. Вот на чем? На обероне?
    Интересует любая информация о трансляторах, IDE, справочные материалы, адреса в инете — в общем все, что мы проанализируем и потом примем решение.
    Кстати, какие альтернативы оберону есть, кто-нить представляет?
    На западе, насколько знаю — обучают сначала функциональному языку типа Haskel.
    Ы??????????????????????????????????????????


    31.10.04 14:45: Перенесено модератором из 'Мусор' — AndrewVK
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re: Oberon???????????????????????????????????
    От: prVovik Россия  
    Дата: 20.10.04 12:23
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Кстати, какие альтернативы оберону есть, кто-нить представляет?

    Java? На ней олимпиады проводятся?
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[2]: Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 20.10.04 12:26
    Оценка:
    Здравствуйте, prVovik, Вы писали:

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


    LVV>>Кстати, какие альтернативы оберону есть, кто-нить представляет?

    V>Java? На ней олимпиады проводятся?
    Нет, не проводятся.
    Это конечно мысль. Или еще можно С# попробовать. Но хотелось бы не Сишного синтаксиса — для алтернативы.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[3]: Oberon???????????????????????????????????
    От: Dervish Россия http://www.dervish.ru
    Дата: 20.10.04 12:33
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Но хотелось бы не Сишного синтаксиса — для алтернативы.


    Пролог?
    ... << RSDN@Home 1.1.4 beta 3 rev. 194>>
    Re: Oberon???????????????????????????????????
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 20.10.04 12:33
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>На западе, насколько знаю — обучают сначала функциональному языку типа Haskel.

    LVV>Ы??????????????????????????????????????????

    Имхо не haskell, а ocaml во франции преподают...
    Re[4]: Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 20.10.04 12:45
    Оценка:
    Здравствуйте, Dervish, Вы писали:

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


    LVV>>Но хотелось бы не Сишного синтаксиса — для алтернативы.


    D>Пролог?

    На первом курсе?
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[3]: Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 20.10.04 12:46
    Оценка:
    Здравствуйте, Kluev, Вы писали:

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


    K>На питоне надо новичков учить. Прост как три копейки и в командном режиме может работать как калькулятор.

    K>Более того в джаве только классы, а в питоне можно и с функций начать.
    Спасибо за идею. Литературу не подскажете, чтоб на любуду не отвлекаться.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[5]: Oberon???????????????????????????????????
    От: Dervish Россия http://www.dervish.ru
    Дата: 20.10.04 12:48
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

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


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


    LVV>>>Но хотелось бы не Сишного синтаксиса — для алтернативы.


    D>>Пролог?

    LVV>На первом курсе?

    Это была шутка.
    ... << RSDN@Home 1.1.4 beta 3 rev. 194>>
    Re[4]: Oberon???????????????????????????????????
    От: Kluev  
    Дата: 20.10.04 12:49
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

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


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


    K>>На питоне надо новичков учить. Прост как три копейки и в командном режиме может работать как калькулятор.

    K>>Более того в джаве только классы, а в питоне можно и с функций начать.
    LVV>Спасибо за идею. Литературу не подскажете, чтоб на любуду не отвлекаться.

    Начните с http://python.ru
    Re[5]: Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 20.10.04 12:55
    Оценка:
    Здравствуйте, Kluev, Вы писали:

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


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


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


    K>>>На питоне надо новичков учить. Прост как три копейки и в командном режиме может работать как калькулятор.

    K>>>Более того в джаве только классы, а в питоне можно и с функций начать.
    LVV>>Спасибо за идею. Литературу не подскажете, чтоб на любуду не отвлекаться.

    K>Начните с http://python.ru

    Спасибо! Классный сайт — как раз для начала!
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re: Oberon???????????????????????????????????
    От: FreshMeat Россия http://www.rsdn.org
    Дата: 20.10.04 13:06
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>На западе, насколько знаю — обучают сначала функциональному языку типа Haskel.

    LVV>Ы?

    Можно попробовать здесь посмотреть.
    Если конкретней, то Structure-and-Interpretation-of-Computer-Programs (похоже оно?) — на этой страничке ссылки на лекции, примеры экзаменов, календарь, книги по курсу и т.д.
    Хорошо там, где мы есть! :)
    Re[2]: BlackBox
    От: LaptevVV Россия  
    Дата: 20.10.04 13:55
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    LVV>>Почитал я тут защитников Оберона, и задумался. Надо первачков учить.


    СГ>Слава богу!


    СГ>Смотрите проект Информатика 21
    Спасибо! Информация исчерпывающая!
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[2]: Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 20.10.04 16:08
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    VD>Оберон — это мертвях. Учить ему будущих программистов все равно что учить латыни будущих переводчиков. Неужели нехватает живых языков? Чем та же Ява или Шарп хуже?

    Хочется альтернативный синтаксис показать.
    Хотя я и о яве, и о дотнете с до диезом думал.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[3]: Oberon???????????????????????????????????
    От: FR  
    Дата: 20.10.04 16:48
    Оценка:
    Здравствуйте, Kluev, Вы писали:

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


    K>На питоне надо новичков учить. Прост как три копейки и в командном режиме может работать как калькулятор.

    K>Более того в джаве только классы, а в питоне можно и с функций начать.

    Я тоже думаю что питон очень хороший вариант для обучения.
    Тем более позволяет продемонстрировать все наиболее распрастраненые подходы к программированию и процедурное и функциональное и ООП и обобщенное программирование.
    У него только один недостаток динамическая типизация.
    ... << RSDN@Home 1.1.3 stable >>
    Re[3]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 20.10.04 17:57
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Хочется альтернативный синтаксис показать.


    1. Что в нем альтернативного? Та же императивщина, толко вместо скобок бегин с эндом, а вместо "=" используется ":=". Если уж показывать, то наврено лучше действительно какие-нибудь Хаскели и Питоны.
    2. Показать и научить две большие разницы. Показывать можно сколько влезет хоть десять языков. А на учение время нужно.

    LVV>Хотя я и о яве, и о дотнете с до диезом думал.


    Я бы на этом и остановился.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[3]: Oberon???????????????????????????????????
    От: WolfHound  
    Дата: 20.10.04 18:00
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Хочется альтернативный синтаксис показать.

    Зачем?
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[4]: Oberon???????????????????????????????????
    От: prVovik Россия  
    Дата: 20.10.04 18:18
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Я бы на этом и остановился.

    Вот вот. Тем более, что существует ненулевая вероятность, что знание этих платформ в реальной жизни может принести кучку бутербродов с маслом. То есть двух зайцев одним залпом: и алгоритмам учатся и прикладные технологии изучают.
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[5]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 20.10.04 22:39
    Оценка:
    Здравствуйте, Kluev, Вы писали:

    K>Выполняется прямо в командной строке без компиляции, написания функции и т.п. ИМХО если учить то лучше питона не найти


    Разницы с тем же шарпом никакой. Что до компиляции, то нажать на F5 или написать "csc filename.cs" вряд ли окажется проблемой.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[4]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 20.10.04 22:39
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>Я тоже думаю что питон очень хороший вариант для обучения.

    FR>Тем более позволяет продемонстрировать все наиболее распрастраненые подходы к программированию и процедурное и функциональное и ООП и обобщенное программирование.
    FR>У него только один недостаток динамическая типизация.

    Я вот тут скачал книжку по Питону. Поглядел. Есть конечно в Питоне интересные решения. Но рельных приемуществ пред тем же шарпом нет. А вот недостатки вроде отсуствия типизации есть. Нормальный программист должен понимать что такое типы и статическая типизация.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[5]: Oberon???????????????????????????????????
    От: FR  
    Дата: 21.10.04 06:30
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    FR>>Я тоже думаю что питон очень хороший вариант для обучения.

    FR>>Тем более позволяет продемонстрировать все наиболее распрастраненые подходы к программированию и процедурное и функциональное и ООП и обобщенное программирование.
    FR>>У него только один недостаток динамическая типизация.

    VD>Я вот тут скачал книжку по Питону. Поглядел. Есть конечно в Питоне интересные решения. Но рельных приемуществ пред тем же шарпом нет. А вот недостатки вроде отсуствия типизации есть. Нормальный программист должен понимать что такое типы и статическая типизация.


    У питона куча реальных преимуществ перед Шарпом, так же как и у Шарпа перед Питоном.
    А главное же преимущество более высокий уровень языка. (Да кое-что я тебе в теме C++ и Net продемонстрировал, но ты куда-то пропал оттуда)
    ... << RSDN@Home 1.1.3 stable >>
    Re[3]: Oberon???????????????????????????????????
    От: bkat  
    Дата: 21.10.04 08:08
    Оценка:
    С точки зрения возможности найти работу Оберон — мервяк.
    Нет, в универе о нем конечно же стоит рассказать на спецкурсах,
    но использовать его в качестве базового языка программирования
    было бы пожалуй нечестно по отношению к студентам.

    В самой Швейцарии, откуда вроде пошел Оберон, этот язык не очень-то популярен
    в учебных заведениях. Возмем к примеру всемирно известный ETH http://www.eth.ch
    Это там, где Вирт работал. Так что это колыбель Оберона.
    Дальше смотрим учебные программы http://se.inf.ethz.ch/teaching/index.html
    и что мы там видим? Oberon там конечно иногда проскакивает, но очень и очень редко.
    Новички, как я понял, начинают с Eiffel
    Возможно я плохо искал...
    Re[4]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.10.04 08:23
    Оценка:
    Здравствуйте, bkat, Вы писали:

    B>этот язык не очень-то популярен


    Именно об этом Вирт и рассказывает в своем докладе:

    Преподавание информатики: потерянная дорога
    Приветствие на открытии Международной конференции по преподаванию информатики ITiCSE
    г. Аархус (Дания), 24 июня 2002 г.

    http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm
    Re: Oberon???????????????????????????????????
    От: BlackBox Россия ---
    Дата: 21.10.04 11:47
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>На западе, насколько знаю — обучают сначала функциональному языку типа Haskel.



    Я сейчас учусь на третьем курсе и у нас начали преподавать ФП. На практических занятиях используем haskel — всем очень нравится
    Re[7]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 21.10.04 12:55
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>Как раз для обучения разница большая, можно начать с однострочных программ, с обычного процедурного программирования не забивая голову не нужными в начале обучения class и public static void Main()


    SnippetCompiler
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    AVK Blog
    Re[8]: Oberon???????????????????????????????????
    От: FR  
    Дата: 21.10.04 13:05
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    FR>>Как раз для обучения разница большая, можно начать с однострочных программ, с обычного процедурного программирования не забивая голову не нужными в начале обучения class и public static void Main()


    AVK>SnippetCompiler


    #$%^&*^*((*&&((?
    ... << RSDN@Home 1.1.3 stable >>
    Re[10]: Oberon???????????????????????????????????
    От: FR  
    Дата: 21.10.04 13:32
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

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


    FR>>#$%^&*^*((*&&((?


    AVK>Тулзень есть такая, которая позволяет просто выполнять код на шарпе. http://www.sliver.com/dotnet/SnippetCompiler/


    Да я уже посмотрел
    По сравнению с интерпретатором это костыли. Вообще нормальный редактор кода например SciTE позволяет тоже самое для кучи языков включая и питон и C++ и C#
    ... << RSDN@Home 1.1.3 stable >>
    Re[5]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 21.10.04 13:39
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Именно в родной код. Безопасность встроена в сам язык. В оберонистой программе никогда не бывает переполнения буфера (range index check).


    В джаве тоже.

    СГ>И Вам никогда не удасться что-то читать или писать по неправильному адресу, просто потому что в языке нет такого понятия как адрес, адресная арифметика, и самого адресного пространства как такового.


    В джаве тоже.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    AVK Blog
    Re[5]: арифметические, логические, бинарные
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 21.10.04 16:12
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Ну Вы опять говорите о Паскале имея в виду тот древний, который прямой потомок Алгола.


    Скорее на основании своего опыта работы с Дельфи.

    СГ> В современном (от 1994 года) Component Pascal (тот который есть модифицированный Oberon-2) бинарных операций с числами нет вообще.


    Мать моя женщина!... А как же на нем вообще можно тогда программирование учить?

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


    Все реально используемые на практике языки имеют бинарные операции. И многие из них прекрасно переносятся на другие платыормы. В конце концов биты то везеде одни и те же. А разницу можно скрыть за языком и описанием размеров в виде системных констант.

    СГ> Для бинарных операций существует специальный тип данных — SET (множество). Множество — тоже математическая абстракция, и тут снова программист не должен знать как она реализована на конкретной машине. Для SET-ов реализованы все характерные для множеств операции (объединение, разность, пересечение, симметричная разность).


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

    СГ>Для логических операций, само-собой, предусмотрен тип BOOLEAN... думаю, излишне о нем что-либо рассказывать...


    Не нужно обяснять почему язык не имеющий бинарных операций (с битами) неудастся применять в реальных проктах?

    СГ>И так, в современном Паскале (1) арифметические, (2) логические и (3) бинарные операции можно осуществлять только над соответствующими типами данных: (1) числовыми, (2) буллевым, (3) множествами. То есть, все безупречно purify! Для школьников и студентов — то что доктор прописал!


    Возможно я незнаю "современного паскаля", но в Дельфи с бинарными операциями полная задница. Так:
    if a = b and b < c then ...

    будет рассматриваться как:
    if a = BinAnd(b, b)) < c then ...

    СГ>Ну, чтобы уж совсем не отрываться от действительности, и иметь возможность использовать обероны в системном программировании, так уж и быть (хотя с точки зрения математики это и бессмысленно), предусмотрены инструкции конвертации чисел во множества, и множеств в числа:

    СГ>
    СГ>set     := BITS(integer);
    СГ>integer := ORD(set);
    СГ>

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

    Нда. Типа оторвались от платформы, но были притянуты к ней обратно. А не проще ли было как в том же С сделать? Ввести бинарные и логические операторы?
    Куда проще читать такой код:
    if ((a & b) != 0 && c < b) ...

    чем:
    if (((a and b) != 0) and (c < b)) then ...
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[6]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 21.10.04 19:03
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>У питона куча реальных преимуществ перед Шарпом, так же как и у Шарпа перед Питоном.

    FR>А главное же преимущество более высокий уровень языка. (Да кое-что я тебе в теме C++ и Net продемонстрировал, но ты куда-то пропал оттуда)

    Вот как раз более высокого уровня языка я и не увидел. Отдельные фичи (вроде встроеных списков), да, но общего приемущества хоть убей не вижу.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[6]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 21.10.04 19:03
    Оценка:
    Здравствуйте, Kluev, Вы писали:

    K>Я сам упертый Cpp-шник начинавший с паскаля (потом джава был, потом плюсы). Если бы я начал с нуля то начал бы именно с питона. Отсутсвие типизации на началном этапе это не минус а плюс. А чтобы оценить кайф скачай не книгу а среду. Учится можено прямо в интеракивном режиме плавно переходя от калькулятора к программированиюю Иеальный вариант чтобы обяснить все быстро и на пальцах. Вот пример


    Да не увидил я тут ничего принципиально новгого. Чем это лучше чем:
    class Summator
    {
        public int a;
        public int b;
        
        public int Sum()
        {
            return a + b;
        }
    }

    ?
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[5]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 21.10.04 19:03
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Именно об этом Вирт и рассказывает в своем докладе:

    СГ>

    СГ>Преподавание информатики: потерянная дорога
    СГ>Приветствие на открытии Международной конференции по преподаванию информатики ITiCSE
    СГ>г. Аархус (Дания), 24 июня 2002 г.

    СГ>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm

    Ему бы спрятать свои амбиции по дальше и хоть раз на вещи трезво взглянуть.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[6]: арифметические, логические, бинарные
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.10.04 19:23
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Куда проще читать такой код:

    if ((a & b) != 0 && c < b) ...


    Тоже самое на Обероне (Component Pascal):
    VAR a, b: SET;
        c: INTEGER;
    BEGIN
      a := {1, 4, 27, 30}; (* биты 1,4,27,30 равны 1 остальные биты равны 0 *)
      b := {0, 6, 27};     (* биты 0,6,27 равны 1 остальные биты равны 0 *) 
      c := 100;
      INCL(a, 8);          (* Бит номер 8 теперь тоже равен 1 *) 
      EXCL(b, 6);          (* Бит номер 6 теперь равен 0 *) 
      IF (a*b # {}) & (c < ORD(b)) THEN



    Не пожалейте чуточку времени и прочитайте что написано там:
    http://www.inr.ac.ru/~info21/cpascal/cp_report_1.4_rus.htm#8.2.3

    8.2.3 Операции над множествами

    + объединение
    — разность (x — y = x * (-y))
    * пересечение
    / симметричная разность (x / y = (x-y) + (y-x))

    Re[7]: Oberon???????????????????????????????????
    От: FR  
    Дата: 21.10.04 21:21
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    FR>>У питона куча реальных преимуществ перед Шарпом, так же как и у Шарпа перед Питоном.

    FR>>А главное же преимущество более высокий уровень языка. (Да кое-что я тебе в теме C++ и Net продемонстрировал, но ты куда-то пропал оттуда)

    VD>Вот как раз более высокого уровня языка я и не увидел. Отдельные фичи (вроде встроеных списков), да, но общего приемущества хоть убей не вижу.


    Угу С# тоже никаких преимуществ перед плюсами не имеет так небольшие фичи
    ... << RSDN@Home 1.1.3 stable >>
    Re[5]: Oberon???????????????????????????????????
    От: prVovik Россия  
    Дата: 21.10.04 21:24
    Оценка:
    Здравствуйте, ON, Вы писали:

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


    перечитал фразу несколько раз...
    Интересно, кто-нибудь понял, что ON хотел сказать?

    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[7]: арифметические, логические, бинарные
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 21.10.04 21:53
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    Это конечно несколько лучше чем в Паскале/Дельфи. Но все же я не понимаю на фиг так извращаться.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[6]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 21.10.04 21:53
    Оценка:
    Здравствуйте, Poisson, Вы писали:

    Здается мне, что в Питоне понятнее и логичнее. А смотреть на то как работают операторы и встроенные функции как-то даже в голову не приходит.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[5]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 21.10.04 21:53
    Оценка:
    Здравствуйте, Kluev, Вы писали:

    K>
    >>>> for i in range(10) : print i
    K>


    K>Выполняется прямо в командной строке без компиляции, написания функции и т.п. ИМХО если учить то лучше питона не найти


    Ну, и чем это отличается от Шарпа:
    foreach (int i Range(10))
        Console.WriteLine(i);

    ?

    А range и xrange не долго слабать и на самом Шарпе:
            static int[] Range(int len)
            {
                return Range(0, len, 1);
            }
    
            static int[] Range(int start, int len, int inc)
            {
                int count = (len - start) / inc;
                int[] array = new int[count];
                for (int val = start, i = 0; i < count; i++, val += inc)
                    array[i] = val;
                return array;
            }


    Или:
            static IEnumerable<int> Range2(int len)
            {
                return Range2(0, len, 1);
            }
    
            static IEnumerable<int> Range2(int start, int len, int inc)
            {
                int count = (len - start) / inc;
                for (int val = start, i = 0; i < count; i++, val += inc)
                    yield return val;
            }
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[8]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 21.10.04 22:06
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>Угу С# тоже никаких преимуществ перед плюсами не имеет так небольшие фичи


    Это не ответ. А приемущества перед плюсами можно перечислять часами. Хотя это и не избавляет от некоторых недостатков.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[6]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 21.10.04 22:06
    Оценка:
    Здравствуйте, prVovik, Вы писали:

    V>перечитал фразу несколько раз...

    V>Интересно, кто-нибудь понял, что ON хотел сказать?

    V>


    Это штка юмеора. Тебе не понять.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[6]: Oberon???????????????????????????????????
    От: FR  
    Дата: 21.10.04 22:39
    Оценка:
    Здравствуйте, VladD2, Вы писали:


    VD>А range и xrange не долго слабать и на самом Шарпе:

    VD>
    VD>        static int[] Range(int len)
    VD>        {
    VD>            return Range(0, len, 1);
    VD>        }
    
    VD>        static int[] Range(int start, int len, int inc)
    VD>        {
    VD>            int count = (len - start) / inc;
    VD>            int[] array = new int[count];
    VD>            for (int val = start, i = 0; i < count; i++, val += inc)
    VD>                array[i] = val;
    VD>            return array;
    VD>        }
    VD>


    VD>Или:

    VD>
    VD>        static IEnumerable<int> Range2(int len)
    VD>        {
    VD>            return Range2(0, len, 1);
    VD>        }
    
    VD>        static IEnumerable<int> Range2(int start, int len, int inc)
    VD>        {
    VD>            int count = (len - start) / inc;
    VD>            for (int val = start, i = 0; i < count; i++, val += inc)
    VD>                yield return val;
    VD>        }
    VD>


    лучше так:

    def my_range(n):
        i = 0
        while i < n:
            yield i
            i += 1


    ... << RSDN@Home 1.1.3 stable >>
    Re[10]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 21.10.04 23:00
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>Так у тебя тоже не ответ.


    Правильно. У меня вопрос.

    FR>Любое преимущество можно обозвать отдельными фичами, а можно и часами его перечислять


    Ну, так ты покажи хоть какие-то кроме встроенных средств работы с коллекциями.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[7]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 21.10.04 23:00
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>лучше так:


    FR>
    FR>def my_range(n):
    FR>    i = 0
    FR>    while i < n:
    FR>        yield i
    FR>        i += 1
    FR>


    FR>


    Чем лучше? Вместо скобок пробеы и отсуствие типизации (что скорее минус).

    ЗЫ

    Кстати, твой вариант не воспроизводит всех возможностей range.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[11]: Oberon???????????????????????????????????
    От: FR  
    Дата: 21.10.04 23:55
    Оценка:
    Здравствуйте, VladD2, Вы писали:


    FR>>Любое преимущество можно обозвать отдельными фичами, а можно и часами его перечислять


    VD>Ну, так ты покажи хоть какие-то кроме встроенных средств работы с коллекциями.


    так показывал уже тот же калькулятор, но ты не смотришь.
    ... << RSDN@Home 1.1.3 stable >>
    Re[8]: Oberon???????????????????????????????????
    От: FR  
    Дата: 21.10.04 23:55
    Оценка:
    Здравствуйте, VladD2, Вы писали:


    VD>Чем лучше? Вместо скобок пробеы и отсуствие типизации (что скорее минус).


    А чем хуже? Да судя по отступам этот Range еще в какой то класс засунут? Если так
    то это недостаток
    А отсутствие типизации имеет не только недостатки но и преимущества например функция автоматически
    становится обощенной.

    VD>ЗЫ


    VD>Кстати, твой вариант не воспроизводит всех возможностей range.


    твой тоже, упущенно, что может быть два аргумента

    def my_range(*name):
        if(len(name) == 1): name = (0, name[0], 1)
        if(len(name) == 2): name = name.append(1)
        i = name[0]
        while i < name[1]:
            yield i
            i += name[2]
    ... << RSDN@Home 1.1.3 stable >>
    Re[9]: Oberon???????????????????????????????????
    От: eugals Россия  
    Дата: 22.10.04 06:51
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>
    FR>def my_range(*name):
    FR>    if(len(name) == 1): name = (0, name[0], 1)
    FR>    if(len(name) == 2): name = name.append(1)
    FR>    i = name[0]
    FR>    while i < name[1]:
    FR>        yield i
    FR>        i += name[2]
    FR>

    Ошибка, однако
    name.append вернёт None

    лучше уж так:
    def my_range( n, *args):
        i, n, step = args and ([n] + args + [1])[:3] or (0, n, 1)
        while i < n:
            yield i
            i += step
    ... << RSDN@Home 1.1.4 beta 2 >>
    Re[5]: Oberon???????????????????????????????????
    От: Obel  
    Дата: 22.10.04 06:56
    Оценка:
    СГ>Ну, вот, еще один "спец" нашелся. Утверждает что Васик проще и совершеннее Оберона.

    Подмена суждений — прием дешевого демагога.

    СГ>А Вы случаем не на компанию по производству компьютеров и коммуникаций работаете? Они очень заинтересованы в том чтобы людям надо было как можно более мощное и быстрое оборудование.


    Я работаю на компанию по призводству программного обеспечения. Она (эта компания) заинтересована в качественных, быстрых, компактных, безопасных, поддерживаемых, распространенных и стандартизированных технологиях разработки ПО.
    Таких как Java и С#.
    А Ваша компания, наверное, предлагает аналогичные решения на обероне?


    СГ>Именно в родной код. Безопасность встроена в сам язык. В оберонистой программе никогда не бывает переполнения буфера (range index check).


    Никада не говори никада

    СГ> И Вам никогда не удасться что-то читать или писать по неправильному адресу, просто потому что в языке нет такого понятия как адрес, адресная арифметика, и самого адресного пространства как такового.


    Как в Java
    Re[8]: арифметические, логические, бинарные
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 07:33
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


    VD>Это конечно несколько лучше чем в Паскале/Дельфи. Но все же я не понимаю на фиг так извращаться.


    А где, собственно, извращение? В том что с числами запрещены бинарные операции? Так это, как бы, правильно — кесарю кесарево, а слесарю слесарево. В тоже время это не вредит системному программированию, так как всегда можно преобразовать число в множество (BITS) и множество в число (ORD). Например, пусть есть число i: INTEGER, хотите обнулить старшие четыре бита, вуаля:
    i := ORD( BITS(i) - {28,29,30,31} );
    Re[6]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 07:43
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Ну, и чем это отличается от Шарпа:

    foreach (int i Range(10))
        Console.WriteLine(i);



    Ну, раз пошло такое дело, можно и я тоже чего-нибудь, про цикл for скажу.


    program Prog1;
    
    var s: string = 'Здравствуй мир!';
        c: char;
    begin
      for c in s do write(c);
    end.


    Цикл for в Delphi 2005 (недавно появилась — 12 октября 2004) теперь работает с любыми перечислимыми типами, в том числе со строками.
    Re[10]: арифметические, логические, бинарные
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 07:45
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>а вычитание совсем не логичная операция


    Вычитание одного множества из другого не понятная операция? Просто в первом множестве исчезают все элементы, которые есть во втором множестве. Чего не понятного-то?
    Re[11]: арифметические, логические, бинарные
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 22.10.04 07:49
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Курилка, Вы писали:


    К>>а вычитание совсем не логичная операция


    СГ>Вычитание одного множества из другого не понятная операция? Просто в первом множестве исчезают все элементы, которые есть во втором множестве. Чего не понятного-то?


    Представь студента и у него есть вычитание чисел, которое даст совсем другой результат, т.е. совсем он будет ожидать не того, что ты ему скажешь.
    Думать-то он будет далеко не о множествах, имхо.
    Вопрос-то шёл о бинарном представлении чисел, а не об абстрактных множествах, оторваных в бол-ве случаев от жизни.
    Re[10]: Oberon???????????????????????????????????
    От: FR  
    Дата: 22.10.04 08:08
    Оценка:
    Здравствуйте, eugals, Вы писали:

    E>Ошибка, однако

    E>name.append вернёт None

    угу поздно было, можно было и не то написать

    я думаю так проще и понятней:
    def my_range(begin, end = None, step = 1):
        if end == None: begin, end = 0, begin
        while begin < end:
            yield begin
            begin += step
    ... << RSDN@Home 1.1.3 stable >>
    Re[7]: Oberon???????????????????????????????????
    От: FR  
    Дата: 22.10.04 08:17
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>
    СГ>program Prog1;
    
    СГ>var s: string = 'Здравствуй мир!';
    СГ>    c: char;
    СГ>begin
    СГ>  for c in s do write(c);
    СГ>end.
    СГ>


    СГ>Цикл for в Delphi 2005 (недавно появилась — 12 октября 2004) теперь работает с любыми перечислимыми типами, в том числе со строками.


    Точно из питона сперли
    В питоне for помощнее он может работать с любыми итераторами.
    ... << RSDN@Home 1.1.3 stable >>
    Re[4]: Oberon???????????????????????????????????
    От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
    Дата: 22.10.04 12:38
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    LVV>>Это конечно мысль. Или еще можно С# попробовать. Но хотелось бы не Сишного синтаксиса — для алтернативы.


    VD>ВБ.НЭТ потянет? Сточки зрения простоты синтакиса и отсутствия сишных скобок самое оно. Только логических операций лучше на нем не давать. Они в нем такие же кривые как в Паскле (бен разделения на бинарные илогические).

    То есть ты видишь разницу между побитовыми и булевыми операциями????
    И представление булевых переменных в битовом представлении???
    В Delphi (Паскале) ты можешь применять те или иные операции основываясь на их типе.
    Нелзя применять как в C

     int i=0;
     if (~i ) {...}



    i:Integer=0;
     ............
     if not Boolean(i) Then
     .....................
     if i<>0 Then

    Без приведения к булевому типу
    Меня лично в c# бесит это разграничение. Так что кривизна больше не в Паскале.
    и солнце б утром не вставало, когда бы не было меня
    Re[7]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.10.04 14:09
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Цикл for в Delphi 2005 (недавно появилась — 12 октября 2004) теперь работает с любыми перечислимыми типами, в том числе со строками.


    Дельфи грязновато спроектированный язык. Для обучения я бы его не стал использовать. А учитывая, что это один фиг будет дотнет, то и говорить не о чем.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[9]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.10.04 14:09
    Оценка:
    Здравствуйте, FR, Вы писали:

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



    VD>>Чем лучше? Вместо скобок пробеы и отсуствие типизации (что скорее минус).


    FR>А чем хуже?


    Ты тут все о какой-то большей высокоуровневости толкуешь. Вот и интересно где она тут. Пример же ты привел. Была же какая-то фель в этом?

    А хуже хотя бы тем, что нет понятия типа. Вроде как range/xrange генераторы полседовательностей целых чисел, но тип последовательости так и не описан. А стало быть никакого контроля типов. И дыра в понимании.

    FR> Да судя по отступам этот Range еще в какой то класс засунут?


    Какаим еще отсутпам?

    FR> Если так то это недостаток


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

    FR>А отсутствие типизации имеет не только недостатки но и преимущества например функция автоматически становится обощенной.


    А зачем автоматически? Понятие полиморфизм нужно объяснять, да нет не объяснять, разжевывать, очень основательно и тщательно. Оно вместе с понятием абстракция являются основопологающим. Так что тут подобные "упрощения" только во вред.

    FR>твой тоже, упущенно, что может быть два аргумента


    Привет тебе. На то есть перегруженный вариант. Я просто о том, что при ранвых условиях разницы особой не будет.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[8]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.10.04 14:09
    Оценка:
    Здравствуйте, Poisson, Вы писали:

    VD>>Здается мне, что в Питоне понятнее и логичнее.

    P>Дело вкуса.

    Ага. Даже его порчи. По этому подобные вещи давать в обучении просто катигорически нельзя.

    P>даже код на C/C++ (сам питоновсаий интерпретатор вроде на C++ написан?) не очень интересно. Но в случае со смоллтоком мы видим код на том же смоллтоке (где-то в глубине упирающийся, конечно, в вызов примитива VM), что для начинающего очень и очень удобно — есть откуда брать массу полезных примеров.


    Ничего нужного мы не увидим. На многих языках (в том числе на C++ и C#) можно рассматривать устройство стандартных библиотек. Вот только это бессмысленное занятие при обучении. Абстракция важна даже в таких мелочах. Функция вывода и гереация последовательностей для учеников — это аксиомы которые просто описываются и признаются исходными точками.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.10.04 14:09
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>так показывал уже тот же калькулятор, но ты не смотришь.


    В нем ничего интересного нет. Если охота пришлю калькулятор на шарпе.

    В общем, откровенно говоря заявления об некой большей высокоуровневости Питона звучат неубедительно. При этом Питон страшен дотнете и явно проигрывает егму по распространению и приминимости в прикладных задачах. Другими солвами на практике дотнет полезнее, а обучение на том же Шарпе будет не сложнее чем на питоне. Наличие нескольких красивых фич не перекрывает остуствия типизации, отсуствие объявлений переменных, меньшую область применения.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[5]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.10.04 14:09
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>> Мертвяк. Причем чистейший воды. Ни одного комерческого проекта.


    СГ>Вы не компетенты в вопросах об оберонах.


    Будем мериться компетенцией? Эдак все сктится к флэйму не более.

    СГ> Я уже приводил ссылки, среди которых, например, упоминается коммерческий проект создания ПО для ЭЛЕКТРОСТАНЦИИ (не хило не так-ли?), в ссылках сайта info21 есть военный проект по управлению беспилотными летающими аппаратами (опять не хило?).


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

    VD>> Развитие Оберона с 96 года нет.


    СГ>Мало того что Вы не компетентны в вопросах об оберонах, но Вы еще и просто не внимательны. Совсем недавно, на этом форуме обсуждались "активные объекты". Вы случаем не обратили внимание на фигурирующие в даваемых ссылках даты? Создание Aos ~ 2000 год, диссертация Мюллера 2002 год. Работа над Zonnon идет по сей день.


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

    Обсуждения "активных объектов" (ужас то какой? ) я просто не видел. Однако сути дела это не меняет. Язык мертв не потому что его не развивают энтузиасты, а потому что он невостребован.

    СГ>Посмотрите даты проектов: http://www.cs.inf.ethz.ch/gutknecht/


    Спсибо. Любая мало-мальская утилита и ут темболее язык всегда имеют некоторое количество применений. На той же латыни коворят тысячи человек во всем мире. Однако для того чтобы счтить язык жизвым нужно чтобы на нем говорила хотя одна страна (пусть даже это будет Люксембург). Точно так же для ЯП нужно чтобы его использовали для производства относительно большого количества проектов. Яву, Шарп, Дельфи, С++, С, ВБ используют для моря проектов. Сравинвать с ними Оберон просто смешно. При этом Оберон не имеет какх-то существенных приемуществ при обучении.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[5]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.10.04 14:56
    Оценка:
    Здравствуйте, Serginio1, Вы писали:

    S> То есть ты видишь разницу между побитовыми и булевыми операциями????


    Ага. Причем мне откровенно жать тех кто ее не видит.

    Вот простенькие примеры:
    if (a == b && b < c)
        ...

    И такой же код на Паскле:
    if a = b and b < c then
        ...

    выглядят одинаково? А смысл совершенно разный. Смысл пасклая бует таким:
    if ((a == (b & b)) < c)
        ...

    что несоменнео бред для этого языка. Так что прийдется сувать скобки и провкрки:
    if (a = b) and (b < c) then
        ...

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

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


    S> И представление булевых переменных в битовом представлении???


    Ну, что ты тут попытался сказать я так и не понял.

    S> В Delphi (Паскале) ты можешь применять те или иные операции основываясь на их типе.


    Нда. Причем тут это?

    S> Без приведения к булевому типу

    S> Меня лично в c# бесит это разграничение.

    C# не для тебя. Он для тех кому дороги слова типобезопасность и для тех кто не будет уродовать код ради лишней милисикунды.

    S> Так что кривизна больше не в Паскале.


    Твоме мнение о "кривизне" мне извесно. Боюсь с ним будет несогласно большинство приличных программистов.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[10]: Oberon???????????????????????????????????
    От: FR  
    Дата: 22.10.04 15:23
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


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



    VD>>>Чем лучше? Вместо скобок пробеы и отсуствие типизации (что скорее минус).


    FR>>А чем хуже?


    VD>Ты тут все о какой-то большей высокоуровневости толкуешь. Вот и интересно где она тут. Пример же ты привел. Была же какая-то фель в этом?


    Привел в теме C++ и NET

    Re[17]: С++ и .NET
    Автор: FR
    Дата: 14.10.04


    кода в несколько раз меньше шарповского.


    VD>А хуже хотя бы тем, что нет понятия типа. Вроде как range/xrange генераторы полседовательностей целых чисел, но тип последовательости так и не описан. А стало быть никакого контроля типов. И дыра в понимании.


    это у тебя в шарпе они генераторы целых а в моем самописном на питоне любые числа можно подсунуть хоть комплексные, практически это шаблонная функция.
    Проверку типов при необходимости легко встроить if type(begin) != type(int): raise ValueError("")

    VD>Это с чего бы? Поместить его можно куда угодно. Самое место ему в неком утилитарном классе, чтобы глобальное пространство имен не захламлял.


    Так я и говорю что засовывание в Range в класс это плохо, так как ООП тут нафиг не нужен.

    FR>>А отсутствие типизации имеет не только недостатки но и преимущества например функция автоматически становится обощенной.


    VD>А зачем автоматически? Понятие полиморфизм нужно объяснять, да нет не объяснять, разжевывать, очень основательно и тщательно. Оно вместе с понятием абстракция являются основопологающим. Так что тут подобные "упрощения" только во вред.


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

    FR>>твой тоже, упущенно, что может быть два аргумента


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


    там нет варианта с двумя аргументами, да я не понял Шарп подерживает параметры по умолчанию? Если да то там надо добавить только = 1 к третьему параметру

    А мой последний пример:

    def my_range(begin, end = None, step = 1):
        if end == None: begin, end = 0, begin
        while begin < end:
            yield begin
            begin += step
    ... << RSDN@Home 1.1.3 stable >>
    Re[9]: Oberon???????????????????????????????????
    От: FR  
    Дата: 22.10.04 15:23
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    FR>>Точно из питона сперли


    VD>Питона еще на свете не было когда в ВБ for each появился.


    Угу если учесть что питон появился в 91 году

    FR>>В питоне for помощнее он может работать с любыми итераторами.


    VD>Гы-гы. С какими итераторами не сможет работать foreach из Шарпа? А дельфийский как раз с него слизан по повду перехода дельфи под дотнет.


    не знаю как в Шарпе, но как я понял в Дельфи не с любыми итераторами.
    ... << RSDN@Home 1.1.3 stable >>
    Re[13]: Oberon???????????????????????????????????
    От: FR  
    Дата: 22.10.04 15:23
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    FR>>так показывал уже тот же калькулятор, но ты не смотришь.


    VD>В нем ничего интересного нет. Если охота пришлю калькулятор на шарпе.


    так я же по следам твоего шарпового и написал

    Re[17]: С++ и .NET
    Автор: FR
    Дата: 14.10.04


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


    Обучение с нуля на Шарпе точно будет сложнее, только за счет того что даже простейшая программка загромождается не нужными вещами. (оберткой в class)

    А уровень языка тяжело определить, слишком уж это субъективно.
    Можно конечно попробовать по числу строк на решение конкретной задачи, но это мне кажется мало, тут вполне может и forth выиграть
    Так что остается только на мелких задачках, но мне честно лень специально этим заниматся, если что попадется на глаза заброшу сюда.
    ... << RSDN@Home 1.1.3 stable >>
    Re[10]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.10.04 18:04
    Оценка:
    Здравствуйте, FR, Вы писали:

    VD>>Питона еще на свете не было когда в ВБ for each появился.


    FR>Угу если учесть что питон появился в 91 году


    А МС бэйсик в 75 если н ошибаюсь. С++ тоже раньше. Дельфи правда позже. Но в нем foreach как раз нет.

    VD>>Гы-гы. С какими итераторами не сможет работать foreach из Шарпа? А дельфийский как раз с него слизан по повду перехода дельфи под дотнет.


    FR>не знаю как в Шарпе, но как я понял в Дельфи не с любыми итераторами.


    В дельфи я их еще не смотрел (фича больно недавно появилась, а дельфи меня что-то в последнее время не занимает), но думаю, что драли их несомненно с шарпа. А там они очень даже.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.10.04 18:04
    Оценка:
    Здравствуйте, FR, Вы писали:

    VD>>В нем ничего интересного нет. Если охота пришлю калькулятор на шарпе.


    FR>так я же по следам твоего шарпового и написал


    FR>Re[17]: С++ и .NET
    Автор: FR
    Дата: 14.10.04


    Ну, там одна идея была. Тут речь идет о полноценном продукте.

    FR>Обучение с нуля на Шарпе точно будет сложнее, только за счет того что даже простейшая программка загромождается не нужными вещами. (оберткой в class)


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

    FR>А уровень языка тяжело определить, слишком уж это субъективно.


    Согласен. Однако по отношению к С++ вопросов не созникает. Стало быть при некоторой разнице определить все же можно. А стало быть разница слишком мала.

    FR>Можно конечно попробовать по числу строк на решение конкретной задачи, но это мне кажется мало, тут вполне может и forth выиграть


    Строки вообще мало чего решают. Решает простота восприятия. У Питона я заметил несколько особенностей способных сократить объем кода. Но они не способны сделать код проще и понятнее. Более того без специального изучения они не очевидны.

    FR>Так что остается только на мелких задачках, но мне честно лень специально этим заниматся, если что попадется на глаза заброшу сюда.


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

    В общем, как я уже говорил в начале учить Шарп и просто и полезно. Ведь найти потом работу на нем будет куда проще чем на питоне. А вообще лучше знать и то, и то, и С++ с Окамлом в придачу. Это точно не повредит.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[16]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.10.04 20:44
    Оценка:
    Здравствуйте, prVovik, Вы писали:

    VD>>Начальный код можно исполнять и в специльно созданного для этого обертке.

    V>Но только это уже будет НЕ С#, а получится какой-то свой собственный доморощенный язык

    Почему же? Это будет тот самый шарп. Только упрощенный для начала. Хотя по мне так нет никаких проблем от пары лишних строчек кода.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[11]: Oberon???????????????????????????????????
    От: FR  
    Дата: 22.10.04 21:15
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    VD>>>Питона еще на свете не было когда в ВБ for each появился.


    FR>>Угу если учесть что питон появился в 91 году


    VD>А МС бэйсик в 75 если н ошибаюсь. С++ тоже раньше. Дельфи правда позже. Но в нем foreach как раз нет.


    В бейсике for each появился не в 75 году.

    VD>>>Гы-гы. С какими итераторами не сможет работать foreach из Шарпа? А дельфийский как раз с него слизан по повду перехода дельфи под дотнет.


    FR>>не знаю как в Шарпе, но как я понял в Дельфи не с любыми итераторами.


    VD>В дельфи я их еще не смотрел (фича больно недавно появилась, а дельфи меня что-то в последнее время не занимает), но думаю, что драли их несомненно с шарпа. А там они очень даже.


    Может быть, но я тоже не горю желанием писать на delphi.net
    ... << RSDN@Home 1.1.3 stable >>
    Re[15]: Oberon???????????????????????????????????
    От: FR  
    Дата: 22.10.04 21:15
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    VD>>>В нем ничего интересного нет. Если охота пришлю калькулятор на шарпе.


    FR>>так я же по следам твоего шарпового и написал


    FR>>Re[17]: С++ и .NET
    Автор: FR
    Дата: 14.10.04


    VD>Ну, там одна идея была. Тут речь идет о полноценном продукте.


    Ну пришли.

    FR>>Обучение с нуля на Шарпе точно будет сложнее, только за счет того что даже простейшая программка загромождается не нужными вещами. (оберткой в class)


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


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

    FR>>А уровень языка тяжело определить, слишком уж это субъективно.


    VD>Согласен. Однако по отношению к С++ вопросов не созникает. Стало быть при некоторой разнице определить все же можно. А стало быть разница слишком мала.


    Понимаешь это все настолько субъективно что вряд-ли, в общем пора закруглятся.

    FR>>Можно конечно попробовать по числу строк на решение конкретной задачи, но это мне кажется мало, тут вполне может и forth выиграть


    VD>Строки вообще мало чего решают. Решает простота восприятия. У Питона я заметил несколько особенностей способных сократить объем кода. Но они не способны сделать код проще и понятнее. Более того без специального изучения они не очевидны.


    Очень даже способны делать код и проще и понятней, просто тебе шоры си образного синтаксиса мешают.

    FR>>Так что остается только на мелких задачках, но мне честно лень специально этим заниматся, если что попадется на глаза заброшу сюда.


    VD>Ну, а тогда не надо заявлять подобные вещи. А уж если заявляшь, то подтверждай фактами. Мне лично не очевидны преимущества питона. Красивые решения конечно есть, но они есть и в Шарпе. Думаю, если сравнить компонетные возможности, то тут Питон резко проиграет. В другой области окажется обратная картина.


    Так я никогда и не утверждал что питон во всем лучше шарпа.

    VD>В общем, как я уже говорил в начале учить Шарп и просто и полезно. Ведь найти потом работу на нем будет куда проще чем на питоне. А вообще лучше знать и то, и то, и С++ с Окамлом в придачу. Это точно не повредит.


    угу
    только если все учить то на работу вообще времени не останется
    ... << RSDN@Home 1.1.3 stable >>
    Re[7]: Oberon???????????????????????????????????
    От: serg_mo  
    Дата: 22.10.04 22:42
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    VD>Здается мне, что в Питоне понятнее и логичнее. А смотреть на то как работают операторы и встроенные функции как-то даже в голову не приходит.


    Зависит от того, что считать встроенными функциями .
    Кстати, давайте рассмотрим еще один аргумент в пользу Смолтока.
    В языках, подобных С++, Java, C# и подобных при изучении мне не обойтись без увесистого мануала.
    Который описывает ключевые слова, управляющие конструкции языка, встроенные функции и операторы и т. п.
    Не имея такого мануала, я никогда не догадаюсь, какие, например, существуют в языке операции над логическими переменными или как записать конструкцию цикла с предусловием.
    В Смолтоке, поскольку я знаю, что любая конструкция выражается с помощью посылки сообщения (читай — вызова метода) соответствующего объекта, мне просто нужно посмотреть на интерфейс нужного класса. Например, чтобы понять, какие операции я могу производить над логическими переменными, мне нужно взглянуть на интерфейс класса Boolean.
    Работая на Смолтоке, я уже забыл, что такое документация
    Re[8]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 23.10.04 01:30
    Оценка:
    Здравствуйте, serg_mo, Вы писали:

    _>Кстати, давайте рассмотрим еще один аргумент в пользу Смолтока.


    Если бы это было достоинством, то все давно бы работали на СмолТоке.

    _>В языках, подобных С++, Java, C# и подобных при изучении мне не обойтись без увесистого мануала.

    _>Который описывает ключевые слова, управляющие конструкции языка, встроенные функции и операторы и т. п.
    _>Не имея такого мануала, я никогда не догадаюсь, какие, например, существуют в языке операции над логическими переменными или как записать конструкцию цикла с предусловием.
    _>В Смолтоке, поскольку я знаю, что любая конструкция выражается с помощью посылки сообщения (читай — вызова метода) соответствующего объекта, мне просто нужно посмотреть на интерфейс нужного класса. Например, чтобы понять, какие операции я могу производить над логическими переменными, мне нужно взглянуть на интерфейс класса Boolean.
    _>Работая на Смолтоке, я уже забыл, что такое документация

    Предлагая (ну, так для разнообразия) открыть современную стреду вроде VS, Эклипса или Идеи и поглядеть как обстаят дела с пониманием кода в них. Уверю, что будет очень интересно. И окажется, что языки вроде Явы и Шарпа тоже можно успешно изучат без документации.

    Прадва на счет тоже я бы усомнился. Я вот как-то пробовал покапаться в смолтоке и быстро бросил. Так как концепции не похожи на прижившиеся в современных языках. А мучиться не хотелось. За то вот Шарп и Яву я освоил очень быстро и без заглядывания в мануалы.
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 23.10.04 01:30
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>В бейсике for each появился не в 75 году.


    В QuickВасике вроде уже был. А это точно раньше 91-ого.

    FR>Может быть, но я тоже не горю желанием писать на delphi.net


    Ну, а вдруг завтра из нее сделают язык-мечту поэта?
    ... << RSDN@Home 1.1.4 beta 3 rev. 206>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.10.04 06:58
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Почитал я тут защитников Оберона, и задумался. Надо первачков учить....



    Недавно, научно образовательный проект <b>Информатика 21</b> обзавелся своим форумом:
    http://www.delphikingdom.com/asp/talktopic.asp?ID=339

    Форум открыт по просьбам читателей сайта проекта для обсуждения Оберона/Компонентного Паскаля/Блэкбокса как технологической платформы для современной общей системы преподавания программирования, параллельной и дополняющей систему преподавания математики. Мнения за и против, вопросы как и почему, и т.п.

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

    Re[15]: Oberon?
    От: eugals Россия  
    Дата: 23.10.04 11:17
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Думаю, если сравнить компонетные возможности, то тут Питон резко проиграет.

    Поясни, что за возможности?
    ... << RSDN@Home 1.1.4 beta 2 >>
    Re[5]: Oberon???????????????????????????????????
    От: Rinver  
    Дата: 23.10.04 11:51
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

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


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


    LVV>>>Но хотелось бы не Сишного синтаксиса — для алтернативы.


    D>>Пролог?

    LVV>На первом курсе?
    А Haskel на первом курсе нормально ?
    С уважением, Rinver.
    Re[6]: вопрос знатокам SmallTalk
    От: lesha-v  
    Дата: 23.10.04 14:55
    Оценка:
    Здравствуйте,
    Решил я посмотреть на SmallTalk... скачал VisualWorks7.2.1, установил...
    аа шрифт в диалогах прочитать не возможно что делать, подскажите ? неужели так и не удасться познакомиться со смолтолком...
    Re[9]: Oberon???????????????????????????????????
    От: Poisson Россия  
    Дата: 23.10.04 19:52
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    _>>Кстати, давайте рассмотрим еще один аргумент в пользу Смолтока.

    VD>Если бы это было достоинством, то все давно бы работали на СмолТоке.
    Все далеко не всегда работают на лучшем, на правда ли? Вон сколько языков существует, наверное хоть какой-то из них -- лучший, по пишут-то все на разных языках...

    VD>Предлагая (ну, так для разнообразия) открыть современную стреду вроде VS, Эклипса или Идеи и поглядеть как обстаят дела с пониманием кода в них. Уверю, что будет очень интересно. И окажется, что языки вроде Явы и Шарпа тоже можно успешно изучат без документации.

    Это менее удобно. В ST я за пару кликов могу посмотреть интефейс класса (отсортированный, между прочим, по категориям), могу за один клик посмотреть все ссылки (или все реализации) данного метода в пределах всего image'а (а не только своего кода). Очень удобно, когда нужно быстро (пара секунд!) глянуть на примеры использования класса или метода.

    VD>Прадва на счет тоже я бы усомнился. Я вот как-то пробовал покапаться в смолтоке и быстро бросил. Так как концепции не похожи на прижившиеся в современных языках. А мучиться не хотелось.

    Какие мы консервативные... Кстати, везжание в ST резко ускоряет сидящий рядом опытный смоллтокер (или книжка Кента Бека "Smalltalk best practice patterns")

    VD>За то вот Шарп и Яву я освоил очень быстро и без заглядывания в мануалы.

    Не верю. Шарп — и без MSDN'а, без книг, без знающего человека под рукой?
    ... << RSDN@Home 1.1 beta 2 >>
    Re[18]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.10.04 00:07
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>Как только понял что это такое, очень даже очевидна, я же говорю тебе мешают привычки, мне тоже мешали.

    FR>Как это не сделали? Они на строки со списков и переползли.
    FR>
    >>>> print [0, 1, 2, 3, 4][1:3]
    FR>[1, 2]
    FR>


    FR>
    >>>> l = [0, 1, 2, 3, 4, 5]
    >>>> l[1:3] = [9, 9]
    >>>> print l
    FR>[0, 9, 9, 3, 4, 5]
    FR>


    Повторяю себя (любимого ) еще раз:

    До сих пор, кстати, не пойму почему они для добавления элементов к спискам не сделали аналогичный синтаксис.


    То что ты привел не добавление элментов. Я про apend в ОО-стиле.

    FR>Я же говорю это субъективно. Много людей которые так же утверждают что шарп на одном уровне с плюсами.

    FR>Я и сам так думал, пока питон не начал изучать

    Что-то я связи шапра с питоном не нуловил.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[16]: Oberon?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.10.04 00:07
    Оценка:
    Здравствуйте, eugals, Вы писали:

    VD>>Думаю, если сравнить компонетные возможности, то тут Питон резко проиграет.

    E>Поясни, что за возможности?

    Тут долго пояснять. Это и динамическая загрузка скомпилированных модулей, и интерфейсы, и рефлекшен, и дизайнеры компонентов/контролов, и генерация мсила, и интеграция с другими языками. В общем, возможность манимулирования не кодом, а готовыми бинарными модулями. Причем практически без потери производительности.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[10]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.10.04 00:07
    Оценка:
    Здравствуйте, Poisson, Вы писали:

    P>Все далеко не всегда работают на лучшем, на правда ли?


    Правда. Есть народ пишуший на Смолтоке.

    P> Вон сколько языков существует, наверное хоть какой-то из них -- лучший, по пишут-то все на разных языках...


    Да основная масса пишет на паре-тройке типов языков которые практически идентичны с точки зрения парадигмы.

    VD>>Предлагая (ну, так для разнообразия) открыть современную стреду вроде VS, Эклипса или Идеи и поглядеть как обстаят дела с пониманием кода в них. Уверю, что будет очень интересно. И окажется, что языки вроде Явы и Шарпа тоже можно успешно изучат без документации.

    P>Это менее удобно.

    А ты открой.

    P> В ST я за пару кликов могу посмотреть


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

    P> интефейс класса (отсортированный, между прочим, по категориям), могу за один клик посмотреть все ссылки (или все реализации) данного метода в пределах всего image'а (а не только своего кода).


    Я не знаю кто такой твоей "image'а" но уверяю тебя, что проблем с просмотром связей в современных средах нет.

    P> Очень удобно, когда нужно быстро (пара секунд!) глянуть на примеры использования класса или метода.


    Рад за то, что такие возможности есть не только в современных средах, но и в Смолтоке.

    P>Какие мы консервативные...


    Вы? Несомннено.

    P> Кстати, везжание в ST резко ускоряет сидящий рядом опытный смоллтокер (или книжка Кента Бека "Smalltalk best practice patterns")


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

    VD>>За то вот Шарп и Яву я освоил очень быстро и без заглядывания в мануалы.

    P>Не верю. Шарп — и без MSDN'а, без книг, без знающего человека под рукой?

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

    Еще раз повторюсь. Шарп я смотрел после С++ и Дельфи. Языки конечно разные (и сильно) но концепции то схожи. И благодоря интуитивности синтаксиса чтение мануалов не требуется. Смолток же это вещь в себе. Его принципы очнь долеки как от мэйнстрим-продуктов, так и от оптимальной реализации. Спасибо этому почтенному языку за то, что двинул всю индустрию в перед. Пусть теперь отдахнет на пенсии.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[11]: Oberon???????????????????????????????????
    От: Poisson Россия  
    Дата: 24.10.04 06:04
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>>>Предлагая (ну, так для разнообразия) открыть современную стреду вроде VS, Эклипса или Идеи и поглядеть как обстаят дела с пониманием кода в них. Уверю, что будет очень интересно. И окажется, что языки вроде Явы и Шарпа тоже можно успешно изучат без документации.


    P>> В ST я за пару кликов могу посмотреть

    VD>Сочувствую. Тяжело тебе. Нужно мышой возить, чтобы что-то увидить. В более современных средах достаточно шорткатов.
    Аккуратнее придираться надо... Как только с помощью шортката можно посмотреть, например, интерфейс произвольного класса? Имя-то его надо откуда-то взять. Тут-то мыша и поможет (хотя можно и ручками это имя ввести, конечно...)

    P>> интефейс класса (отсортированный, между прочим, по категориям), могу за один клик посмотреть все ссылки (или все реализации) данного метода в пределах всего image'а (а не только своего кода).

    VD>Я не знаю кто такой твоей "image'а" но уверяю тебя, что проблем с просмотром связей в современных средах нет.
    Это ж как надо было на смоллток смотреть, чтобы не знать, что такое image... Это база данных кода, как системного, так и пользовательского (хотя граница весьма размытая). И результатов при присмотре связей, соответственно, получается на порядок больше, чем при использовании только пользовательского кода.

    VD>Еще раз повторюсь. Шарп я смотрел после С++ и Дельфи. Языки конечно разные (и сильно) но концепции то схожи. И благодоря интуитивности синтаксиса чтение мануалов не требуется. Смолток же это вещь в себе. Его принципы очнь долеки как от мэйнстрим-продуктов,

    В целом согласен. Правда не считаю это недостатком.

    VD> так и от оптимальной реализации.

    А вот здесь не помешает аргументация, и подробная...

    VD> Спасибо этому почтенному языку за то, что двинул всю индустрию в перед. Пусть теперь отдахнет на пенсии.

    Да что-то ему все неймется, бодрый такой пенсионер попался.
    ... << RSDN@Home 1.1 beta 2 >>
    Re[12]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.10.04 06:17
    Оценка:
    Здравствуйте, Poisson, Вы писали:

    P>Аккуратнее придираться надо... Как только с помощью шортката можно посмотреть, например, интерфейс произвольного класса? Имя-то его надо откуда-то взять. Тут-то мыша и поможет (хотя можно и ручками это имя ввести, конечно...)


    Имя уже есть под курсором. Вводить ничего не нужно.

    P>Это ж как надо было на смоллток смотреть, чтобы не знать, что такое image...


    А вот так вот. Мне откровенно говоря совсем не охота забивать голову левой терминалогией.

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


    Ну, давай расказвать как круто с просмотром кода в СмолТоке и как фигово в других местах. Я вот как раз только что вылез из Рефлектора. И с удовольствием тебя послушаю.

    P>В целом согласен. Правда не считаю это недостатком.


    Твои проблемы. А я не считаю СмолТок достойным для глубокого изучения.

    VD>> так и от оптимальной реализации.

    P>А вот здесь не помешает аргументация, и подробная...

    Ага, чтобы поспорить насколько гипотетический джит СмолТока лучше чем реально работающий дотентеа. Как бы надоело. Восеользуйся поиском.

    VD>> Спасибо этому почтенному языку за то, что двинул всю индустрию в перед. Пусть теперь отдахнет на пенсии.

    P>Да что-то ему все неймется, бодрый такой пенсионер попался.

    Ну, так есть одно хорошее правило. Если хочется работать, ляг поспи и все пройдет.

    В общем, не думаю что тема СмолТока требует очередного подъема.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[19]: Oberon???????????????????????????????????
    От: FR  
    Дата: 24.10.04 08:49
    Оценка:
    Здравствуйте, VladD2, Вы писали:


    VD>Повторяю себя (любимого ) еще раз:

    VD>

    До сих пор, кстати, не пойму почему они для добавления элементов к спискам не сделали аналогичный синтаксис.


    VD>То что ты привел не добавление элментов. Я про apend в ОО-стиле.


    Слушай до меня не доходит, изобрази в коде то что хотелось бы.
    ... << RSDN@Home 1.1.3 stable >>
    Re[20]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.10.04 10:07
    Оценка:
    Здравствуйте, FR, Вы писали:

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


    Вопрос на чем?

    Ну, нечто вроде:

    int[] a = { 1, 2, 3 };
    a = a + 4; // a == { 1, 2, 3, 4 }


    Т.е. не
    a.append(4);

    а просто арифметика или еще что на списках.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[21]: Oberon???????????????????????????????????
    От: eugals Россия  
    Дата: 24.10.04 10:56
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>
    VD>int[] a = { 1, 2, 3 };
    VD>a = a + 4; // a == { 1, 2, 3, 4 }
    VD>


    a = [1, 2, 3]
    a = a + [4]
    ... << RSDN@Home 1.1.4 @@subversion >>
    Re[14]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.10.04 11:35
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Поздняк метаться. C# 2.0 already came.


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

    S>Но вот развитие идей разделения генерации последовательностей и их обработки неизбежно приводит к чему-то типа:


    S>
    S>public void PrintNonDividable(Range r, int divisor)
    S>{
    S>   Print(r.Filter(delegate(int item){return (item % divisor) != 0;}));
    S>}
    S>

    S>Что, имхо, гораздо лучше чем
    S>
    
    Ну, то не так страшно.
    
    S>public void PrintNonDividable(Range r, int divisor)
    S>{
    S>  Range r2 = new Range();
    S>  foreach(int item in r)
    S>    {
    S>      if ((item % divisor) != 0)
    S>          r2.Append(item);
    S>    }
    S>  Print(r2);
    S>}
    S>

    S>И лучше по двум основным причинам:
    S>1. Меньше строчек — меньше ошибок.

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

    S>2. Можно оперировать бесконечными (или очень длинными) последовательностями значительно оптимальнее.


    К сожалению, Шарп не оптимизирован под функциональный стиль. Писать то так можно, но это будет значтельно медленнее. Да и получается несколькь более громоздко нежели в чистых ФЯ или питоне.

    Однако данную задачу проще режить так:
    class Program
    {
        public static IEnumerable<int> NonDividable(IEnumerable<int> range, int divisor)
        {
            foreach (int item in range)
                if (item % divisor != 0)
                    yield return item;
        }
    
        static void Main(string[] args)
        {
            foreach (int value in NonDividable(XRange(10), 2))
                Console.Write(value + " ");
        }
    
        #region XRange Impl
        
        static IEnumerable<int> XRange(int len)
        {
            return XRange(0, len, 1);
        }
    
        static IEnumerable<int> XRange(int start, int len)
        {
            return XRange(start, len, 1);
        }
    
        static IEnumerable<int> XRange(int start, int len, int inc)
        {
            int count = (len - start) / inc;
            for (int val = start, i = 0; i < count; i++, val += inc)
                yield return val;
        }
    
        #endregion
    }



    S> Этот Range запросто может быть генератором, а не коллекцией.


    В дотнете это называется enumerable, т.е. энумератором, перечеслителем.

    Но проблема в том, что это объект, а значит несколько медленнее чем лобовые for-ы с ифами. Хотя медленее чем в Питоне не будет.

    Однако, любымый для функциональщиков Фибоначи в функцниональном стиле на Шарпе вылевается в полную задницу с точки зрения производительности, так как ни компилятор Шарпа, ни джит не устраняют рекурсию в таких случаях. Попробуй ради хохмы эту реализацию:
    static long Fib(int n)
    {
        return n < 2 ? 1 : (Fib(n - 1) + Fib(n - 2));
    }
    ...
    foreach (int value in NonDividable(XRange(10), 2))
        Console.Write(value + " ");

    В Питоне кстати оптимизации тоже нет, но есть функция memoize делающая ее "врукопашную".


    S> Наложение Filter на него совершенно не обязательно вынуждает немедленно получить другую коллекцию. Собственно, yield-инг результатов (возможно) начнется только на месте употребления. И все это мы имеем совершенно забесплатно.


    Гы. Довольно за дорого.

    S>Цена этому — обучение программистов новой конструкции — анонимным методам.


    Ага. И обучение компилятора человеческой оптимизации.

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


    Особенно забавно использовать yield return без управляющих конструкций.

    S>Что такое If как не метод,


    Как что? Управляющая конструкция. Вот "? x : y" — это функция. Вот только в нее yield return не воткнешь. Другая, понимаш, парадигма. И кстати, она почему-то мне очень понятна и приятна.

    S> принимающий булевый делегат и два воид-делегата?


    Что такое "воид-делегата"?

    S>Цикл превращается в метод Apply у IEnumerable. Ну и так далее. Страшно, да?


    Страшно, что попади это дело в руки орлам вроде тех что писали СТЛ и выйдет СТЛ.

    S>Вот к чему приводит стремление к "нормализации"! Сахар в языке — вещь полезная .


    Я не сказал бы, что делегаты — это сахар. А анонимные методы логическое их развитие. Жать только что без соотвествующей оптимизации применение данных фич негативно скажется на производительности.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[22]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.10.04 12:32
    Оценка:
    Здравствуйте, eugals, Вы писали:

    E>
    E>a = [1, 2, 3]
    E>a = a + [4]
    E>


    Это не то. То получается только через append . А тут на лицо склеивание списков. К тому же похоже в результате получается третий список ссылка на который попадает в a. Хотя это уже другой вопрос.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[18]: Oberon?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.10.04 12:32
    Оценка:
    Здравствуйте, eugals, Вы писали:

    E>Без проблем. Питон динамический язык,


    А Шарп статический. От того и быстрый кода порождает. Но при этом с компонентами все ОК.

    E> соответственно и динамическая загрузка модулей в нем имеется. Отгрузка и перезагрузка, кстати, тоже


    Вот тут бы я не радовался. Поле для ошибок. Переприсвоил имя и все поехало. Переменные не объявляются, а значит их можно создавать случайно. Они не типизированны, а нзначит тормоза. Это уже не компонентность, а интерпретируемость получается.

    VD>> и интерфейсы,

    E>В питоне, как и в смолтоке, любому объекту можно послать любое сообщение. Куда уж гибче интерфейс.

    Ну, ОО в питое как раз мне совсем не понравилось. Странности на каждом шагу.
    Что до гибкости... Везде нужен баланс. Без разумного подхода гибкость превращается в тормоза и баги. С твоими любимыми сообщениями большое приложение рассыпится от рантаймных багов. Интерфеейсы — это это средство выделения абстракции. Они не гибкие, и не жесткие. И их отсуствие — это большой минус для языка претендующего на звание ООЯ.

    Забавно так же отсутствие модификаторов доступа (видимости). Все паблик, и все виртуальное. Во, блин, решение. Ни надежности, ни скорости. За-то забавнейшие конструкции вроде self в параметрах.

    VD>> и дизайнеры компонентов/контролов,

    E>А что дизайнеры?

    Вот и я о том же. Компоненты типа есть. А что такое дизайнеры для них не знаем.

    E> Под питон еть порт всех популярных оконных (и вообще, компонентных) библиотек/технологий: PyQT, PythonNet, PyCOM, PyXPCOM, PyVCL...


    Во-во. Порт недо-технологий перехивших свой век. Зачем же нужены порты полноценному компонетному языку? Вот в дотнете все компонетны (вместе с компонетной моделью) написаны на Шарпе. И вписываются в среду и рантайм как будто они там всю жизнь были.

    E>Вот я, например, одним из таких приложений сейчас занимаюсь
    Автор: eugals
    Дата: 04.08.04


    Забавно. Ну, значит должен понимать сколько кода нуно докрутить к чистому Питону, чтобы с ним работать в компонентном стиле. А в дотнете все уже есть. И твой дизайнер делается за пару часов.

    VD>> и генерация мсила,

    E>Опять же, в динамическом ЯП, это всё гораздо прозрачнее, чем Reflection.Emit.

    Еще раз. Прозрачность должна еще должна быть зачем-то нужна. Если я получаю в 10 раз блее медленное решение, то уж лучше я обойдусь менее прозрачным.


    VD>>и интеграция с другими языками.

    E>Смотри выше. Порты есть.

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

    E> В том числе и в дотнет.


    Гы. Питон в дотнете — это уже дотнет. Далее от питона просто ничего не требуется. Ну, разве что мало мальски прилично код сгенерировать.

    E> Плюс удобное Python-Си апи, А С(++), несмотря на майкрософтовский прессрелизы, всё ещё главный мировой язык для разработки библиотек.


    Да? И какие ты библиотеки на С++ знаешь? А на счет удобства. Что может быть удбонее чем просто использование в одном проекте длл-ек написанных на разных языках?

    VD>>В общем, возможность манимулирования не кодом, а готовыми бинарными модулями.

    E>Ну, в питоне свой формат прекомпилированных файлов. Вполне себе бинарные модули. Не хуже мсильных сборок.

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

    VD>> Причем практически без потери производительности.

    E>Вот, собственно, ключевая оговорка

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

    E>Здесь да, спорить бессмысленно — шарп пока быстрее.


    Покая? Шарпу 2 года. И с каждым годом он становится все быстрее и быстрее. Думаю, ко времени когда МС начнет массовый выпуск продуктов на дотнете они доведут джит и пре джит до уровня своих С++-ных компиляторов (которые у них одни из самых лучших).

    E>Зато питон гибче и лаконичнее.


    Ну, да экономим на объявлениях типов, перменных, и т.п. В итоге получаем багодром. Гибкость должна иметь разумные пределы. Как и контроль. Баланс, вот что важно. Нужна и скорость кодирования, и скорость получаемого кода, и гибкость, и контроль. Собственно именно разумное сочетание ингридиенов и порождает в итоге конечный продукт.

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

    E> Плюс у него есть много других преимуществ (встроенные возможности АОП, например).


    Вот об этом интересно было бы послешать по подробнее.

    E>Но только какое отношение преимущество шарпа в скорости имеет к заявленным тобой "компонентным возможностям"? Имхо, второстепенное.


    Гы. А кому нужны игрушки? Если собранное из компонентов ПО рассыпится или будет напоминать пошаговую стратегию, то пользователь пошлет такой софт к черту и будет пользоваться глючным С++-ным.

    E>ЗЫЖ На хочется в очередной раз начинать на этом форуме холивар Static vs. Dynamic.


    Да уж. Не стоит. Практика давно показала что они явно не в пользу динамиков.

    E>_vovin, в свое время, довольно хорошо про это написал тут. Вряд ли я смогу добавить что-то принципильно новое. А даже если и смогу, тебя всё равно не переубедить, это общеизвестно


    А не надо меня убеждать. Ты факты приводи. Пока что скриптовые языки живут в нише "веб-страничек по демпинговым ценам". А за типизированные платят нехилые деньги. Причем спрос на программистов знающих С++, Дельфи, Шарп, Яву намного больше чем предложение. Почти весь коммерческий софт написан на этих языках. Скрпты там в роли скриптов только и присуствуют. Ну, а зачем нужны скрпты если есть языки мало им в чем уступающие, но при этом не скрипты?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[19]: Oberon?
    От: Зверёк Харьковский  
    Дата: 24.10.04 12:40
    Оценка:
    Влад, я тут тебе спаслание написал, а ты не видишь
    http://rsdn.ru/Forum/Message.aspx?mid=865856&amp;only=1
    Автор: Зверёк Харьковский
    Дата: 24.10.04
    FAQ — це мiй ай-кью!
    Re[20]: Oberon?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.10.04 13:29
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>Влад, я тут тебе спаслание написал, а ты не видишь

    ЗХ>http://rsdn.ru/Forum/Message.aspx?mid=865856&amp;only=1
    Автор: Зверёк Харьковский
    Дата: 24.10.04


    Ну, я же не всевидящий. А вообще, пора завязывать на сегодня. И так пол дня убил на философию.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[4]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 24.10.04 14:28
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Зверёк Харьковский, Вы писали:


    ЗХ>>Имхо, ты везде приводишь более-менее верные и логичные аргументы, но не прав в главной своей мысли: "Все пишут на Яве и Шарпе, поэтому учить больше ничего не надо".


    VD>Ну, это сильно извращенное понимание моих мыслей. Я не говорил о том, что учить больше ничего не надо. Более того. Я даже за то, чтобы учить больше. Я считаю, что человек знающий всего один язык программирования не имеет права называться программистом. Ну, или автоматически приравнивается к ламеру (если он конечно не в самом начале пути).



    VD>Более того. Я вот с удовольствием познакомился с Питомном. В отличии от того же СмолТока или Окамла он на меня произвел очень хорошее впечатление (хотя и без огорчений не обошлось). Интересный язык, хорошо поддерживающий разные парадигмы. Если бы не его наплевательство на типы и несколько странное видение ООП, я бы пожалуй согласился с тем, что этот язык был бы очень хорошим кандидатом на превый язык программиста.


    VD>Однако я совершенно не понимаю зачем начинать учить детей с экзотики вроде СмолТока или с мертвячины вроде Оберона.

    Тут, конечно, ВВ виднее, я ж не преподаватель...
    Но в свое время Паскаль и был языком "для учебы" == идеальная чистота концепции + полная непригодность для промышленного использования.
    То есть я, кажется, повторяю мысль prVovik в этой же ветке
    УАЯ кто-нить помнит? Условный Алгоритмический Язык....

    VD>Причем начиная учить детей на Обероне им в первую очередь навязывают стиль, а не объясняют принципы построения грамотного кода.

    Сугубый имх: место стройного академического языка — там же, где помянутого мной УАЯ: объяснить человеку, только вчера увидевшему компьютер, что такое условие, цикл, подпрограмма, переменная etc.
    При обучении проектированию — уже надо знать "нормальный язык".

    ЗХ>>Я считаю, что изучение других языков программирования идет не в минус (забиваем голову ненужной информацией), а в плюс. И не потому, что СмолТолк кому-то может пригодиться (ой, сумлеваюсь), а по очень простой причине: расширение кругозора. Просто понять, что "и такое бывает". Подцепить полезный метод или идею. В конце концов (в парадигме начального вопроса Валерия Викторовича) — просто осознать, "что не в любом языке программирования есть фигурные скобки".


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

    См. выше

    ЗХ>>Возьмем, например, меня .

    ЗХ>>В контексте давнего спора про то, какой язык кому нравится, могу слегка скорректировать свое тогдашнее мнение: "я люблю С++ и пока это возможно, буду писать только на нем", но сейчас собираюсь покупать Рихтера про Шарп. Не потому, что хочу на него перейти — интересно, что нового, чем он отличается; как нужно "думать на Шарпе". А и кроме того, книжки, которые валяются на винте, и которые я уже изучил или собираюсь в ближайшем будушем, посвящены языкам: Ada, Assembler, Awk, C--, C++, C#, Delphi, Eiffel, Euphoria, Forth, Go!, Haskell, Java, Lisp, OCaml, Oz, Perl, PHP, Prolog, Python, Refal, Small, Smalltalk, Tcl, VB.

    VD>Здорово. На винтах у меня правда тоже валяется черти что. Но о некоторых языках я даже не слышал. Например, что такое Refal и Go! я не знаю.


    Рефал сделали русские. Это, вроде как, функциональный язык...

    Рефал — язык манипулирования символьными объектами: текстами, формулами, программами и т.п. Программа на Рефале состоит из функций, которые могут определяться друг через друга, т.е. рекурсивно. Отсюда и название: АЛгоритмический язык РЕкурсивных Функций.
    Язык Рефал был создан В. Турчиным [Тур 66] в качестве метаязыка для описания семантики других языков. Впоследствии, в результате появления достаточно эффективных реализаций на ЭВМ он стал находить практическое использование в качестве языка программирования.


    Go! — язык, заточенный под программирование агентов.


    VD>Как по твоему Оберон и СмолТок заслуживают больщего внимания чем все перечисленные тобой тут языки?

    СмолТок — воистину. Именно за счет того, что сильно отличается от всего остального. Просто для раздвижения, так скзть, горизонтов. Но учить его первым — по-моему, искалечить восприятие.
    Оберон (пока Губанов не слышит) — полнейшее, на мой вкус, занудство. Его изучение как первого языка еще может быть оправдано теми факторами, о которых я уже сказал. Как второго (третьего...) не даст в смысле мировоззрения абсолютно ничего.
    Сугубая, разумеется, имха.
    FAQ — це мiй ай-кью!
    Re[6]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 25.10.04 07:58
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>...При этом Оберон не имеет какх-то существенных приемуществ при обучении...


    А вот, компетентные в этом вопросе люди утверждают обратное. Ссылки я уже приводил.
    Re[3]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 25.10.04 08:11
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>А высказываения "против" являются вульгарным или неуместным контентом?


    Смотря в какой форме Вы их будете там излагать и какие аргуиенты приводить.
    Re[6]: Мэйнстрим vs. Самосовершенствование :)))
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 25.10.04 08:18
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Сергей, это уже выглядит далеко не корректно про компетентных

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

    А RETURN — это уже не аргумент? Человек заявил что у Вирт что-то имеет против RETURN, а вот то что во всех оберонах этот RETURN всегда был, этот человек не вкурсе. И это называется у меня нет аргументов?
    Re[7]: Мэйнстрим vs. Самосовершенствование :)))
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 25.10.04 08:20
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Курилка, Вы писали:


    К>>Сергей, это уже выглядит далеко не корректно про компетентных

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

    СГ>А RETURN — это уже не аргумент? Человек заявил что у Вирт что-то имеет против RETURN, а вот то что во всех оберонах этот RETURN всегда был, этот человек не вкурсе. И это называется у меня нет аргументов?


    То, что ты делаешь упор на компетентных, говорит о том, что нормальные аргументы у тебя заканчиваются...
    Re[8]: Oberon???????????????????????????????????
    От: Kluev  
    Дата: 25.10.04 08:44
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    K>>Чем отличается? тем что как уже было сказано:

    K>>>>Выполняется прямо в командной строке без компиляции, написания функции и т.п.

    VD>Это не приемущество. Во-первых, это на фиг не упало. А, во-вторых, создать утититку эмулирующую командрую строку задача на вечер.


    Такую как в питоне? Задачка на вечер? Извини, но ты насмешил мои тапочки. Скачай питоновскую среду (IDLE) и тогда сам поймешь, что для обучения вряд ли можно найти что-то лучшее.
    Re[5]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.10.04 15:42
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>Тут, конечно, ВВ виднее, я ж не преподаватель...

    ЗХ>Но в свое время Паскаль и был языком "для учебы" == идеальная чистота концепции + полная непригодность для промышленного использования.

    Ну, почему же не пригодность? У Паскаля есть работоспособное развите — Дельфи. Вот только результатом такой приверженности Паскалю явилось, то что появилась целая плияда ламеров непонимающих в программировании как таковом за-то знающих синтаксис Паскаля и потому выбирающих Дельфи. Вот только Дельфи — это современный ООЯ. Пусть не очень качественно споектированный, но все же современный. И его тоже нужно уметь использовать. Но наши преподаватели остановились на голом Паскале. В итоге "программист" осваивает работу с дизайнером форм, даблкликает по кнопки и фигачит там код на том самом Пасклае. Все! На большее он не способен. Хотя нет... еще при появлении какой-нибудь не тривиальной задачи он лезет в Интернет и спрашивает "А где надыбать хомпонент ХХХ для решения задачи УУУ?".

    ЗХ>То есть я, кажется, повторяю мысль prVovik в этой же ветке

    ЗХ>УАЯ кто-нить помнит? Условный Алгоритмический Язык....

    Нафиг условности не нужны. Учить нужно принципам программирования. И в принципе пофигу на чем учить. Но уж если пофигу, то почему бы не учить на том, что может с большой вероятностью быть востребовано, а не на мертвяке?

    ЗХ>Сугубый имх: место стройного академического языка — там же, где помянутого мной УАЯ: объяснить человеку, только вчера увидевшему компьютер, что такое условие, цикл, подпрограмма, переменная etc.

    ЗХ>При обучении проектированию — уже надо знать "нормальный язык".

    Вот и не нужно объяснять это на "выдуманных" язвках. Объясняйте это на вымученных языках. Современные ЯП являются такими какми они являются от того, что в них вложен опыт реального программирования на многих предшествующих языках. Ну, не просто так в Яве и Шарпе остались continue и есть return. Та же Дельфи и Васик долго жили без них, но в итоге и в них были добавлены эти конструкции. Вред этих конструкций высасан из пальца.

    ЗХ>Go! — язык, заточенный под программирование агентов.


    Киборги?

    ЗХ>СмолТок — воистину. Именно за счет того, что сильно отличается от всего остального. Просто для раздвижения, так скзть, горизонтов.


    Какие горизонты? Речь идет о языке выбираемом для знакомства с программированием?

    ЗХ> Но учить его первым — по-моему, искалечить восприятие.


    Вот и я о том же! В лес такие сумашедшие идеи.

    ЗХ>Оберон (пока Губанов не слышит) — полнейшее, на мой вкус, занудство. Его изучение как первого языка еще может быть оправдано теми факторами, о которых я уже сказал. Как второго (третьего...) не даст в смысле мировоззрения абсолютно ничего.


    Я в общем-то говорю о том же. Оберон это язык ничемго не дающий в плане обучения. Да он более качественно спроектирован чем С. Обладает меньшей сложностью нежели С++. Но он перед тем же Шарпом у никго практически нет приемуществ. Шарп спроектирован как миниуму не хуже (а по сути значительно лучше). После Шарпа человеку будет очень легко изучить и другие языки мэйнстрима (Яву, С++, Дельфи). В последней версии Шарпа можно даже демонстрировать функциональный стиль. Если же детей обучить Оберону, то при попытке изучения вышеперечисленных языков у них будет натуральная ломка. Так зачем создавать проблемы людям? В общем, уж лучше действительно пусть Питон преподают. В нем и то подходы ближе к реальной жизни.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[5]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.10.04 15:42
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Любой человек хоть немного знакомый с оберонами, не говоря уже о компетентных в этих вопросах людях, знает, что для выходя из процедуры в оберонах используется именно тот самый оператор RETURN. А вот, Вы об этом до сих пор не знаете, а еще чего-то против высказываете.


    Я не то чтобы не знаю. Я просто смотрел Оберон в 97-98 годах. С тех пор обращаться к нему у меня небыло желания. Больше всего запомнилось то как в нем реализован ООП. Вот уж если нужно дать неверное восприятие ООП, то Оберон тут очень кстати.

    Еща раз повторю. Эта ненормальная привязаннасть к мертворожденному языку выглядит как аналогия.

    Объясните мне чем вам не угодил C#? Какие такие проблемы вы в нем углядели, чтобы отказаться от него впользу Оберона? Ведь этот язык живой и его изучение дает рельную пользу в будущем. После него любой из мэйнстримных языков (Ява, С++, Дельфи) изучаются довольно легко. При этом C# очень хорошо спроектирован. Не имет проблем С++ (сложность, запутанность), проблем Дельфи (связанных с эвалюционным развитием).

    VD>>.....Причем начиная учить детей на Обероне им в первую очередь навязывают стиль, а не объясняют принципы построения грамотного кода....


    СГ>А вот компетентные в этом вопросе люди утверждают обратное.


    Я бы, на вашем месте, не пытался применять на РСДН столь низкие приемы демагогии. Здесь это не пройдет. Возможно я не дока в Обероне. Но я видел этот язык и пробовал на нем программировать. При этом я очень неплохо знаю те самые С++, Дельфи C#, и отчасти, Яву. И почти уверен, что моя компетенция в этом вопросе как миниуме не ниже вашей.

    СГ> Ссылки я уже неоднократно приводил.


    Я вообще не пойму зачем вы пришли сюда? Посоветоваться? Дык вам дали совет не морочте демять голову Обероном в начале их пути. Но вы услышав почти однозначное осуждение своего мнения все равно проталкиваете свою идею. Точно такое же осуждение вы получили на королевстве дельфи. Так каковы ваши цели?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[7]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.10.04 15:42
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А RETURN — это уже не аргумент? Человек заявил что у Вирт что-то имеет против RETURN, а вот то что во всех оберонах этот RETURN всегда был, этот человек не вкурсе. И это называется у меня нет аргументов?


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

    Еще раз повторяю, что Оберон я видел в 97-98 году (после прочтения какой-то восторженной публикации). Если очнь охота можно устроить последовательное сравнение Оберона с тем же C#, чтобы увидить превосходство Оберона в целях преподавания ООП в школах.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[7]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.10.04 15:43
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    VD>>...При этом Оберон не имеет какх-то существенных приемуществ при обучении...


    СГ>А вот, компетентные в этом вопросе люди утверждают обратное. Ссылки я уже приводил.


    А вот демагоги, когда у них кончаются аргументы, постоянно пытаются намекать на некомпетентность собеседников.

    Итак, спрашиваю напрямую. Какие есть аргументы в оправдание тому, что Оберон имеет приемущество перед тем же C# или Питоном (в целях обучения)?

    Если их нет, то предлагаю заночить это обсуждение. Проталкивайте свои иде в другом месте.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[5]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.10.04 15:43
    Оценка:
    Здравствуйте, prVovik, Вы писали:

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


    Поэтому здесь было решено обсудить именно жесткую привязку к мертворожденному языку?


    V> Понятно, что совсем без привязки не обойтись,


    Ну, а раз понятно. То не нужно зацикливаться на этом. Пусть зацикливаются на методике препадавания. На концепциях которые нужно в первую очередь преподать ученику. На том как сделать все это наиболее доходчиво и просто. А в качестве языка выбрать один из живых языков. В меру просто, и вмеру навороченый. С++ для этого выбирать не стоит (в виду его сложности). Но есть же и другие достойные языки.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[9]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.10.04 15:43
    Оценка:
    Здравствуйте, Kluev, Вы писали:

    K>Такую как в питоне? Задачка на вечер? Извини, но ты насмешил мои тапочки.


    Ну, ты успокой свои тапочки. Утилит таких как грязи.

    K> Скачай питоновскую среду (IDLE) и тогда сам поймешь, что для обучения вряд ли можно найти что-то лучшее.


    Зачем мне слабенькие ИДЕ? Речь шао о "приемуществе командной строки". А IDE у Шарпа уж точно не хуже. И командная строка там есть (окно имидиэт). Из него точно так же можно работать как из командной строки Питона. А уж отладобчные фичи у нее скорее покручи будут. Тот же рефакторин много стоит.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[4]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.10.04 15:43
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Смотря в какой форме Вы их будете там излагать и какие аргуиенты приводить.


    Откровенно говоря мне и здесь места хватает. Здесь я могу высказывать свое мнение без ограничений. В прочем как и вы.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Вдогонку...
    От: Poisson Россия  
    Дата: 25.10.04 17:24
    Оценка:
    Здравствуйте, Poisson, Вы писали:

    P>Здравствуйте, lesha-v, Вы писали:


    Да, а потом выполнить WinXPLookPolicy initialize
    ... << RSDN@Home 1.1 beta 2 >>
    Re[10]: Oberon???????????????????????????????????
    От: FR  
    Дата: 25.10.04 17:45
    Оценка:
    Здравствуйте, VladD2, Вы писали:


    K>> Скачай питоновскую среду (IDLE) и тогда сам поймешь, что для обучения вряд ли можно найти что-то лучшее.


    VD>Зачем мне слабенькие ИДЕ? Речь шао о "приемуществе командной строки". А IDE у Шарпа уж точно не хуже. И командная строка там есть (окно имидиэт). Из него точно так же можно работать как из командной строки Питона. А уж отладобчные фичи у нее скорее покручи будут. Тот же рефакторин много стоит.


    IDLE это не ИДЕ, просто тот же интерпретатор с командный строкой, плюс текстовый редактор и отладчик.
    Да насчет IDE скачал я вчера Visual Python, это плагин к VS.NET. В общем практически для питона получается обычное VS иде нечем не хуже плюсового, так вот IDLE или (SciTE) гораздо удобнее для работы.
    ... << RSDN@Home 1.1.3 stable >>
    Re: Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 25.10.04 17:56
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Почитал я тут защитников Оберона, и задумался. Надо первачков учить. Раньше мы, естественно, первый семестр учили на Турбо-паскале. А потом переходим на С и С++ — и понеслась. Турбо-паскаль нужен нам был, что на чемпионате мира меньше проблем было. А теперь турбо=паскаль умер, и надо что-то выбирать. С++ как первый язык давать не хочу — поймут отнюдь не все. Студенты есть из сел, поэтому сначала их надо в проблематику написания программ ввести, не касаясь сильно компьютерных особенностей, особенно указателей. Вот на чем? На обероне?

    LVV>Интересует любая информация о трансляторах, IDE, справочные материалы, адреса в инете — в общем все, что мы проанализируем и потом примем решение.
    LVV>Кстати, какие альтернативы оберону есть, кто-нить представляет?
    LVV>На западе, насколько знаю — обучают сначала функциональному языку типа Haskel.
    LVV>Ы??????????????????????????????????????????

    В общем, у меня мнение сложилось: явных претендентов два питон и додиез. Проблема в том. что нет преподавателей, кроме моих молодых аспирантов, которые способны на приемлемом уровне до февраля освоить либо тот, либо другой. В пользу додиеза говорят еще некоторые не связанные с программированием местные особенности.
    Спасибо всем за продуктивную дискуссию!
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[11]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.10.04 20:07
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>Да насчет IDE скачал я вчера Visual Python, это плагин к VS.NET. В общем практически для питона получается обычное VS иде нечем не хуже плюсового, так вот IDLE или (SciTE) гораздо удобнее для работы.


    А ты с плюсовым не сравнивай. Ты надыбай VS 2005 или 2003 но с ReSharper-ом.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[7]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.10.04 20:07
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>С одной стороны — человеку, который вообще не представляет, как и что делает программист, концепцию цикла бывает проще объяснить на примере


    ЗХ>
    ЗХ>For I=1 To 10
    ЗХ>Next
    ЗХ>

    ЗХ>(с) VB


    Концепции цикла нужно объяснять на базе вайла:
    whle (condition)
    {
    }

    причем пофигу на каком языке. Тогда и объяснение будет простым и понятным.

    Как я уже говорил из преподнесения фор-а мне бльше всего понравился вариант Питона:
    for x in range(10)
        ...


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

    ЗХ>С другой стороны — жизнь показала, что слишком часто языки, созданные чисто для обучения, выращивают людей, которые стремятся только на этих языках и писать. Что получается — мы все знаем.


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

    ЗХ>[смолток выгрызен. Вроде договорились.]


    В смысле что нецензурными словами не выражаться?

    VD>>..Но перед тем же Шарпом... Шарп спроектирован как миниуму не хуже (а по сути значительно лучше)... После Шарпа...легко изучить и другие языки... можно даже демонстрировать функциональный стиль...

    ЗХ>Влад, вообще нравственный посыл первого моего поста был таков: нефиг.
    ЗХ>Честно говоря, в свете развязавшейся тут войны, плавно перетекшей в Шарп против Оберона, Шарп против Питона, Шарп против СмолТока твой фанатизм немногим лучше фанатизма Губанова

    Дык тут оно как. Я провозился 3 года с С, окло 10 с С++, два года на Gupta SQLWindows, два на Дельфи, с Явой где-то месяца три повозился, пять лет протрахался с COM-ом, последние 2.5 вожусь с дотнетом и Шарпом. Все языки били интересны и во всех было "что-то". Однако на сегодня шарп объективно совершенее, хотя опять таки не идеален. И опять таки во многих языках есть фичи которые я бы с удовольствием видел в нем. Так что это не фанатизм. Это соврешенно осознанный выбор. Это действительно очень элегантный язык, особенно новая версия 2.0.

    Однако! Если ты заметил я предлагаяю не в обезательном порядке Шарп (хотя по-моему — это действительно хороший выбор), а ни в коем случае не Оберон. И именно чтобы потом не получить картину на подобии той что случилась с Делфи и ВБ.

    ЗХ> (только тем, что он защищает мертвый язык, а ты — живой. Ну и общаешься ты существенно корректнее)


    Именно, что мертвый. Пойми, я конечно буду больше рад если это буедт Шарп, но против Явы или Питона я не буду так сильно протистовать. Именно потому что это современные и живые языки. Ну, и потому, что после них не прийдется ломать сознание.

    ЗХ>В каждом языке есть свои кайфы, и холиваром ничего не докажешь.


    Бесспорно. Но это же не повод, чтобы навязывать детям этот Оберон?

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

    ЗХ>Хотя круче С++ языка нет, не было, и не надо, а C# — конъюнктурная поделка Мелкософта


    Однако учить С++ лучше уже окрпшим умом. А то можно и кршу потерять.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[7]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.10.04 20:07
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>нежели

    ЗХ>
    ЗХ>for(int i = 0; i < 10; ++i)
    ЗХ>{
    ЗХ>}
    ЗХ>

    ЗХ>(c) а то сам не видишь...

    Кстати, я учился программировать на С. Так что первым фор-ом был как раз сишный. И знаешь, что я припоминаю? фор не оказался для меня хоть каким-то пониманием. А вот sizeof() (я его тогда почему-то называл "сюзеооф" ) меня по началу вводил в дикий ступор. Причем почему я так до сих пор и не понял. А из языковых конструкций мене бли больше всего непонятны битовые структуры. Ну, не мог я въехать в разные x:2. По сути я не сильно понимал что такое биты, а тут какя-то хрень зумная.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[8]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 25.10.04 21:15
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    [про циклы погрыз. бо скучно]

    ЗХ>>[смолток выгрызен. Вроде договорились.]

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

    VD>>>..Но перед тем же Шарпом... Шарп спроектирован как миниуму не хуже (а по сути значительно лучше)... После Шарпа...легко изучить и другие языки... можно даже демонстрировать функциональный стиль...

    ЗХ>>Влад, вообще нравственный посыл первого моего поста был таков: нефиг.
    ЗХ>>Честно говоря, в свете развязавшейся тут войны, плавно перетекшей в Шарп против Оберона, Шарп против Питона, Шарп против СмолТока твой фанатизм немногим лучше фанатизма Губанова

    VD>Дык тут оно как. Я провозился 3 года с С, окло 10 с С++, два года на Gupta SQLWindows, два на Дельфи, с Явой где-то месяца три повозился, пять лет протрахался с COM-ом, последние 2.5 вожусь с дотнетом и Шарпом.

    ой... глубоко нескромный вопрос: а сколько тебе лет? а то что-то у меня ментальная модель кажется не соответствует действительности

    VD>Все языки били интересны и во всех было "что-то". Однако на сегодня шарп объективно совершенее


    Блин! Ну повбывав бы! Ну скоко можно!
    А по моему субъективному мнению С++ объективно совершенен. Как говорил в этом топике, кажись, ВольфХаунд — ИмеюМнениеХренОспоришь.

    ЗХ>>В каждом языке есть свои кайфы, и холиваром ничего не докажешь.

    VD>Бесспорно. Но это же не повод, чтобы навязывать детям этот Оберон?
    Да ладно тебе... Губанов сбежал давно, а ты еще пару месяцев вместо привычного "Шарп круче всего" будешь в любом топике повторять что Оберон — мертвый язык...

    ЗХ>>Хотя круче С++ языка нет, не было, и не надо, а C# — конъюнктурная поделка Мелкософта


    VD>Однако учить С++ лучше уже окрпшим умом. А то можно и кршу потерять.

    На Перле писал?
    Это мой второй любимый (после самизнаетечего). Язык уродский, но безумно занятный.
    FAQ — це мiй ай-кью!
    Re[9]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.10.04 21:46
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>В смысле, что пришли к одинаковому мнению: его неплохо бы хотя бы посмотреть, но начинать с него не след.


    +1

    ЗХ>ой... глубоко нескромный вопрос: а сколько тебе лет? а то что-то у меня ментальная модель кажется не соответствует действительности


    31 но это не значит, что я в 4 года программировать начал. Просто некоторые вещи использовались параллельно. Последовательно изучались только С и С++. Я кстати, еще на КуВасике еще успел пописать. И на ВизуалВасике.

    VD>>Все языки были интересны и во всех было "что-то". Однако на сегодня шарп объективно совершенее

    ЗХ>
    ЗХ>Блин! Ну повбывав бы! Ну скоко можно!

    А чё?
    - Варона, варона! Сколько у тебя ножек?
    - Две.  :shuffle: Особенно левая!



    ЗХ>А по моему субъективному мнению С++ объективно совершенен. Как говорил в этом топике, кажись, ВольфХаунд — ИмеюМнениеХренОспоришь.


    И хрен можно оспорить. (с) я.

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

    ЗХ>Да ладно тебе... Губанов сбежал давно, а ты еще пару месяцев вместо привычного "Шарп круче всего" будешь в любом топике повторять что Оберон — мертвый язык...


    Ради детей я готов на все (с) Ося Бэндер

    ЗХ>На Перле писал?


    Ой, и писал, и плевал и ... но толку чуть.

    ЗХ>Это мой второй любимый (после самизнаетечего). Язык уродский, но безумно занятный.


    Ужас какой. Это типа интеллекутальный мазохизм?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[2]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.10.04 22:17
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>В общем, у меня мнение сложилось: явных претендентов два питон и додиез.


    Хороший выбор!

    LVV>Проблема в том. что нет преподавателей, кроме моих молодых аспирантов, которые способны на приемлемом уровне до февраля освоить либо тот, либо другой.


    Нда. Это действительно нехилая проблема. До февраля времени в обрез. Тут только если по бразильской системе. (с) Ералаш

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


    А можно узнать, что за особенности?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[10]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 25.10.04 23:34
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    ЗХ>>ой... глубоко нескромный вопрос: а сколько тебе лет? а то что-то у меня ментальная модель кажется не соответствует действительности


    VD>31 но это не значит, что я в 4 года программировать начал. Просто некоторые вещи использовались параллельно. Последовательно изучались только С и С++. Я кстати, еще на КуВасике еще успел пописать. И на ВизуалВасике.


    Упс... однако.... умею я ошибаться в людях. В общем, я думал, ты моложе.
    Тогда мне с моими (страшно сказать) 22-мя надо пойти помолчать в тряпочку

    VD>Плюсы вещь конечно заслуженная. Но крайне хреново спроектированная. Спец-средство по набитию шишек.

    Ну Влааааад!

    ЗХ>>На Перле писал?


    VD>Ой, и писал, и плевал и ... но толку чуть.


    ЗХ>>Это мой второй любимый (после самизнаетечего). Язык уродский, но безумно занятный.


    VD>Ужас какой. Это типа интеллекутальный мазохизм?


    Да как тебе сказать. Я по профессии — любознательный бездельник. То есть в жизни устраиваюсь так, чтобы надо мной не было никаких боссов, могущих сказать "Дорогой Зверек, а не попрограммировать ли тебе на VB?" (бывало и такое )
    Сижу дома, занимаюсь чем попало.
    Может быть поэтому меня и прет Перл (как сказал, а?): я не пишу на нем проект, который надо было сдать еще вчера, а так, для дома, для семьи.
    Он просто охренительно особенный. Он из тех средств, про которые говорят "... way" (unix way, perl way, smalltalk, кстати, way)
    И этот самый way зачастую — это правда полезный путь, которому можно в какой-то степени следовать не только под Юнихом и на Перле. Это то самое расширение сознания...

    Так что Перл пер, прет, и будет переть

    ЗЫ: А вот Шарп — он расширяет сознание, как по-твоему?
    FAQ — це мiй ай-кью!
    Re[12]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 26.10.04 00:22
    Оценка:
    VladD2:

    > Шарп — это ХАЙВЭЙ.


    Продолжая начатую тему о дорогах

    Well I’m standing by a river
    But the water doesn’t flow
    It boils with every poison you can think of
    And I’m underneath the streetlight
    But the light of joy I know
    Scared beyond belief way down in the shadows
    And the perverted fear of violence
    Chokes the smile on every face
    And common sense is ringing out the bellc
    This ain’t no technological breakdown
    Oh no, this is the road to hell

    And all the roads jam up with credit
    And there’s nothing you can do
    It’s all just bits of paper flying away from you
    Oh look out world, take a good look
    What comes down here
    You must learn this lesson fast and learn it well
    This ain’t no upwardly mobile freeway
    Oh no, this is the road
    Said this is the road
    This is the road to hell

    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[7]: Vlad2
    От: WFrag США  
    Дата: 26.10.04 08:39
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А Вы посмотрите вокруг, Вы один тут делаете нападки на Оберон, только Вы один вынесли "однозначное осуждение", остальные находятся либо в нейтралитете, либо не ведут себя так же агрессивно как Вы, либо перестали утверждать что либо по этому поводу так как не считают себя компетентными в этой области. [...]


    Зато у его стиля общения в священных войнах есть один плюс — его сложно проигнорировать.
    Re[5]: Мэйнстрим vs. Самосовершенствование :)))
    От: serg_mo  
    Дата: 26.10.04 08:44
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>СмолТок — воистину. Именно за счет того, что сильно отличается от всего остального. Просто для раздвижения, так скзть, горизонтов. Но учить его первым — по-моему, искалечить восприятие.


    Искалечить восприятие чего?
    ... << RSDN@Home 1.1.3 stable >>
    Re[8]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 09:01
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Итак, спрашиваю напрямую. Какие есть аргументы в оправдание тому, что Оберон имеет приемущество перед тем же C# или Питоном (в целях обучения)?


    Отвечаю напрямую: Оберон — проще!

    Кстати, а что это Java уже исчезла из списка, остались только C# и Питон? Это из-за отсутствия в Java обычных процедур, так что процедурное программирование (подпрограммы) пришлось бы детям объяснять на примере статик методов? Хе-Хе, так ведь минимальные знания какими нужно располагать чтобы программировать на C# тоже отличны от нулевых. Вот пожалуйста, минимальный проект-болванка генерируемый автоматически MS Visual Studio:
    using System;
    
    namespace CDiesConsoleApplication1
    {
        /// <summary>
        /// Summary description for Class1.
        /// </summary>
        class Class1
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                //
                // TODO: Add code to start application here
                //
            }
        }
    }

    То есть сначала надо будет объяснить что такое namespace, class, static void Main, ее аргумент string[] args, вот этого кракозябла [STAThread] — объяснить. Не хило?
    Re[9]: P.S.
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 09:04
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>>Итак, спрашиваю напрямую. Какие есть аргументы в оправдание тому, что Оберон имеет приемущество перед тем же C# или Питоном (в целях обучения)?


    СГ>Отвечаю напрямую: Оберон — проще!


    P.S. Предыдущее сообщение про C#, на счет Питона прошу его не относить, я в Питоне не компетентен.
    Re[9]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 26.10.04 09:15
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:
    СГ>Кстати, а что это Java уже исчезла из списка, остались только C# и Питон? Это из-за отсутствия в Java обычных процедур, так что процедурное программирование (подпрограммы) пришлось бы детям объяснять на примере статик методов? Хе-Хе, так ведь минимальные знания какими нужно располагать чтобы программировать на C# тоже отличны от нулевых. Вот пожалуйста, минимальный проект-болванка генерируемый автоматически MS Visual Studio:
    СГ>То есть сначала надо будет объяснить что такое namespace, class, static void Main, ее аргумент string[] args, вот этого кракозябла [STAThread] — объяснить. Не хило?

    А можно в ответ привести минимальную программу на обероне?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[20]: Oberon?
    От: LaptevVV Россия  
    Дата: 26.10.04 09:27
    Оценка:
    Здравствуйте, eugals, Вы писали:

    VD>>Еще раз. Прозрачность должна еще должна быть зачем-то нужна. Если я получаю в 10 раз блее медленное решение, то уж лучше я обойдусь менее прозрачным.

    E>Не в десять.
    Для обучения это как раз абсолютно некритично. Скорость будем получать потом — на С++.
    E>>> Плюс удобное Python-Си апи, А С(++), несмотря на майкрософтовский прессрелизы, всё ещё главный мировой язык для разработки библиотек.
    А вот это — важно! Спасибо!

    E>>> Плюс у него есть много других преимуществ (встроенные возможности АОП, например).

    VD>>Вот об этом интересно было бы послешать по подробнее.
    E>Почитай про метаклассы.
    Спасибо!
    E>Особенно после того, как в Python 2.4 появились атрибуты (декораторы), навроде шарповских (вообще, они и раньше типа были, но не такие удобные).
    Спасибо!
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[3]: Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 26.10.04 09:36
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    LVV>>В общем, у меня мнение сложилось: явных претендентов два питон и додиез.


    VD>Хороший выбор!


    LVV>>Проблема в том. что нет преподавателей, кроме моих молодых аспирантов, которые способны на приемлемом уровне до февраля освоить либо тот, либо другой.


    VD>Нда. Это действительно нехилая проблема. До февраля времени в обрез. Тут только если по бразильской системе. (с) Ералаш


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


    VD>А можно узнать, что за особенности?

    Есть мысль совместить в учебном плане обучение по программе Aptech — международный диплом. А у них двухлентняя программа для двух вариантов: додиез и Ява. Я склоняюсь к додиезу.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[11]: Oberon???????????????????????????????????
    От: INTP_mihoshi Россия  
    Дата: 26.10.04 10:05
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:


    S>>А можно в ответ привести минимальную программу на обероне?

    СГ>
    СГ>MODULE MyModule;
    
    СГ>IMPORT StdLog;
    
    СГ>BEGIN
    СГ>  StdLog.String("Здравствуй мир!");
    
    СГ>END MyModule;
    СГ>



    Вопрос. Какова вероятность, что ученик допустит в этом (или близком к этому) коде ошибку и не сможет ее исправить на основании только сообщений компилятора?

    Сколько всего нужно ученику объяснить, чтобы он понимал значение каждого слова в этом коде, а не копировал "с доски" по принципу "дэти, это нэвозможно понат, это надо запомныт".

    И к вам, C#, это тоже относится
    Re[7]: Мэйнстрим vs. Самосовершенствование :)))
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 26.10.04 10:06
    Оценка:
    Здравствуйте, INTP_mihoshi, Вы писали:
    INT>Мне в нем не нравится (с точки зрения обучения) только одно — то, что он навязывает ООП.
    Гм. А вы уверены, что хотите остановиться на процедурном программировании?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[8]: Мэйнстрим vs. Самосовершенствование :)))
    От: INTP_mihoshi Россия  
    Дата: 26.10.04 10:21
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    INT>>Мне в нем не нравится (с точки зрения обучения) только одно — то, что он навязывает ООП.

    S>Гм. А вы уверены, что хотите остановиться на процедурном программировании?

    Я не уверен, что хочу начинать с объектного. И тем более не уверен, что я хочу останавливаться на объектах в том виде, в котором их представляет C#.
    Re[8]: Мэйнстрим vs. Самосовершенствование :)))
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 26.10.04 10:29
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

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

    INT>>Мне в нем не нравится (с точки зрения обучения) только одно — то, что он навязывает ООП.
    S>Гм. А вы уверены, что хотите остановиться на процедурном программировании?

    А почему ты уверен, что альтернатива лишь процедурное?
    И почему обязательно останавливаться?
    Это же только "начало", за ним следуют другие стадии
    Re[12]: Oberon???????????????????????????????????
    От: Kluev  
    Дата: 26.10.04 10:30
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Здравствуйте, Сергей Губанов, Вы писали:


    S>И чем же этот хрен слаще вот такой редьки:

    S>
    S>using System;
    S>class Class1
    S>{
    S>    static void Main()
    S>    {
    S>        Console.WriteLine("Hello World");
    S>    }
    S>}
    S>

    S>?

    И то и другое плохо.
    Вот питон здесь рулит однозначно:
    Re[9]: Мэйнстрим vs. Самосовершенствование :)))
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 26.10.04 10:47
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>А почему ты уверен, что альтернатива лишь процедурное?

    К>И почему обязательно останавливаться?
    К>Это же только "начало", за ним следуют другие стадии
    Ну, потому что тут вроде Оберон противопоставляют. А у него пока что продемонстрировано только одно "преимущество" — возможность писать старый добрый процедурный код. АОП и FP он вроде бы поддерживает хуже, чем C#. Или я до каких-то важных стадий еще не дорос?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[10]: Мэйнстрим vs. Самосовершенствование :)))
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 26.10.04 10:54
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Здравствуйте, Курилка, Вы писали:


    К>>А почему ты уверен, что альтернатива лишь процедурное?

    К>>И почему обязательно останавливаться?
    К>>Это же только "начало", за ним следуют другие стадии
    S>Ну, потому что тут вроде Оберон противопоставляют. А у него пока что продемонстрировано только одно "преимущество" — возможность писать старый добрый процедурный код. АОП и FP он вроде бы поддерживает хуже, чем C#. Или я до каких-то важных стадий еще не дорос?

    Да нет, если Оберон рассматривать, то ты на 200% прав, я думаю...
    Имхо Питон тут гораздо будет логичней, в котором есть всё что только можно вроде бы
    Ну или по меньшей мере мне сейчас так кажется
    Re[14]: Oberon???????????????????????????????????
    От: INTP_mihoshi Россия  
    Дата: 26.10.04 10:54
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

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


    K>>И то и другое плохо.

    K>>Вот питон здесь рулит однозначно:
    S>Ну, лично меня ты практически убедил
    S>В качестве учебного языка мне он уже нравится. Я так понял, что единственное, что ему вменяется как помеха промышленному применению — так это производительность. Зато есть шанс показать все (или почти все) концепции современного программирования в одном флаконе. Это очень круто.

    Ну, в Caml все практически так же... И без извратов с identами


    #let square (x) = x * x;;
    square : int -> int = <fun>
    #let rec fact (x) =
      if x <= 1 then 1 else x * fact (x - 1);;
    fact : int -> int = <fun>
    #fact (5);;
    - : int = 120
    #square (120);;
    - : int = 14400


    И далее здесь
    Re[15]: Oberon???????????????????????????????????
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 26.10.04 11:02
    Оценка:
    Здравствуйте, INTP_mihoshi, Вы писали:

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


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


    K>>>И то и другое плохо.

    K>>>Вот питон здесь рулит однозначно:
    S>>Ну, лично меня ты практически убедил
    S>>В качестве учебного языка мне он уже нравится. Я так понял, что единственное, что ему вменяется как помеха промышленному применению — так это производительность. Зато есть шанс показать все (или почти все) концепции современного программирования в одном флаконе. Это очень круто.

    INT>Ну, в Caml все практически так же... И без извратов с identами



    INT>
    INT>#let square (x) = x * x;;
    INT>square : int -> int = <fun>
    INT>#let rec fact (x) =
    INT>  if x <= 1 then 1 else x * fact (x - 1);;
    INT>fact : int -> int = <fun>
    INT>#fact (5);;
    INT>- : int = 120
    INT>#square (120);;
    INT>- : int = 14400
    
    INT>


    INT>И далее здесь


    Потому и во франции и на нём учат программить
    Только всё равно больше будет специфики ФП если его рассматривать, но рынок всё-таки под императивщиками лежит
    Re[14]: Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 26.10.04 11:30
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

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


    K>>И то и другое плохо.

    K>>Вот питон здесь рулит однозначно:
    S>Ну, лично меня ты практически убедил
    S>В качестве учебного языка мне он уже нравится. Я так понял, что единственное, что ему вменяется как помеха промышленному применению — так это производительность. Зато есть шанс показать все (или почти все) концепции современного программирования в одном флаконе. Это очень круто.
    При обучении производительность абсолютно некритична. Это будем на С++ осваивать.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[3]: Обновление
    От: Kh_Oleg  
    Дата: 26.10.04 12:33
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Сегодня сайт проекта Информатика 21 был серьезно обновлен. Заходите смотрите.

    СГ>Основная новость: к концу 2004 года ожидается открытие исходного кода BlackBox.

    А мне очень понравилась вот эта статья:
    О дисциплине программирования
    Re[16]: Oberon???????????????????????????????????
    От: INTP_mihoshi Россия  
    Дата: 26.10.04 12:37
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Потому и во франции и на нём учат программить

    К>Только всё равно больше будет специфики ФП если его рассматривать, но рынок всё-таки под императивщиками лежит

    Нудным голосом. В четвертый раз на этом форуме. "Ocaml поддерживает итеравтивное программирование".


    let x = ref 1 in
    for i = 1 to 10 do
    x := !x * i
    done;
    print_int x


    И еще в нем есть типизация. Имху это важнее, чем классы
    Re[15]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 13:49
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Ага, почитайте вот это


    LVV>


    Если не секрет, то скажите пожалуйста, что именно Вас рассмешило?
    Re[16]: Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 26.10.04 14:00
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, LaptevVV, Вы писали:


    LVV>>Ага, почитайте вот это


    LVV>>


    СГ>Если не секрет, то скажите пожалуйста, что именно Вас рассмешило?

    Ну, тут война, как у Макаревича в "Поезде"
    А смысл-то один — жизнь. Только точка зрения разная.
    Так и тут — ноги растут из одного места! А потом, четко было сказано, что Билл- непрофессионал — самоучка, поэтому подвигнуть его обратить внимание на надежность могут только происки конкурентов!
    Ей-Богу, мне смешно!
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[15]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 26.10.04 14:25
    Оценка:
    Здравствуйте, cat-man-do, Вы писали:


    CMD>В Oberon-е мне нравится _однозначность_ его конструкций. Например, то что в C# можно написать System.Console.WriteLine и Console.WriteLine _я_ уже считаю недостатком языка. Если я в программе на Oberon вижу цепочку identifier1.identifier2.identifier3, то всегда знаю что identifier1 объявлен в текущем модуле и могу быстро посмотреть что он означает.

    Не факт, что это достоинство. Фактически, это означает необходимость везде использовать Fully Qualified Names. В среде с развитыми библиотеками это привело бы к идентификаторам кошмарной длины. Как вам имя класса System.Data.SqlClient.SqlConnection?
    CMD> Если мне встречается Console.WriteLine в программе на C# я не смогу сразу понять что такое Console и откуда оно взялось, я в курсе, что современные IDE легко позволяют мне это определить, но это решение одного из проявлений проблемы, а не ее самой.
    Ну, если так не хочется использовать короткие имена — выкинь все using. Прелесть в том, что всегда есть выбор
    CMD>В Delphi похожие недоработки языка приводили к необходимости, в сложных библиотеках, идентификаторов состоящих из 8-10 слов.
    Нет. В Delphi недоработка состояла в одноуровневости имен пакетов, что приводило к вынужденным конфликтам имен. И то, на самом деле всегда можно было использовать Qualified Name безо всяких десятисловных идентификаторах.
    CMD>В Oberon невозможно обратится к полям/методам результата функции, его можно только присвоить переменной или передать в другую функцию/процедуру, после Delphi это очень раздражало, но то, что вызов метода выглядит как вызов метода (последовательности действий, возможно изменяющих переменные/поля) и отличается от обращения к полям _я_ засчитываю как достоинство языка.
    Хм. Это на Delphi вызов метода выглядит как обращение к полю или свойству. На C# вызов метода отличается весьма характерными скобочками.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[9]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 26.10.04 14:43
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>То есть сначала надо будет объяснить что такое namespace,


    Необязательно

    СГ> class, static void Main,

    СГ>ее аргумент string[] args,

    необязательно

    СГ> вот этого кракозябла [STAThread] — объяснить.


    Совсем не нужно

    СГ>Не хило?


    ВВ преподает не в школе, а в институте.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    AVK Blog
    Re[12]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 26.10.04 14:43
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>И чем же этот хрен слаще вот такой редьки:

    S>
    S>using System;
    S>class Class1
    S>{
    S>    static void Main()
    S>    {
    S>        Console.WriteLine("Hello World");
    S>    }
    S>}
    S>

    S>?

    using можно тоже убрать.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    AVK Blog
    Re[8]: Oberon???????????????????????????????????
    От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
    Дата: 26.10.04 14:57
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    S>> Твое отношение к скобкам известно. Мне лично не нравятся приоритеты особенно в длинных выражениях.


    VD>Приоритеты тут в общем-то не причем. Хотя они тоже вещь полезная.


    VD>>>выглядят одинаково? А смысл совершенно разный. Смысл пасклая бует таким:

    VD>>>
    VD>>>if ((a == (b & b)) < c)
    VD>>>    ...
    VD>>>


    S>> Это бред для любого языка. Сравнивать булевы величины с числовыми.


    VD> Знаток, блин... Надыбай компилятор С++ определи переменные с типом int и поробуй скомпилировать. Уверяю тебя, что все скомпилируется без проблем.


    Конечно скомпилируется. Если в С++ такое проходит для float

      float a=1/(1<< 23);
      if (a) {.....}


    Народ активно использует на неравенство 0 любые типы.
    А в твоем примере сравнивать булевы с небулевыми для защитника типобезопасности считаю БРЕДОМ.
    VD>В общем, ты меня извини. Но нехочу я с тобой осбуждать вопросы безопасного программирования. Ты его в принципе не признаешь.
    Я признаю любое, оптимально подходящее для решения конкретной задачи. Для примера 1С нетипизированный язык, без битовой арифметики итд. Однако на ней можно делать огромную кучу полезных вещей.
    А если добавить сюда и перегрузку то сдвиг в лево << может обозначать,что угодно
    О каком безопасном программировании может идти речь.
    S>> Все при том же. Ты не сможешь приенить битовые операторы к булевым и булевы к небулевым.

    VD>Да нет никаких булевых операций в дельфи. Там только битовые. О том и речь. Это жудчайшая кривь. От этого, как оказалось, отакзался даже Вирт в Обероне.


    Ну ну. Достань компилятор Delphi и сравни булевый тип с небулевым
    Сразу вылетит ошибка компиляции. А на ассемблерном уровне полностью с тобой согласен.
    VD>>>C# не для тебя. Он для тех кому дороги слова типобезопасность и для тех кто не будет уродовать код ради лишней милисикунды.
    S>> А ты помнишь песню "Есть только миг между прошлым и будущим, именно он называется жизнь".
    S>> Все в этом мире относительно.

    VD>


    S>> Ну Паскаль всегда был типобезопасным в отличие от некоторых языков, Иногда правда и во вред.


    VD>Паскаль то может и был. А вот Дельфи никгда. Там типобезопасность очень быстро порезализ для производственных нужд. Оно и понятно. Жизнь есть жинь. Но разум то нужно иметь...


    S>> Но любые ограничения легко обходятся.


    VD>А, ну, вот пусть фанаты и обходят. А детей учить на этом убожище не стоит.

    Ага С++ это верх совершенства . Да и разговор здесь шел не о Delphi.

    S>> Ага в Яве и C# болше влияния Delphi (Паскаля) нежели C++.


    VD>Ага. Ну, просто одно влияние дельфи... если другого не видил. Дельфи вышло в 95-ом. К этому моменту Ява уже разрабатвалась несколько лет.


    S>> (Всетаки Delphi был раньше Явы)


    VD>Ага. Примерно на пол года. Вот как они успели то все передрать.


    VD>И главное, как грамотно подрали то! Ни одной проблемы у дельфи не переняли.

    Извини но Ява очень упрощенный язык.
    и солнце б утром не вставало, когда бы не было меня
    Re[14]: Oberon???????????????????????????????????
    От: WWL  
    Дата: 26.10.04 16:52
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Итак, пока что у нас Оберон — C# идут один-в-один, за исключением void. Во всем остальном паритет.


    НИ КАКОГО ПАРИТЕТА!!!
    То, что написал Серней, это всё ЯВНОЕ знание о том, как пишутся программы на КП. Неявностей и недоговорённостей нет. То, что ему преполагалось в ответ — ОЧЕНЬ упрощённая версия, того, что МОЖНО написать. В связи с тем, что есть ещё и "сокровенные знания", присутствует риск "нарваться" на оные, без понимания и представления, "а чё происходит-то?..."
    Всё на свете — суета сует...
    Re[15]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 26.10.04 17:15
    Оценка:
    Здравствуйте, WWL, Вы писали:

    WWL>НИ КАКОГО ПАРИТЕТА!!!

    WWL>То, что написал Серней, это всё ЯВНОЕ знание о том, как пишутся программы на КП. Неявностей и недоговорённостей нет. То, что ему преполагалось в ответ — ОЧЕНЬ упрощённая версия, того, что МОЖНО написать. В связи с тем, что есть ещё и "сокровенные знания", присутствует риск "нарваться" на оные, без понимания и представления, "а чё происходит-то?..."
    Ты не мог бы мне теперь все это объяснить так, чтобы я понял? Какая еще упрощенная версия? Он написал рабочую программу на Обероне. Я — на шарпе. Или тебя смущает то, что в Шарпе можно еще много чего написать? Ну так и КП словом END не заканчивается.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[9]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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

    ЗЫ

    Блин, дайте мне несколько детей и через неделю они будут писать на шарпе программки.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[10]: P.S.
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>P.S. Предыдущее сообщение про C#, на счет Питона прошу его не относить, я в Питоне не компетентен.


    В Питоне классы не обязательны. Более того они там уступают Шарпу.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[13]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, Kluev, Вы писали:

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

    Но еще раз повторяюсь. Снипет-кмпилятор решит эту проблему на первых порах.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

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


    Ему много чего вминяется. Он не типизированный. Не требует объявления переменных перед использованием. Имеет необычную и странную реализацию ООП.

    S>Зато есть шанс показать все (или почти все) концепции современного программирования в одном флаконе. Это очень круто.


    Это да. Хотя не все. ЛП он не затрагивает.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, INTP_mihoshi, Вы писали:

    INT>Ну, в Caml все практически так же... И без извратов с identами


    Уж Окамл точно не стоит в качестве первого языка брать.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[13]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Оберон:


    СГ>1) Существуют модули

    СГ>2) Один модуль может импортировать другой модуль
    СГ>3) В модулях есть подпрограммы, которые можно вызывать из других модулей

    Нет в этом примере подпрограмм.

    СГ>C#:


    СГ>1) Существуют пространства имен (уже непонятность — а что, собственно, еще за пространство да еще и имен? Где они расположены? А как они выглядят эти пространства?)


    Это не нужно на первом уроке. Хотя людям будер проще понять пространства имен енжели какие-то модули.

    СГ>2) Существуют классы (еще одна непонятность — что еще за классы? Классы чего? Мы в седьмом классе учимся и что с того?)


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

    СГ>3) У классов есть статические методы (опять ребенку непонятно что такое статические и что такое методы, в чем разница между подпрограммами и методами?). Что такое void? Почему именно Main?


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

    СГ>4) Как понять что Console как-то связана с приведенной выше using System;


    А не нужно его приводить на первом уроке. Можно так:

    class Class1
    {
        static void Main()
        {
            System.Console.WriteLine("Hello World");
        }
    }





    В общем лучше я попробую представить как бы я начал обучение "с нуля".

    1. Демонстрируем вычисление:
    123 + (321 - 454) / 23

    даем орлам снипет-компилятор и предлагаем по воодить математические выражения. Объясням, что такое операторы, приоритеты и т.п.

    2. Вводим понятие утверждение (statment).
    Вводим понятие переменная и тип данных. Демонстрируем код типа:
    int x = 321 - 454;
    123 + x / 23;


    Кстати, если уж говорить об минимизации объясняемых понятий, то Питон действительно рулит, так как в нем нет нужны на начальном этапе объяснять очень многие понятия. Они и не типизированный, так что не нужно будет теорию типов толкать. Да что там?! Он даже наличия функции (процедуры) не требует, не то что модуля. Так что тут Оберон в пролете. Но не думаю, что минимизация тут сильно нужна. Продолжим...


    3. Вводим понятие функции и процедуры.
    Демонсрируем примеры:
    int Calculate()
    {
        return 321 - 454;
    }
    
    static void Main()
    {
        int x = Calculate();
        123 + x / 23;
        Console.WriteLine(123);
    }


    тут же говорим про вызов и возвращаемое значение. Объясняем, что Console.WriteLine — это процедура определенная во вне.

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

    Вот тут в качестве примера тот самый:
    using System;
    
    class Class1
    {
        static void Main()
        {
            Console.WriteLine("Hello World");
        }
    }


    5. Объясняем понятие класса более подробно.
    Вводим понятие экземпляра класса. Расширяем понятие — тип.

    using System;
    
    class Ученик
    {
        public string _имя;
        public string _фамилия;
        public string _отчество;
        public string _возраст;
    
        public string Описание()
        {
            return "Имя: " + _имя 
                + " Фамилия: " + _фамилия
                + " Отчество: " + _отчество
                + " Возраст: " + _возраст;
        }
        
        static void Main()
        {
            Ученик ученик = new Ученик();
            ученик._имя      = "Петр";
            ученик._фамилия  = "Иванов";
            ученик._отчество = "Васильевичь";
            ученик._возраст  = 15;
                
            Console.WriteLine(ученик.Описание());
        }
    }


    Ну, и далее наворачиваем по нарастающей. В водим операторы, и т.п.

    Причем именно вводим ООП до структурного программирования, так как оно тогла лучше уляжется в колове.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>

    главный язык программирования — т.наз. C# — смоделирован во многом, в том числе и в отношении безопасности программирования, по образцу Оберона.

    LVV>

    Да тут ничего смешного то нет. И слова эти чистая правда. Шарп и Оберон действительно языки в которых типобезопасноать выведена на первое место. Разница межу ними только в том, что Шарп жив, а Оберон остался научным эксперементом. Как результат этого научного эксперемента тот же Шарп получил прекрасную систему типов и принцыпы работы с ними. Заслуга ребят из МС в том, что они сумели совместить удобство и типобезопасность.

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

    Так что нужно сопоставить цели и средства. Если нужно быстро стартануть, то есть два пути:
    1. Снипет-компиляторы.
    2. Интерпретатор (Питон в данном случае).

    Далее чему мы учим?
    1. Правильному безопасному программированию? Тогда Питон идет лесом как неудоволетворющий условию.
    2. Пытаемся объяснить сразу несколько парадигм? Тогда питон самое оно.
    3. ООП? Тогда идел лесом Оберон, да и Питон рассматривается с сомнением.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>На модуль, в отличие от пространства имен, можно пальцем показать, вот это модуль, вот как он выглядит и вот он где конкретно находится.


    Как раз концепцию модуля будет понять куда сложее чем пространства имен и даже класса. Модуль понятие полуфизическое, полулогическое.

    СГ>Опять на это можно прямо пальцем показать, вот так, мол, смотрите, один модуль пользуется услугами другого модуля...


    Что значит пользуется услугами? Включает один другой? Или что-то магическое происходит? Не расскзывать же про процесс создания объектников и х связывании и т.п.?

    СГ>То-то и оно!


    СГ>Метод — это подпрограмма (процедура) ассоциированная с контекстом исполнения — объектом, т.е. ввести понятие метода сложнее чем ввести понятие подпрограммы (процедуры).


    В общем, если подходить с позиции "нужно меньше да побыстрее", то Оберон в полноейшем пролете по сравнению с Питоном. В питоне можно смело начинать обяснение хоть с оператора сложения. Ничто этому не помешает.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[16]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, Kluev, Вы писали:

    K>Зачем так жарко спорить когда питон уже всех "порвал" своей простотой


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

    А для быстрого старта он действительно оптимален.

    Что же касается простоты, то тут по разному можно смотреть. Например, с точки зрения граматики у Оберона конкурентов нет. Его граматика занимает пару страниц текста.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[7]: Vlad2
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    Смешно. Позорься дальше. Поклепы на РСДН — это очень разумное занятие.

    ЗЫ

    Как таких выдержанных и умных людей к детям допускают?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[7]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, INTP_mihoshi, Вы писали:

    VD>>Объясните мне чем вам не угодил C#?


    INT>Мне в нем не нравится (с точки зрения обучения) только одно — то, что он навязывает ООП.


    Насколько я понимаю речь идет об обучении императивному программированию. А ООП — это лучше до чего оно дошло в процессе эволюции. Я конечно понимаю твою приверженность ФЯ, но сейчас ведь не о нем речь.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[8]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    INT>>Мне в нем не нравится (с точки зрения обучения) только одно — то, что он навязывает ООП.

    S>Гм. А вы уверены, что хотите остановиться на процедурном программировании?

    Синклер, это свой человек. Его не надо на "вы" обзывать. Шутка.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[9]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, INTP_mihoshi, Вы писали:

    INT>Я не уверен, что хочу начинать с объектного. И тем более не уверен, что я хочу останавливаться на объектах в том виде, в котором их представляет C#.


    Ну, сам понимашь, что на Окамле точно никто начинать учить не будет.

    И кстати, что тебе не нравится в Шарпе с точки зрения ООП?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[4]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Есть мысль совместить в учебном плане обучение по программе Aptech — международный диплом. А у них двухлентняя программа для двух вариантов: додиез и Ява. Я склоняюсь к додиезу.


    Ну, то что я "за" ты и сам знаешь. А вообще, Шарп это деведенная до ума Ява. Я вот до сих пор не пойму почему в Яву не ввели модификаторы параметров out и ref. Ну, глупо же использовать массив только для того чтобы иметь возможность передать значение по ссылке? Хотя в новой вресии (1.5) они много учли. Но все равно из-за совместимости и стремления быть непохожим на Шарп малось кривовато выходит.

    ЗЫ

    В общем, если что готов помочь в создании тулзов для урощения обучения или советом.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[3]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Сегодня сайт проекта Информатика 21 был серьезно обновлен. Заходите смотрите.


    А что у вас со стилем? Неужели нет людей со вкусом? Ну, такой ужасный попугай. Просто в глазах рябит.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[9]: Мэйнстрим vs. Самосовершенствование :)))
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 26.10.04 17:40
    Оценка:
    Здравствуйте, VladD2, Вы писали:
    VD>Синклер, это свой человек. Его не надо на "вы" обзывать. Шутка.
    Это я в смысле обращаюсь к коллективу молчаливых товарищей, от имени которых он говорит. Нутром чую — он не только свое мнение выражает
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[11]: Мэйнстрим vs. Самосовершенствование :)))
    От: Kupaev Россия www.rsdn.ru
    Дата: 26.10.04 17:56
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>Кстати, если серьезно. Есть идея написать "сравнительную" статейку по куче языков. Причем сравнительную не в смысле "язык А лучше тем что ..., а язык Б вообще говно", а, скажем так, расширяющую сознание. Идея — ответить на вопрос "я уже знаю то, это и еще вот это вот, на что еще можно посмотреть?"

    ЗХ>Каково? Я бы взялся... если бы ее в бумажный журнал... "Очень я это богатство люблю и уважаю" (с) Падал прошлогодний снег

    Дык мы ж полезных перспектив никогда не супротив. Давай статью, да побольше (это к вопросу о жадности) — и будет нам всем щастье.

    ЗЫ А то некоторых только в "терре" да на форумах и читаешь.
    Re[16]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 18:33
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

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


    WWL>>НИ КАКОГО ПАРИТЕТА!!!

    WWL>>То, что написал Серней, это всё ЯВНОЕ знание о том, как пишутся программы на КП. Неявностей и недоговорённостей нет. То, что ему преполагалось в ответ — ОЧЕНЬ упрощённая версия, того, что МОЖНО написать. В связи с тем, что есть ещё и "сокровенные знания", присутствует риск "нарваться" на оные, без понимания и представления, "а чё происходит-то?..."
    S>Ты не мог бы мне теперь все это объяснить так, чтобы я понял? Какая еще упрощенная версия? Он написал рабочую программу на Обероне. Я — на шарпе. Или тебя смущает то, что в Шарпе можно еще много чего написать? Ну так и КП словом END не заканчивается.

    Что непонятного-то, выбросил пространтсво имен — вот упрощенная версия, захотел написал System.Console, а захотел не написал. Захотел написал тег [чего-то], а захотел не написал — все это является "сокровенным", неявным, недоговоренным. А в Обероне программа что для школьника будет такой как я ее написал, что точно так же для профессионала — никаких изменений и корректировок.
    Re[14]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 18:42
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Нет в этом примере подпрограмм.


    Показываю пальцем: StdLog.String("ля-ля"); — это вызов подпрограммы String из модуля StdLog с параметром "ля-ля".

    СГ>>1) Существуют пространства имен (уже непонятность — а что, собственно, еще за пространство да еще и имен? Где они расположены? А как они выглядят эти пространства?)


    VD>Это не нужно на первом уроке. Хотя людям будер проще понять пространства имен енжели какие-то модули.


    На модуль можно показать пальцем и сказать: "Вот это модуль". А на пространство имен нельзя.
    Re[12]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 18:43
    Оценка:
    Здравствуйте, VladD2, Вы писали:


    VD>Кстати, получается, что разница только в том, что объяснять прийдется про модуль вместо класса. Да уж это татальная разница.


    Между модулями и классами-то?
    Re[10]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 18:46
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


    VD>Еще раз повторяю, что сложности на первом уроке можно скрыть. Пространства имен вообще можно не затрагивать, остально решается с помощью снипет-компилятора. Ну, а дальше не долго и про классы рассказать в общих чертах. Нагрузка будет не сильная, за то потом будет чето показывать и о чем расскзаывать.


    А в оберонах ее скрывать не надо — ее там нет. Нет "сокровенных", "замалчиваемых", "скрытых", "недоступных для широких слоев" тайной информации.
    Re[11]: Мэйнстрим vs. Самосовершенствование :)))
    От: prVovik Россия  
    Дата: 26.10.04 19:15
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ> Окамл vs. Шарп еще не было!

    Дык это ж подтип супертипа "Шарп vs. Все остальное"
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[2]: Oberon???????????????????????????????????
    От: prVovik Россия  
    Дата: 26.10.04 19:19
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

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


    ЗХ>Кстати, один неглупый человек уверяет, что надо на С начинать детей учить... Чтоб жизнь малиной.

    ЗХ>http://russian.joelonsoftware.com/Articles/BacktoBasics.html

    ЗХ>Он, кстати, довольно убедителен

    Да, честно говоря, не могу сказать, что уж очень он убедителен....
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[17]: Oberon???????????????????????????????????
    От: Зверёк Харьковский  
    Дата: 26.10.04 19:40
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    ...что и является его главным, основополагающим недостатком.
    FAQ — це мiй ай-кью!
    Re[3]: Oberon???????????????????????????????????
    От: Зверёк Харьковский  
    Дата: 26.10.04 19:47
    Оценка:
    Здравствуйте, prVovik, Вы писали:

    V>Здравствуйте, Зверёк Харьковский, Вы писали:


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


    ЗХ>>Кстати, один неглупый человек уверяет, что надо на С начинать детей учить... Чтоб жизнь малиной.

    ЗХ>>http://russian.joelonsoftware.com/Articles/BacktoBasics.html

    ЗХ>>Он, кстати, довольно убедителен

    V>Да, честно говоря, не могу сказать, что уж очень он убедителен....
    Да это ж дело такое, ты понимаешь... смотря кого убеждать
    FAQ — це мiй ай-кью!
    Re[5]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 20:42
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Так ведь, опять же, у Вас-то не спросили. Вот кабы спросили, то не рябило бы, а так вот что есть...


    Заметь. Я не зларадствую, не чмырю. А просто говорю, что выглядит это очень некрасиво и разрдражающе. Нет что бы сказать "Спасибо, подумаем...".

    Ну, да охота выглядеть клоунами воля ваша.


    Кстати, интересно а эта программа "ИНФОРМАТИКА-21" кем была запущена? И кто ее развивает? Ну, не часная же это инициатива? А то на сайте ничего тайти не удается. Так же интересно как это все связано с министерством образования?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[16]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 20:42
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Не путаем "не типизированный" и "динамически типизированный" — суть разные вещи


    Естественно. А что бывает вообще не типизированные? По-моему, понятно и так что речь идет о статической типизации. А то и ВБСкрипт тоже будет типизированным.

    В общем, как это не называй. А слабая типизация плоха. Автоматичкские приведения куча умолчаний... Все это до добра не доводит. Да и изучать нужно все эти соглашения.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 20:42
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Показываю пальцем: StdLog.String("ля-ля"); — это вызов подпрограммы String из модуля StdLog с параметром "ля-ля".


    Вызов и подпрограмма вещи разные.

    СГ>На модуль можно показать пальцем и сказать: "Вот это модуль". А на пространство имен нельзя.


    Это что ящик? Нет? Ну, тогда будет тяжеловато показать пальцем. А вот на пространство имен легко. Оно же выражается синтаксической конструкцией.

    ЗЫ

    Еще раз повторю, что если основная цель уменьшить количество лишнего при старте, то ни Шарпу, ни Оберону с Питоном не тягаться. В Притоне даже методы и те не нужны.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[13]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 20:42
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Между модулями и классами-то?


    Да. Для начального понимания разницы почти не какой. Та же область определения методов и переменных.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[11]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 20:42
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А в оберонах ее скрывать не надо — ее там нет. Нет "сокровенных", "замалчиваемых", "скрытых", "недоступных для широких слоев" тайной информации.


    Надо. Никому не нужной мешуры достаточно. Или уж тогда не стоит придератья к Шарпу. Количество синтаксического шума примерно такое же.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[11]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 20:42
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ> Окамл vs. Шарп еще не было!


    Гдеж ты был?

    ЗХ>Кстати, если серьезно. Есть идея написать "сравнительную" статейку по куче языков. Причем сравнительную не в смысле "язык А лучше тем что ..., а язык Б вообще говно", а, скажем так, расширяющую сознание. Идея — ответить на вопрос "я уже знаю то, это и еще вот это вот, на что еще можно посмотреть?"


    Для начал нужно познакомить массы с мало извесными им парадигмами. А то ведь как можно сравнивать, если даже на сам принцип смотришь как баран на новые ворота. Вот тут Предлагаю запутить статью &mdash; "введение в функциональный стиль
    Автор: VladD2
    Дата: 25.10.04
    я предлагаю всем миром создать статейку цель которой знакомство людей с функциональной парадигмой. Думаю, что как побочный эффект может получиться и знакомство с разными языками. На примерах всегда учиться было удобно. Так что присоеденяся.

    ЗХ>Каково? Я бы взялся... если бы ее в бумажный журнал... "Очень я это богатство люблю и уважаю" (с) Падал прошлогодний снег


    Как бы не вышел просто флэйм. Ну, и см. выше.

    ЗХ>[офтоп]

    ЗХ>во время первоапрельской звуковой шутки мой профайл озвучивался фразой "А хотя бы я и жадничаю! Зато — от чистого сердца!"
    ЗХ>Вот и докажите теперь, что это рандомом было сделано
    ЗХ>[/офтоп]

    У меня профайл звучал совершенно будничто "Гигант мысли! Отец русской демократии...!". Я по началу думал прикололись лично надо мной. Потом только узнал, что всем досталось и выбор конкретного вава был полной случайностью.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Oberon???????????????????????????????????
    От: Павел Кузнецов  
    Дата: 26.10.04 21:35
    Оценка:
    VladD2:

    > ПК>Не путаем "не типизированный" и "динамически типизированный" — суть разные вещи


    > Естественно. А что бывает вообще не типизированные?


    Да, конечно, бывают. Ассемблеры, Форт и т.п.

    > В общем, как это не называй. А слабая типизация плоха.


    В Питоне типизация не слабая. Слабая типизация, скажем, в C. А в Питоне ошибки приведений типов все диагностируются.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[12]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 26.10.04 22:14
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    ЗХ>>Кстати, если серьезно. Есть идея написать "сравнительную" статейку по куче языков. Причем сравнительную не в смысле "язык А лучше тем что ..., а язык Б вообще говно", а, скажем так, расширяющую сознание. Идея — ответить на вопрос "я уже знаю то, это и еще вот это вот, на что еще можно посмотреть?"


    VD>Для начал нужно познакомить массы с мало извесными им парадигмами. А то ведь как можно сравнивать, если даже на сам принцип смотришь как баран на новые ворота. Вот тут Предлагаю запутить статью &mdash; "введение в функциональный стиль
    Автор: VladD2
    Дата: 25.10.04
    я предлагаю всем миром создать статейку цель которой знакомство людей с функциональной парадигмой. Думаю, что как побочный эффект может получиться и знакомство с разными языками. На примерах всегда учиться было удобно. Так что присоеденяся.

    То само собой. Я, что характерно, вроде присоединился
    Но про статью эту я думаю давно. И в первой части хотел рассмотреть только языки императивной парадигмы — но такие, что отличаются от C++/Java/C#, Pascal/Delphi/Modula/Oberon и VB — с этими, вроде как, большинство из нас сталкивалось.

    ЗХ>>Каково? Я бы взялся... если бы ее в бумажный журнал... "Очень я это богатство люблю и уважаю" (с) Падал прошлогодний снег

    VD>Как бы не вышел просто флэйм. Ну, и см. выше.
    Так я специально уточнил, что не собираюсь сравнивать. Просто (лично мне, как минимум) интересно копаться в незнакомых языках, в попытках понять: что это? почему он такой? чем он хорош? какие он дает новые возможности/ограничения?
    Вот на эти вопросы я и хотел (очень вкратце) ответить в статье.



    Языки примерно такие думал брать:
    Ada
    Eiffel
    Forth
    Oz
    Smalltalk
    (что еще подкинете, может быть?)
    +
    скриптовые, в которых есть интересеные (для меня) подходы:
    Perl
    Python
    Tcl
    +
    есть такое желание, но пока не копал — всякое старье, с которым я, за малостью лет, не сталкивался:
    PL/I
    Fortran
    Simula

    вот где-то так.



    Предложения, ясен корень, приветствуются. Крики "нахрен это надо?" и "да пошел ты, умник!" — игнорируются.

    2Модераторz: не знаю, чи в отдельную ветку это выкинуть?
    FAQ — це мiй ай-кью!
    Re[18]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 23:11
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Ничего не понимаю. То есть в Обероне нет никаких концепций, кроме несчастных четырех ключевых слов и термина "подпрограмма"?


    Кстати, да. С концепциями в Обероне труба. Примитивизм полнейший. Ты на его граматику глянь. Вот вориант Оберона-2: http://statlab.uni-heidelberg.de/projects/oberon/kurs/www/Oberon2.EBNF.html Ради хомхмы можно сравнить с граматикой Шарпа. ООП просто отпад.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[13]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 23:22
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>То само собой. Я, что характерно, вроде присоединился

    ЗХ>Но про статью эту я думаю давно. И в первой части хотел рассмотреть только языки императивной парадигмы — но такие, что отличаются от C++/Java/C#, Pascal/Delphi/Modula/Oberon и VB — с этими, вроде как, большинство из нас сталкивалось.

    Что я тебе могу сказать? С одной стороны статьи всегда нужны. Но тема эта очень щекатливая. Тут очень не просто остаться нерпедвзятым. А если не стараться быть таковым, то получится не научный обзор, а личное имхо. Причем это имхо будет задевать очень многих за ... мм.. ну, скажем за живае. В итоге получится вселенский флэйм, а мы (рсдн) как бы его поджигатели и идейные вдохновители.

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

    ЗХ>Так я специально уточнил, что не собираюсь сравнивать. Просто (лично мне, как минимум) интересно копаться в незнакомых языках, в попытках понять: что это? почему он такой? чем он хорош? какие он дает новые возможности/ограничения?

    ЗХ>Вот на эти вопросы я и хотел (очень вкратце) ответить в статье.

    Ну, попробуй.

    ЗХ>

    ЗХ>Языки примерно такие думал брать:
    ЗХ>Ada
    ЗХ>Eiffel
    ЗХ>Forth
    ЗХ>Oz
    ЗХ>Smalltalk
    ЗХ>(что еще подкинете, может быть?)
    ЗХ>+
    ЗХ>скриптовые, в которых есть интересеные (для меня) подходы:
    ЗХ>Perl
    ЗХ>Python
    ЗХ>Tcl
    ЗХ>+
    ЗХ>есть такое желание, но пока не копал — всякое старье, с которым я, за малостью лет, не сталкивался:
    ЗХ>PL/I
    ЗХ>Fortran
    ЗХ>Simula

    ЗХ>вот где-то так.

    ЗХ>


    Откровенно говря мноие из перечисленных являются безсполезными ископаемыми. Так что это скорее будет экскурс в историю. Хотя это тоже может оказаться интересным. А почему в списке нет живых представителей ИЯ вроде Дельфи, С++, Шарпа, Явы?

    ЗХ>Крики "нахрен это надо?" и "да пошел ты, умник!" — игнорируются.


    Ну, если уж ты решил, то что спашиваеш?

    ЗХ>2Модераторz: не знаю, чи в отдельную ветку это выкинуть?


    Дык ты лучше создай отдельную ветку и опиши в ней по подробнее свой план.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 26.10.04 23:41
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>...Тут очень не просто остаться нерпедвзятым...

    Да ведь я-то берусь за это изначально не затем, чтобы показать, насколько другие языки хуже... скажем... С++
    А вовсе наоборот — в каждом языке попытаться найти какую-нибудь фишку, изюминку, особый кайф.
    Вряд ли я этим кого-то обижу (кроме тех, кто скажет: "фигня-вопрос, это и на Шарпе можно сделать" )

    А, кстати. Вспомнил цитату из какого-то справочника по различным языкам (цитирую по памяти):

    ...С++...
    ...и что бы там не говорил Страуструп, даже профессиональные С++ники не могут понять смысла и назначения многих ключевых слов. Например (внимание на экран):
    volatile, register, mutable, template, typedef, static, namespace ...

    я валялся.

    VD>Так что пробуй конечно. Но помни о том, что нужно быть максимально толерантным.

    Угу.

    VD>Так же нужно очень внимательно прислушиваться к мнению критиков.

    Да ни в жисть!

    ЗХ>>Языки примерно такие думал брать:

    ЗХ>>Ada
    ЗХ>>Eiffel
    ЗХ>>Forth
    ЗХ>>Oz
    ЗХ>>Smalltalk
    ЗХ>>(что еще подкинете, может быть?)
    ЗХ>>+
    ЗХ>>скриптовые, в которых есть интересеные (для меня) подходы:
    ЗХ>>Perl
    ЗХ>>Python
    ЗХ>>Tcl
    ЗХ>>+
    ЗХ>>есть такое желание, но пока не копал — всякое старье, с которым я, за малостью лет, не сталкивался:
    ЗХ>>PL/I
    ЗХ>>Fortran
    ЗХ>>Simula

    VD>Откровенно говря мноие из перечисленных являются безсполезными ископаемыми. Так что это скорее будет экскурс в историю. Хотя это тоже может оказаться интересным.

    Ну, кроме тех, про которые я это отдельно оговорил, к таковым (ископаемым) можно разве только Форт причислить.
    Другое дело, что Оз, СмолТок и Tcl, скажем — это языки довольно "птичьи", но тем и интересны.

    VD>А почему в списке нет живых представителей ИЯ вроде Дельфи, С++, Шарпа, Явы?

    По нескольким причинам:
    — большинство таргет-аудитории их и так знает,
    — я ничего не собираюсь сравнивать
    — я их все (кроме Шарпа) весьма близко знаю, что мешает незамутненности сознания. То есть хочется написать "каков язык на первый взгляд". Ты, скажем, можешь перечислить, что в первую очередь бросается в глаза в Шарпе? Думаю, уже нет: слишком хорошо его знаешь.
    FAQ — це мiй ай-кью!
    Re[15]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 27.10.04 00:05
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>Вряд ли я этим кого-то обижу (кроме тех, кто скажет: "фигня-вопрос, это и на Шарпе можно сделать" )


    Ну, флаг тебе в руки.

    ЗХ>

    ЗХ>...С++...
    ЗХ>...и что бы там не говорил Страуструп, даже профессиональные С++ники не могут понять смысла и назначения многих ключевых слов. Например (внимание на экран):
    ЗХ>volatile, register, mutable, template, typedef, static, namespace ...

    ЗХ>я валялся.

    Дык проффесионал — это тот что за деньги работает. Боюсь, то таких не так-то трудно найти.

    VD>>Так же нужно очень внимательно прислушиваться к мнению критиков.

    ЗХ>Да ни в жисть!

    Надюсь это шутка.

    ЗХ>Ну, кроме тех, про которые я это отдельно оговорил, к таковым (ископаемым) можно разве только Форт причислить.

    ЗХ>Другое дело, что Оз, СмолТок и Tcl, скажем — это языки довольно "птичьи", но тем и интересны.

    Ada, PL/I по мне так назвать живими тяжело даже с натяжкой.

    А вот что бы я добавил бы так это Руби.


    VD>>А почему в списке нет живых представителей ИЯ вроде Дельфи, С++, Шарпа, Явы?

    ЗХ>По нескольким причинам:
    ЗХ>- большинство таргет-аудитории их и так знает,
    ЗХ>- я ничего не собираюсь сравнивать
    ЗХ>- я их все (кроме Шарпа) весьма близко знаю, что мешает незамутненности сознания. То есть хочется написать "каков язык на первый взгляд". Ты, скажем, можешь перечислить, что в первую очередь бросается в глаза в Шарпе? Думаю, уже нет: слишком хорошо его знаешь.

    Ну, почему же. Я как раз прекрасно помню, что мне бросалось в глаза во всех языках проме С. На С я писать учился. Так что мне там кроме учебника ничего не бросилось.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[19]: Oberon???????????????????????????????????
    От: Павел Кузнецов  
    Дата: 27.10.04 00:06
    Оценка:
    VladD2:

    > ПК> В Питоне типизация не слабая. Слабая типизация, скажем, в C. А в Питоне ошибки приведений типов все диагностируются.


    > Фиг. Там допустимы приведения между булевыми, целыми, списками и т.п.


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

    > Ну, и опять же вся диагностика в рантайме.


    Дык, на то и динамическая типизация.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[16]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 27.10.04 00:28
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    ЗХ>>Ну, кроме тех, про которые я это отдельно оговорил, к таковым (ископаемым) можно разве только Форт причислить.

    ЗХ>>Другое дело, что Оз, СмолТок и Tcl, скажем — это языки довольно "птичьи", но тем и интересны.

    VD>Ada, PL/I по мне так назвать живими тяжело даже с натяжкой.

    PL/I я сходу занес в число "ископаемых". А Ада, как я понимаю — вполне жива. Те, и для чего, ее создавали, те то на ней до сих пор пишут. И горя не знают.

    VD>А вот что бы я добавил бы так это Руби.

    ОК. Гляну. Но ничего не обещаю.
    Потому что PHP я, например, сознательно не добавил за общей заурядностью.

    VD>>>А почему в списке нет живых представителей ИЯ вроде Дельфи, С++, Шарпа, Явы?

    ЗХ>>По нескольким причинам:
    ЗХ>>- большинство таргет-аудитории их и так знает,
    ЗХ>>- я ничего не собираюсь сравнивать
    ЗХ>>- я их все (кроме Шарпа) весьма близко знаю, что мешает незамутненности сознания. То есть хочется написать "каков язык на первый взгляд". Ты, скажем, можешь перечислить, что в первую очередь бросается в глаза в Шарпе? Думаю, уже нет: слишком хорошо его знаешь.

    VD>Ну, почему же. Я как раз прекрасно помню, что мне бросалось в глаза во всех языках проме С. На С я писать учился. Так что мне там кроме учебника ничего не бросилось.


    ...и тем не менее. остальных причин это не отменяет.
    FAQ — це мiй ай-кью!
    Re[19]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 27.10.04 03:55
    Оценка:
    Здравствуйте, VladD2, Вы писали:
    VD>Кстати, да. С концепциями в Обероне труба. Примитивизм полнейший. Ты на его граматику глянь. Вот вориант Оберона-2: http://statlab.uni-heidelberg.de/projects/oberon/kurs/www/Oberon2.EBNF.html Ради хомхмы можно сравнить с граматикой Шарпа. ООП просто отпад.
    Я фигею. И это предлагается детишкам? Я кстати никакого компонент паскаля на странице голубой бутылки не нашел. Active Oberon — полная труба. Анонимные рекорды. PROCEDURE {DELEGATE}. Синтаксис NEW не нравится даже создателям (видать у них-то религиозного жара нету). Всякой фигни в язык понапихано — мама дорогая. Список приемов доставания аппендикса через ухо можно обозреть здесь. Дока по Oberon-2 представлена в проприетарном формате, потому ее я не прочитал. Однако, судя по ссылкам из AO, он еще хуже. И эти люди критикуют C#?

    Или мы ведем речь о сравнении полноценной компонентной ОО-системы C#.NET с убогим Oberon 1, который окромя модульности ничего не умеет? Ага, зашибись. Класс. Действительно, не пора ли таки начать учить детишек свежим концепциям времен молодости Вирта? Зачем им это новомодное ООП? (которое, кстати, было гораздо приличнее реализовано еще в TP6, на котором я его и осваивал. В школе.)
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[16]: Oberon???????????????????????????????????
    От: INTP_mihoshi Россия  
    Дата: 27.10.04 05:15
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    INT>>Ну, в Caml все практически так же... И без извратов с identами


    VD>Уж Окамл точно не стоит в качестве первого языка брать.


    Возможно. Это в значительной степени зависит от того, чему ты хочешь научить. А начинать можно хоть с Исполнителя Черепашки Или с bash, если идти по пути пользователь — продвинутый пользователь — программист.

    И еще, не стоит, все-таки, давать нетипизированный язык в качестве первого "профессионального" языка.
    Re[10]: Мэйнстрим vs. Самосовершенствование :)))
    От: INTP_mihoshi Россия  
    Дата: 27.10.04 05:36
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    INT>>Я не уверен, что хочу начинать с объектного. И тем более не уверен, что я хочу останавливаться на объектах в том виде, в котором их представляет C#.


    VD>Ну, сам понимашь, что на Окамле точно никто начинать учить не будет.


    VD>И кстати, что тебе не нравится в Шарпе с точки зрения ООП?


    То же, что и в Яве, то, что в нем объектом приходится делать даже то, что объектом не является. Из-за этого в нэокрэпшем мозгу ученика искажается само понятие объекта.
    Re[11]: Мэйнстрим vs. Самосовершенствование :)))
    От: INTP_mihoshi Россия  
    Дата: 27.10.04 05:59
    Оценка:
    Здравствуйте, INTP_mihoshi, Вы писали:

    VD>>И кстати, что тебе не нравится в Шарпе с точки зрения ООП?


    INT>То же, что и в Яве, то, что в нем объектом приходится делать даже то, что объектом не является. Из-за этого в нэокрэпшем мозгу ученика искажается само понятие объекта.


    P.S. Вообще, пожалуй, это и может быть критерием: язык (или языки) для обучения должен позволять обучать концепциям и методам программирования, а не своим личным языковым квиркам (т.е. особенностям).
    Re[11]: Мэйнстрим vs. Самосовершенствование :)))
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 27.10.04 06:18
    Оценка:
    Здравствуйте, INTP_mihoshi, Вы писали:
    INT>То же, что и в Яве, то, что в нем объектом приходится делать даже то, что объектом не является.
    Во как интересно. Например, что?
    INT>Из-за этого в нэокрэпшем мозгу ученика искажается само понятие объекта.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[13]: Мэйнстрим vs. Самосовершенствование :)))
    От: LaptevVV Россия  
    Дата: 27.10.04 06:41
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>>>Кстати, если серьезно. Есть идея написать "сравнительную" статейку по куче языков. Причем сравнительную не в смысле "язык А лучше тем что ..., а язык Б вообще говно", а, скажем так, расширяющую сознание. Идея — ответить на вопрос "я уже знаю то, это и еще вот это вот, на что еще можно посмотреть?"


    ЗХ>Но про статью эту я думаю давно. И в первой части хотел рассмотреть только языки императивной парадигмы — но такие, что отличаются от C++/Java/C#, Pascal/Delphi/Modula/Oberon и VB — с этими, вроде как, большинство из нас сталкивалось.

    ЗХ>>>Каково? Я бы взялся... если бы ее в бумажный журнал... "Очень я это богатство люблю и уважаю" (с) Падал прошлогодний снег
    ЗХ>Вот на эти вопросы я и хотел (очень вкратце) ответить в статье.

    ЗХ>

    ЗХ>Языки примерно такие думал брать:
    ЗХ>Ada
    ЗХ>Eiffel
    ЗХ>Forth
    ЗХ>Oz
    ЗХ>Smalltalk
    ЗХ>(что еще подкинете, может быть?)
    ЗХ>+
    ЗХ>скриптовые, в которых есть интересеные (для меня) подходы:
    ЗХ>Perl
    ЗХ>Python
    ЗХ>Tcl
    ЗХ>+
    ЗХ>есть такое желание, но пока не копал — всякое старье, с которым я, за малостью лет, не сталкивался:
    ЗХ>PL/I
    ЗХ>Fortran
    ЗХ>Simula
    Отнюдь! Fortran достаточно широко используетс, даже в России. Книжки в Диалог Мифи вышли несколько штук. А по Simula советую просто прочитать — понятно станет, откуда у С++ ноги классов растут. Я дома посмотрю — книжка в старой Библиотечке программиста выходила по Simula-67.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[5]: Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 27.10.04 06:43
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>В общем, если что готов помочь в создании тулзов для урощения обучения или советом.

    Большой Катта рахмат! Если что — непременно!
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[13]: Мэйнстрим vs. Самосовершенствование :)))
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 27.10.04 06:58
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

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


    ЗХ>>>Кстати, если серьезно. Есть идея написать "сравнительную" статейку по куче языков. Причем сравнительную не в смысле "язык А лучше тем что ..., а язык Б вообще говно", а, скажем так, расширяющую сознание. Идея — ответить на вопрос "я уже знаю то, это и еще вот это вот, на что еще можно посмотреть?"


    VD>>Для начал нужно познакомить массы с мало извесными им парадигмами. А то ведь как можно сравнивать, если даже на сам принцип смотришь как баран на новые ворота. Вот тут Предлагаю запутить статью &mdash; "введение в функциональный стиль
    Автор: VladD2
    Дата: 25.10.04
    я предлагаю всем миром создать статейку цель которой знакомство людей с функциональной парадигмой. Думаю, что как побочный эффект может получиться и знакомство с разными языками. На примерах всегда учиться было удобно. Так что присоеденяся.

    ЗХ>То само собой. Я, что характерно, вроде присоединился
    ЗХ>Но про статью эту я думаю давно. И в первой части хотел рассмотреть только языки императивной парадигмы — но такие, что отличаются от C++/Java/C#, Pascal/Delphi/Modula/Oberon и VB — с этими, вроде как, большинство из нас сталкивалось.

    ЗХ>>>Каково? Я бы взялся... если бы ее в бумажный журнал... "Очень я это богатство люблю и уважаю" (с) Падал прошлогодний снег

    VD>>Как бы не вышел просто флэйм. Ну, и см. выше.
    ЗХ>Так я специально уточнил, что не собираюсь сравнивать. Просто (лично мне, как минимум) интересно копаться в незнакомых языках, в попытках понять: что это? почему он такой? чем он хорош? какие он дает новые возможности/ограничения?
    ЗХ>Вот на эти вопросы я и хотел (очень вкратце) ответить в статье.

    ЗХ>

    ЗХ>Языки примерно такие думал брать:
    ЗХ>Ada
    ЗХ>Eiffel
    ЗХ>Forth
    ЗХ>Oz
    ЗХ>Smalltalk
    ЗХ>(что еще подкинете, может быть?)
    ЗХ>+
    ЗХ>скриптовые, в которых есть интересеные (для меня) подходы:
    ЗХ>Perl
    ЗХ>Python
    ЗХ>Tcl
    ЗХ>+
    ЗХ>есть такое желание, но пока не копал — всякое старье, с которым я, за малостью лет, не сталкивался:
    ЗХ>PL/I
    ЗХ>Fortran
    ЗХ>Simula

    ЗХ>вот где-то так.

    ЗХ>


    ЗХ>Предложения, ясен корень, приветствуются. Крики "нахрен это надо?" и "да пошел ты, умник!" — игнорируются.


    Т.е. берём только императивщину?
    Однобокий взгляд будет, имхо
    Re[6]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 07:18
    Оценка:
    Здравствуйте, VladD2, Вы писали:


    VD>Кстати, интересно а эта программа "ИНФОРМАТИКА-21" кем была запущена? И кто ее развивает? Ну, не часная же это инициатива? А то на сайте ничего тайти не удается. Так же интересно как это все связано с министерством образования?


    Там все написано:

    Координаторы
    http://www.inr.ac.ru/~info21/info/koordinatory.htm

    Как возник этот проект
    http://www.inr.ac.ru/~info21/kak.htm
    Re[14]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 27.10.04 07:21
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    ЗХ>>есть такое желание, но пока не копал — всякое старье, с которым я, за малостью лет, не сталкивался:

    ЗХ>>PL/I
    ЗХ>>Fortran
    ЗХ>>Simula
    LVV>Отнюдь! Fortran достаточно широко используетс, даже в России. Книжки в Диалог Мифи вышли несколько штук.
    Вот как знал, как чувствовал, что кто-то сейчас это скажет!
    Да знаю я. А отнес его к старью несколько произвольно — концепции-то все древние.
    Вы, Валерий Викторович, лучше еще языков присоветуйте

    LVV>А по Simula советую просто прочитать — понятно станет, откуда у С++ ноги классов растут.

    Ну, в Дизайне-Эволюции об этом, кажись, совершенно однозначно сказано.

    LVV>Я дома посмотрю — книжка в старой Библиотечке программиста выходила по Simula-67.

    Да вообще хорошо бы литературы где-нибудь надергать про древние языки... Тем более для книжки мне это точно понадобится.
    А то начал давеча в инете про PL/I рыть — дык фигушки, в общем-то...
    FAQ — це мiй ай-кью!
    Re[14]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 27.10.04 07:23
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    VD>>>...Для начал нужно познакомить массы с мало извесными им парадигмами....

    ЗХ>>...в первой части хотел рассмотреть только языки императивной парадигмы

    К>Т.е. берём только императивщину?

    К>Однобокий взгляд будет, имхо
    FAQ — це мiй ай-кью!
    Re[20]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 07:33
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Я кстати никакого компонент паскаля на странице голубой бутылки не нашел.


    Это все равно что сказать, я копался в пакетах Java и не нашел там C#. Разумеется в BlueBottle нет Component Pascal, там есть Active Oberon.

    Active Oberon с Component Pascal в этом смысле мало чем связан.
    
                Oberon -> Oberon-2 -> Component Pascal
                   |
                   |
                   +---> Active Oberon

    Более подробная генеалогия языков:
    http://www.oberon.ethz.ch/genealogy.html

    S>с убогим Oberon 1


    Оберон#1 — это ОО ассемблер. Вы же не будете говорить, что ассемблеры это убожества.
    Re[16]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 07:38
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Это что ящик? Нет? Ну, тогда будет тяжеловато показать пальцем. А вот на пространство имен легко. Оно же выражается синтаксической конструкцией.


    А это что:
    MODULE MyModule;
    
    END MyModule.

    не синтаксическая конструкция? Модуль вполне можно локализовать как синтаксически, так и физически (единица компиляции и единица исполнения). А пространство имен локализовать нельзя, оно размазано по куче файлов. А для того чтобы показать пальцем надо именно локализовать.
    Re[21]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 27.10.04 07:50
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Оберон#1 — это ОО ассемблер. Вы же не будете говорить, что ассемблеры это убожества.

    Я просто не понимаю, какой именно язык ты пытаешься противопоставить C# вот в этой ветке
    Автор: Сергей Губанов
    Дата: 26.10.04
    ? На каком именно из этих плодов гибридного скрещивания ты предлагаешь обучать детей?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[22]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 07:58
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Оберон#1 — это ОО ассемблер. Вы же не будете говорить, что ассемблеры это убожества.

    S>Я просто не понимаю, какой именно язык ты пытаешься противопоставить C# вот в этой ветке
    Автор: Сергей Губанов
    Дата: 26.10.04
    ? На каком именно из этих плодов гибридного скрещивания ты предлагаешь обучать детей?


    На Component Pascal естественно, даже не просто на нем, а на нем в (бесплатной) компонентной среде разработки и исполнения программ BlackBox от Oberon Microsystems, исходный код который обещали открыть к концу 2004 года. Именно Компонентному Паскалю посвящен проект Информатика 21
    Re[15]: Мэйнстрим vs. Самосовершенствование :)))
    От: LaptevVV Россия  
    Дата: 27.10.04 08:04
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>Да знаю я. А отнес его к старью несколько произвольно — концепции-то все древние.

    ЗХ>Вы, Валерий Викторович, лучше еще языков присоветуйте
    Давай, я в воскресенье посмотрю — и список пришлю.
    LVV>>А по Simula советую просто прочитать — понятно станет, откуда у С++ ноги классов растут.
    ЗХ>Ну, в Дизайне-Эволюции об этом, кажись, совершенно однозначно сказано.
    Не, одно дело сказано, а другое — посмотреть синтаксис и конструкции.
    LVV>>Я дома посмотрю — книжка в старой Библиотечке программиста выходила по Simula-67.
    ЗХ>Да вообще хорошо бы литературы где-нибудь надергать про древние языки... Тем более для книжки мне это точно понадобится.
    ЗХ>А то начал давеча в инете про PL/I рыть — дык фигушки, в общем-то...
    Еще помотри PL/C и PL|86
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[16]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 27.10.04 08:11
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    ЗХ>>Вы, Валерий Викторович, лучше еще языков присоветуйте

    LVV>Давай, я в воскресенье посмотрю — и список пришлю.
    Буду спасибо.

    LVV>>>А по Simula советую просто прочитать — понятно станет, откуда у С++ ноги классов растут.

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

    LVV>>>Я дома посмотрю — книжка в старой Библиотечке программиста выходила по Simula-67.

    ЗХ>>Да вообще хорошо бы литературы где-нибудь надергать про древние языки... Тем более для книжки мне это точно понадобится.
    ЗХ>>А то начал давеча в инете про PL/I рыть — дык фигушки, в общем-то...
    LVV>Еще помотри PL/C и PL|86
    Угу, спасибо. Но это наверное уже не для статьи (там не хочется особо на ископаемых зацикливаться)
    А для книжки посмотрю обязательно. Хотя информация, которую надо просмотреть, растет в геометрической прогресии...
    FAQ — це мiй ай-кью!
    Re[2]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 27.10.04 08:49
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>В общем, у меня мнение сложилось: явных претендентов два питон и додиез.


    А джава чем не прокатила?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    AVK Blog
    Re[24]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 08:49
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Ну, в нем-то вроде бы список сущностей не ограничивается модулями и процедурами. Вирт таки ввел туда ООП, хотя и довольно-таки экзотическим способом. Отсутствие концепции интерфейса не даст возможности разделить спецификацию поведения от ее реализации. Я понимаю — он пытается до последнего цепляться за свое утверждение "алгоритмы+структуры=программы". Имхо подобное преподавание ООП оставит о нем совершенно неверное представление в головах учеников.


    Чем Вам этот способ экзотичен? Тем что нет классов? Правильно, а они и не нужны, оказывается достаточно иметь понятие РАСШИРЕНИЕ ТИПА.

    Чем Вам такая штуковина не нравится в качестве интерфейса:


    TYPE
      Store = POINTER TO ABSTRACT RECORD
        (s: Store) Internalize- (VAR rd: Reader), NEW, EMPTY;
        (s: Store) Externalize- (VAR wr: Writer), NEW, EMPTY;
      END;




    TYPE
      MyObject = RECORD (Store)
        ...    
        (t: MyObject) Internalize- (VAR rd: Reader);
        (t: MyObject) Externalize- (VAR wr: Writer);
        ...
      END;


    Тип MyObject есть расширение типа Store. В другой терминологии MyObject — класс потомок от абстрактного класса Store.
    Re[14]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 27.10.04 09:05
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    ЗХ>>Предложения, ясен корень, приветствуются.

    AVK>ИМХО надо добавить Ruby и выкинуть PL/1.
    ОК, учтем. PL/I я просто не видел еще, интересно.

    ЗХ>>2Модераторz: не знаю, чи в отдельную ветку это выкинуть?

    AVK>Думаешь стоит?
    хз... вот сейчас снесут весь топик в войны — а я туда не хожу со своей еврейской мордой. боюсь побьют
    да и офтоп это здесь... хотя здесь уже все офтоп.
    может вообще порубать ее к чертям топиков на 5-6?
    FAQ — це мiй ай-кью!
    Re[15]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 27.10.04 09:10
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А разница между прочим на столько громадна, что даже не смешно. Перво-наперво надо объяснить КУДА писать исходный код программы. Модуль — это и есть то самое место куда надо писать исходный код программы, в том числе код классов надо писать внутрь модуля.


    Представь что я школьник и ответь на простой вопрос — а зачем все это?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    AVK Blog
    Re[3]: Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 27.10.04 10:09
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

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


    LVV>>В общем, у меня мнение сложилось: явных претендентов два питон и додиез.


    AVK>А джава чем не прокатила?

    Как один из вариантов — годится. Но с Явой я уже знакомиолся худо бедно, а с додиезом — еще нет
    Просто интереснее.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[16]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 10:10
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>А разница между прочим на столько громадна, что даже не смешно. Перво-наперво надо объяснить КУДА писать исходный код программы. Модуль — это и есть то самое место куда надо писать исходный код программы, в том числе код классов надо писать внутрь модуля.


    AVK>Представь что я школьник и ответь на простой вопрос — а зачем все это?


    Представил, отвечаю:
    Затем что можно писать сочинение на обрывках оберточной бумаги, на салфетках, на фантиках от конфет, а можно в специально отведенном для этого месте — в тетрадке в линейку. Вот и модуль отличается от текстового файла так же как грязный обрывок оберточной бумаги отличается от читой тетради.
    Re[17]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 10:13
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, AndrewVK, Вы писали:


    AVK>>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>>А разница между прочим на столько громадна, что даже не смешно. Перво-наперво надо объяснить КУДА писать исходный код программы. Модуль — это и есть то самое место куда надо писать исходный код программы, в том числе код классов надо писать внутрь модуля.


    AVK>>Представь что я школьник и ответь на простой вопрос — а зачем все это?


    СГ>Представил, отвечаю:

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

    P. S.
    Учительница примет у тебя только сочинение написанное в тетрадке, также и компьютер будет выполнять только правильно оформленную программу.
    Re[17]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 27.10.04 10:24
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Представил, отвечаю:

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

    Кривая аналогия. Текстовый файл по сравнению с модулем не грязный и не обладает большей вместимостью. ВОбщем я ничего не понял из твоего объяснения.
    ... << RSDN@Home 1.1.4 beta 3 rev. 209>>
    AVK Blog
    Re[18]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 27.10.04 10:24
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>P. S.

    СГ>Учительница примет у тебя только сочинение написанное в тетрадке, также и компьютер будет выполнять только правильно оформленную программу.

    Но ведь в других то языках обходятся текстовыми файлами!!! Так что это заморочки конкретного языка, а не компьютера. Опять ты ничего не объяснил. Я так до сих пор и не понимаю зачем модули.
    ... << RSDN@Home 1.1.4 beta 3 rev. 209>>
    AVK Blog
    Re[12]: Мэйнстрим vs. Самосовершенствование :)))
    От: serg_mo  
    Дата: 27.10.04 10:26
    Оценка:
    Здравствуйте, INTP_mihoshi, Вы писали:

    INT>P.S. Вообще, пожалуй, это и может быть критерием: язык (или языки) для обучения должен позволять обучать концепциям и методам программирования, а не своим личным языковым квиркам (т.е. особенностям).


    Золотые слова. Мне кажется, в спор о языках можно было бы внести больше ясности, если бы инициатор темы (т. е. LaptevVV) рассказал, какие темы он хочет раскрыть в рамках обучающего курса.
    ... << RSDN@Home 1.1.3 stable >>
    Re[14]: Мэйнстрим vs. Самосовершенствование :)))
    От: serg_mo  
    Дата: 27.10.04 10:26
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>ИМХО надо добавить Ruby и выкинуть PL/1.


    О! Ruby
    ... << RSDN@Home 1.1.3 stable >>
    Re[4]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 27.10.04 10:35
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    AVK>>А джава чем не прокатила?

    LVV>Как один из вариантов — годится. Но с Явой я уже знакомиолся худо бедно, а с додиезом — еще нет
    LVV>Просто интереснее.

    ИМХО разница джавы (как языка) и шарпа в том, что у шарпа есть куча всяких примочек. Оно конечно здорово упрощает жизнь профессионального программера, но для обучения оно вобщем то ни к чему. А с точки зрения освоения языка джава имхо будет всеж таки попроще шарпа. Отсюда будет меньше времени потрачено на разборки с синтаксическими заморочками шарпа, вроде того чем эвент отличается от обычного поля типа делегата или почему енум и референсный тип и value.
    ... << RSDN@Home 1.1.4 beta 3 rev. 209>>
    AVK Blog
    Re[16]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 27.10.04 10:48
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>>>ИМХО надо добавить Ruby и выкинуть PL/1.

    ЗХ>>ОК, учтем. PL/I я просто не видел еще, интересно.
    AVK>Лучше бы тебе его не видеть
    Теперь точно буду смотреть... Заинтригован.

    ЗХ>>>>2Модераторz: не знаю, чи в отдельную ветку это выкинуть?

    AVK>>>Думаешь стоит?
    ЗХ>>хз... вот сейчас снесут весь топик в войны
    AVK>Да вроде никто пока за это не голосовал.
    А пора бы, откровенно говоря. Сейчас начну, пожалуй.


    ЗХ>>да и офтоп это здесь...

    AVK>Да нет вроде пока. Сравнение языков самый что ни на есть онтоп.
    А обсуждение будущей статьи — уже так себе.

    ЗХ>>может вообще порубать ее к чертям топиков на 5-6?

    AVK>А смысл?
    Открываться в дереве быстрее будет после обновления
    А если серьезно — тут, кажется, уже как раз 5-6 тем и обсуждают (чему учить детей, статью, Оберон вс. все, Модульность... и т.п.)
    FAQ — це мiй ай-кью!
    Re[17]: Мэйнстрим vs. Самосовершенствование :)))
    От: LaptevVV Россия  
    Дата: 27.10.04 10:57
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

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


    AVK>>>>ИМХО надо добавить Ruby и выкинуть PL/1.

    ЗХ>>>ОК, учтем. PL/I я просто не видел еще, интересно.
    AVK>>Лучше бы тебе его не видеть
    ЗХ>Теперь точно буду смотреть... Заинтригован.

    Тогда ищи книжку Лепин-Дмитрюков. Программирование на PL/I (или ПЛ/1 )
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[5]: Oberon???????????????????????????????????
    От: LaptevVV Россия  
    Дата: 27.10.04 10:58
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

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


    AVK>>>А джава чем не прокатила?

    LVV>>Как один из вариантов — годится. Но с Явой я уже знакомиолся худо бедно, а с додиезом — еще нет
    LVV>>Просто интереснее.

    AVK>ИМХО разница джавы (как языка) и шарпа в том, что у шарпа есть куча всяких примочек. Оно конечно здорово упрощает жизнь профессионального программера, но для обучения оно вобщем то ни к чему. А с точки зрения освоения языка джава имхо будет всеж таки попроще шарпа. Отсюда будет меньше времени потрачено на разборки с синтаксическими заморочками шарпа, вроде того чем эвент отличается от обычного поля типа делегата или почему енум и референсный тип и value.

    Спасибо. Учту.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[18]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 27.10.04 11:15
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Здравствуйте, Зверёк Харьковский, Вы писали:


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


    AVK>>>>>ИМХО надо добавить Ruby и выкинуть PL/1.

    ЗХ>>>>ОК, учтем. PL/I я просто не видел еще, интересно.
    AVK>>>Лучше бы тебе его не видеть
    ЗХ>>Теперь точно буду смотреть... Заинтригован.

    LVV>Тогда ищи книжку Лепин-Дмитрюков. Программирование на PL/I (или ПЛ/1 )

    И где мне ее искать? В инете нету, а к библиотекам институтов доступу, как сами понимаете, уже тоже нету
    FAQ — це мiй ай-кью!
    Re[19]: Мэйнстрим vs. Самосовершенствование :)))
    От: LaptevVV Россия  
    Дата: 27.10.04 11:20
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

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


    LVV>>Здравствуйте, Зверёк Харьковский, Вы писали:


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


    AVK>>>>>>ИМХО надо добавить Ruby и выкинуть PL/1.

    ЗХ>>>>>ОК, учтем. PL/I я просто не видел еще, интересно.
    AVK>>>>Лучше бы тебе его не видеть
    ЗХ>>>Теперь точно буду смотреть... Заинтригован.

    LVV>>Тогда ищи книжку Лепин-Дмитрюков. Программирование на PL/I (или ПЛ/1 )

    ЗХ> И где мне ее искать? В инете нету, а к библиотекам институтов доступу, как сами понимаете, уже тоже нету
    А вот еще была Олюнин, Фролов.
    И кстати, про Рефал-то все забыли! А язык-то классный!
    Вот тебе адресочек
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[17]: Мэйнстрим vs. Самосовершенствование :)))
    От: WolfHound  
    Дата: 27.10.04 11:27
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    AVK>>Лучше бы тебе его не видеть

    ЗХ>Теперь точно буду смотреть... Заинтригован.
    Когда найдешь что почитать и чем компилять(под виндой) мне скажи, а то меня тоже давно его препроцессером интригуют.
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[18]: Мэйнстрим vs. Самосовершенствование :)))
    От: LaptevVV Россия  
    Дата: 27.10.04 11:33
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Здравствуйте, Зверёк Харьковский, Вы писали:


    AVK>>>Лучше бы тебе его не видеть

    ЗХ>>Теперь точно буду смотреть... Заинтригован.
    WH>Когда найдешь что почитать и чем компилять(под виндой) мне скажи, а то меня тоже давно его препроцессером интригуют.
    Не, не фонтан! Я пробовал! (с)Лукашин
    Можно немного прочитать в книжке Брауна "Макропроцессоры и мобильность ПО" издательства Мир серия МО ЭВМ
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[20]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 27.10.04 11:33
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>>>Тогда ищи книжку Лепин-Дмитрюков. Программирование на PL/I (или ПЛ/1 )

    ЗХ>> И где мне ее искать? В инете нету, а к библиотекам институтов доступу, как сами понимаете, уже тоже нету
    LVV>А вот еще была Олюнин, Фролов.
    А все, я нашел уже. Полный Language Reference IBM-овский. Правда, по-аглицки.
    А вот вам к вопросу о живости языка:

    IBM PL/I for AIX, V2.0
    IBM United States Software Announcement
    June 22, 2004

    http://www-306.ibm.com/common/ssi/fcgi-bin/ssialias?subtype=ca&amp;infotype=an&amp;appname=iSource&amp;supplier=897&amp;letternum=ENUS204-129

    LVV>И кстати, про Рефал-то все забыли! А язык-то классный!

    LVV>Вот тебе адресочек
    Неее, РЕФАЛ-то у мине лежит, ждет своего часу. Я где-то тут даже Владу пояснял, что это за язык.
    Да только не императивный он, вроде?
    FAQ — це мiй ай-кью!
    Re[21]: Мэйнстрим vs. Самосовершенствование :)))
    От: LaptevVV Россия  
    Дата: 27.10.04 11:36
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

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


    LVV>>>>Тогда ищи книжку Лепин-Дмитрюков. Программирование на PL/I (или ПЛ/1 )

    ЗХ>>> И где мне ее искать? В инете нету, а к библиотекам институтов доступу, как сами понимаете, уже тоже нету
    LVV>>А вот еще была Олюнин, Фролов.
    ЗХ>А все, я нашел уже. Полный Language Reference IBM-овский. Правда, по-аглицки.
    ЗХ>А вот вам к вопросу о живости языка:
    ЗХ>

    ЗХ>IBM PL/I for AIX, V2.0
    ЗХ>IBM United States Software Announcement
    ЗХ>June 22, 2004

    ЗХ>http://www-306.ibm.com/common/ssi/fcgi-bin/ssialias?subtype=ca&amp;infotype=an&amp;appname=iSource&amp;supplier=897&amp;letternum=ENUS204-129
    Катта рахмат. Это ж IBM-ский язык-то! Его и надо было только у IBM искать!

    LVV>>И кстати, про Рефал-то все забыли! А язык-то классный!

    LVV>>Вот тебе адресочек
    ЗХ>Неее, РЕФАЛ-то у мине лежит, ждет своего часу. Я где-то тут даже Владу пояснял, что это за язык.
    ЗХ>Да только не императивный он, вроде?
    Не — по ссылке на главную страницу выйдешь, там от автора — Турчина — много инфы, вплоть до полного руководства!
    Кстати, термин "конкретизация" (воплощение — инстанцирование ))) — оттуда.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[21]: Мэйнстрим vs. Самосовершенствование :)))
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 27.10.04 11:38
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

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


    LVV>>И кстати, про Рефал-то все забыли! А язык-то классный!

    LVV>>Вот тебе адресочек
    ЗХ>Неее, РЕФАЛ-то у мине лежит, ждет своего часу. Я где-то тут даже Владу пояснял, что это за язык.
    ЗХ>Да только не императивный он, вроде?

    Вроде бы как очень функциональный, правдо давненько я его ковырял...
    Re[19]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 27.10.04 11:57
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Можно немного прочитать в книжке Брауна "Макропроцессоры и мобильность ПО" издательства Мир серия МО ЭВМ

    Валерий Викторович! Ну прекратите дразниться, а?
    Ну не у всех же университетская библиотека под рукой!
    А то одолжить попрошу
    FAQ — це мiй ай-кью!
    Re[17]: Oberon???????????????????????????????????
    От: Mamut Швеция http://dmitriid.com
    Дата: 27.10.04 12:13
    Оценка:
    Здравствуйте, Kh_Oleg, Вы писали:

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


    AVK>>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>>А разница между прочим на столько громадна, что даже не смешно. Перво-наперво надо объяснить КУДА писать исходный код программы. Модуль — это и есть то самое место куда надо писать исходный код программы, в том числе код классов надо писать внутрь модуля.


    AVK>>Представь что я школьник и ответь на простой вопрос — а зачем все это?


    K_O>Десять лет назад я сам был школьником, которому в рамках школьной программы объясняли азы программирования. При этом использовался язык Modula-2. Уже на втором занятии нам дали задание самим написать программу вычисления корней квадратного уравнения.


    K_O>Насчет ключевого слова MODULE было сказано так: в программе ДОЛЖНЫ обязательно присутствовать MODULE ProgramName, BEGIN и END ProgramName. До BEGIN объявляем переменные, после BEGIN — пишем код. То же самое с функциями ввода-вывода: учитель показал как ими пользоваться

    K_O>
    K_O>FROM IO IMPORT WrStr, WrLn;
    K_O>BEGIN
    K_O>WrStr("Hello!"); WrLn;
    K_O>

    K_O>и этого было предостаточно, чтобы мы смогли ими пользоваться.

    Насколько я помню обучение Паскаля в школе, там дело обстоит также.

    Говорят, что обязательно должны присутствовать в программе ледующие вещи: program, var, begin, end. Все. что это и зачем это не объясняют.

    Когда нам еще Васик объясняли все в обязательном порядке писали

    10 REM My program
    20 PRINT "Hello world"


    Возможность писать программы на Васике без REM стала для меня откровением.

    Это кстати к вопросу здесь
    Автор: Сергей Губанов
    Дата: 26.10.04
    и здксь
    Автор: Sinclair
    Дата: 26.10.04
    . Все что угодно можно объяснить. А можно и не объяснять
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[7]: Мэйнстрим vs. Самосовершенствование :)))
    От: serg_mo  
    Дата: 27.10.04 16:53
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>А если серьезно — это возвращение к идее мэйнстрима. Грубо говоря, уж очень СмолТок не похож на то, куда движется развитие языков.

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

    А мэйнстрим — ну что мэйнстрим? Мэйнстрим во многом — это просто мода.
    Например, когда я учился в институте, Экстремальное программирование рассматривалось большинством как какое-то недоразумение. А сейчас вот пожалуйста — и книг навалом, и, говорят, даже в институтах его преподают.

    Я вспоминаю курс "Объектно-ориентированное программирование" у себя в вузе. Скорее, его можно было бы назвать "Изучаем синтаксис С++ за 21 день". Ни слова, собственно, о самом объектном подходе, идеях, концепциях. По-моему, большинство из этого курса вынесло только идею, что "ООП — это когда в структуры можно понапихать функций"
    Кстати, почему, например, не выбрали Java? Потому что C++ считался "мэйнстрим". Зато то время, которое могло бы быть потрачено, например, на паттерны проектирования, было убито на "синтаксис конструктора копирования в С++", условно говоря.

    ИМХО, учебные заведения в погоне за мэйнстримом всегда будут на несколько шагов позади.
    Хотя бы из-за того, что необходимо обучение преподавателей до такого уровня, на котором можно преподавать. Задача вузов — давать студентам концепции, идеи, теории, если хотите. Вещи, более фундаментальные, нежели "синтаксис С++". А практику выносить в курсы лабораторных работ и давать студентам большую свободу для творчества. В конце концов, "The best way to predict the future is to invent it" (c) by Alan Kay


    ЗХ>Именно поэтому, имхо, если начать изучать программирование вообще именно со СмолТока — потом будет тяжелее. Привыкнуть, что for — это не сообщение, принимаемое цифрой 1

    Хе-хе

    Smalltalk опасен. Smalltalk это как наркотик.
    Мой совет Вам — не пробуйте его; он может разрушить Вашу жизнь. Когда вы найдете время изучить его (ДЕЙСТВИТЕЛЬНО изучить) вы увидите, что нет ничего (пока), что может с ним сравниться. Конечно, как и для любого наркотика, его опасность зависит от вашего характера. — Энди Бауэр, создатель Dolphin Smalltalk


    ... << RSDN@Home 1.1.3 stable >>
    Re[9]: Oberon???????????????????????????????????
    От: serg_mo  
    Дата: 27.10.04 17:14
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>Он не похож вообще на другие языки.

    FR>Простота не всегда хорошо, что хорошо видно здесь на примере того же оберона.

    Пусть вещи будут простыми, но не проще, чем нужно . Я хочу сказать, что в основе Смолтока лежит очень небольшое количество правил, используя которые можно построить весьма сложные конструкции.

    FR>А какой смысл читать код не понимая что он делает? Это примерно как выучить латинский алфавит и кричать что хорошо знаешь латынь?


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

    FR>По моему такое длиное объяснение такого элементарного понятия как цикл, уже показывает что с языком что-то не так. Во всяком случае для обучения точно это плохо.

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

    FR>Вот только мне кажется что ближе к человеческому мышлению как раз большое количество синтаксических конструкций как и в естественных языках.

    Ну, думаю, тут можно спросить мнение человека, разбирающегося с применением артикля в английском языке или со спряжением глаголов в Passato Remoto в итальянском .
    На мой взгляд, наиболее просты для обучения вещи, имеющие четкую схему с минимумом отклонений от нее.
    ... << RSDN@Home 1.1.3 stable >>
    Re: Oberon???????????????????????????????????
    От: mister-AK Россия  
    Дата: 27.10.04 17:31
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Кстати, какие альтернативы оберону есть, кто-нить представляет?


    Надо учить на Algol-XXI


    и первое с чего начать: программирование состоит из разных уровней абстракций

    в синтаксисе есть три атомарных конструктива:
    перечисление (с возможностью приоритетной группировки)
    a,(b,c)
    именование (с декларативной возможностью определения области видимости)
    a.c b.c
    пересылка (с возможностью выбора направления и состояния формального параметра)
    a(c) b(c)


    и примерчик этого поднести

    a(
      b(
        a.b.c,
        b(
          a,c
         ),
        c.(a,b)
       ),
      c.(a.b(c),b,c(a.b))
     )


    в лингвистике есть три атомарных конструктива:
    символ, лексема, терм


    в символике есть три атомарных конструктива:
    строковый, колличественный, качественный


    в семантике есть три атомарных конструктива:
    тип, данное, значение


    и.т.п
    Re[13]: Мэйнстрим vs. Самосовершенствование :)))
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 28.10.04 03:59
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:
    >> INT> То же, что и в Яве, то, что в нем объектом приходится делать даже то, что объектом не является.
    ПК>Например, я не вполне понимаю, зачем обобщенные алгоритмы типа сортировки делать методами классов Вот пример такого, с позволения сказать, класса: http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html — ни состояния, ни поведения, ни инвариантов
    Ну, ребята. Нельзя же так вольно с терминологией! Ну где ты увидел здесь объект, который объектом не является?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[14]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 28.10.04 04:03
    Оценка:
    Sinclair:

    > ПК> Например, я не вполне понимаю, зачем обобщенные алгоритмы типа сортировки делать методами классов Вот пример такого, с позволения сказать, класса: http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html — ни состояния, ни поведения, ни инвариантов


    > Ну, ребята. Нельзя же так вольно с терминологией! Ну где ты увидел здесь объект, который объектом не является?


    Ну, другого понимания высказывания INTP_mihoshi у меня нет Если он имел в виду что-то другое, пусть сам выскажется
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[14]: Мэйнстрим vs. Самосовершенствование :)))
    От: INTP_mihoshi Россия  
    Дата: 28.10.04 04:48
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    ПК>>Например, я не вполне понимаю, зачем обобщенные алгоритмы типа сортировки делать методами классов Вот пример такого, с позволения сказать, класса: http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html — ни состояния, ни поведения, ни инвариантов

    S>Ну, ребята. Нельзя же так вольно с терминологией! Ну где ты увидел здесь объект, который объектом не является?

    Я, в общем согласен, что класс != объект. Но он изначально делался именно для реализации объектов. А теперь класс используется вообще для всего, что можно. Декларация интерфейса, объявление типа, реализация стратегии в С++оидах делается через семантику, предназначавшуюся изначально для работы с объектами, т.е. через классы.
    Re[19]: Oberon???????????????????????????????????
    От: eugals Россия  
    Дата: 28.10.04 07:31
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    ПК>>В Питоне типизация не слабая. Слабая типизация, скажем, в C. А в Питоне ошибки приведений типов все диагностируются.

    VD>Фиг. Там допустимы приведения между булевыми, целыми, списками и т.п.

    Неправда ваша.
    Преобразование возможно только явное.
    Например, чтобы получить из кортежа список надо написать так:
    kortezh = (1, 2, 3)
    spisok  = list(kortezh)


    Другое дело, что различные объекты могут поддерживать один и тот же интерфейс
    например, здесь:
    for itm in seq:
        # do smth with itm

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

    по поводу булевых переменных то же самое:
    if a:
        pass

    Вместо а может быть любой объект, у которого есть соответствующий слотовый метод (__nonzero__).
    Для чисел этот метод возвращает: self != 0; для последовательностей: len(self) != 0
    ... << RSDN@Home 1.1.4 beta 2 >>
    Re[8]: Мэйнстрим vs. Самосовершенствование :)))
    От: eugals Россия  
    Дата: 28.10.04 08:16
    Оценка:
    Здравствуйте, serg_mo, Вы писали:

    Smalltalk опасен. Smalltalk это как наркотик.
    Мой совет Вам — не пробуйте его; он может разрушить Вашу жизнь. Когда вы найдете время изучить его (ДЕЙСТВИТЕЛЬНО изучить) вы увидите, что нет ничего (пока), что может с ним сравниться. Конечно, как и для любого наркотика, его опасность зависит от вашего характера. — Энди Бауэр, создатель Dolphin Smalltalk

    Драгдилер, блин
    по $350 за коробан гребёт

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

    Под C++ есть куча компиляторов. Есть бесплатный gcc. Есть опенсорсные среды разработки. Море библиотек.
    У шарпа, кроме него самого, есть моно и дотгну.
    У питона есть питон.
    А что со смолтоком? gnusmalltalk, насколько я вижу, ни жив ни мерт
    Есть конечно VW NС, но это дело такое — сегодня они его поддерживают, а завтра бросят...
    Стремно как-то основывать долгоживущие разработки на такой основе.
    Даже если честно купить коробку, всё равно стрёмно. Вдруг они завтра разорятся (продажи-то небольшие, небось).
    Или продадутся какому-нибудь SUN-у (как с Self-ом было).
    А как обстоит дело с совместимостью?
    Насколько реально перевести крупный проект с VW на Dolphin или обратно?
    ... << RSDN@Home 1.1.4 beta 2 >>
    Re[7]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 09:33
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    VD>>Кстати, интересно а эта программа "ИНФОРМАТИКА-21" кем была запущена? И кто ее развивает? Ну, не часная же это инициатива? А то на сайте ничего тайти не удается. Так же интересно как это все связано с министерством образования?


    СГ>Там все написано:


    А можно в двух словах? Он к государству имеет отношение или это частная инициатива?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 09:33
    Оценка:
    Здравствуйте, INTP_mihoshi, Вы писали:

    INT>Возможно. Это в значительной степени зависит от того, чему ты хочешь научить. А начинать можно хоть с Исполнителя Черепашки Или с bash, если идти по пути пользователь — продвинутый пользователь — программист.


    Думаю, что bash и иже сним — это еще более плохой выбор.

    INT>И еще, не стоит, все-таки, давать нетипизированный язык в качестве первого "профессионального" языка.


    Согласен. Именно по этому мне и не нравится идея использовать для этого Питон. Хотя по другим критериям он просто идеален.

    Собственно по этому я и говорю о том, что Шарп и ВБ.НЭТ явлюятся лучшим выбором. Оба строго- и статически-типизированные. Оба неплохо спроекритрованны. Оба безопасны. Оба ОО.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 09:33
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    >> Фиг. Там допустимы приведения между булевыми, целыми, списками и т.п.


    ПК>Что-то я тебя потерял... Приведи, пожалуйста, пример того, что ты считаешь преобразованием между целым и списком...


    Между целыми и булевыми, и списками и булевыми:
    a = [1, 2]
    
    if a[0]:
        c = 1
        
    if a:
        c = 2
        
    a = 1
    
    if a:
        c = 2


    >> Ну, и опять же вся диагностика в рантайме.


    ПК>Дык, на то и динамическая типизация.


    Она не на то. Она в следствии того. К тому же приколы вроде приведенного объявления переменной внутри тела if-а (с вероятностью, того что она вообще не дудет объявлена) делают язык еще более опасным. Уж учиться безопасному программированию и культуре программирования на нем точно нельзя.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 10:07
    Оценка:
    Здравствуйте, eugals, Вы писали:

    E>Неправда ваша.

    E>Преобразование возможно только явное.

    Re[20]: Oberon???????????????????????????????????
    Автор: VladD2
    Дата: 28.10.04
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 10:07
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Не, заслуга ребят из MS только в том, что они из MS — был бы Вирт в MS, еще неизвестно, какой язык был бы живым, а какого даже в проекте не было б.


    А что там думать то? Хегельберг как раз Дельфи (т.е. Паскаль) до этого развивал. Ява и МС поставили его "на путь истенный".

    LVV>С# жив только потому, что его не в академических кругах написали,


    Те только потомуа, а именно по тому.

    LVV> а самая мощная корпорация — так с любым языком будет. Возьмется MS Oberon продвигать, и куда остальные с подводной лодки денуться?


    Превратился бы в C# как Ява в него превратилась.

    LVV>Потому и смешно.


    Смешно тут выглядит только полное неприятие Шарпа фанатами Оберона. Так как Шарп как раз реализует идею Вирта о стройной статической типизиции и типобезопасности.

    Оберон это резко урезанная Модула-2. А Шарп развитие практический всех удачных языков. По этому Шарп будет жить и разваваться, а Обероном будут пугать детей.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[23]: Component Pascal
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 10:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Именно Компонентному Паскалю посвящен проект Информатика 21


    И зачем в этом проекте упомянаются Ява и Шарп?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[24]: Component Pascal
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 10:07
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Отсутствие концепции интерфейса не даст возможности разделить спецификацию поведения от ее реализации. Я понимаю — он пытается до последнего цепляться за свое утверждение "алгоритмы+структуры=программы". Имхо подобное преподавание ООП оставит о нем совершенно неверное представление в головах учеников.


    Гы. Там не только интерфейсов нет. Там даже человеческой защиты нет. Поинтерисуйся о методах скрытия (инкапсуляции) применяемых в Обероне 2.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[25]: Component Pascal
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 10:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Чем Вам такая штуковина не нравится в качестве интерфейса:


    СГ>
    СГ>TYPE
    СГ>  Store = POINTER TO ABSTRACT RECORD
    СГ>    (s: Store) Internalize- (VAR rd: Reader), NEW, EMPTY;
    СГ>    (s: Store) Externalize- (VAR wr: Writer), NEW, EMPTY;
    СГ>  END;
    СГ>


    СГ>
    СГ>TYPE
    СГ>  MyObject = RECORD (Store)
    СГ>    ...    
    СГ>    (t: MyObject) Internalize- (VAR rd: Reader);
    СГ>    (t: MyObject) Externalize- (VAR wr: Writer);
    СГ>    ...
    СГ>  END;
    СГ>


    СГ>Тип MyObject есть расширение типа Store. В другой терминологии MyObject — класс потомок от абстрактного класса Store.

    interface IStore
    {
        void Internalize(Reader reader);
        void Externalize(Writer writer);
    }
    
    class MyClass : IStore
    {
        // Не явная реализация
        public  void        Internalize(Reader reader) { ... }
        // Явная реализация
        private void IStore.Externalize(Writer writer) { ... }
    }
    ...
    MyClass obj = new MyClass();
    obj.Internalize(...); // OK!
    obj.Externalize(...); // Ошибка времени компиляции.
    IStore store = obj;
    store.Externalize(...); // OK!


    Да. И еще не нужно дергаться, так как реализация метода описывается внутри класа, а не черти-где. Так же не нужно предеклараций (вообще не нужно!).
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 10:07
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Импорта наверное ты хотел сказать? using это не импорт, это то что я сказал, а именно фичка компилятора, позволяющая писать меньше текста. Импорт в шарпе указывается в параметрах компилятора, а не в исходном коде.


    А системные функции вроде вывода на консоль импортируются автоматически.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 10:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Модуль — это самая большая структурная единица программы, содержащая внутри себя все остальные.


    После такого определения даже я в даун уйду. А уж у неподготовленного школьника просто крышу сорвет.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[18]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 10:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>P. S.

    СГ>Учительница примет у тебя только сочинение написанное в тетрадке, также и компьютер будет выполнять только правильно оформленную программу.

    Я бы такому учителю рассказал про файлы.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 10:07
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>PL/I я сходу занес в число "ископаемых". А Ада, как я понимаю — вполне жива.


    С тех пор как минобороны штатов сняла ограничение на языки на АДА пишут очень мало. И в основном в госстуруктурах США. Так что для всего остального мира язык мертв. Последний стандарт АДА 95.

    ЗХ>ОК. Гляну. Но ничего не обещаю.

    ЗХ>Потому что PHP я, например, сознательно не добавил за общей заурядностью.

    Руби — это один из самых интересных исследовательских языков программирования созданных за последнее время. Я сам его не видел, но часто слышал как его приводят в пример. Ктому же именно его так никто толком и не описан на русском (вроде).

    ЗХ>...и тем не менее. остальных причин это не отменяет.


    Согласен.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[11]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 10:07
    Оценка:
    Здравствуйте, INTP_mihoshi, Вы писали:

    INT>То же, что и в Яве, то, что в нем объектом приходится делать даже то, что объектом не является.


    Примеры можно?

    INT> Из-за этого в нэокрэпшем мозгу ученика искажается само понятие объекта.


    Мне кажется ты заблуждаешся.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 10:07
    Оценка:
    Здравствуйте, INTP_mihoshi, Вы писали:

    INT>P.S. Вообще, пожалуй, это и может быть критерием: язык (или языки) для обучения должен позволять обучать концепциям и методам программирования, а не своим личным языковым квиркам (т.е. особенностям).


    Какие проблемы будут с Шарпом? Что на нем нельзя изучить?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[8]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 10:17
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


    VD>>>Кстати, интересно а эта программа "ИНФОРМАТИКА-21" кем была запущена? И кто ее развивает? Ну, не часная же это инициатива? А то на сайте ничего тайти не удается. Так же интересно как это все связано с министерством образования?


    СГ>>Там все написано:


    VD>А можно в двух словах? Он к государству имеет отношение или это частная инициатива?


    Частная инициатива пытающаяся влиять на государство с целью того, чтобы в средней школе информатику преподавали на основе языка Component Pascal в среде BlackBox.
    Re[8]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 10:19
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Как возник этот проект

    СГ>>http://www.inr.ac.ru/~info21/kak.htm

    VD>Кстати, слова "по-дилетантски спроектированного" выдают скорее дилетантство писавших статью.


    Но он действительно по-дилетантски спроектирован.
    Re[21]: Oberon???????????????????????????????????
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 10:25
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    VD> Вот только такая учеба сравни с колеченьем.


    И что с Вами таким делать? Либо аргументированно это объясните, либо я опять скажу (со ссылкой на info21), что компетентные в этом вопросе люди утверждают прямо противоположное.
    Re[10]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 28.10.04 10:42
    Оценка:
    Здравствуйте, serg_mo, Вы писали:

    _>Представь себе, открывал неоднократно, и VS и IDEA. Действительно, было интересно, особенно то, что для того, чтобы поэкспериментировать с каким-либо классом, приходилось создавать новый проект, компилять его...

    _>И все для того, чтобы посмотреть, как работает какой-то метод.

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

    _>Я абсолютно согласен, зная С/С++, изучение Явы или Шарпа не будет большой проблемой (ну, может, разве что анонимные классы в Яве поднапрягут слегка . Но это при условии, что ты знаком с С. Я знаю людей, которые шли по пути Pascal/Delphi и имели большие трудности с освоением синтаксиса C#, хотя люди были хорошие программисты.


    Я сам больше 6 лет писал на Дельфи. Сложностей освоения джавы я не испытывал.
    ... << RSDN@Home 1.1.4 beta 3 rev. 214>>
    AVK Blog
    Re[21]: Oberon???????????????????????????????????
    От: eugals Россия  
    Дата: 28.10.04 10:42
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Между целыми и булевыми, и списками и булевыми:

    VD>
    VD>a = [1, 2]
    
    VD>if a[0]:
    VD>    c = 1
        
    VD>if a:
    VD>    c = 2
        
    VD>a = 1
    
    VD>if a:
    VD>    c = 2
    VD>

    Кстати, очень удобно. Ещё никто не жаловался, даже наоборот...

    Если сильно захотеть, это можно конечно назвать неявным приведением к типу, но можно и не называть. А сказать, что запись вида "if a:" или "not a" приводит к проверке поддержки объектом a checkfortruth-интерфейса, отвечающего за такого рода проверки.

    В шарпе, при подстановке в foreach у последовательностей неявно запрашивается IEnumerable. Это тоже плохо?
    Ещё, как ни ужасно это звучит, при передаче фактичеких параметров в функции они автоматически кастятся к типам формальных (если, опять же, поддерживают нужные интерфейсы).
    ... << RSDN@Home 1.1.4 beta 3 rev. 215>>
    Re[26]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 10:43
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>

    interface IStore
    {
        void Internalize(Reader reader);
        void Externalize(Writer writer);
    }



    Вот напугал. А в Zonnon-е есть абстракция еще более крутая чем интерфейс, называется definition.

    definition подобны interface плюс следующие фичи:

    1) definition кроме методов могут включать в себя еще и переменные
    2) definition может иметь предопределенную реализацию (implementation) некоторых методов.

    Другими словами, с помощью definitions создается тот же самый эффект, какой создавался в Си++ посредством множественного наследования, вот только без всяких побочных эффектов самого множественного наследования как такового, поскольку definitions — это все таки интерфейс.

    http://www.zonnon.ethz.ch/
    Re[28]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 12:31
    Оценка:
    Здравствуйте, WFrag, Вы писали:

    WF>P.P.S. Так, мысли вслух, про Zonnon ничего не знаю


    Так вместо того чтобы делать скоропалительные выводы посмотрели бы сначала ссылку.

    1) на счет переменных в definition. Найдите отличия:


    MyInterface = interface
      function  GetMyVariable: integer;
      procedure SetMyVariable(NewValue: integer);
      //...
    end;
    
    MyDefinition = definition
      var MyVariable: integer;
      //...
    end;



    2) на счет предопределенной реализации — она не такая как в "виртуальных" функциях, т.е. не имеет побочных эффектов. Подробности смотрите в ссылке.
    Re[11]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 13:01
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Именно поэтому все из перечисленных Вами языков были отвергнуты. В качестве стандарта был выбран Component Pascal на котором коряво программировать не получится.


    А можно поглядеть на примеры кода написанного на нем?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 13:40
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Именно поэтому все из перечисленных Вами языков были отвергнуты. В качестве стандарта был выбран Component Pascal на котором коряво программировать не получится.


    VD>А можно поглядеть на примеры кода написанного на нем?


    Конечно можно. Скачивайте отсюда http://www.oberon.ch/blackbox.html или от info21 — уже русифицированный. И смотрите хелп. Кстати, рекомендую почитать хелп просто как книгу, он напоминает книгу "банды четырех" по паттернам проектирования. Если чуточку потерпите, то в конце этого года Oberon Microsystems обещала открыть исходники BlackBox, а что может быть более лучшим примером программы на языке если не компилятор этого языка!
    Re[30]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 14:07
    Оценка:
    Здравствуйте, WFrag, Вы писали:

    WF>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>1) на счет переменных в definition. Найдите отличия:



    СГ>>
    СГ>>MyInterface = interface
    СГ>>  function  GetMyVariable: integer;
    СГ>>  procedure SetMyVariable(NewValue: integer);
    СГ>>  //...
    СГ>>end;
    
    СГ>>MyDefinition = definition
    СГ>>  var MyVariable: integer;
    СГ>>  //...
    СГ>>end;
    СГ>>


    WF>Разница — просто огромная.


    Да-а-а-а????????????? В ссылочку значит так и не глянули???????????????? А напрасненько-напрасненько. Очень рекомендую. Дело в том, что реализация этого определения может выставить на MyVariable get/set методы, и то что снаружи выглядит как простая переменная в разных реализациях может быть и функцией. А ссылочку-то Вы посмотрите, чтоб в следующий раз так просто в просак-то не попадать.


    СГ>>2) на счет предопределенной реализации — она не такая как в "виртуальных" функциях, т.е. не имеет побочных эффектов. Подробности смотрите в ссылке.


    WF>Без разницы. Я про зависимости говорил.


    Так расшифруйте что это означает:

    зависимость от реализации в интерфейсе

    разумеется, предварительно все же взглянув на ссылочку.
    Re[28]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 14:10
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Что же касается "полезности" перечисленных фич в интефейсе, то это кривой дизайн. Пора бы уже знать почему в интерфейсы не суют определение данных.


    И Вы туда же. Вы сначала гляньте в ссылочку, посмотрите что да как. А уж потом про данные в интерфейсе... эти данные там такие же данные как и любое другое get/set свойство — просто снаружи выглядят как данные, но могут быть и функциями.
    Re[29]: Component Pascal
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 28.10.04 14:15
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>>Что же касается "полезности" перечисленных фич в интефейсе, то это кривой дизайн. Пора бы уже знать почему в интерфейсы не суют определение данных.


    СГ>И Вы туда же. Вы сначала гляньте в ссылочку, посмотрите что да как. А уж потом про данные в интерфейсе... эти данные там такие же данные как и любое другое get/set свойство — просто снаружи выглядят как данные, но могут быть и функциями.


    И чем тогда они от интерфейсов отличаются????
    Re[30]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 14:35
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>И чем тогда они от интерфейсов отличаются????


    Это следующий шаг на пути повышения уровня абстракции (после интерфесов), ведь они действительно могут-таки иметь данные и реализацию по умолчанию. Я же уже писал, что функционально они дают то же что и множественное наследование, но без каких либо побочных эффектов и нестыковок.
    Re[31]: Component Pascal
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 28.10.04 14:38
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Курилка, Вы писали:


    К>>И чем тогда они от интерфейсов отличаются????


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


    [cейчас ведь матом начну ругаться ] ты на вопрос ответь — чем? конкретно!
    Re[32]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 14:43
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Здравствуйте, Курилка, Вы писали:


    К>>>И чем тогда они от интерфейсов отличаются????


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


    К>[cейчас ведь матом начну ругаться ] ты на вопрос ответь — чем? конкретно!


    Читай внимательно:

    1) Конкретно могут быть данные
    2) Конкретно может быть реализация по умолчанию
    Re[32]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 14:46
    Оценка:
    Здравствуйте, WFrag, Вы писали:

    WF>Ну и документации я хорошей не нашел. Я читал Zonnon_Language_Report_v02r01_7_y040416.pdf, так там собственно ничего и не сказано по сути языка.


    Язык сейчас в стадии разработки. Так что большего ожидать не приходится....
    Re[33]: Component Pascal
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 28.10.04 14:46
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Курилка, Вы писали:


    К>>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>>Здравствуйте, Курилка, Вы писали:


    К>>>>И чем тогда они от интерфейсов отличаются????


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


    К>>[cейчас ведь матом начну ругаться ] ты на вопрос ответь — чем? конкретно!


    СГ>Читай внимательно:


    СГ>1) Конкретно могут быть данные

    СГ>2) Конкретно может быть реализация по умолчанию

    Смотри что рядом WFrag написал, ну не вводят эти твои мегаинструкции ничего принципиально нового
    Re[33]: Component Pascal
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 28.10.04 14:47
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, WFrag, Вы писали:


    WF>>Ну и документации я хорошей не нашел. Я читал Zonnon_Language_Report_v02r01_7_y040416.pdf, так там собственно ничего и не сказано по сути языка.


    СГ>Язык сейчас в стадии разработки. Так что большего ожидать не приходится....


    И остаётся только свято верить в непогрешимость Вирта и собратьев!
    Re[18]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 28.10.04 14:57
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    ЗХ>>PL/I я сходу занес в число "ископаемых". А Ада, как я понимаю — вполне жива.


    VD>С тех пор как минобороны штатов сняла ограничение на языки на АДА пишут очень мало. И в основном в госстуруктурах США. Так что для всего остального мира язык мертв. Последний стандарт АДА 95.

    Про снятие ограничений я не знал
    Но тем не менеее. Язык весьма прикольный.

    ЗХ>>ОК. Гляну. Но ничего не обещаю.

    ЗХ>>Потому что PHP я, например, сознательно не добавил за общей заурядностью.

    VD>Руби — это один из самых интересных исследовательских языков программирования созданных за последнее время. Я сам его не видел, но часто слышал как его приводят в пример. Ктому же именно его так никто толком и не описан на русском (вроде).

    Я вот такое нарыл давеча:
    http://linux.yaroslavl.ru/docs/prog/ruby.html
    FAQ — це мiй ай-кью!
    Re[18]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 28.10.04 17:33
    Оценка:
    VladD2:

    > ЗХ>PL/I я сходу занес в число "ископаемых". А Ада, как я понимаю — вполне жива.


    > С тех пор как минобороны штатов сняла ограничение на языки на АДА пишут очень мало.


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

    http://www.cs.kuleuven.ac.be/~dirk/ada-belgium/myths.html

    5. Myth: Ada is not a popular language.
    Not true. You would be surprised at who uses Ada. Important applications include air traffic control, communications satellites, commercial airliners, TGV, many cities' subway systems, and many other big projects that don't get a lot of publicity.

    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[13]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 19:37
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Конечно можно. Скачивайте отсюда http://www.oberon.ch/blackbox.html


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

    СГ> или от info21 — уже русифицированный. И смотрите хелп. Кстати, рекомендую почитать хелп просто как книгу, он напоминает книгу "банды четырех" по паттернам проектирования. Если чуточку потерпите, то в конце этого года Oberon Microsystems обещала открыть исходники BlackBox, а что может быть более лучшим примером программы на языке если не компилятор этого языка!


    В дотнете порядка 200 метров исходников. Мне бы их доглядеть до конца. А уж глядеть исходники того чем пользоваться не буду смысла не много.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[29]: Component Pascal
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 19:58
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>И Вы туда же. Вы сначала гляньте в ссылочку, посмотрите что да как. А уж потом про данные в интерфейсе... эти данные там такие же данные как и любое другое get/set свойство — просто снаружи выглядят как данные, но могут быть и функциями.


    В интерфейсах Шарпа свойства допустимы. А денные есть данные. И сувать их в полиморфные структуры не гоже.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[19]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 19:58
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК> и там, где нужна повышенная надежность:


    Пно надежность АДы хорошо Хор сказал. Попробуй нарыть его мнение. Он так и сказал, что язык настолько сложный, что использовать его в сложных разработках катигорически нельзя.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 28.10.04 20:30
    Оценка:
    VladD2:

    > ПК> и там, где нужна повышенная надежность:


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


    Ну, по критериям простоты один Оберон только и прокатит

    P.S. Отзыва не нашел.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[11]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>По-моему, намного большее значение для обучения программированию имеет не язык, а квалификация преподавателей, коей лучше бы и уделялось должное внимание. А в остальном, как давно установлено, there is no silver bullet.


    Существенный недостаток есть. Язык не применим на практике. Он мертв. И учить на нем детей — значит обрекать их на дополнительное самообучение с переламыванием себя.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:00
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>И, наконец, рекордсмен в 1.1

    AVK>System.Windows.Forms.ComponentModel.Com2Interop.GetTypeConverterAndTypeEditorEventHandler

    AVK>2.0 в этом плане естественно более продвинут

    AVK>Microsoft.Internal.Deployment.Isolation.Manifest.CMS_ASSEMBLY_REFERENCE_DEPENDENT_ASSEMBLY_FLAG

    Долго софтру для поиска клипал?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[35]: Component Pascal
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:00
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Да, вот, судьба такая...


    А может ну его старичка? Взять готовое, проверенное?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[21]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:00
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Ну, по критериям простоты один Оберон только и прокатит


    Оберон может стать победителем в звании на смую простую граматику. Вот только к простоте использования это отношения не имеет. Выразительность нулевая. Кода больше. Возможностей меньше. В общем, он идел только в одной области — изучение LL(1)-парсеров. На его граматике курсовые влет пойдут.

    ПК>P.S. Отзыва не нашел.


    А гед искал?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:00
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    Кстати, я тут по Интернету книжку одну прикупил (название не помню) как раз то ли по совету Лаптева, то ли одного из его аппонентов. Так там половина описанных тобой языков обсуждается. Нельзя сказать что по вышке и глубоко. Но все же. Та же АДА абсосана дай дарогу...
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:00
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Т.е. берём только императивщину?

    К>Однобокий взгляд будет, имхо

    Еще раз повторяю: функциональщику ( ) без особой поллитры народ не поймет. Так что для начала нужно введение доходчивое сварганить!
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[13]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:00
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Например, я не вполне понимаю, зачем обобщенные алгоритмы типа сортировки делать методами классов


    Логично! Надо было воткнуть в массив метод нахождения косинуса. А в Мачь залить обобщенный поиск. Было бы по СТЛ-ному, и вообще по сишному.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:00
    Оценка:
    Здравствуйте, INTP_mihoshi, Вы писали:

    INT>Я, в общем согласен, что класс != объект. Но он изначально делался именно для реализации объектов. А теперь класс используется вообще для всего, что можно. Декларация интерфейса, объявление типа, реализация стратегии в С++оидах делается через семантику, предназначавшуюся изначально для работы с объектами, т.е. через классы.


    Действительно странно Ведь ООЯ все же. Нужно было через монады делать...
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[5]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:00
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>ИМХО разница джавы (как языка) и шарпа в том, что у шарпа есть куча всяких примочек. Оно конечно здорово упрощает жизнь профессионального программера, но для обучения оно вобщем то ни к чему.


    Ну, это ты зря. В Шарпе все концептуально полно. Уж массивы для передачи по ссылке использовать не прийдется. Ну, а то что пока не нужно можно и не преподовать.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[16]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 29.10.04 00:48
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Кстати, я тут по Интернету книжку одну прикупил (название не помню) как раз то ли по совету Лаптева, то ли одного из его аппонентов. Так там половина описанных тобой языков обсуждается. Нельзя сказать что по вышке и глубоко. Но все же. Та же АДА абсосана дай дарогу...


    И это к чему? То ли скажи название, то ли скажи, какие ты оттудава идеи вынес — в смысле, как надо/не надо описывать языки...
    А то вишь, хвастается он...
    Это мы, Зверьки! << Metallica — Prince Charming >>
    FAQ — це мiй ай-кью!
    Re[22]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 29.10.04 00:50
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    ЗХ>>А вот вам к вопросу о живости языка:

    ЗХ>>

    ЗХ>>IBM PL/I for AIX, V2.0
    ЗХ>>IBM United States Software Announcement
    ЗХ>>June 22, 2004


    VD>Ага. Кто-то мудрый, из программеров, подсуетился в 1563 году скриптик прикрутил. Теперь версия всегда всвежая.

    Не-не-не. Я на эту статью вышел как раз по новостной заметки на каком-то ПЛ1-фильском сайте. Так что без балды, новая версия.
    Это мы, Зверьки! << Metallica — Prince Charming >>
    FAQ — це мiй ай-кью!
    Re[11]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 08:02
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Никаких очевидных существенных преимуществ Оберона & co. в качестве учебного языка перед многими другими не заметно


    Это Вы их в упор не видите. Существенные преимущества неоднократно демонстрировались, главными из которых является то, что Оберон — простой язык (минимальный и достаточный) и высоко-дисциплинирующий программиста. На счет дисциплины — лично мной было указано, на то как высококвалифицированные программисты, но воспитанные на Си-подобных языках, пишут элементарный код циклов используя либо несколько continue либо вспомогательные переменные, хотя и то и другое излишне, так как можно написать тоже самое более просто (дисциплинированно). То есть даже высококвалифицированные специалисты способны блуждать в трех соснах, что было бы не возможно будь они воспитаны на высокодисциплинирующих языках каковыми являются обероны.
    Re[30]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 08:05
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>В интерфейсах Шарпа свойства допустимы. А денные есть данные. И сувать их в полиморфные структуры не гоже.


    А в Zonnon-е друга концепция, поэтому ее другим термином обозвали, не interface, а definition
    Re[18]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 29.10.04 08:06
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Долго софтру для поиска клипал?


    3 минуты
    ... << RSDN@Home 1.1.4 beta 3 rev. 214>>
    AVK Blog
    Re[8]: Мэйнстрим vs. Самосовершенствование :)))
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 08:07
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    S>> Ну ты знаток Delphi. exit был еще в Паскале. Про continue могу сомневаться .Может подскажешь в какой версии появился???


    VD>В Паскале Exit-а небыло. Тогде у Вирта совсем крышу рвало. Но Exit это завершение приложения и к return-у он отношение не имеет. Так что о чем ты ведешь речь, как всегда понять сложно.


    Какие Вы демонстрируете глубоки познания! exit — это в Си/Си++ завершение приложения, а в борландовском Delphi/Pascal exit — это выход из процедуры, а завершение программы Halt();
    Re[19]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 29.10.04 08:16
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>Тут http://devlink.crimea.ua/articles/article.php?article_id=20 краткое описание.

    FR>Вообще Ruby в общем конкурент питона, но по моему синтаксис у него менее понятный, и он ближе к функциональным языкам.

    ИМХО наоборот, Руби чем то ближе по духу джаве и шарпу.
    ... << RSDN@Home 1.1.4 beta 3 rev. 214>>
    AVK Blog
    Re[31]: Component Pascal
    От: WFrag США  
    Дата: 29.10.04 08:23
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А в Zonnon-е друга концепция, поэтому ее другим термином обозвали, не interface, а definition


    Да, но только ты так и не объяснил, чем эти поля-данные в definition отличаются от свойств в интерфейсе. И где там другая концепция — я не вижу.


    И еще, объясни, чем эта концепция definition-implementation-object отличается от C++-ых классов?
    Re[16]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 08:36
    Оценка:
    Здравствуйте, WFrag, Вы писали:

    WF> Что мы теряем


    А зато что приобретаем: *.odc — это хранилище сериализованных объектов в (бинарном виде) — так загрузите эти объекты и работайте с самими объектами, а не с текстом как таковым — уровень абстракции резко повышается.
    Re[32]: Component Pascal
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 08:49
    Оценка:
    Здравствуйте, WFrag, Вы писали:

    WF>И еще, объясни, чем эта концепция definition-implementation-object отличается от C++-ых классов?



    Только definition — является единицей наследования (Экземпляров definition создавать нельзя). definition можно подвергнуть refine (по русски говоря отнаследоваться от него, причем это наследование обычное, а не множественное). И в каждой из refin'ов можно дать новые реализации-по-умолчанию некоторых методов. Object может реализовывать несколько definition, но сам object НЕ ЯВЛЯЕТСЯ единицей наследования, зато экземпляры object-ов создавать можно.


    Каждая definition рефайнится по своему дереву (иерархии наследования). Объекты реализуют несколько definition, но сами не участвуют в механизме наследования (т.е. от объекта отнаследоваться нельзя). Таким образом, как я уже раза три повторил, мы получаем все положительные стороны множественного наследования, но в то же время не зарабатываем никаких побочных эффектов.
    Re[18]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 08:51
    Оценка:
    Здравствуйте, WFrag, Вы писали:

    WF>Например, в Eclipse я вижу исходники Java в виде дерева пакетов/классов/методов. Это более высокий уровень абстракции, чем текст? Несомненно. Но при этом у меня остается возможность работать и с более низким — например, подсчитать количество слов в программе. Или сравнить два исходника.


    Так ведь, с объектами это тоже можно, добавил метод подсчета слов и метод сравнения и готово...
    Re[19]: Обновление
    От: WFrag США  
    Дата: 29.10.04 08:56
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Так ведь, с объектами это тоже можно, добавил метод подсчета слов и метод сравнения и готово...


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

    Такими темпами мы на каждый язык/формат будем все средства переписывать.

    Вот, например, в чем сила регулярных выражений? В универсальности. Они работают и на конфигах, и на текстах программ, и на документации. Они универсальны. Ты же предлагаешь "до основанья все разрушить".
    Re[7]: Oberon???????????????????????????????????
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 29.10.04 08:57
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

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

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

    Все было бы здорово, если бы мы могли вводить все постепенно. Ну типа — вот у нас простой делегат. Он работает вот так-то. Вот ситуация, где надо много подписчиков — ок, можно сделать делегат-диспетчер. Вот ситуация, где нехороший подписчик выкидывает других подписчиков из списка — ок, вот вам разнесенные интерфейсы подписки и итерации.
    А вот теперь мы все это обозначаем двумя специальными словами. Увы, первое, что увидят детишки — это именно эти слова. Через полгода они бы сами поняли, в чем их нужность и смысл. А так все выходит задом наперед, т.к. евенты зашиты сразу в библиотеке.
    AVK>Единственное в чем джава сложнее шарпа, это в концепции вложенных классов. Если в шарпе их по сути просто нет, то в джаве все довольно нетривиально.
    Ага. Очень какая-то неожиданная концепция. Хотя, практически, это тоже вшитая в язык реализация некоторого паттерна. В джаве считали, что именно этот паттерн нужен и важен. А делегаты — обойдутся.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[11]: Oberon???????????????????????????????????
    От: serg_mo  
    Дата: 29.10.04 10:46
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

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

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

    AVK>Я сам больше 6 лет писал на Дельфи. Сложностей освоения джавы я не испытывал.

    Андрей, я не имел в виду, что у всех паскалистов будут проблемы. У меня тоже c Джавой проблем не было, и тоже после Delphi Но все же, согласись, знание хотя бы основ С/С++ сильно упрощает обучение. Собственно, именно поэтому и Джава, и Шарп являются наследниками С++
    ... << RSDN@Home 1.1.3 stable >>
    Re[17]: Обновление
    От: _Obelisk_ Россия http://www.ibm.com
    Дата: 29.10.04 10:53
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Так просто, например, рептилоидов поражать. В то время когда это уже было в оберонах MS Word только только делал первые шаги...


    Дык в MS Office-то оно вроде как симптаичней выглядит.



    Душа обязана трудиться! (с) Н.Заболоцкий.
    Re[9]: Мэйнстрим vs. Самосовершенствование :)))
    От: serg_mo  
    Дата: 29.10.04 11:06
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Ява давно уже мэйнстрим и во всем ире кучи универов обучают именно на ней.

    Теперь уже да.
    ... << RSDN@Home 1.1.3 stable >>
    Re[8]: Мэйнстрим vs. Самосовершенствование :)))
    От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
    Дата: 29.10.04 13:53
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    S>> Ну ты знаток Delphi. exit был еще в Паскале. Про continue могу сомневаться .Может подскажешь в какой версии появился???


    VD>В Паскале Exit-а небыло. Тогде у Вирта совсем крышу рвало. Но Exit это завершение приложения и к return-у он отношение не имеет. Так что о чем ты ведешь речь, как всегда понять сложно.

    Exit это выход из процедуры. А Continue и Break еще во 2 Delphi были
    и солнце б утром не вставало, когда бы не было меня
    Re[16]: Мэйнстрим vs. Самосовершенствование :)))
    От: serg_mo  
    Дата: 29.10.04 14:16
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:


    ПК>Ты говоришь о другой ситуации, а именно о помещении функции sort в класс Array. Дело спорное, т.к. нарушает Open-Closed Principle, но вопрос совсем отдельный.

    Я не очень понял, а в чем нарушение? Объясни, пожалуйста
    ... << RSDN@Home 1.1.3 stable >>
    Re[17]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>И это к чему? То ли скажи название, то ли скажи, какие ты оттудава идеи вынес — в смысле, как надо/не надо описывать языки...

    ЗХ>А то вишь, хвастается он...

    Я к тому, что стоит перед написанием статьи глянуть на книжку. А название не помню . Она, зараза, дома.

    О, блин... Дописал и вспомнил. Я же ее по Интернету заказывал.

    Стало быть остались следы в мыльнице.

    В общем, вот она: Основные концепции языков программирования
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, serg_mo, Вы писали:

    ПК>>Ты говоришь о другой ситуации, а именно о помещении функции sort в класс Array. Дело спорное, т.к. нарушает Open-Closed Principle, но вопрос совсем отдельный.

    _>Я не очень понял, а в чем нарушение? Объясни, пожалуйста

    Экий ты не понятлевый: Re[14]: Мэйнстрим vs. Самосовершенствование :)))
    Автор: VladD2
    Дата: 29.10.04
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[7]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

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


    VD>>Ну, это ты зря. В Шарпе все концептуально полно.


    AVK>Дело не в этом, дело в том что на изучение шарповских фичек нужно банально больше времени.


    Дык никто же не заставляет все учить. Но уж за время обучения в институте такой язык как шарп можно уж точно освоить.

    AVK> Например посмотри реализацию событий. В джаве события реализуются при помощи интерфейсов, т.е. если человек уже знает про концепцию интерфейсов, то про события ему вобщем то уже объяснять не нужно.


    Гы. Хороший пример. Боюсь на объяснение концепций событий из Явы уйдет в разы больше времени, чем на объяснение событий в Шарпе. А если вспомнить все эти неявные ссылки на родительские классы из вложенных...

    AVK> В шарпе же нужно объяснить что такое делегат, потом что такое мультикаст делегат, потом что такое собственно эвент.


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

    AVK>Единственное в чем джава сложнее шарпа, это в концепции вложенных классов.


    Гы. А не на них ли теперь события делают?

    К тому же сложностей хватет. В Яве все недостоющее эмулируется. А эти эмуляции тоже объяснять нужно. То же применение массивов вместо ref/out модификаторов у параметров объяснять прийдется очень подробно. Уж проще объяснить те самые ref/out...

    AVK>Тебе часто приходится использовать ref и out?


    Приходится. А что? Или типа передача ссылок и out-параметры — это не важный аспект обучения?

    AVK>И опять же — для обучения предпочтительнее для этого использовать ... нет, не массивы, а специально созданные классы, содержащие совокупность параметров.


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

    AVK> Концептуально это даже чище ref и out. Понятно что писанины при этом больше, но при обучении это не страшно.


    Это очень грязный хак. А вот ref и out очень красивые решения.

    VD>> Ну, а то что пока не нужно можно и не преподовать.


    AVK>От некоторых вещей отмазаться не получится, например от боксинга и структур.


    Опять же или прийдется эмулировать их, или умолчать. Оба случая не в пользу Явы.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[8]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

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


    Дык вот это все что приходится писать руками прийдется объяснять при обучении. И сделать это будет сложнее чем дать концептуально чистые вещи.

    Ну, а если умалчивать о возможностях, то пофигу где о них умалчивать.

    Например, если ты захочешь объяснить как в процедуре модифицировать внешнюю переменную, то на яве нужно будет объяснить такой код:
    int[] refInitVal = new int[1];
    refInitVal[0] = defVal;
    obj.CallMethod(refInitVal);

    А в шарпе:
    int initVal = defVal;
    obj.CallMethod(ref initVal);

    думаю, что объяснить ref будет проще.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 18:16
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) У меня нет моих людей. И я не учитель, как Вы почему-то подумали.


    Тогда с чего эта инициатива?

    СГ>2) На сайте info21 есть ссылки на другие сайты где кучами лежат компоненты под BlackBox. А еще, там же есть, например, ссылка на сборник олимпиадных задач для школьников.


    Так можно все же конкретную ссылку. А то лазить черти-где охоты нет.

    СГ>Но! Обращаю Ваше внимание, что для того чтобы смотреть исходники скачать и установить BlackBox Вам все равно придется, так как формат в котором хранятся исходные тексты программ не plain-text, а бинарный формат *.odc (Oberon Document).


    Ну, это логично! Все как аголтелые стремятся к стандартизации форматов. XML изучают. Было просто банально быть как все.

    СГ> odc-файл это файл в котором в бинарном виде сохранен конгломерат взаимоссылающихся друг на друга объектов (сериализованные объекты).


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

    А ББ я еще вчера скачал. Надо признаться — это еще тот атракцион. Весит как пол дотнета... интуитивность потрясающая!

    СГ> Благодаря этому, oberon document представляет собой среду напоминающую MS Word,


    Ага. Только кривее и непонятнее.

    СГ> то есть текст можно форматировать (шрифт, цвет, размер, стиль — каждой буквы).


    Ага. Вместо того чтобы сделать подсветку синтаксиса.

    СГ>Нажимаешь на кнопку — процедура выполняется!


    Ну, еще немного и будет так же удобно как в консоли Питона.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[19]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 18:16
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Так ведь, с объектами это тоже можно, добавил метод подсчета слов и метод сравнения и готово...


    И что есть примеры сравнения двух odc-файлов?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Обновление (73 KB)
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 18:16
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Это УБОЖЕСТВО, с которым невозможно работать.


    О! Вот эту мысль я и пытаюсь донести.

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

    Кстати, сдества отладки там тоже потрясающие. И это при бесплатном Эклпипсе и VS Express.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 18:16
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Еще раз. Можно поглядеть твой код?

    ЗЫ

    Мой можно поглядеть вот тут R#.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 18:16
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    FR>>Тут http://devlink.crimea.ua/articles/article.php?article_id=20 краткое описание.

    FR>>Вообще Ruby в общем конкурент питона, но по моему синтаксис у него менее понятный, и он ближе к функциональным языкам.

    AVK>ИМХО наоборот, Руби чем то ближе по духу джаве и шарпу.


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

    Переход из ФЯ в ООЯ просто красив:
    # Императивщина
    sum = 0
    1..10.each do
        |i| sum += i
    end
    ...
    # Функциональщина 
    sum = 0
    1..10.each { |i| sum += i }


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

    Заточка на ФС проглыдяывается не вооруженным взглядом.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 29.10.04 19:49
    Оценка:
    Здравствуйте, serg_mo, Вы писали:

    ПК>> Ты говоришь о другой ситуации, а именно о помещении функции sort в класс Array. Дело спорное, т.к. нарушает Open-Closed Principle, но вопрос совсем отдельный.


    _>Я не очень понял, а в чем нарушение? Объясни, пожалуйста


    В том, что для добавления нового алгоритма (например, partial_sort, binary_search и т.п.), руководствуясь таким дизайном, будет нужно модифицировать определение класса.
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[12]: Oberon???????????????????????????????????
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 29.10.04 21:05
    Оценка:
    Здравствуйте, serg_mo, Вы писали:

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

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

    Ссылку в этом топике я уже давал.
    ... << RSDN@Home 1.1.4 beta 3 rev. 216>>
    AVK Blog
    Re[18]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 22:14
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>В том, что для добавления нового алгоритма (например, partial_sort, binary_search и т.п.), руководствуясь таким дизайном, будет нужно модифицировать определение класса.


    Ужас какой? Хорошо хоть все эти алгоритмы уже лет дать как описаны. Да и спасибо ООП.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 23:41
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Прикол в том, что алгоритмы из Arrays нельзя применить к List или Deque,


    Да уж. Сортированная очередь — это прикол.

    ПК> соответственно, при разработке последних придется создать Lists и Deques с тем же содержимым, что в Arrays.


    Зачем? Темболее что ArrayList содержит в себе массив и поьзуется его функциями.

    ПК> Плюс, когда окажется, что авторы Arrays не прописали давно изученный и описанный алгоритм в Arrays, надо будет этот "класс" модифицировать. А вслед за ним и Lists, и Deques.


    Ну, про статические методы и наследование ты не слышал?

    ПК>Одним из фундаментальных принципов которого является Open-Closed Principle. А запихивание всех подряд функций в тот или иной "класс", у которого нет никаких основных атрибутов (поведение, состояние, инварианты), к ООП никакого отношения не имеет.


    Ну, а теперь представь, что кое-то на ООЯ пытается писать в ОО-стиле. Может они конечно и не удовлетворяют твоей концепции, но пользоваться плодами их трудов чертовски удобно. А вот СТЛ-ем (который вроде удовлетворяет ей) нет.

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

    Так что если концепция мне не помогает, то ну ее в лес.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[23]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 30.10.04 12:49
    Оценка:
    Undying,

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

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

    ПК>>"Попытки писать в ОО-стиле", если подразумевать под этим напихивание в классы всевозможных "утилит", могут "работать" (*), только если весь код, использующий эти классы, находится под прямым контролем разработчиков обсуждаемых классов. Плюс, разработчики готовы платить за поддержание всех наследников этих классов, что в больших проектах может обходиться достаточно дорого.


    U>Поэтому за наследование от неабстрактных классов в общем случае нужно пинать ногами.


    Еще больше в "классическом ООП" принято "пинать" за работу непосредственно с классом, а не через какой-либо интерфейс. Соответственно, если поступать по канонам, то в приведенном примере иерархию нужно будет чуть-чуть усложнить:
    interface Sequence<T>;
    interface RandomAccessSequence<T>;
    interface List<T> : Sequence<T>;
    interface Array<T> : RandomAccessSequence<T>;
    class ListImpl<T> : List<T>;
    class ArrayImpl<T> : Array<T>;

    соответственно, т.к. клиентам классы ListImpl<T> и ArrayImpl<T> не видны, добавить что-либо типа sort() мы можем только начиная с уровня List<T> или Array<T>, которые конкретными классами не являются, и добавление чего-либо в эти интерфейсы приводит к тем же проблемам, что были рассмотрены при модификации Sequence<T>.

    ПК>> для некоторых задач принципиальным оказывается вопрос: сохраняет ли используемый алгоритм порядок "одинаковых" с точки зрения упорядочивания элементов. Ну, что ж, следуя заведенному порядку, нам будет нужно добавить метод stable_sort().


    U>А если возникла задача определять вид сортировки по внутреннему состоянию класса, то что будешь делать?


    Дык, это уже речь пошла о каких-то более специализированных классах, не столь универсальных, как стандартные Array, List etc. В этих специализированных классах, для которых сортировка является не "утилитой", а основным поведением, сам байт велел делать функцию sort() членом.

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

    ПК>>Однако на этом наши приключения не заканчиваются: ведь у пользователя, в его наследнике Array<> <...>


    U>А вместо наследования от Array делегировать его религия не позволяет?


    Мне? Более чем Даже еще хуже: моя религия это не только позволяет, но и предписывает. Это я просто позволил себе, быть может, не очень ясно, проехаться по практике наследования для "расширения" функциональности.

    ПК>>Далее, если представить себе развитие этой иерархии и возможную потребность добавления в будущем утилит типа find(), find_if(), binary_search() и т.п., то становится очевидно, что в классы этой иерархии эти функции также добавлять будет нельзя.


    U>Можно для них ввести дополнительный интерфейс и реализовывать его будут только те классы, которым это действительно надо.


    А что мы будем делать, когда нам понадобится новый "универсальный" алгоритм (скажем, partial_sort), которого в стандартном Array нет? Все равно, рано или поздно, мы придем к тому, что нам будут нужны "внешние" по отношению к классу "утилиты".

    ПК>>Есть и еще одна сторона этой проблемы: очевидно, что разработчики библиотеки не могут учесть всех нужд пользователей, и снабдить их всеми нужными им "утилитами". Что же делать пользователям? Следуя "попыткам писать в ОО-стиле", им надо будет унаследоваться от класса, который они захотят "расширить", и добавлять в своего наследника нужные им "утилиты". Но на этом пути их ждет масса трудностей.


    U>Тебя чем не устраивает связка статичные функции + инкапсулирование вызовов этих функций методами класса?


    Методами какого класса, унаследованного от "библиотечного"?

    "Внешние"/статические функции меня устраивают. Я только не вижу оснований делать к ним переходники в виде членов класса, пока это поведение не становится ключевым для рассматриваемых объектов. В частности, сортировка или поиск "универсальных" массивов и списков, на мой взгляд, к таковым не относятся.

    ПК>>Выход простой: тем или иным образом вынести эти "утилиты" за пределы самих классов. <...>


    U>Конечно, часть проблем это решает, но часть и создает, так что на серебрянную пулю не тянет.


    Безусловно. Поэтому надо смотреть в каждом конкретном случае исходя из назначения класса, а не безусловно пихать все подряд нужные "утилиты" в виде членов класса, наравне с "основными" функциями класса. Тем более, выбор того, делать ли некоторую функцию членом класса, не должен базироваться на том, как на это дело смотрит Intellisence ("любой дурак нажав точку в IDE получит их список")
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[26]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 30.10.04 16:54
    Оценка:
    > Я придерживаюсь концепции, рекомендующей по умолчанию помещать методы в класс, являющий субъектом, а не объектом действия, предоставляя в объекте достаточный для реализации намерений субъекта интерфейс. В частности, возвращаясь к твоему примеру, мы говорим: "(Мы) толкнем шарик с силой F" (скорее, даже: "Передать шарику импульс P") Но это уже софистика, т.к. в том, что у шарика неизбежно будет какой-то метод, принимающий воздействие, ты, естественно, прав.

    P.S. Кстати, хорошую аналогию ты подобрал. Представим, что нам часто приходится катать шарик по кругу. С моей точки зрения функция go_round интерфейсу шарика не принадлежит, являясь наглядным примером вспомогательного алгоритма, который стоит реализовать через "основной" интерфейс "шарика" (accept_impulse etc.).
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[12]: Обновление
    От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
    Дата: 31.10.04 05:23
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    ПК>>Никаких очевидных существенных преимуществ Оберона & co. в качестве учебного языка перед многими другими не заметно


    СГ>Это Вы их в упор не видите. Существенные преимущества неоднократно демонстрировались, главными из которых является то, что Оберон — простой язык (минимальный и достаточный) и высоко-дисциплинирующий программиста.


    Ну да, "дисциплинирующий"! Со встроенным GC-то... От уж дисциплина так дисциплина.

    На самом деле, существенные преимущества языка програмирования с точки зрения обучения можно продемонстрировать, только если сопоставить успехи программистов, обучавшихся на Oberon с программистами, обучавшимися на C#, Python, C++, Java, Pascal. Только так и не иначе. Поверь, подпись "Никлаус Вирт" — это просто подпись "Никлаус Вирт". Ничего более. Нету никакой ложки.

    СГ> На счет дисциплины — лично мной было указано, на то как высококвалифицированные программисты, но воспитанные на Си-подобных языках, пишут элементарный код циклов используя либо несколько continue либо вспомогательные переменные, хотя и то и другое излишне, так как можно написать тоже самое более просто (дисциплинированно).


    Разворачивание последовательности IF-THEN-ELSE так, что она с трудом помещается в экран, это что? Метод решения задачи, по-твоему?

    СГ> То есть даже высококвалифицированные специалисты способны блуждать в трех соснах, что было бы не возможно будь они воспитаны на высокодисциплинирующих языках каковыми являются обероны.


    Это "блуждание в трёх соснах" — всего лишь игра иллюстрации. И нельзя делать из неё каких-то выводы космического масштаба и космической же... э... ну ты понял. (c) профессор Преображенский.
    ... << RSDN@Home 1.1.3 stable >>
    Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
    P.S.: Винодельческие провинции — это есть рулез!
    Re[20]: Читайте хелп
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 31.10.04 07:12
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>...невозможно работать.


    Из приведенного рисунка видно следующее:

    1) Вы зачем-то засунули в Log текст программы и пару контролов... Log — предназаначен для вывода сообщений.
    2) Для того чтобы написать свою программу нужно создать новый документ.
    3) Контролы, вообще-то, принято помещать на формы.

    Вывод:
    Почитайте хелп.
    Re[14]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 31.10.04 07:35
    Оценка:
    Здравствуйте, Геннадий Васильев, Вы писали:

    ГВ>Здравствуйте, Сергей Губанов, Вы писали:


    VD>>>Существенный недостаток есть. Язык не применим на практике. Он мертв. И учить на нем детей — значит обрекать их на дополнительное самообучение с переламыванием себя.

    СГ>>Я уже не раз указывал Вам на Вашу некомпетентность в этом вопросе. Но Вы продолжаете повторяться вновь и вновь.

    ГВ>Извини, дорогой. Если ты компетентен, то не грех указать на конкретные ошибки собеседника. А так, доверие к тебе ещё сильнее падает. Знаешь, орать "сам дурак" мы все умеем.


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

    http://cern.ch/oberon.day

    Свежие аэрокосмические новости: http://www.prweb.com/releases/2004/9/prweb160825.php (Excelsior — (бывший XDS) разработчик компиляторов модулы и оберона).

    Кстати, сам не давно узнал — на Обероне-2 написана ОС реального времени XO/2, управляющая роботами контроля дорожного движения, расставляемыми в данный период по всей Швейцарии.

    Да Вы и сами можете покопаться в интернете по ключевым словам Modula, Oberon...
    Re[22]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 08:19
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Может это, конечно, (для некоторых) и прикол, но сортированные очереди проходят в курсе изучения Computer Science, а некоторым — о ужас! — даже рассказывают о priority sorted queue


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

    Кстати, по версии гугля "priority sorted queue" встречается 15 раз. В то время как "priority queue" примерно 59800 раз. Так что это это просто некорерктное использование терминов. И попытка выдать это дело за факты.

    >> Ну, а теперь представь, что кое-то на ООЯ пытается писать в ОО-стиле. Может они конечно и не удовлетворяют твоей концепции, но пользоваться плодами их трудов чертовски удобно.


    ПК>Это не "мои" концепции, это один из классических критериев качества объектно-ориентированного дизайна.


    Ты ее навязываешь, значит она твоя. К ОО-дизайну она в общем-то отношения не имеет. Более того. В твоем видение она даже становится вредной, так как отрицает базовые концепции вроде инкапсуляции.

    >> По теории ООП все методы объекта желательно помещать в его класс.


    ПК>Это в некотором роде тавтология,


    Для тех кто не понял объясняю — это сарказм.


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


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

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


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

    Простенький примерчик (хотя странно, что тебе его нужно приводить). Конечно, многие вычисления можно произвести и на универсальных объектах. Так для хранения времени прекрасно подходят целые или числа с плавающей точной. Все вычисления можно реализовать отдельными функциями, обосновав это применением метода "отрытый-клозет" , ну, например:
    int AddMinutes(int time, int minutes)
    {
        return time + minutes * 60;
    }

    и это будет работать... до той поры пока какой-нибудь неосторожный отоваришь, не залепит в программе, например, такой код:
    int time = InitTime(1, 2, 0);
    time = AddKilometres(2);


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

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

    ПК>"Попытки писать в ОО-стиле", если подразумевать под этим напихивание в классы всевозможных "утилит", могут "работать" (*), только если весь код, использующий эти классы, находится под прямым контролем разработчиков обсуждаемых классов.


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

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


    "Может" — вряд ли должно являться критерием доказательства. С тем же успехом и безапелляционностью могу заявить, что грамотное проектирование иерархии наследования может существенно сократить затраты на поддержку больших проектов. Собственно в отличии от твоего заявления мое подтверждается теорией и практикой ООП. Для того ООП и создавался.

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


    Опять таки заменим ярлык "утилиты", но подобающее название методы — и станет очевидно, что твои слова не более чем профанация идей ООП.

    ПК>Например, представим, что у нас есть скелет простенькой иерархии "библиотечных" контейнеров (псевдокод):

    ПК>
    ПК>interface Sequence<T>
    ПК>{
    ПК>   class Pos;
    
    ПК>   uint size();
    ПК>   bool is_empty();
    
    ПК>   Pos begin();
    ПК>   Pos end();
    ПК>   Pos next(Pos);
    
    ПК>   Pos insert(Pos, T);
    ПК>   void remove(Pos);
    ПК>   void clear();
    ПК>};
    
    ПК>interface RandomAccessibleSequence<T> : Sequence<T>
    ПК>{
    ПК>   T operator[](int index);
    ПК>   Pos pos_by_index(int index);
    ПК>};
    
    ПК>class List<T> : Sequence<T>
    ПК>{
    ПК>};
    
    ПК>class Array<T> : RandomAccessibleSequence<T>
    ПК>{
    ПК>};
    ПК>


    ПК>Итак, мы хотим иметь возможность эти контейнеры сортировать. Допустим, мы решили добавить метод sort() в интерфейс Sequence<>.


    Не ожидал от тебя столько детский ошибок в таком простом варианте.
    В описанной выше иерархии имеется класс RandomAccessibleSequence — это подразумевает, что ее предок не должен иметь средств прямого доступа к последовательности, а значит методы:
    Pos next(Pos);
    Pos insert(Pos, T);
    void remove(Pos);

    не имеют права находиться в этом классе.

    Более того. Под большим вопросом находится целесообразность размещения в последовательности методов:
    uint size();
    bool is_empty();
    Pos begin();
    Pos end();

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

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

    Кстати, в .NET-е иерархия хотя и не идеальна, но значительно чище твоей:
    public interface IEnumerator<T> : IDisposable
    {
        bool MoveNext();
        T Current { get; }
    }
    
    public interface IEnumerable<T>
    {
        IEnumerator<T> GetEnumerator();
    }
    
    public interface ICollection<T> : IEnumerable<T>
    {
        // Methods
        void Add(T item);
        void Clear();
        bool Contains(T item);
        void CopyTo(T[] array, int arrayIndex);
        bool Remove(T item);
        
        // Properties
        int Count { get; }
        bool IsReadOnly { get; }
    }
    
    public interface IList<T> : ICollection<T>, IEnumerable<T>
    {
        // Methods
        int IndexOf(T item);
        void Insert(int index, T item);
        void RemoveAt(int index);
        
        // Properties
        T this[int index] { get; set; }
    }
    
    // Внимание! Реализация! :)
    public class List<T> : IList<T>, IList
    {
        ...
        public T Find(Predicate<T> match);
        public List<T> FindAll(Predicate<T> match);
        public int FindIndex(Predicate<T> match);
        public int FindIndex(int startIndex, Predicate<T> match);
        public int FindIndex(int startIndex, int count, Predicate<T> match);
        public T FindLast(Predicate<T> match);
        ...
        public void Sort();
        public void Sort(IComparer<T> comparer);
        public void Sort(Comparison<T> comparison);
        public void Sort(int index, int count, IComparer<T> comparer);
        ...
    }


    Будь моя воля я бы выделил понятие модифицируемой коллекции в отдельную иерархию. Но ребята делающие Framework решили, что достаточно будет runtime-проверок.

    Однако даже в таком виде это шедевр ОО-дизайна по сравнению с СТЛ которую ты тут защищаешь.

    ПК>Некоторое время мы живем счастливо, но оказывается, что для некоторых задач принципиальным оказывается вопрос: сохраняет ли используемый алгоритм порядок "одинаковых" с точки зрения упорядочивания элементов. Ну, что ж, следуя заведенному порядку, нам будет нужно добавить метод stable_sort().


    ПК>Но как только мы подобным образом изменим интерфейс Sequence<>, все его наследники "сломаются", т.к. у них-то реализации stable_sort() не будет.


    Гы. Видимо это от безграмотного проектирования. Собственно об этом сказано выше.

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


    [i]Паша, наделав таких детских ошибок в проектировании иерархии классов, ты задаешься столь не детскими вопросами. Может они не спроста сделаны? [/q]
    Конечно, нет! Последовательность обеспечивающая прямой (другими словами эффективный) доступ к своим элементам, а так же обеспечивающая модификацию своих элементов без создании копии (а это ведь еще не факт!) позволяет реализовать сортировку значительно эффективнее. Более того еще большой вопрос нужно ли вводить метод сортировки в последовательность не обеспечивающую прямой доступ. И еще более того... совсем не ясно зачем вводить метод сортировки в базовый интерфейс?

    ПК> Ведь у пользователя могут быть свои наследники интерфейса Sequence<T>, о реализации которых мы ничего не знаем... Соответственно, этого делать нельзя, и придется поступать как-нибудь по-другому.


    Паша, вводить методы зависящие от реализации в базовые интерфейсы (а именно о них ты сейчас говоришь) довольно неразумно. Однако не смертельно. И говорить про "нельзя" я бы не стал. Неразумно тут будет звучать более подходяще.

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

    ПК>Хорошо, скажем, мы, понимая эту проблему, интерфейс Sequence<> менять не будем, а вместо этого добавим stable_sort(), скажем, в Array<>, где он более всего нужен, и будет иметь реализацию по-умолчанию, на случай, если кто-то от Array<> унаследовался.


    Ну, слава буогу.

    ПК>Однако на этом наши приключения не заканчиваются: ведь у пользователя, в его наследнике Array<>, уже могла быть своя stable_sort(), обладающая несколько иной семантикой, и эта функция "перекроет" определенную в Array<>. В таком случае новые функции, принимающие Array<>, и предполагающие соответствие семантики stable_sort() той, что заявлена в Array<>, правильно работать не будут.


    Хочу тебя расстроить. Этот случай никакого отношения к "утилитам", как ты изволил выразиться, не имеет. Введение любого нового метода чревато подобными проблемами. Если ты забудешь ввести в в свою последовательность, например, метод Add, то уверяю тебя ты нарвешся на те же самые проблемы. К тому же — это не такая большая проблема. Нормальные языки программирования поддерживают перекрытие и максимум что мы получим — это варнинг (в Шарпе и ничего в C++), который успешно уберем за пару минут.
    Реализовав подобные методы как статические ты так же можешь нарваться на перекрытие. Это неизбежно. Мир не идеален.

    ПК>Далее, если представить себе развитие этой иерархии и возможную потребность добавления в будущем утилит типа find(), find_if(), binary_search() и т.п., то становится очевидно, что в классы этой иерархии эти функции также добавлять будет нельзя.


    Возможно Find, BinarySearch и т.е. можно назвать утилитами, так как они не модифицируют состояние. Но это такие же методы. Ты прав, что их не стоит засовывать в базовые абстрактные интерфейсы. Но то, что они должны быть методами классов-реализаций лично у меня даже не возникает сомнений. Если есть большое сомнение, что данные методы целесообразно делать экземплярными, то хотя бы можно сделать их статическими. Это точно никому не повредит.

    ПК>Есть и еще одна сторона этой проблемы: очевидно, что разработчики библиотеки не могут учесть всех нужд пользователей, и снабдить их всеми нужными им "утилитами". Что же делать пользователям? Следуя "попыткам писать в ОО-стиле", им надо будет унаследоваться от класса, который они захотят "расширить", и добавлять в своего наследника нужные им "утилиты". Но на этом пути их ждет масса трудностей.


    Зачем им наследоваться? Наследование это инструмент который нужно применять по месту. Они могу просто добавить нужные методы. Если нужно соблюсти неизменность интерфейса, то нет проблем ввести расширенный интерфейс и реализовать его.

    [В общем, надоело отвечать на выводы сделанные на базе неверных предпосылок и трактовок принципов ООП, так что остальное поскипано.]

    ПК>Выход простой: тем или иным образом вынести эти "утилиты" за пределы самих классов. В любом случае, никакой необходимости для них быть членами обсуждаемых классов нет, т.к. они прекрасно могут быть реализованы через "основной" интерфейс (а если не могут, то "основной" интерфейс не полон). А в качестве приза мы получим невероятную легкость расширения набора этих "утилит", совершенно не затрагивая клиентов классов рассматриваемой иерархии. Более того, пользователи с той же легкостью смогут пополнять набор "утилит" по такому же принципу.


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

    Теперь что касается необходимости. Бесспорно, методы, не изменяющие состояние объекта можно выносить куда угодно. Более того, метода, не относящегося к самым базовым, вообще можно не делать. Вот только классы делаются для того чтобы потом ими пользовались люди. А стало быть, довольно неразумно выносить их черти куда. Это приводит к тому, что писать код становится значительно сложнее. И к тому, что приходится хранить в краткосрочной памяти слишком много деталей. А ведь все парадигмы программирования как раз и создаются для того чтобы уменьшить количество информации которых человек должен хранить у себя в голове. Попробую проиллюстрировать это на простом примере. Когда я пишу программу на C#, то все вокруг меня является объектом! Это не громкие слова. Это большое достижение в области поднятия уровня языка. Для того чтобы найти нужные средства работы с некоторыми объектами (функции для работы с переменными в терминологии С/С++) у меня есть выбор нажать точку после имени объекта, или полезть в документацию. Да и в документации одно дело искать методы некоторого класса, а другое функции применимые к этому классу в принципе. Даже если метод реализован как статический, я обязан всего лишь убедится, что нужного метода нет в интерфейсе используемого мной объекта, после чего попробовать поискать его в соответствующем классе. Например, для С++ перевод строки в целое будет таким же убогим как и для замшелого С:
    string str("123");
    int val = atoi(str.c_str);

    А на более высокоуровневых языках это будет выглядеть немного иначе.
    C#:
    string str = "123";
    int val = int.Parse(str);

    Ruby (и еже с ним):
    str = "123";
    val = str.to_i;

    казалось бы, какая разница? Я и сам написал все примеры по памяти. Но, черт побери, зачем мне знать все эти мелочи, если среда способна мне подсказать всю необходимую информацию?! Мы же, в конце концов, живем в 21 веке! А ведь ситуации могут быть куда сложнее. Так что подобная помощь была бы полезна не только новичкам.

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

    Корче, мой вывод таков: Методами нужно делать наиболее часто используемые, а значит нужные наибольшему количеству народа, функции. Конечно, при этом нужно думать что творишь. Наличие возможности еще не означает, что ее обязательно нужно использовать. Да и требований дизайна оно не отменяет. Однако засовывать методы черти куда и оправдывать это за ухо притянутыми принципами проектирования тоже не дело.


    PS

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

    Тот же метод сортировки в интрефейсе такой обшщей абстракции как последовательность действительно не совсем. Однако в реализации вроде динамического массива он вполне уместен. Может быть дело в этом? Классы к которым ты привык, да и вообще очень многии примеры C++-дизайна не очень то жалуют программистов подобным разделением. Его можно увидить пожалуй что в ATL.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[26]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 08:42
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    Ну, что же... Маладец Андайинг. Если прочесть это
    Автор: Павел Кузнецов
    Дата: 30.10.04
    и это
    Автор: Павел Кузнецов
    Дата: 30.10.04
    , разница ощущается очень хорошо. Ндо бы товарищу Андаингу еще немного над тобой поработать, и глядишь ты начнешь тих недолюбливать STL и по ночам программировать на C# (для души).
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[27]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 08:42
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>P.S. Кстати, хорошую аналогию ты подобрал. Представим, что нам часто приходится катать шарик по кругу. С моей точки зрения функция go_round интерфейсу шарика не принадлежит, являясь наглядным примером вспомогательного алгоритма, который стоит реализовать через "основной" интерфейс "шарика" (accept_impulse etc.).


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

    А пример он привел очень даже верный. И суть его в том, что человек думает в терминах объектов, их свойств, и методов. А ты как всегда попытался все переиначить в целях мелкой утилитарности. Так что проблемы с дизайном скорее у тебя. Уж слишком формально ты к нему подходишь.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 09:16
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    VD>>Ага. Вместо того чтобы сделать подсветку синтаксиса.


    СГ>Нужна — сделай сам. Все в твоих руках. Система открытая.


    Ты это ученикам будешь рассказывать?

    Я же к этому венцу убогости и криворукости притрагиваться не намерен.

    ЗЫ

    Я вот гляжу, не сделали ее все же. Так проблема в том, что она не нужна, или в том что делать некому?

    Я вот думаю, что потому что не нужна... сама среда.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[21]: Читайте хелп
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 09:16
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Из приведенного рисунка видно следующее:


    СГ>1) Вы зачем-то засунули в Log текст программы и пару контролов... Log — предназаначен для вывода сообщений.

    СГ>2) Для того чтобы написать свою программу нужно создать новый документ.
    СГ>3) Контролы, вообще-то, принято помещать на формы.

    СГ>Вывод:

    СГ> Почитайте хелп.

    Неверный вывод. Верный будет такой: ВЛЕС ЭТО УБОЖЕСТВО! Ведь на нем даже проффесианальный программист не смог примитивный "здарова, мир!" раписать.

    Скачай Питон или Руби. Запусти их консоль. Погляди что такое просто и удобно! Потом скачай C# Express погляди, что такое очень гибко, удобно и проффесионально!
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[19]: Обновление
    От: Mamut Швеция http://dmitriid.com
    Дата: 31.10.04 10:05
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Кодт, Вы писали:


    К>>Значит, ты мало трахался с системами контроля версий.


    СГ>...В конце концов, модуль — маленький. 1-модуль : 1-программист. Несколько программистов в один и тот же модуль код никогда не пишут.


    Знаете, в хорошей команде:

    — несколько человек не пишут в один и тот же .cpp-файл
    — несколько человек не пишут в один и тот же .pas-файл
    — несколько человек не пишут в один и тот же .php-файл
    — несколько человек не пишут в один и тот же .vb-файл
    — несколько человек не пишут в один и тот же .asp-файл
    (из тех языков, с которыми имел дело)

    Для тех кто в танке. Модуль (логическое понятие) в сложной системе не будет никогда ограничен одним файлом. Как вы сможете впихнуть, скажем систему авторизации в один файл (обероновский модуль?)? Если Обероновский модуль — это коллекция форм и кода, их описывающих, то см. выделеное выше.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Вердикт.
    От: Mamut Швеция http://dmitriid.com
    Дата: 31.10.04 10:13
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>Здравствуйте, Сергей Губанов, Вы писали:


    К>>>Значит, ты мало трахался с системами контроля версий.


    СГ>>Я неоднократно указывал на то что обероны, еще со времен Модулы, являются модульными языками. Но тут, видимо, никто не понимает что это такое. Вот и Вы тоже туда же. Не понимаете в чем состоит преимущество модульности... С модулями не возникает проблем контроля версий. Новому модулю дается новое имя (так же как с COM-интерфейсами). В конце концов, модуль — маленький. 1-модуль : 1-программист. Несколько программистов в один и тот же модуль код никогда не пишут.


    ЗХ>Не, ну я так больше не могу!

    ЗХ>Отладчик — порочно; контроль версий — порочно; подсветку синтаксиса — сделай сам...

    ЗХ>И эти люди...

    ЗХ>Я фигею, дорогая редакция...

    (с) я здесь
    Автор: Mamut
    Дата: 31.10.04


    Вердикт. Oberon Microssystems наткнулась на книжицу "MFC in 21 days" и сейчас показывает нам, чему они научились. Сам такие поделки еще в прошлом году создавал (это я о среде BlackBox). Не удивлюсь, если сериализация/десериализация у них стандартными средствами MFC выполнена. И вы не поверите, но на исходники BlackBox я даже смотреть не буду. Повторяю, такие поделки выполняются на коленке в течение ... ну ... двух-трех часов. Ну и, возможно, час планирования.


    также Re[19]: Обновление (73 KB)
    Автор: Mamut
    Дата: 29.10.04
    . Добавлю, что в Турбо С/ Турбо Паскале подсветка и контекстно-зависимая справка уже присутствовали.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[12]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 12:36
    Оценка:
    Ну, т.е. ответить нечего?
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[18]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 31.10.04 13:31
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    AVK>>>Лучше бы тебе его не видеть

    ЗХ>>Теперь точно буду смотреть... Заинтригован.
    WH>Когда найдешь что почитать и чем компилять(под виндой) мне скажи, а то меня тоже давно его препроцессером интригуют.
    А и пожалуйста!
    Тута: http://home.nycap.rr.com/pflass/pli.htm
    Вся возможная инфа и компиляторы.
    сам слушаю и вам рекомендую: Разные Люди — Дезертиры любви
    FAQ — це мiй ай-кью!
    Re[14]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 15:23
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Влад, сколько можно говорить — асс это задница.


    Это если по англицки.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: Обновление
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 31.10.04 16:04
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    AVK>>Влад, сколько можно говорить — асс это задница.


    VD>Это если по англицки.


    А в русском вобще такого слова нет.
    ... << RSDN@Home 1.1.4 beta 3 rev. 217>>
    AVK Blog
    Re[16]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 17:50
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>А в русском вобще такого слова нет.


    Думаеш кто-то не понял? А в русском много каких слов нет.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[26]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 11:56
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>VladD2:


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


    >> Нет, Паша, именно это ты и предлагаешь.


    ПК>Ерунда. Разговор был о наличии конкретной функции sort() в интерфейсе конкретного класса Array.


    И что в этом есть проблемы? Первым делом для доказательства кривости этого решения ты полез обсуждать базовые интерфейсы (видимо причислил Array к ним). А потом согласился почти со всеми утверждениями аппонентов.

    ПК> К тому же, если посмотреть на историю ветки, то можно увидеть, что я ничего не предлагал.


    Да, да... конечно. Ты с таким умным видом гуру ОО-проектирования вещал детям о грамотном дизайне.

    ПК> Напротив, это ты перешел к навязыванию такого расположения функции sort(),


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

    ПК>Где именно я "переворачиваю весь ООП вверх ногами"?


    Да во всех начальных поставх.

    ПК> То, что тебе оно знакомо в перевернутом виде, вовсе не означает, что это и есть правильная картина.


    Ну, это дешевый наезд. Даже реагировать не хочется.

    ПК>Так и запишем: по существу тебе сказать особенно нечего.


    Гы-гы. Чья бы корова мычала.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[24]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 11:56
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Я правильно понял, что ты утверждаешь, что Open-Closed Principle не имеет отношения к ОО дизайну? Если ты о чем-то другом, пожалуйста, сформулируй свою мысль яснее.


    Он не имеет отношения к базовым концепциям ООП и приплетается тобой не к месту. Андестенд?

    >> Более того. В твоем видение она даже становится вредной, так как отрицает базовые концепции вроде инкапсуляции.


    ПК>Это каким же образом? Как именно вынесение sort() за пределы Array нарушает инкапсуляцию?


    Я тебе это уже объяснял. Сортировка — это метод. Имея возможность применять его к более широкому ряду объектов мы нарушаем принцип инкапсуляции.

    ПК>Давай-ка ты подтвердишь это утверждение хоть какими-то ссылками на классику ООП.


    Давай-ка ты пойдеш лесом. А? Я тебе не нанимался искать ссылки по всему Интернету. Попробуй сам ссылками доказать свое утверждение о безграмотности размещения методов в объектах на том лишь основании что в принципе без них можно прежить.

    ПК>Нет, этого "требования инкапсуляции" не говорят. Впрочем, подозреваю, что ты просто можешь очень неточно выражать свои мысли. Чтобы была хоть какая-то ясность, насколько применимы "требования инкапсуляции" в твоей трактовке к классическим образцам дизайна, прокомментируй свое высказывание, процитированное выше, на некоторых из наиболее характерных в этом отношении design patterns: Command, State, Strategy, Visitor, Builder.


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

    ПК>Как же так получается, что (потенциальная) модификация объекта специально выносится за его пределы? Неужели все эти паттерны тоже нарушают инкапсуляцию?


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

    ПК>Этот примерчик совсем в другую сторону,


    Гы-гы. В ту, в ту.

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


    Если убрать общие слова, то единственной проблемой этого примера является отсуствие инкапсуляции. О чем и шла речь.

    >> Внешние функции той же сортировки — это как раз такое нарушение.


    ПК>В случае сортировки никакие инварианты класса Array не нарушаются.


    Агащасблин. Сортировка очередей и потоков — это нормально? Не нужно пытаться уйти от обсуждения вопросвов инкапсуляции к черте чему.

    ПК>Если интерфейс некоторого класса допускает такое изменение его внутреннего состояния, которое нарушит инварианты, то тут одно из двух: либо инварианты определены неверно, либо интерфейс им не соответствует. Будет ли размещена функция, нарушающая инварианты внутри или вовне класса, абсолютно никакого значения не имеет, т.к. инкапсуляция уже нарушена.


    Согласен. Только к делу это не относится. Бывают случаи когда класс в силу не зависимых причин обладает интерфейсом пригодным для применения того или иного метода. Так что случяйное применение можно избежать только строгим подходом к инкапсуляции. Стремление к супер универсальности и выносе всего в глобальные методы как раз и приводит к подобным причинам. А уж напичкивание классов типа вектора несвойственными ему методами вроде pop и т.е. просто провацирует к применению классов не по назначению.

    ПК>Раздувание интерфейсов классов без необходимости противоречит грамотному проектированию.


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


    ЗЫ

    В общем, ты начинашь забалтывать этот разговор. А входить в пике и всю неделю чесать языком я лично не хочу.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 12:07
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Как вы сможете впихнуть, скажем систему авторизации в один файл (обероновский модуль?)?


    Систему я впихну в систему модулей, а не в один. А вот, фасад этой системы, возможно в одном модуле уберется.
    Re[21]: Обновление
    От: Mamut Швеция http://dmitriid.com
    Дата: 01.11.04 12:21
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mamut, Вы писали:


    M>>Как вы сможете впихнуть, скажем систему авторизации в один файл (обероновский модуль?)?


    СГ>Систему я впихну в систему модулей, а не в один. А вот, фасад этой системы, возможно в одном модуле уберется.


    Но в том-то и дело, что Блэкбокс не способствует созданию системы модулей.

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

    Рефакторинг затруднен бинарными обероновскими файлами по причинам здесь
    Автор: Mamut
    Дата: 29.10.04
    . Что делать?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[13]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 12:22
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD> Можно поглядеть твой код?


    Код нельзя. Собственность фирмы. Да и не на оберонах он так, на старом добром MS Visual C++ + Delphi.

    Раньше я работал в "НИКА КОМ", написал вот это: http://www.ncom.ru/win/soft/marsh_master.htm
    Re[19]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 12:51
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Новому модулю дается новое имя (так же как с COM-интерфейсами).


    Это что?... Я вот каждому новому файлу новое имя даю. Однако COM-интерфейсы вряд ли прийдет в колову распихивать по отдельным ДЛЛ-ям.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[25]: Мэйнстрим vs. Самосовершенствование :)))
    От: prVovik Россия  
    Дата: 01.11.04 13:23
    Оценка:
    Здравствуйте, VladD2, Вы писали:


    VD>Я тебе это уже объяснял. Сортировка — это метод. Имея возможность применять его к более широкому ряду объектов мы нарушаем принцип инкапсуляции.

    Влад, а как ты вообще относишься к обобщенному программировнию?


    ПК>>Давай-ка ты подтвердишь это утверждение хоть какими-то ссылками на классику ООП.

    VD>Давай-ка ты пойдеш лесом. А? Я тебе не нанимался искать ссылки по всему Интернету. Попробуй сам ссылками доказать свое утверждение о безграмотности размещения методов в объектах на том лишь основании что в принципе без них можно прежить.
    Я хоть и не ПК, но ссылкой поделюсь:
    Г.Буч "Объектно-ориентированный анализ и проектирование" 3.6

    Для оценки качества классов и объектов, выделяемых в системе можно предложить следующие пять критериев:

    * зацепление
    * связность
    * достаточность
    * полнота
    * примитивность
    ...
    Примитивными являются только такие операции, которые требуют доступа к внутренней реализации абстракции. Так, в примере с классом Set операция Add (добавление к множеству элемента) примитивна, а операция добавления четырех элементов не будет примитивной, так как она вполне эффективно реализуется через операцию добавления одного элемента.


    Или Буч для тебя не авторитет?
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[19]: Обновление
    От: Mamut Швеция http://dmitriid.com
    Дата: 01.11.04 14:42
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>> Так проблема в том, что она не нужна, или в том что делать некому?


    СГ>Я когда первый раз увидел БлэкБокс, то тоже подумал какого черта нет подсветки синтаксиса.


    И действительно, какого черта?

    СГ>Даже хотел сам написать, благо сделать это не сложно — доступ к вьюхе документа свободный. Потом, по здравому размышлению, согласился с мнением изложенным у info21. Дело в том, что в оберонах служебные слова набираются заглавными буквами, и выделять их цветом уже не надо — и так все видно.


    А если я всю программу заглавными буквами напишу?

    СГ>Зато цвет можно использовать совершенно для других целей. Например, если нужно, по той или иной причине акцентировать внимание на каком-то участке кода, то просто берешь и красишь его в красный цвет (весь, вместе со служебными словами) или каким-то другим способом изменяешь шрифт на необычный.


    И часто это нужно? И значит, весь остальной мир зря думает, как бы раскраску кода и Code-Completion наиболее быстро и эффективно сделать?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[21]: Обновление
    От: Mamut Швеция http://dmitriid.com
    Дата: 01.11.04 16:25
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mamut, Вы писали:


    M>>А если я всю программу заглавными буквами напишу?


    СГ>Дык, Вам ни что не мешает и разными цветами каждую букву раскрасить, благо возможности редактора это позволяют.


    Что мне нужно? Мне нужна скорость разработки.

    Сравните:

    Современные средства разаботки
    1. Syntax Coloring + Code Completion

    Блэкбокс:
    Syntax Coloring
    1. Write text
    2. Ctrl + Shift + Left Arrow
    3. Menu -> Fon Selection -> Color Selection -> Ok
    4. Repeat 1-4 as needed

    Code completion
    1. Press F1
    2. Search for term
    3. Scroll down many pages of text
    4. Repeat 1-3 until found

    Далее, если разные программисты используют различные цветовые схемы? Их код потом очень интересно будет читать. Причем Блэкбокс это поощряет. А не надо.

    Опять же, повторюсь: Почему среды разработки Турбо Паскаль/Турбо С лучше Блэкбокса
    Автор: Mamut
    Дата: 01.11.04
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[27]: Мэйнстрим vs. Самосовершенствование :)))
    От: prVovik Россия  
    Дата: 01.11.04 16:27
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:


    AVK>Ну померь скорость последовательного вызова 4 Add и 1 AddRange для ArrayList. Когда померишь продолжим разговор.

    См. ниже.

    AVK>P.S. Цитата не к месту. Буч говорил об конкретной реализации, а не о контейнерах вобще.

    Конкретная реализация тут не при чем. Подглава книги называется Измерение качества абстракции. И по словам Буча, одним из критериев качества интерфейса является его примитивность. Контейнер Set был приведен для примера, чтобы пояснить понятие "примитивность". Кстати, на счет производительности он пишет дальше:

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


    Как раз твой случай.
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[19]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 16:31
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Я когда первый раз увидел БлэкБокс, то тоже подумал какого черта нет подсветки синтаксиса. Даже хотел сам написать, благо сделать это не сложно — доступ к вьюхе документа свободный. Потом, по здравому размышлению, согласился с мнением изложенным у info21.


    Понимаю. Всегда проще что-то обосновать чем сделать.

    СГ> Дело в том, что в оберонах служебные слова набираются заглавными буквами, и выделять их цветом уже не надо — и так все видно.


    Насколько я понял парсеру Оберона плевать на кегель букв (или я ошибаюсь?). А раз так, то большие и маленькие буквы — это всего лишь соглашение о кодировании. И никто не обязан их соблюдать. К тому же читать что-то набранное большими буквами крайне неудобно (это можно прочесть в любом руководстве по верстке). Так что навязывать такой стиль, мягко говоры, не красиво.

    СГ> Зато цвет можно использовать совершенно для других целей. Например, если нужно, по той или иной причине акцентировать внимание на каком-то участке кода, то просто берешь и красишь его в красный цвет (весь, вместе со служебными словами) или каким-то другим способом изменяешь шрифт на необычный.


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

    В общем, довольно смешно выглядят подобные навации при таком убогом виде. Лучше уж было не выпендриваться и взять вымученные временем решения. И вообще, если бы эти навации были бы действительно ценными, то комерческие продукты давно бы слизали их.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 16:31
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Код нельзя. Собственность фирмы.


    С фирмы не убудет если ты продемонстрируешь десяток строк кода.

    СГ>Да и не на оберонах он так, на старом добром MS Visual C++ + Delphi.


    Забавно. Работаешь на одном, а рекламирушь другое... Не находиш — это странным?

    СГ>Раньше я работал в "НИКА КОМ", написал вот это: http://www.ncom.ru/win/soft/marsh_master.htm


    Опять таки код тут не увидишь. Стало быть стиль тоже не оценишь.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[28]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 01.11.04 16:40
    Оценка:
    Здравствуйте, prVovik, Вы писали:

    V>

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


    О! Осталось только понять что многие алгоритмы сортировки требуют доступа к внутренним структурам, а, следовательно, являются примитивными методами. Так что цитата твоя таки не в тему.
    ... << RSDN@Home 1.1.4 beta 3 rev. 219>>
    AVK Blog
    Re[20]: Обновление
    От: prVovik Россия  
    Дата: 01.11.04 17:05
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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

    Еще хуже то, что раскрашивать это надо вручную. Имхо, это не применимо.
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[26]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 17:25
    Оценка:
    Здравствуйте, prVovik, Вы писали:

    V>Влад, а как ты вообще относишься к обобщенному программировнию?


    Отлично.

    V>Примитивными являются только такие операции, которые требуют доступа к внутренней реализации абстракции. Так, в примере с классом Set операция Add (добавление к множеству элемента) примитивна, а операция добавления четырех элементов не будет примитивной, так как она вполне эффективно реализуется через операцию добавления одного элемента.

    V>[/q]

    V>Или Буч для тебя не авторитет?


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

    К абстрактным рассуждения общ эффективности я тоже отношусь крайне скептически. Рассуждения о том, что "добавление четырех элементов не будет примитивной, так как она вполне эффективно реализуется через операцию добавления" явно натянуто. Добавление нескольких элементов обычно можно реализовать намного эффективнее если иметь доступ к закрытым членам.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[27]: Мэйнстрим vs. Самосовершенствование :)))
    От: prVovik Россия  
    Дата: 01.11.04 17:52
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    V>>Влад, а как ты вообще относишься к обобщенному программировнию?

    VD>Отлично.
    А как тогда это соотносится с фразой:

    Сортировка — это метод. Имея возможность применять его к более широкому ряду объектов мы нарушаем принцип инкапсуляции.

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

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

    Что из какого контекста я выдрал?

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

    Ты это читал: Re[27]: Мэйнстрим vs. Самосовершенствование
    Автор: prVovik
    Дата: 01.11.04
    ?
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[28]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 19:16
    Оценка:
    Здравствуйте, prVovik, Вы писали:

    V>Конкретная реализация тут не при чем. Подглава книги называется Измерение качества абстракции. И по словам Буча, одним из критериев качества интерфейса является его примитивность. Контейнер Set был приведен для примера, чтобы пояснить понятие "примитивность". Кстати, на счет производительности он пишет дальше:


    Примитивность и примитивизм разные вещи. Все хорошо в меру.

    Класс предназначенный для манипуляции с данными должен обладать нужными для этого методами. Иначе получишь примитивизм.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[29]: Мэйнстрим vs. Самосовершенствование :)))
    От: prVovik Россия  
    Дата: 01.11.04 20:11
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Примитивность и примитивизм разные вещи. Все хорошо в меру.

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

    Ну никто же не говорит, что не делать полезные методы вообще. Просто не следует помещать непримитивные методы в ИНТЕРФЕЙС класса. Лучше их сделать в виде отдельных утилит класса. В принцепе, подобные утилиты можно помещать в класс в виде его статических методов, но тут надо внимательно следить, чтобы эти методы использовали только открытую часть интерфейса, а о закрытой и думать не смели. Но у размещения утилит внутри класса в виде статических методов есть еще один недостаток (помимо доступа к закрытой части интерфейса), а именно то, что часто для таких утилит сложно определить, к какому классу они относятся. Например, если на вход подаются несколько объектов разных классов и эта утилита что-то делает с совокупностью полученных объектов, то куда ее можно отнести?
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[26]: Мэйнстрим vs. Самосовершенствование :)))
    От: Undying Россия  
    Дата: 01.11.04 21:34
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Я вполне могу, и уже это делал: инкапсуляция нарушается, если интерфейс класса позволяет нарушать его инварианты. Вопреки твоим утверждениям положение функции сортировки вовне класса к таким последствиям не приводит.


    Внешняя функция сортировки нарушает инкапсуляцию коллекции, т.к. ее использование означает явное указание метода сортировки.
    ... << RSDN@Home 1.1.2 stable >>
    Re[27]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 01.11.04 22:03
    Оценка:
    Undying:

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


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

    > ПК> к изменению семантики некоторой функции в библиотечном классе я отношусь крайне настороженно, представляя последствия замены использования в методе Array.sort() функции stable_sort() (сохраняющей порядок "одинаковых" элементов) на более быструю (в некоторых случаях) quick_sort()... В этих условиях, имхо, изменение семантики как раз совершенно недопустимо.

    >
    > Название функции должно однозначно определять то, что она делает, т.е. если функция называется Sort, то использование ее в качестве StableSort, даже если она в текущий момент действительно реализует сортировку сохраняющую порядок элементов, является хаком, а при использовании хака не нужно удивляться, если он отвалится в следующей версии.

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

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


    Предложенная ранее альтернатива (изменить семантику метода класса) мне не кажется более удачной.

    > ПК> Естественно, если все было спроектировано на совесть, дублирования аналогичных вызовов Array.sort быть не должно, т.к. доступ к некоторому Array должен контролироваться одним классом <...>

    >
    > Вот это не понял, можно пояснить мысль примером.

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

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

    array.sort();

    sort(array);

    Не вижу сколько-нибудь заметной разницы в объеме написанного кода

    > Не понял в чем проблема и зачем с ними по разному работать? Естественно у обертки есть конструктор принимающий ArrayList, соответственно преобразование в обертку производится одной строчкой: new Wrapper(arrayList).


    Ок, я почему-то представил себе ситуацию, когда для получения Wrapper нужно скопировать в него содержимое ArrayList.

    > ПК> "(Мы) толкнем шарик с силой F" (скорее, даже: "Передать шарику импульс P") Но это уже софистика, т.к. в том, что у шарика неизбежно будет какой-то метод, принимающий воздействие, ты, естественно, прав.


    > Но "Мы" опять же объект, а не функция.


    "Мы" — да, "толкнем" — нет: если всем подряд приходится "толкать шарик", вовсе не факт, что хорошим решением является наследование их всех от какого-то общего класса только для того, чтобы выполнять какое-то действие с внешним объектом.

    > ПК> P.S. Кстати, хорошую аналогию ты подобрал. Представим, что нам часто приходится катать шарик по кругу. С моей точки зрения функция go_round интерфейсу шарика не принадлежит, являясь наглядным примером вспомогательного алгоритма, который стоит реализовать через "основной" интерфейс "шарика" (accept_impulse etc.).

    >
    > Во-первых, ты свел идею к абсурду (т.е. предложил любую функцию пихать в интерфейс)

    Дык, я как раз пытаюсь добиться внятного ответа, где же по мнению тех, кто помещает sort() в Array лежит та граница... Влад выдвинул критерий модификации объекта, согласно которому подобные функции должны будут включаться в интерфейс шарика.

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


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

    > Т.е. рефакторинг ты не используешь? Т.к. рефакторинг как раз означает модифицирование кода с целью уменьшения имеющихся хаков (в частности "лишних" наследований) к минимуму.


    Рефакторинг я очень люблю и уважаю. Но для "внутренних" проектов, где весь код находится под контролем разработчиков. И с определенными ограничениями. Для библиотек же, "торчащих" наружу, я больше люблю и уважаю обратную совместимость.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[27]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 01.11.04 22:33
    Оценка:
    Undying:

    > ПК> инкапсуляция нарушается, если интерфейс класса позволяет нарушать его инварианты. Вопреки твоим утверждениям положение функции сортировки вовне класса к таким последствиям не приводит.


    > Внешняя функция сортировки нарушает инкапсуляцию коллекции, т.к. ее использование означает явное указание метода сортировки.


    Не обязательно:
    class Collection1;
    class Collection2;
    
    void sort(Collection1&);
    void sort(Collection2&);
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[28]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 23:16
    Оценка:
    Здравствуйте, prVovik, Вы писали:

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


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


    V>>>Влад, а как ты вообще относишься к обобщенному программировнию?

    VD>>Отлично.
    V>А как тогда это соотносится с фразой:

    Сортировка — это метод. Имея возможность применять его к более широкому ряду объектов мы нарушаем принцип инкапсуляции.

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

    Все получается отлично если отделять мух от катлет. В данном случае интерфейс от реализации. Да и класс тоже может быть обобщенным. А стало быть и метод в нем.

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

    V>Что из какого контекста я выдрал?

    Цитату из контекста в котором она была сказана.

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

    V>Ты это читал: Re[27]: Мэйнстрим vs. Самосовершенствование
    Автор: prVovik
    Дата: 01.11.04
    ?


    Теперь да. Это как раз и доказывает, что цитата была вырвана из контекста. С данной оговоркой фраза уже становится менее натянутой.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[24]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 23:16
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    Ну, тогда оберон в пролете, а детей и правда нужно учить программировать на ассемблере (как завещал Серджинио1) .
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[30]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 02.11.04 01:37
    Оценка:
    Здравствуйте, prVovik, Вы писали:

    V>Ну никто же не говорит, что не делать полезные методы вообще.


    Кое-кто кто все же говорит.

    V>Например, если на вход подаются несколько объектов разных классов и эта утилита что-то делает с совокупностью полученных объектов, то куда ее можно отнести?


    Скорее всего тут проблемы в понимании приципов ООП. Мыслить от "утилиты"/"сотелиты" вообще вредно. Сделай декомпозицию на уровне классов и скорее всего окажется, что функция является методом некоторого другого класса.

    В общем, в борьбе за чистоту вы викидываете с грязной водой и купаемое в ней детя.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[26]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 02.11.04 01:37
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Как ты себе представляешь нарушение инкапсуляции в данном случае? Если интерфейс класса позволяет передать его в sort(), инкапсуляция не будет нарушена, т.к. и без sort() пользователь может сам проделать эквивалентные действия. Если же предполагается, что эти действия нарушат инварианты класса, то это просто означает, что у данного класса интерфейс составлен неверно, т.к. он не должен позволять нарушать инварианты. В любом случае наличие "внешней" функции sort() инкапсуляцию класса не нарушает.


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

    ПК>Ок. Так и запишем: свое утверждение о нарушении базовых положений ООП в результате вынесения sort() за пределы класса Array Влад доказывать отказался.


    Да пиши что хочешь. Можеш даже пойти в гугль поискать там подтверждение своим выводам.

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


    Мне то зачем? Ты что-то хочешь доказать. Вот и гугли.
    Мне вообще очень не наравится монера посылать других что-то искать. Тебе надо ты и ищи.

    ПК>Причем здесь книга?


    При том что описанные вопросы тянут именно на нее.

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


    Ну, продемонстрируй.

    ПК>А так... Ты привел свое правило размещения методов в классе:

    ПК>

    ПК>Если функция изменяет состояние объекта и при этом не воздействует на другие объекты, то эта функция является методом этого объекта. Ну, или должна была им являться.

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

    Или тем что ты хочешь выдать чужие слова за некомпетентность.

    ПК> я решил этого не делать, а добиться от тебя более подробной и точной формулировки. Соответственно, приведя стандартные паттерны, основанные на вынесении модификации за пределы модифицируемого класса. Если ты полагаешь, что в них инкапсуляция не нарушается, просто так и скажи. Но тогда твое утверждение, процитированное выше, никак с сохранением инкапсуляции, вопреки твоим ранним высказываниям, не связано. Все дела


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

    ПК>Я вполне могу, и уже это делал: инкапсуляция нарушается, если интерфейс класса позволяет нарушать его инварианты.


    С чего бы это? И вообще, что ты понимашь под "позволяет нарушать его инварианты"?

    ПК> Вопреки твоим утверждениям положение функции сортировки вовне класса к таким последствиям не приводит.


    Так к какм проблемам приводит то, что класс ArrayList или List<T> содержит методы сортировки? Ну, только без философии. Ты из жизни хоть один пример приведи.

    ПК>Пока что ты так и не показал, как же именно нарушается инкапсуляция в случае вынесения функции sort() за пределы класса Array. От того, что ты утверждаешь, что это так, истинным это утверждение не становится.


    Я тебе уже показал. Но ты так мирно отфильтровал.

    >> Агащасблин. Сортировка очередей и потоков — это нормально? Не нужно пытаться уйти от обсуждения вопросвов инкапсуляции к черте чему.


    ПК>Все зависит от определений. В любом случае, если очереди нельзя сортировать, то они не будут предоставлять интерфейс, нужный функции sort(). Если они уже предоставляют такой интерфейс, то наличие "внешней" функции sort() никак на ситуацию не влияет, т.к. пользователь уже волен это делать своими действиями.


    "Волен" и "сделает" разные вещи. Убирая привязку метода ты провоцерущь на случайное использование и вынуждаешь расширять интерфейс класса чтобы обеспечить нужные возможности из вне.

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


    В приципе разумно. Но тем не менее жалание минимизировть интерфейс приводит именно к нарушениям инкапсуляции. Многие операции просто эффективнее делать членами класса. Хотя бы по причине доступности функций работы с той же памятью. Извне ArrayList/List я просто не могу заниматься передвижкой блоков памяти в базовом массиве. И я или буду вынужден расширять интерфейс низкоуровневыми операцииями или все же вводить функции вроде AddRange в интерфейс класса. Ну, или наплевать на произодительность и добавлять элементы по одному двигая память при каждом добавлении.

    ПК>К подобным последствиям приводит неверное наследование, нарушающее принцип LSP. Если наследование не отражает отношения "is-a", то никакие припарки в виде запретов внешних функций не помогут, т.к. инварианты с тем же успехом могут быть нарушены через интерфейс базового класса.


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

    >> А уж напичкивание классов типа вектора несвойственными ему методами вроде pop и т.е. просто провацирует к применению классов не по назначению.


    ПК>Каким образом метод pop() нарушает инкапсуляцию класса vector? И чем, с твоей точки зрения данный метод отличается от Add() или аналогичного?


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

    ПК>Очень странно, что с такого словоблудия начинаются большая часть более-менее объемных книжек по ООП


    Объем еще не является гарантией качества. Как раз талантливые изложения обычно довольно кратки.

    >> Ты можешь хоть на ушах ходить, но пользоваться дотнетными коллекциями проще, удобнее и безопаснее.


    ПК>Удобнее пользоваться чем какими коллекциями? Напоминаю, что речь шла о массивах в Java.


    Чем СТЛ, например. А что ты докопался до статических методов в Яве я вообще не понял. Видимо ты по началу не въехал в то что они статические, а потом уже Остапа понесло.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[30]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 02.11.04 02:10
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>В последнем процитированном сообщении,


    Процетирую последнюю ссылку:

    VD>Не не въехал! Там же нет префикса std::, а это теперь считается неграмотным. И вообще, если все методы (пусть и статические) помещать в класс к которому они относятся, то любой дурак нажав точку в IDE получит их список. А это уже покушение на место проффесиональных программистов! Ведь раньше только они знали где отрыть нужный метод! Вот как по-твоему найти метод бинарного поиска в СТЛ? Аа... слабо?! (зларадно) А вот Паша уже знает. И он нам свое место не за что не уступит.


    В ней только стеб над твоей любовью к std:: и нежелаение признавать, что и по другому можно. Призывов делать только так как сделано в Яве и дотнете нет. В прочем как и их упоминания.

    ПК>и далее по ветке. При этом постоянно поминая инкапсуляцию:

    ПК>

    ПК>По теории ООП все методы объекта желательно помещать в его класс. Ну, а как они там внутри реализованы... дык на то есть инкапсуляция.


    И здесь не вижу.

    ПК>и обвиняя оппонента в "детских ошибках".


    Не обвинение, а констатация факта.

    >> Может быть просто признать тот факт, что это ты пыташся выдать свое мнение за единстванно верное и тем самым навязать его, а я все го лишь говорю, что считаю иначе?


    ПК>Какое именно мое мнение?


    О том что все не приметивные методы нужно делать глобальными функциями. И наезды на статические методы Sort в Яве.

    ПК> Ты опять пропустил, что началось все с того, что ты зачем-то приплел в разговор размещение sort() и т.п. "в классе, к которому они относятся", хотя речь шла совершенно о другом. Как я мог навязывать кому-то свое мнение, если я до твоего высказывания даже не упоминал?


    Нда. Связь с реалией снова потерен. Вот сообщение
    Автор: Павел Кузнецов
    Дата: 28.10.04
    в котором ты ты приплел Явовский класс со списком исключительно статических методов (гы-гы) и начал изливаться про инварианты. А вот здесь ты как раз преплел методы sort из этого многострадального класса.

    Далее тебе кто-то замети, что методы статические, но тебя было уже не остановить. Ты и это как-то обосновал. Хотя как в Яве могут быть методы не экземплярные и не статические одновременно?

    Далее ты много раз говори о вреде метода Sort в массиве. Но так и не продемонстрировал ни разу этого вреда. Вот хотлось бы заполучить хоть одну ссылку случая когда кто-нибудь от этого пострадал.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[28]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 05:50
    Оценка:
    Undying,

    >> Не понял в чем проблема и зачем с ними по разному работать? Естественно у обертки есть конструктор принимающий ArrayList, соответственно преобразование в обертку производится одной строчкой: new Wrapper(arrayList).


    > Ок, я почему-то представил себе ситуацию, когда для получения Wrapper нужно скопировать в него содержимое ArrayList.


    P.S. Но одна проблема с обертками, раз имеется в виду не наследование, все-таки, есть: если язык не поддерживает автоматическое делегирование (*), то каждый раз, когда в Array будет добавляться новый метод, надо будет модифицировать Wrapper.

    Ситуация еще осложнится, если между нашим Wrapper'ом, и Array будет еще один-два слоя "библиотечных" оберток Wrapper1, Wrapper2 etc., добавляющих дополнительные, нужные нам "утилиты". Эти обертки неизбежно будут "запаздывать" за расширением Array, и в результате, если они не "выдают" Array наружу (**), наш Wrapper утилитами, добавленными в Array, пользоваться не сможет.




    (*) Насколько я представляю, большинство статически типизированных языков этого не умеют. Впрочем, я знаком только с более-менее практически использующимися статически типизированными языками, поддерживающими ООП, и не со всеми одинаково хорошо, так что тут могу легко заблуждаться.

    (**) Что, со строгой точки зрения, если бы обертки были бы "полноценными" классами, уж точно являлось бы нарушением инкапсуляции, с которым, впрочем, при таком дизайне, наверное, приходится мириться Правда, с другой стороны, обертки "полноценными" классами, наверное, не являются в том смысле, что никакие новые сущности они собой не олицетворяют, и инварианты их, по идее, совпадают с инвариантами Array, так что, наверное, применительно к ним о нарушении инкапсуляции, вообще, говорить бесмысленно, т.к. они по сути ничего и не инкапсулируют... Или нет? По-моему, обертки, предназначенные только для добавления вспомогательных функций, и выдающие свои "потроха" наружу, в классическое ООП вообще слабо вписываются...
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[32]: Мэйнстрим vs. Самосовершенствование :)))
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 02.11.04 06:17
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:
    ПК>Хорошо. Вот несколько примеров. Очень интересно, в соответствии с "правильным мышлением", методами какого класса являются указанные функции, и почему (если на все "правильно мысля" ответить трудно, то хотя бы на самый последний)... Очень интересно при этом также узнать, как принятые решения будут влиять на такую метрику качества ОО дизайна, как зависимости между классами

    ПК>
  • Есть два класса: Date и String. Методом какого класса является функции: 1) преобразования даты в строку; 2) преобразования строки в дату?
    DateConverter: TypeConverter.
    ПК>
  • Методом какого класса является функции преобразования: 1) целого в строку; 2) строки в целое? Есть ли какое-либо отличие этого примера от предыдущего?
    IntConverter: TypeConverter.
    ПК>
  • Есть два класса: Date и DateDifference. Методом какого класса являются функции: суммы/разницы двух дат, суммы/разницы двух DateDifference, суммы Date и DateDifference?
    Возможно, Calendar?
    ПК>
  • Есть классы: Matrix и Vector. Методами какого класса являются функции: 1) умножения матрицы на вектор (результат — матрица); 2) умножения двух векторов по схеме "строка на столбец" (результат — матрица); 3) скалярного умножения векторов (результат — число); 4) афинных трансформаций вектора в соответствии с заданной матрицей преобразования?
    Хм. Задумался.
    ПК>И, наконец:

    ПК>
  • Есть классы, контролирующие размерность: Velocity (v, скорость), Acceleration (a, ускорение), Length (l, длина), Time (t, время). Методами каких классов являются функции, соответствующие следущим выражениям: 1) l = v * t; 2) v = l / t; 3) v2 = v * v; 4) a = v / t; 5) v = a * t; 6) t2 = t * t; 6) l = 1 / 2 * a * t * t
    Ну, мы же знаем, где должны определяться операторы
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
  • Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[20]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 02.11.04 08:19
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Насколько я понял парсеру Оберона плевать на кегель букв (или я ошибаюсь?).


    Обероны, еще со времен Модулы регистрозависимые (БОЛЬШИЕ и маленькие буквы — считаются разными символами), это только Паскаль был регистронезависимым.
    Re[26]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 02.11.04 08:24
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Все зависит от определений. В любом случае, если очереди нельзя сортировать, то они не будут предоставлять интерфейс, нужный функции sort(). Если они уже предоставляют такой интерфейс, то наличие "внешней" функции sort() никак на ситуацию не влияет, т.к. пользователь уже волен это делать своими действиями.


    И все таки, ты можешь, без привлечения умных слов, объяснить чем такой вариант:
    public interface ISortable
    {
        void Sort();
    }
    
    public class SomeList : IList, ISortable
    {
        ...
        public void Sort() {...}
    }
    
    ...
    someListInstance.Sort();


    хуже такого:

    public interface ISupportSort : IList
    {
        int CompareElements(int index1, int index2);
        void Exchange(int index1, int index2);
    }
    
    public class SomeList : IList, ISupportSort
    {
        ...
        int ISupportSort.CompareElements(int index1, int index2) {}
        void ISupportSort.Exchange(int index1, int index2) {}
    }
    
    ...
    SomeSortFunction(someListInstance);
    ... << RSDN@Home 1.1.4 beta 3 rev. 219>>
    AVK Blog
    Re[15]: Обновление
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 02.11.04 08:26
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD> Забавно. Работаешь на одном, а рекламирушь другое... Не находиш — это странным?


    Нахожу. А что делать? Не работать или не рекламировать? Тут и так не особо врубаются почему я на Дельфи пишу, а не на С++. А уж если я на БлэкБоксе на работе начну писать, то мне сразу скажут: "А что если ты когда-нибудь уволишься, то где мы найдем еще одного оберонщика чтобы сопровождать уже написанные программы?". А научиться — ни вкакую.
    Re[23]: Мэйнстрим vs. Самосовершенствование :)))
    От: alexeiz  
    Дата: 02.11.04 09:34
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Теперь что касается необходимости. Бесспорно, методы, не изменяющие состояние объекта можно выносить куда угодно. Более того, метода, не относящегося к самым базовым, вообще можно не делать. Вот только классы делаются для того чтобы потом ими пользовались люди. А стало быть, довольно неразумно выносить их черти куда. Это приводит к тому, что писать код становится значительно сложнее. И к тому, что приходится хранить в краткосрочной памяти слишком много деталей. А ведь все парадигмы программирования как раз и создаются для того чтобы уменьшить количество информации которых человек должен хранить у себя в голове. Попробую проиллюстрировать это на простом примере. Когда я пишу программу на C#, то все вокруг меня является объектом! Это не громкие слова. Это большое достижение в области поднятия уровня языка. Для того чтобы найти нужные средства работы с некоторыми объектами (функции для работы с переменными в терминологии С/С++) у меня есть выбор нажать точку после имени объекта, или полезть в документацию. Да и в документации одно дело искать методы некоторого класса, а другое функции применимые к этому классу в принципе. Даже если метод реализован как статический, я обязан всего лишь убедится, что нужного метода нет в интерфейсе используемого мной объекта, после чего попробовать поискать его в соответствующем классе. Например, для С++ перевод строки в целое будет таким же убогим как и для замшелого С:

    VD>
    VD>string str("123");
    VD>int val = atoi(str.c_str);
    VD>

    VD>А на более высокоуровневых языках это будет выглядеть немного иначе.
    VD>C#:
    VD>
    VD>string str = "123";
    VD>int val = int.Parse(str);
    VD>

    VD>Ruby (и еже с ним):
    VD>
    VD>str = "123";
    VD>val = str.to_i;
    VD>

    VD>казалось бы, какая разница? Я и сам написал все примеры по памяти. Но, черт побери, зачем мне знать все эти мелочи, если среда способна мне подсказать всю необходимую информацию?! Мы же, в конце концов, живем в 21 веке! А ведь ситуации могут быть куда сложнее. Так что подобная помощь была бы полезна не только новичкам.

    VD>В обещем, ООП — это концепция не только утилитарная. Это конецпция цель которой поднять уроветь разработки ПО. И исходя из этой концепции смотреть на вещи только из соображений необходимости ("никакой необходимости!") подразумевая под этим "можно не применять значит нужно не применять" является большой ошибкой! Необходимость хотя бы в том, что это упрощает написание кода и его восприятие. Зачастую класс поясняет значение метода. Зачастую сочетание типа и члена дают куда больше информации чем имя отдельной фукции.


    Позволь мне на примере atoi продемонстрировать, как наличие свободных функций в C++ позволяет расширять интерфейс различных классов, которые могут быть 1) созданы кем-то другим и постовляемые с библиотеками третьих фирм, 2) не имеющими между собой ничего общего, 3) являющиеся встроенными типами языка.

    Допустим у нас есть коллекция чисел, полученных ввиде строк, для которых нужно посчитать сумму. Алгоритм прост: используем atoi() для преобразования строк в числа:
    template < typename Iter >
    int generic_sum( Iter begin, Iter end )
    {
        int sum = 0;
        for ( ; begin != end; ++begin )
            sum += atoi( *begin );
        return sum;
    }

    Так что следующий код выдаёт нужную нам сумму:
        vector< char const * > arr_cstr;
        arr_cstr.push_back( "10" );
        arr_cstr.push_back( "20" );
        arr_cstr.push_back( "30" );
        cout << generic_sum( arr_cstr.begin(), arr_cstr.end() ) << endl;

    M’Kay. Через некоторое время нам потребовалось проделать эту операцию для коллекции из строк типа wstring. Не может быть ничего проще: определяем новую функцию atoi(). Заметь, что это не требует изменений существующем коде, который может быть в отдельной библиотеке и недоступен для изменения. Также, atoi не является методом (какого либо) класса, поэтому нет нужды определять его в wstring, чтобы приспособить алгоритм generic_sum для класса wstring.
    int atoi( wstring const & str )
    {
        return _wtoi( str.c_str() );
    }

    После чего следующий код прекрасно работает:
        vector< wstring > arr_wstr;
        arr_wstr.push_back( L"10" );
        arr_wstr.push_back( L"20" );
        arr_wstr.push_back( L"30" );
        cout << generic_sum( arr_wstr.begin(), arr_wstr.end() ) << endl;

    M’Kay. И так далее, идея понятна. Если этот пример кажется надуманным, то посмотри на стандартную библиотеку C++ где подобный метод расширения интерфейсов классов используется сплошь и рядом: операторы << и >> для потоков, swap, оператор сравнения < и т.д.

    А вот другой реальный пример, как с помощью свободных функций можно подвести под общий интерфейс абсолютно не связанные между собой классы: Access Shims (http://www.cuj.com/documents/s=8681/cuj0308wilson).

    В языках, где свободные функции не поддерживаются такое сделать достаточно проблемматично. Это либо cut’n’paste (т.е. generic_sum должен быть переписан для каждого нового типа), либо выкрутасы наподобие ICustomFormater для TextWriter в библиотеке .NET, которые возможны пока ты используешь только одну библиотеку, в которой всё чисто-гладко и согласованно. Как только нужно работать с разными несогласованными библиотеками, остается только cut’n’paste.

    Я не хочу сказать, что подобный метод повторного использования кода в C++ подходит под концепции OOP. В том и суть, что если OOP позволяет наиболее эффективно организовать код, то ты используешь OOP. В тех ситуациях, где OOP этого сделать не позволяет, ты используешь другие методы как, например, этот.
    Re[23]: Мэйнстрим vs. Самосовершенствование :)))
    От: LaptevVV Россия  
    Дата: 02.11.04 10:11
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>Есть такие языки — Esoteric programming languages

    ЗХ>Ну, которые сделаны для прикола или из вредности... Вроде BrainFuck или Whitespace
    ЗХ>Так вот, на одном из сайтов, посвященных таким языкам, в список эзотерических попал
    ЗХ>

    ЗХ>AKI (AvtoKod Ingenera, "engineer's autocode") for Minsk family of computers

    ЗХ>Так что — могем!
    Я на нем писал!
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[20]: Мэйнстрим vs. Самосовершенствование :)))
    От: LaptevVV Россия  
    Дата: 02.11.04 10:15
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

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


    LVV>>Можно немного прочитать в книжке Брауна "Макропроцессоры и мобильность ПО" издательства Мир серия МО ЭВМ

    ЗХ>Валерий Викторович! Ну прекратите дразниться, а?
    ЗХ>Ну не у всех же университетская библиотека под рукой!
    ЗХ>А то одолжить попрошу
    1. В университетской библиотеке таких книжек нету — это мои
    2. "Макропроцессоры..." я недавно через инет нашел — прямо по гуглю. Адреса не помню, но на этом сайте-магазине много старых книжек продается.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[33]: Мэйнстрим vs. Самосовершенствование :)))
    От: Кодт Россия  
    Дата: 02.11.04 10:19
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    ПК>>
  • Есть классы: Matrix и Vector. Методами какого класса являются функции: 1) умножения матрицы на вектор (результат — матрица); 2) умножения двух векторов по схеме "строка на столбец" (результат — матрица); 3) скалярного умножения векторов (результат — число); 4) афинных трансформаций вектора в соответствии с заданной матрицей преобразования?
    S>Хм. Задумался.

    Как это "хм"?! Конечно, тензоры!
  • Перекуём баги на фичи!
    Re[28]: Мэйнстрим vs. Самосовершенствование :)))
    От: Undying Россия  
    Дата: 02.11.04 10:24
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    >> Внешняя функция сортировки нарушает инкапсуляцию коллекции, т.к. ее использование означает явное указание метода сортировки.


    ПК>Не обязательно:

    ПК>
    ПК>class Collection1;
    ПК>class Collection2;
    
    ПК>void sort(Collection1&);
    ПК>void sort(Collection2&);
    ПК>


    Этот финт ушами проходит только в том случае, если мы работаем с конкретными типами коллекций, не скрытыми за интерфейсами, что сам понимаешь в общем случае нехорошо.
    ... << RSDN@Home 1.1.2 stable >>
    Re[24]: Мэйнстрим vs. Самосовершенствование :)))
    От: Зверёк Харьковский  
    Дата: 02.11.04 11:00
    Оценка:
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Здравствуйте, Зверёк Харьковский, Вы писали:


    ЗХ>>Есть такие языки — Esoteric programming languages

    ЗХ>>Ну, которые сделаны для прикола или из вредности... Вроде BrainFuck или Whitespace
    ЗХ>>Так вот, на одном из сайтов, посвященных таким языкам, в список эзотерических попал
    ЗХ>>

    ЗХ>>AKI (AvtoKod Ingenera, "engineer's autocode") for Minsk family of computers

    ЗХ>>Так что — могем!
    LVV>Я на нем писал!
    LVV>
    И как? Он достаточно Esotheric?
    сам слушаю и вам рекомендую: Разные Люди — Ливень
    FAQ — це мiй ай-кью!
    Re[23]: Обновление
    От: Зверёк Харьковский  
    Дата: 02.11.04 11:02
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Зверёк Харьковский, Вы писали:


    ЗХ>>Набирать ключевые слова большими буквами противоестественно


    СГ>ЭТО ВСЕГО ЛИШЬ ВОПРОС ПРИВЫЧКИ.


    угу. капс лок зажал — и вперед 10 страниц большими буквами.
    Ты не ответил на мое замечание. вообще.
    сам слушаю и вам рекомендую: Разные Люди — Сен Семилья
    FAQ — це мiй ай-кью!
    Театр абсурда (53.9 KB)
    От: Mamut Швеция http://dmitriid.com
    Дата: 02.11.04 11:14
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Здравствуйте, Зверёк Харьковский, Вы писали:


    ЗХ>>>Набирать ключевые слова большими буквами противоестественно


    СГ>>ЭТО ВСЕГО ЛИШЬ ВОПРОС ПРИВЫЧКИ.


    ЗХ>угу. капс лок зажал — и вперед 10 страниц большими буквами.

    ЗХ>Ты не ответил на мое замечание. вообще.

    Отвечу я. Здесь явное издевательство с моей стороны, не спорю НО обратите внимание, что произойдет при зажатом капслоке. Добавлю. А что, если разные программисты по-разному раскрашивают свой код?

    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[10]: Мэйнстрим vs. Самосовершенствование :)))
    От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
    Дата: 02.11.04 11:17
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    S>> Exit это выход из процедуры.


    VD>Ну, здесь я может ошибаюсь. Давно не возился с разными Дельфями. Но в Паскле вообще небыло средства прервать управление.


    S>> А Continue и Break еще во 2 Delphi были


    VD>Дельфи к Паскалю имеет отдаленное отношение.

    Ты немного противоречишь САМ СЕБЕ.
    VD>Ну, не просто так в Яве и Шарпе остались continue и есть return. Та же Дельфи и Васик долго жили без них, но в итоге иVD> в них были добавлены эти конструкции. Вред этих конструкций высасан из пальца.
    Так, что и тебя понять очень сложно
    Всетаки не надо задевать огульно Delphi там, где его не знаешь . А уж тем более ставить его в один ряд с Васиком, хотя к Васику у меня нет никаких претензий особенно фор Аппликатион, просто совершенно разные языки.
    Тогда лучше сравнивать ранний Паскаль с Ранним С. Во интересных сравнений найдется огромная куча.
    и солнце б утром не вставало, когда бы не было меня
    Re[32]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 02.11.04 13:53
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    >> Скорее всего тут проблемы в понимании приципов ООП.


    ПК>No comment.


    А кстати, зря. Так как именно тут у нас основное разногласие.

    Недавно я прочитал руководство по Руби. Оно конечно далеко от классицизма и не супер стройно, но вот его дух мне показался очень близким для меня. Погляди его описание ООП-а. Интересно что ты скажешь по этому поводу.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[30]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 14:19
    Оценка:
    AndrewVK:

    > ПК> (*) Насколько я представляю, большинство статически типизированных языков этого не умеют. Впрочем, я знаком только с более-менее практически использующимися статически типизированными языками, поддерживающими ООП, и не со всеми одинаково хорошо, так что тут могу легко заблуждаться.


    > Дотнет умеет при помощи TransparentProxy, но ценой заметной потери производительности.


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

    Кстати, вопрос: а производительность "просаживается" и в том случае, если вызываемый метод явно определен в делегирующем классе, или только в случае, когда происходит "автоматическое" делегирование? Например:
    // Класс, которому будем делегировать.
    class A
    {
       public void a() { }
       public void b() { }
    };
    
    // Класс, который делегирует
    class B
    {
       // Явное делегирование
       public void a() { a_.a(); }
    
       // Какая-то "магия" c TransparentProxy, чтобы остальные методы тоже делегировались.
       // . . .
    
       private A a_;
    };

    Будет ли в данном случае потеря производительности при вызове обоих методов, a() и b(), через интерфейс класса B, или же только при вызове b(), который делегируется неявно?
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[33]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 14:54
    Оценка:
    Sinclair:

    > ПК>
  • Date и String
    > DateConverter: TypeConverter.

    Возражений нет.

    > ПК>
  • 1) целого в строку; 2) строки в целое?
    > IntConverter: TypeConverter.

    То же самое.

    > ПК>
  • суммы/разницы двух дат, суммы/разницы двух DateDifference, суммы Date и DateDifference?
    > Возможно, Calendar?

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

    Разве что, наверное, лично мне было бы удобнее в простых случаях пользоваться простыми средствами, а не создавать множество вспомогательных объектов. Но это уже, действительно, дело вкуса. Во всяком случае, абсолютно с тобой согласен, что этим функциям место за пределами упомянутых классов, которыми они оперируют.
    Posted via RSDN NNTP Server 1.9 gamma
  • Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[15]: Мэйнстрим vs. Самосовершенствование :)))
    От: Кодт Россия  
    Дата: 02.11.04 14:58
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Забавно, что в C++ рассматривается предложение, которое позволит убить всех подобных зайцев сразу: разрешить синтаксис a.foo() для вызова "свободных" функций, если в классе, объектом которого является a, нет фунции foo(). Впрочем, будет ли оно принято, и каковы реальные последствия такого шага, пока не ясно... Но направление мыслей достаточно похожее.


    Этакая инфиксная нотация. a.foo(b,c,...z) <--> A::foo(a,b,c,...z) ?
    Круто.
    Там, глядишь, и до карринга доберёмся. И до ленивых вычислений.
    Перекуём баги на фичи!
    Re[29]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 15:00
    Оценка:
    Undying:

    >>> Внешняя функция сортировки нарушает инкапсуляцию коллекции, т.к. ее использование означает явное указание метода сортировки.


    > ПК>Не обязательно:

    > ПК>
    > ПК>class Collection1;
    > ПК>class Collection2;
    
    > ПК>void sort(Collection1&);
    > ПК>void sort(Collection2&);
    > ПК>


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


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

    Если же некоторая функция является "основной" для некоторого класса, определяющей его поведение, никаких возражений против того, чтобы она была вынесена в тот или иной интерфейс, реализуемый данным классом, у меня нет. Единственное, я не согласен, что Array.sort() относится к последнему случаю.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[30]: Мэйнстрим vs. Самосовершенствование :)))
    От: Undying Россия  
    Дата: 02.11.04 21:16
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Так... Я уже совсем запутался. Ранее предлагалось добавлять sort() именно в конкретные типы, от которых никто не будет наследоваться. В случае, если мы работаем через интерфейсы, эти функции нам вообще доступны не будут.


    Где я такое говорил? Так сделано в System.Collection, в принципе там это допустимо, т.к. на практике вроде бы не мешает, но в общем случае в подобных ситуациях должен вводится дополнительный интерфейс (ISort в данном случае), с которым и должен работать внешний код, понятно, что в этом случае имитировать полиформизм перегрузкой функций не удастся.
    ... << RSDN@Home 1.1.2 stable >>
    Re[28]: Мэйнстрим vs. Самосовершенствование :)))
    От: Undying Россия  
    Дата: 02.11.04 21:57
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

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


    +1

    ПК>Тогда я не очень понял, о каких именно изменениях, которые будет легко сделать, ты писал в своем сообщении, на которое я отвечал...


    Например, заменить пузырьковую сортировку быстрой. Кроме того можно использовать и StableSort, если знание о стабильности будет использоваться только внутри объекта реализующего сортировку. В-третьих, можно заменить сортировку на какую-то хитрую, для которой стандартного IComparer'а недостаточно. Пример, первоначально мы сортировали, допустим, детали по названию в алфавитном порядке. Затем возникло требование, что детали должны выводится не в алфавитном порядке, а в каком-то привычном, который задает пользователь. Что ты будешь делать в данном случае, если сортировка производится внешними функциями?

    Кстати, в stl какой механизм используется для указания того каким образом сравниваются два элемента?

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


    ПК>Предложенная ранее альтернатива (изменить семантику метода класса) мне не кажется более удачной.


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

    >> ПК> Естественно, если все было спроектировано на совесть, дублирования аналогичных вызовов Array.sort быть не должно, т.к. доступ к некоторому Array должен контролироваться одним классом <...>

    >>
    >> Вот это не понял, можно пояснить мысль примером.

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


    Надеюсь, объяснил.

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

    ПК>Не вижу сколько-нибудь заметной разницы в объеме написанного кода

    Да, согласен, в данном контексте я здесь не прав.

    >> Но "Мы" опять же объект, а не функция.


    ПК>"Мы" — да, "толкнем" — нет: если всем подряд приходится "толкать шарик", вовсе не факт, что хорошим решением является наследование их всех от какого-то общего класса только для того, чтобы выполнять какое-то действие с внешним объектом.


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

    ПК>Дык, я как раз пытаюсь добиться внятного ответа, где же по мнению тех, кто помещает sort() в Array лежит та граница... Влад выдвинул критерий модификации объекта, согласно которому подобные функции должны будут включаться в интерфейс шарика.


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

    ПК>Естественно, не пишу, т.к. это не соответствует "моему" подходу. "Мой" подход — в том, чтобы помещать в интерфейс класса те функции, которые необходимы для обеспечения сохранности инвариантов класса (плюс устойчивость к изменениям реализации, но это уже другой разговор). Соответственно, работа с данными напрямую такому критерию не отвечает.


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

    ПК>Рефакторинг я очень люблю и уважаю. Но для "внутренних" проектов, где весь код находится под контролем разработчиков. И с определенными ограничениями. Для библиотек же, "торчащих" наружу, я больше люблю и уважаю обратную совместимость.


    Т.е. все что ты говорил, относилось к именно библиотечному коду, а во внутренних проектах ты применяешь другие подходы?
    ... << RSDN@Home 1.1.2 stable >>
    Re[31]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 22:10
    Оценка:
    Undying:

    > Где я такое говорил?


    Приношу извинения, это Влад говорил

    > в общем случае в подобных ситуациях должен вводится дополнительный интерфейс (ISort в данном случае), с которым и должен работать внешний код, понятно, что в этом случае имитировать полиформизм перегрузкой функций не удастся.


    Чтобы не повторяться, вот мой ответ Андрею на очень похожее сообщение: http://rsdn.ru/Forum/Message.aspx?mid=880991&amp;only=1
    Автор: Павел Кузнецов
    Дата: 02.11.04
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[24]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 22:16
    Оценка:
    alexeiz,

    >
    > template < typename Iter >
    > int generic_sum( Iter begin, Iter end )
    > {
    >     int sum = 0;
    >     for ( ; begin != end; ++begin )
    >         sum += atoi( *begin );
    >     return sum;
    > }
    >

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

    Отчего же... Достаточно ввести соответствующий функтор, плюс запихать generic_sum в "класс":
    class GenericSummator
    {
    public:
       template < typename Iter, typename F >
       static int generic_sum( Iter begin, Iter end, F f )
       {
         int sum = 0;
         for ( ; begin != end; ++begin )
             sum += f( *begin ); // здесь мы предполагаем, что язык позволяет переопределять в классе функтора
                                 // operator(), или предоставляет какую-нибудь эквивалентную замену типа делегатов
         return sum;
       }
    };

    Конечно, чуть многословнее, и "концептуально грязнее", но вполне работоспособно...
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[29]: Мэйнстрим vs. Самосовершенствование :)))
    От: Undying Россия  
    Дата: 02.11.04 22:19
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>P.S. Но одна проблема с обертками, раз имеется в виду не наследование, все-таки, есть: если язык не поддерживает автоматическое делегирование (*), то каждый раз, когда в Array будет добавляться новый метод, надо будет модифицировать Wrapper.


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

    ПК>Ситуация еще осложнится, если между нашим Wrapper'ом, и Array будет еще один-два слоя "библиотечных" оберток Wrapper1, Wrapper2 etc., добавляющих дополнительные, нужные нам "утилиты". Эти обертки неизбежно будут "запаздывать" за расширением Array, и в результате, если они не "выдают" Array наружу (**), наш Wrapper утилитами, добавленными в Array, пользоваться не сможет.


    Это увеличит объем ручной работы, но принципиально ситуация не меняется.

    ПК>(**) Что, со строгой точки зрения, если бы обертки были бы "полноценными" классами, уж точно являлось бы нарушением инкапсуляции, с которым, впрочем, при таком дизайне, наверное, приходится мириться Правда, с другой стороны, обертки "полноценными" классами, наверное, не являются в том смысле, что никакие новые сущности они собой не олицетворяют, и инварианты их, по идее, совпадают с инвариантами Array, так что, наверное, применительно к ним о нарушении инкапсуляции, вообще, говорить бесмысленно, т.к. они по сути ничего и не инкапсулируют... Или нет? По-моему, обертки, предназначенные только для добавления вспомогательных функций, и выдающие свои "потроха" наружу, в классическое ООП вообще слабо вписываются...


    Принципы ООП к этой ситуации, по-моему, не имеют никакого отношения, т.к. от наследования она отличается только тем, что текущие языки умеют автоматически делегировать методы при наследовании, но не умеют делать тоже самое при делегировании, но это уже недостаток языков, а не концепции.
    ... << RSDN@Home 1.1.2 stable >>
    Re[16]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 22:28
    Оценка:
    Кодт,

    > Этакая инфиксная нотация. a.foo(b,c,...z) <--> A::foo(a,b,c,...z) ?


    Ага: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1585.pdf Но, судя по предварительным голосованиям, обсуждаемая здесь возможность, то есть вызов "свободных" функций через синтаксис функций-членов, пока особой поддержки в комитете не получила; скорее могут ограничиться разрешением вызова функций-членов через синтаксис "свободных" функций, если вообще какие-то изменения будут. В общем, поживем-увидим.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[30]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 22:43
    Оценка:
    Undying:

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


    В "Дизайн и эволюция C++" Страуструп описывал, что в ранних редакциях C++ такая возможность была, но ввиду того, что пользователи очень много ошибались, ее используя (подробности, по-моему, не приведены), ее решили убрать. Сейчас вновь поднимается вопрос добавления автоматического делегирования в язык, но чем это закончится, еще никто не знает...

    > ПК> Ситуация еще осложнится, если между нашим Wrapper'ом, и Array будет еще один-два слоя "библиотечных" оберток Wrapper1, Wrapper2 etc.


    > Это увеличит объем ручной работы, но принципиально ситуация не меняется.


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

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


    Кстати, автоматическое делегирование, фактически, эквивалентно наследованию, минус автоматическое приведение к базовому классу.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[29]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 23:34
    Оценка:
    Undying:

    > ПК>Тогда я не очень понял, о каких именно изменениях, которые будет легко сделать, ты писал в своем сообщении, на которое я отвечал...


    > Например, заменить пузырьковую сортировку быстрой.


    Если речь идет о функции с абстрактным названием sort, то это же можно сделать и для "внешней" функции...

    > Пример, первоначально мы сортировали, допустим, детали по названию в алфавитном порядке. Затем возникло требование, что детали должны выводится не в алфавитном порядке, а в каком-то привычном, который задает пользователь. Что ты будешь делать в данном случае, если сортировка производится внешними функциями?


    Уж точно не буду под это дело модифицировать функцию sort() класса Array Это как раз тот случай, когда я говорил о знании контекста. Для контейнера деталей у нас будет свой класс, изолирующий нас от знания, на каком из "базовых" контейнеров он построен. У этого класса, оперирующего понятиями предметной области, вполне может быть функция sort(), т.к. она является одной из его прямых обязанностей. Правда, скорее, не в самом классе контейнера деталей, а в каком-то классе, обозначающем стратегию его сортировки, с которым у контейнера деталей, если и будет связь, то ассоциативная (в смысле association — без понятия, как правильно переводится ). Вот ее-то и можно будет менять и в хвост, и в гриву по требованию заказчика.

    > Кстати, в stl какой механизм используется для указания того каким образом сравниваются два элемента?


    По умолчанию в подобных алгоритмах используется функтор std::less<T>, который, в свою очередь, по умолчанию использует операцию "<" для данного типа. Соответственно, пользователь имеет выбор из трех возможностей настройки поведения "стандартных" алгоритмов:
  • определить для своего типа операцию "<" (наиболее простой вариант)
  • передать в алгоритм свой функтор (самый гибкий вариант, позволяющий задавать критерии сортировки для каждого вызова каждого из алгоритмов отдельно)
  • написать специализацию для std::less<> для своего типа (пожалуй, наиболее редко используемая возможность)

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

    >
    > Надеюсь, объяснил.

    См. выше соответствующий комментарий

    > ПК> если всем подряд приходится "толкать шарик", вовсе не факт, что хорошим решением является наследование их всех от какого-то общего класса только для того, чтобы выполнять какое-то действие с внешним объектом.


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


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

    > ПК> "Мой" подход — в том, чтобы помещать в интерфейс класса те функции, которые необходимы для обеспечения сохранности инвариантов класса (плюс устойчивость к изменениям реализации, но это уже другой разговор). Соответственно, работа с данными напрямую такому критерию не отвечает.


    > Для сохранения инвариантности обычно достаточно обернуть переменные в свойства с соответствующими проверками, но ты все равно так не пишешь.


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

    > ПК> Рефакторинг я очень люблю и уважаю. Но для "внутренних" проектов, где весь код находится под контролем разработчиков. И с определенными ограничениями. Для библиотек же, "торчащих" наружу, я больше люблю и уважаю обратную совместимость.


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


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

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

    Как ты часто повторяешь одно из моих любимых высказываний: there's no silver bullet
    Posted via RSDN NNTP Server 1.9 gamma
  • Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[32]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 02.11.04 23:55
    Оценка:
    prVovik,

    > ПК> Кстати, автоматическое делегирование, фактически, эквивалентно наследованию, минус автоматическое приведение к базовому классу.


    > Ну не совсем. Тут ведь вся фишка в том, что делегированного объекта можно в рантайме задавать.


    Тоже дельное замечание. Я подразумевал статическую делегацию. Согласен, динамическая тоже вполне имеет право на жизнь.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[32]: Мэйнстрим vs. Самосовершенствование :)))
    От: prVovik Россия  
    Дата: 03.11.04 09:28
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Т.е. схема примерно такая — реальная работа по обработке вызовов производится RealProxy, но RP по типам с оборачиваемым классом несовместим. Для совместимости рантайм генерирует специальный псевдообъект — TP, единственная работа которого состоит в трансляции всех вызовов родительскому RP.


    Я плохо рарзбираюсь в дотнете, а потому есть пара вопросов.

    1) Можно ли этот ТР использовать для своих нужд, то есть не только для ремотинга?
    2) А как оно работает? Через рефлекшн + эмит?
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[34]: Мэйнстрим vs. Самосовершенствование :)))
    От: prVovik Россия  
    Дата: 03.11.04 11:25
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    V>>1) Можно ли этот ТР использовать для своих нужд, то есть не только для ремотинга?

    AVK>Можно. Хотя "не для ремоутинга" не очень корректно говорить, поскольку TP это собственно ремоутинг и есть. Есть даже специальная штука для его использования в собственных нуждах в пределах одного домена — ContextBoundObject.
    Хм, а уменя при первом знакомстве с ремоутингом, сложилось впечатление что ТР — это средство для работы с ContextBoundObject а не наоборот...

    V>>2) А как оно работает? Через рефлекшн + эмит?


    AVK>Что именно? Если вызов метода закрываемого класса, то по дефолту рефлекшен, хотя ты можешь придумать что то свое.

    это понятно.

    AVK>Если трансляция в TP, то это unmanaged stub, даже джитом не обрабатываемый.

    хех, интересно, спасибо.
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[34]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 03.11.04 17:55
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Смотрел я когда-то на него. Как скриптовый язык хорош. Для написания больших систем — вряд ли. Можно ограничиться одним моментом:

    ПК>

    ПК>In Ruby, classes are never closed: you can always add methods to an existing class.

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

    Не о том говоришь. Я тебе предлагал на общую канву изложения концепций ООП обратить внимание. И на общее видение ООП в этом языке.

    Язык не типизированный и с большим количеством своих тараканов. Но как в нем сделан ООП мне понравилось. А синглтон-методы вообще красота.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[32]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 03.11.04 17:55
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    Да ты чтобы не повторяться нашел бы хотя бы один реальный случай когда ArrayList.Sort помешал бы кому нибудь. Тогда можно было бы обсудить как это подтверждается твоей теорией. А так пустые разговоры. "Большие проекты", "проблемы". Тут не только ты занимашся большими проектами. И поверь, проблем подобного рода я что-то на практике не встречал.

    Вот давича добавил в AST-класс RTypeUdt описывающий определяемые пользователем типы (интерфейсы, классы, структуры) следующий набор методов:
    public void ForEachMember<T>(Action<T> action)
            where T : RTypeMember
    public RMemberMethod[] FindMethods(string name)
    public T[] FindMember<T>(RModifier modifiers)
            where T : RTypeMember
    public T[] FindMember<T>(Predicate<T> predicate)
            where T : RTypeMember
    public int RemoveAll<T>()
        where T : RTypeMember
    public int RemoveAll<T>(RModifier modifiers)
        where T : RTypeMember
    public int RemoveAll<T>(Predicate<T> predicate)
        where T : RTypeMember


    Потенциально их конечно можно было бы впихнуть куда угодно. Но тут они удобнее. Что касается поддрежки... Всего классов в проекте около 200. У RTypeUdt есть несколько наследников (RTypeInterface, RTypeClass, RTypeStruct). И никаких проблем с поддержкой. И вообще, никаких проблем. Все удобно, красиво и шустро. Когда пишешь код, то мыслишь в свете объектов. Найти все методы класса. Удалить публичные свойства класса. И т.п.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[23]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 03.11.04 22:06
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>ЭТО ВСЕГО ЛИШЬ ВОПРОС ПРИВЫЧКИ.


    А што ви так волнуетэсь и кричите? Право не стоит.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[11]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 03.11.04 22:06
    Оценка:
    Здравствуйте, Serginio1, Вы писали:

    S> Ты немного противоречишь САМ СЕБЕ.


    Где?

    VD>>Ну, не просто так в Яве и Шарпе остались continue и есть return. Та же Дельфи и Васик долго жили без них, но в итоге иVD> в них были добавлены эти конструкции. Вред этих конструкций высасан из пальца.

    S> Так, что и тебя понять очень сложно

    А ты уверен, что мне что-то сложно понять?

    S> Всетаки не надо задевать огульно Delphi там, где его не знаешь .


    Где я ее задевал? А на счет не знаю. Я писал на дельфи 2-3 по более твоего. Просто вот уже лет 6 серьезно ею не занимался. Все не нужное со временем забывается.

    Но о Дельфи я в общем-то ничего и не говорил.

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


    Ну, ты как-нибудь определись с отношением. Дельфи и Васик среды/языки делящие одну рыночную нишу. И было бы глупо не ставить их в один ряд.

    S> Тогда лучше сравнивать ранний Паскаль с Ранним С. Во интересных сравнений найдется огромная куча.


    Небыло никакого раннего Паскаля. Был Паскль и его клоны вроде ТП и Дельфи. С тут вообще никто не бсуждал. В общем, я так и не понял цель твоего влезания в разговор.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[23]: Обновление
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 03.11.04 22:06
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>ЭТО ВСЕГО ЛИШЬ ВОПРОС ПРИВЫЧКИ.


    Скорее безвкусия.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[2]: Oberon???????????????????????????????????
    От: Вадим Никулин Россия Здесь
    Дата: 04.11.04 09:59
    Оценка:
    Здравствуйте, prVovik, Вы писали:

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


    LVV>>Кстати, какие альтернативы оберону есть, кто-нить представляет?

    V>Java? На ней олимпиады проводятся?

    Обман. см. здесь
    Re[12]: Мэйнстрим vs. Самосовершенствование :)))
    От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
    Дата: 04.11.04 10:10
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    S>> Ты немного противоречишь САМ СЕБЕ.


    VD>Где?


    VD>>>Ну, не просто так в Яве и Шарпе остались continue и есть return. Та же Дельфи и Васик долго жили без них, но в итоге иVD> в них были добавлены эти конструкции. Вред этих конструкций высасан из пальца.

    S>> Так, что и тебя понять очень сложно

    VD>А ты уверен, что мне что-то сложно понять?

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

    VD>Где я ее задевал? А на счет не знаю. Я писал на дельфи 2-3 по более твоего. Просто вот уже лет 6 серьезно ею не занимался. Все не нужное со временем забывается.

    Откуда ты взял такие данные????? Может мегабайтами кода будем мерятся.
    VD>Но о Дельфи я в общем-то ничего и не говорил.
    Выделил.
    S>> А уж тем более ставить его в один ряд с Васиком, хотя к Васику у меня нет никаких претензий особенно фор Аппликатион, просто совершенно разные языки.

    VD>Ну, ты как-нибудь определись с отношением. Дельфи и Васик среды/языки делящие одну рыночную нишу. И было бы глупо не ставить их в один ряд.

    Отнюдь не так. Как по возможностям так и по архитектуре.
    S>> Тогда лучше сравнивать ранний Паскаль с Ранним С. Во интересных сравнений найдется огромная куча.


    VD>Небыло никакого раннего Паскаля. Был Паскль и его клоны вроде ТП и Дельфи.

    Здесь ты тоже не прав, так как Паскаль для ДВК несколько отличался от Виртовского.
    VD> С тут вообще никто не бсуждал. В общем, я так и не понял цель твоего влезания в разговор.
    Я просто указал на то, что continue и есть return были в Delphi всегда и никак он без них не обходился.
    Надо признавать ошибки. А не признавать только "лучшая защита это нападение".
    ... << RSDN@Home 1.1.3 stable >>
    и солнце б утром не вставало, когда бы не было меня
    Re[3]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 04.11.04 22:45
    Оценка:
    Здравствуйте, Вадим Никулин, Вы писали:

    ВН>Обман. см. здесь


    А на что там смотреть?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[34]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 05.11.04 00:02
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

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


    V>>1) Можно ли этот ТР использовать для своих нужд, то есть не только для ремотинга?


    AVK>Можно. Хотя "не для ремоутинга" не очень корректно говорить, поскольку TP это собственно ремоутинг и есть. Есть даже специальная штука для его использования в собственных нуждах в пределах одного домена — ContextBoundObject.


    Думаю под словами "для ремоутинга" подразумевается "для обмена по сети или между процессами". В таком случае несомненно можно.

    V>>2) А как оно работает? Через рефлекшн + эмит?


    AVK>Что именно? Если вызов метода закрываемого класса, то по дефолту рефлекшен, хотя ты можешь придумать что то свое. Если трансляция в TP, то это unmanaged stub, даже джитом не обрабатываемый.


    Кстати, на R#-пе такие вещи делаются очень легко и вообще без накладных расходов.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[30]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 05.11.04 00:02
    Оценка:
    Здравствуйте, Undying, Вы писали:

    U>Но компилятором эта ситуация отслеживается, т.е. особой проблемы не представляет, но естественно не понятно, почему делегирование нельзя ввести на уровень языка, вроде это не сложнее наследования (даже попроще, т.к. нет никаких проблем с разборками в каких случаях должен вызываться метод базового класса, а в каких его перегруженный вариант).


    Согласен. У меня как раз в планах в качестве одной из демонстраций возможностей R# реализовать на нем миксины (типа импорт бленов одного класса другим).

    Так же можно сделать и чистую делегацию, но смысла в этом особого не вижу. Если убедите в ее необходимости, прикручу и ее. Там делов на пару часов.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[33]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 05.11.04 00:02
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Тоже дельное замечание. Я подразумевал статическую делегацию. Согласен, динамическая тоже вполне имеет право на жизнь.


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

    Что мешает сдалать так (Шарп для простоты):
    // Интерфейс в котором определяются методы для обратной связи
    // с делегатором. Делегатор - это класс в котором будет 
    // производиться делегировние.
    interface IDelegator
    {
        // описываем нужную функциональность делегатора. Например:
        string Name { get; }
        ...
    }
    
    // Интерфейс который должен реализовать объект которому
    // делегируются вызовы.
    interface IDelegate
    {
        void Method1(IDelegator delegator, int data1);
        void Method2(IDelegator delegator, string data2);
        ...
    }
    
    // Реализация делегирующего объекта. Таких может быть поре.
    class Delegator : IDelegator
    {
        public IDelegate Delegate;
        
        public void Method1(int data1)
        {
            Delegate.Method1(Delegate, data1);
        }
    
        public void Method2(string data2);
        {
            Delegate.Method2(Delegate, data2);
        }
        
        private string IDelegator.Name { get { return "Вася"; } }
    
    }
    
    // Реализация приемника. Таких тоже может быть много.
    class DelegateIml1 : IDelegate
    {
        private void IDelegate.Method1(IDelegator delegator, int data1)
        {
            // делаем что хотим, если что используем делегатора.
            Console.WriteLine("Меня вызвал " + delegator.Name + " с параметром data1 = " + data1);
        }
        
        private void IDelegate.Method2(IDelegator delegator, string data2);
        {
            ...
        }
        ...
    }
    ...
    static void Main()
    {
        Delegator delegator = new Delegator();
        
        DelegateIml1 del1 = new DelegateIml1();
        
        delegator.Delegate = del1;
    
        delegator.Method1(123);
    
        delegator.Delegate = new DelegateImlXxx();
        delegator.Method2("123");
    }


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

    Например, можно объявлять делегатора и реализоатора со специальным синтаксисом. Параметр со сылкой на делегатора сделать неявным, а ссылку на него получать приведением к интерфейсу IDelegator или вообще делать методы IDelegator-а виртуально доступными из реализатора. Погу попробовать по фантазировать:
    // Интерфейс в котором определяются методы для обратной связи
    // с делегатором. Делегатор - это класс в котором будет 
    // производиться делегировние.
    interface IDelegator
    {
        // описываем нужную функциональность делегатора. Например:
        string Name { get; }
        ...
    }
    
    // Интерфейс который должен реализовать объект которому
    // делегируются вызовы.
    // Оставляем как есть, только удаляем delegator
    interface IDelegate
    {
        void Method1(int data1);
        void Method2(string data2);
        ...
    }
    
    // Реализация делегирующего объекта. Таких может быть поре.
    // Поже оставляем как есть. Вместо в принципе интерфейса можно 
    // использовать и основной класс.
    class Delegator : IDelegator, delegate IDelegate
    {
        private string IDelegator.Name { get { return "Вася"; } }
    }
    
    // Реализация приемника. Таких тоже может быть много.
    // ключевое слово implementor означает, что этот класс 
    // предназначен для реализации делегирования вызовов.
    // при этом итерфейс указываемый непосредственно за ключевым
    // словом неализуется классом и его методы вызваются при делегировании,
    // а интерфейс указанный в скобках является инерфейсом обратной связи.
    // Он неявно доступен в любом методе класса.
    class DelegateIml1 : implementor IDelegate(IDelegator)
    {
        private void IDelegate.Method1(int data1)
        {
            // делаем что хотим, если что используем предопределенное
            // ключевое слово delegator. Оно аналогично this, но
            // используется только для доступа к делегирующему объекту.
            Console.WriteLine("Меня вызвал " + delegator.Name + " с параметром data1 = " + data1);
            // Как вариант можно сделать члены интерфейса делеатора доступными 
            // неявно, т.е. без ключевого сова delegator.
            Console.WriteLine("Меня вызвал " + this.Name + " с параметром data1 = " + data1);
        }
        
        private void IDelegate.Method2(string data2);
        {
            ...
        }
        ...
    }
    ...
    static void Main()
    {
        Delegator delegator = new Delegator();
        
        DelegateIml1 del1 = new DelegateIml1();
        
        delegator.Method1(123); // Исключение говорящее о том, что не бы подключен делекат.
        
        delegator.IDelegator = del1;
    
        delegator.Method1(123);
    
        delegator.IDelegator = new DelegateImlXxx();
        delegator.Method2("123");
    }
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[34]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 05.11.04 00:14
    Оценка:
    VladD2:

    > ПК> Тоже дельное замечание. Я подразумевал статическую делегацию. Согласен, динамическая тоже вполне имеет право на жизнь.


    > Собственно я как-то не понял в чем у орла была проблема.


    Если под "орлом" подразумевается Бьярн Страуструп, то проблема, которую он описывал, предложенным тобой способом не решается, т.к. среди ее условий, очевидно, есть и то, что класс, которому делегируются вызовы, понятия не имеет, что его захотят использовать в таком качестве.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[35]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 05.11.04 00:41
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>VladD2:


    >> ПК> Тоже дельное замечание. Я подразумевал статическую делегацию. Согласен, динамическая тоже вполне имеет право на жизнь.


    >> Собственно я как-то не понял в чем у орла была проблема.


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


    Только тебе.

    ПК>есть и то, что класс, которому делегируются вызовы, понятия не имеет, что его захотят использовать в таком качестве.


    Где это требование? И зачем оно нужно?

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

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

    Собственно, довольно бессмысленно скрывать от реализатора интерфейс IDelegator-а. Но можно все сделать так, чтобы в качестве делегата можно было бы использовать тип ничего не знающий о Delegator-е. В этом случае всего лишь не будет доступна ссылка на IDelegator. Так что это все отговорки. Просто видимо орел ненашел нормального решения и решил что МН будет за глаза хватать. Про интерфейсы, кстати, тогда вообще речь не шала. По-моему, в СФронт 1.0 даже виртуальных методов не было. А уж понятие интерфейса появилось только с DCE-RPC.

    ЗЫ

    Лучше бы он в том 87 подумал как сделать длегирование и миксины, а от МН отказался бы. Глядишь и разных Яв с Шарпами и не появилось бы.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re: Oberon???????????????????????????????????
    От: Soare  
    Дата: 05.11.04 06:50
    Оценка:
    Salutare, LaptevVV, Вы писали:

    LVV>С++ как первый язык давать не хочу — поймут отнюдь не все. Студенты есть из сел, поэтому сначала их надо в проблематику написания программ ввести, не касаясь сильно компьютерных особенностей, особенно указателей. Вот на чем? На обероне?

    Странная точка зрения..
    У нас тоже были студенты из сел.. И за три семестра Си не Си, но уж основы то знали все.. даже я..
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Re[35]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 05.11.04 07:37
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Кстати, на R#-пе такие вещи делаются очень легко и вообще без накладных расходов.


    Не все. Добавление к экземпляру на ходу скажем реализации интерфейса при помощи него не сделаешь.
    ... << RSDN@Home 1.1.4 beta 3 rev. 219>>
    AVK Blog
    Re[4]: Oberon???????????????????????????????????
    От: poilk  
    Дата: 05.11.04 07:54
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Вадим Никулин, Вы писали:


    ВН>>Обман. см. здесь


    VD>А на что там смотреть?


    Видимо то, что на олимпиаде используют VC6, Delphi и Java.
    Re[5]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 05.11.04 18:31
    Оценка:
    Здравствуйте, poilk, Вы писали:

    VD>>А на что там смотреть?


    P>Видимо то, что на олимпиаде используют VC6, Delphi и Java.


    И в чем обман? Да и вообще-то я так и не заметил требований к языкам и компиляторам.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[36]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 05.11.04 18:31
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    VD>>Кстати, на R#-пе такие вещи делаются очень легко и вообще без накладных расходов.


    AVK>Не все. Добавление к экземпляру на ходу скажем реализации интерфейса при помощи него не сделаешь.


    А причем тут ход? Хотя можно и на ходу. Никто не мешат компилировать в рантайме. Собственно сам R# так и делает. Класс запускающий правла как раз генерируется на ходу, реализует интерфейс и запускается. Ну, разве что для повышения производительности кэшируется на диске, чтобы перекомпилироваться только при изменении исходников.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[37]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 05.11.04 20:10
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>>>Кстати, на R#-пе такие вещи делаются очень легко и вообще без накладных расходов.


    AVK>>Не все. Добавление к экземпляру на ходу скажем реализации интерфейса при помощи него не сделаешь.


    VD>А причем тут ход? Хотя можно и на ходу. Никто не мешат компилировать в рантайме.


    Влад, читай внимательнее. Я писал что интерфейсы можно менять у ЭКЗЕМПЛЯРА. Никакая компиляция тебе это сделать не поможет.
    ... << RSDN@Home 1.1.4 beta 3 rev. 224>>
    AVK Blog
    Re[17]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 05.11.04 21:09
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Ага: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1585.pdf Но, судя по предварительным голосованиям, обсуждаемая здесь возможность, то есть вызов "свободных" функций через синтаксис функций-членов, пока особой поддержки в комитете не получила; скорее могут ограничиться разрешением вызова функций-членов через синтаксис "свободных" функций, если вообще какие-то изменения будут. В общем, поживем-увидим.


    Это что пройдет еще лет десять и там вообще разума не остнется. За-то напринимают разной фигни окончательно усложняющей язык.

    А идея в общем-то не плохая. Что бы вы там не говорили, а проблемы реализации это для неудачников. Рельно ЯП создан, чтобы не нем выражать свои мысли. И я хочу мыслить в понятиях объектов и действий над ними, а не структурных конструкций.

    По-моему, самым изящным выходом были бы миксины. В том же Руби (и вроде бы в Питоне) можно импортировать описания из модулей. Объявляешь реализации в отдельном модуле испльзуя ключевое слово self, а потом импортируешь готовые функции в нужные классы. Если добавить возможность переопределения и т.п., то могло бы плучиться очень красивое решение.

    Интерпретация первого параметра как self/this тоже могло быть выходом. Но это неявное поведение. Тогда бы уж добавить некое финсированное название параметра (то же self/this), чтобы явно выражать намерение. Тольк опять таки это банальная реализация методов во-вне. В принципе, дорасширение классов не такая уж и плохая диея. Хотя и протеворечащая классике ООП.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[38]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 05.11.04 21:27
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Влад, читай внимательнее. Я писал что интерфейсы можно менять у ЭКЗЕМПЛЯРА. Никакая компиляция тебе это сделать не поможет.


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

    Ты вот приведи пример где я не смогу обойтись компиляцией в рантайме?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[39]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 05.11.04 21:59
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    AVK>>Влад, читай внимательнее. Я писал что интерфейсы можно менять у ЭКЗЕМПЛЯРА. Никакая компиляция тебе это сделать не поможет.


    VD>Ну, уж менять реализацию прямо у экземпляра точно смысла нет.


    Это уже второй вопрос. Главное что ограничение есть.

    VD>Ты вот приведи пример где я не смогу обойтись компиляцией в рантайме?


    Качественно СОМ к примеру не обернешь.
    ... << RSDN@Home 1.1.4 beta 3 rev. 224>>
    AVK Blog
    Re[40]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 05.11.04 23:19
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Качественно СОМ к примеру не обернешь.


    Так TlbImp.exe именно это и делает.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[18]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 06.11.04 01:10
    Оценка:
    VladD2:

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


    > Это что пройдет еще лет десять и там вообще разума не остнется. За-то напринимают разной фигни окончательно усложняющей язык.


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

    > Рельно ЯП создан, чтобы не нем выражать свои мысли. И я хочу мыслить в понятиях объектов и действий над ними, а не структурных конструкций.


    Значит, надо искать такой язык, который тебе позволяет это делать удачнее всего. Мне же, с моим предпочтением использования смеси парадигм, C++ пока вполне подходит.

    > В принципе, дорасширение классов не такая уж и плохая диея. Хотя и протеворечащая классике ООП.


    Если, как в указанном предложении, добавляемые функции не будут получать специальных прав доступа к содержимому класса, то "классика" сможет спать спокойно
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[19]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 06.11.04 06:18
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Сложный вопрос...


    Да уж не ис простых.

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


    Что-то у меня такого впечатления не создалось. Ну, да поживем увидим. Когда они планируют выпустить новый стандарт?

    ПК>Значит, надо искать такой язык, который тебе позволяет это делать удачнее всего. Мне же, с моим предпочтением использования смеси парадигм, C++ пока вполне подходит.


    Да я вроде уже нашел. На 100% он не удовлетворяет, но уж точно лучше остальных.

    >> В принципе, дорасширение классов не такая уж и плохая диея. Хотя и протеворечащая классике ООП.


    ПК>Если, как в указанном предложении, добавляемые функции не будут получать специальных прав доступа к содержимому класса, то "классика" сможет спать спокойно


    Возможно. Но духу это явно противоречит.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[41]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 06.11.04 07:20
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    AVK>>Качественно СОМ к примеру не обернешь.


    VD>Так TlbImp.exe именно это и делает.


    Неа. Он только к этому подготавливает. Реально же поддержка некоторого интерфейса у СОМ-объекта появляется только в момент приведения (и вызова внутрях QueryInterface). Оно и понятно — в общем случае до вызова этого самого QueryInterface понять поддерживает ли данный конкретный экземпляр некий интерфейс невозможно.
    ... << RSDN@Home 1.1.4 beta 3 rev. 224>>
    AVK Blog
    Re[42]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 06.11.04 10:18
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Неа. Он только к этому подготавливает. Реально же поддержка некоторого интерфейса у СОМ-объекта появляется только в момент приведения (и вызова внутрях QueryInterface). Оно и понятно — в общем случае до вызова этого самого QueryInterface понять поддерживает ли данный конкретный экземпляр некий интерфейс невозможно.


    Дык сам итрефейс появляется после генерации, уж поддержка самих КОМ-объектов строена в нутрь ЦДР и является частью интеропа.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[43]: Мэйнстрим vs. Самосовершенствование :)))
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 06.11.04 10:30
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Дык сам итрефейс появляется после генерации, уж поддержка самих КОМ-объектов строена в нутрь ЦДР и является частью интеропа.


    Ага. И называется эта поддержка TransparentProxy
    ... << RSDN@Home 1.1.4 beta 3 rev. 224>>
    AVK Blog
    Re[44]: Мэйнстрим vs. Самосовершенствование :)))
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 06.11.04 11:30
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Ага. И называется эта поддержка TransparentProxy


    Ты уверен? По-моему она называется CCW/RCW.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Мэйнстрим vs. Самосовершенствование :)))
    От: Павел Кузнецов  
    Дата: 07.11.04 02:03
    Оценка:
    VladD2,

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


    > Что-то у меня такого впечатления не создалось. Ну, да поживем увидим. Когда они планируют выпустить новый стандарт?


    Называлась только ориентировочная дата, 2008 год.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[6]: Oberon???????????????????????????????????
    От: poilk  
    Дата: 09.11.04 08:32
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    VD>>>А на что там смотреть?


    P>>Видимо то, что на олимпиаде используют VC6, Delphi и Java.


    VD>И в чем обман? Да и вообще-то я так и не заметил требований к языкам и компиляторам.


    http://neerc.ifmo.ru/information/contest-rules.html

    оттуда:

    The following programming languages are available to each team:
    Pascal
    C
    C++
    Java

    The following programming environments are available to each team:
    Borland Delphi 6.0 Personal UP3
    Microsoft Visual C/C++ 6.0 SP6
    Java 2 SDK 1.4.2_05
    Eclipse 3.0.1
    Far Manager 1.7b5
    MSDN April 2001


    И как я понял, человек хотел ответить на это
    Автор: LaptevVV
    Дата: 20.10.04
    утверждение
    Re[22]: Oberon???????????????????????????????????
    От: eugals Россия  
    Дата: 16.11.04 08:24
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Думаю, подстроку с 3 по 5 элемент. Нет?

    >>> "012345678"[3:5]
    '34'
    ... << RSDN@Home 1.1.4 beta 3 rev. 215>>
    Re[23]: Oberon???????????????????????????????????
    От: faulx  
    Дата: 16.11.04 08:37
    Оценка:
    Здравствуйте, eugals, Вы писали:

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


    F>>Думаю, подстроку с 3 по 5 элемент. Нет?

    E>
    >>>> "012345678"[3:5]
    E>'34'
    E>


    То есть индексация начинается с 0? В данном случае это не принципиально (хотя, кстати, это может создать трудность при обучении). В x.substring(3,5) тоже неясно, откуда начинается индексация.
    Re[24]: Oberon???????????????????????????????????
    От: faulx  
    Дата: 16.11.04 09:01
    Оценка:
    Здравствуйте, faulx, Вы писали:

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


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


    F>>>Думаю, подстроку с 3 по 5 элемент. Нет?

    E>>
    >>>>> "012345678"[3:5]
    E>>'34'
    E>>


    F>То есть индексация начинается с 0? В данном случае это не принципиально (хотя, кстати, это может создать трудность при обучении). В x.substring(3,5) тоже неясно, откуда начинается индексация.


    Не увидел сразу, что дело не только в начале индексации, а еще и в том, что 5 указывает на позицию после желаемого последнего символа. Понятно, сделано как в STL. Тоже при обучении может возникнуть трудность. Что ж, признаю, что догадка моя отчасти была неверна, однако прошу заметить, что главное, а именно то, что имеется в виду операция выделения подстроки я все-таки угадал верно. Это уже немало, особенно для тех, кто не знает, что значит нерусское слово substring Также немаловажно, что в x.substring(3,5) неясностей с тем, что такое 3 и 5 по крайней мере не меньше, чем в x[3:5].

    Впрочем, Python я как и раньше недолюбливал, так и после знакомства с этой деталью синтаксиса отношения не поменял. В плане конструктивного предложения могу подкинуть идею обучения на TCL/TK. По крайней мере дети на первом же занятии сделают полноценное GUI-приложение.
    Re[25]: Oberon???????????????????????????????????
    От: eugals Россия  
    Дата: 16.11.04 09:21
    Оценка:
    Здравствуйте, faulx, Вы писали:

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


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


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


    F>>>>Думаю, подстроку с 3 по 5 элемент. Нет?

    E>>>
    >>>>>> "012345678"[3:5]
    E>>>'34'
    E>>>


    F>>То есть индексация начинается с 0? В данном случае это не принципиально (хотя, кстати, это может создать трудность при обучении). В x.substring(3,5) тоже неясно, откуда начинается индексация.


    F>Не увидел сразу, что дело не только в начале индексации, а еще и в том, что 5 указывает на позицию после желаемого последнего символа. Понятно, сделано как в STL. Тоже при обучении может возникнуть трудность.

    Да.
    Впрочем, при обучении это легко усваивается, если человеку сначала показать такую конструкцию:

    >>> x[:5]
    Здесь все поймут, что вернется первые пять элементов последовательности.

    Потом можно показать такую:
    >>> x[3:]
    Здесь будет получена строка, исключая первые три элемента.

    Ну, а потом уже очевидное обобщение:
    >>> x[3:5]

    Кстати, немного рекламы.
    В этой конструкции (да и вообще в доступе к элементам последовательностей) в питоне допускаются отрицательные индексы:
    >>> x = "012345678"
    >>> x[-2:]  # два последних элемента
    '78'
    >>> x[:-2]  # все элементы, исключая два последних
    '0123456'
    >>> x[:len(x)-2] # демострация простоты логики отображения отрицательных индексов в обычные.
    '0123456'
    ... << RSDN@Home 1.1.4 beta 3 rev. 215>>
    Re[22]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 16.11.04 14:58
    Оценка:
    Здравствуйте, faulx, Вы писали:

    VD>>Нет.


    F>Не убедил.


    В чем? Это факт. В нем убеждать глупо. Скачай питон и проверь.

    F> Всплывающая подсказка — не свойство языка.


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

    F> Иначе можно сказать, например, что язык X более понятен, чем Y, потому что у меня есть знакомый специалист по X, который мне все объяснит.


    Очень разумно. Только это убдет частный случай. А вот высказывание "Шарп более прост в освоении нежели Оберон так как по Шарпу есть огромное комьюнити." как раз очень даже верно.

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


    Да. Давай доведем все до состояния сферического коня в вакуме и начнем утверждать все что захотим. Вот только зачем? Есть реальная сисуация. От абстрактных размышления она не изменится. По факту для методов Шарпа, Явы, ВБ подсказки есть. А для Питона нет. И вряд ли когда появятся подсказки для встроенных операторов. Так что понимать их совершенно невозможно. Их можно только заучивать.

    F>Я не говорил про написание (тем более в "средах"), а только про чтение с листа.


    И где же ты читаешь код с листа? Даже в Питоне командная строка — это почти IDE.

    F>А мне он показался понятнее.


    Поэтому ты не учел, что цифры означают индексы.

    F> Следовательно, существуют люди, которым это понятнее. Следовательно, нельзя говорить, что запись x[3:5] менее интуитивно понятна для всех. Следовательно, интуитивная понятность — субъективное понятие. Что и требовалось доказать.


    Я вообще не понимаю как можнов ести речь о интуитивной понятности частного синтаксиса. Тут можно вести речь о легкости изучения. И тут явно методы с подсказками имеют разкое приемущество.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[26]: Oberon???????????????????????????????????
    От: _FRED_ Черногория
    Дата: 16.11.04 15:08
    Оценка:
    Здравствуйте, eugals, Вы писали:

    E>Впрочем, при обучении это легко усваивается, если человеку сначала показать такую конструкцию:


    E>
    >>>> x[:5]
    E>
    Здесь все поймут, что вернется первые пять элементов последовательности.


    E>Потом можно показать такую:

    E>
    >>>> x[3:]
    E>
    Здесь будет получена строка, исключая первые три элемента.


    E>Ну, а потом уже очевидное обобщение:

    E>
    >>>> x[3:5]
    E>

    E>Кстати, немного рекламы.
    E>В этой конструкции (да и вообще в доступе к элементам последовательностей) в питоне допускаются отрицательные индексы:
    E>
    >>>> x = "012345678"
    >>>> x[-2:]  # два последних элемента
    E>'78'
    >>>> x[:-2]  # все элементы, исключая два последних
    E>'0123456'
    >>>> x[:len(x)-2] # демострация простоты логики отображения отрицательных индексов в обычные.
    E>'0123456'
    E>


    Очень красиво и приятно! Но, видимо, пока не надоест отступать (и "переключать" при этом мозги) от более признанных форм.
    Help will always be given at Hogwarts to those who ask for it.
    Re[27]: Oberon???????????????????????????????????
    От: eugals Россия  
    Дата: 16.11.04 15:15
    Оценка:
    Здравствуйте, _FRED_, Вы писали:

    _FR>Очень красиво и приятно! Но, видимо, пока не надоест отступать от более признанных форм.

    Это для тебя проблема? Усвоить какую-то новую ("приятную" и "красивую") парадигму?
    ... << RSDN@Home 1.1.4 beta 3 rev. 215>>
    Re[25]: Oberon???????????????????????????????????
    От: Трурль  
    Дата: 17.11.04 07:35
    Оценка:
    Здравствуйте, faulx, Вы писали:

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


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


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


    F>>>>Думаю, подстроку с 3 по 5 элемент. Нет?

    E>>>
    >>>>>> "012345678"[3:5]
    E>>>'34'
    E>>>


    F>>То есть индексация начинается с 0? В данном случае это не принципиально (хотя, кстати, это может создать трудность при обучении). В x.substring(3,5) тоже неясно, откуда начинается индексация.


    F>Не увидел сразу, что дело не только в начале индексации, а еще и в том, что 5 указывает на позицию после желаемого последнего символа. Понятно, сделано как в STL. Тоже при обучении может возникнуть трудность. Что ж, признаю, что догадка моя отчасти была неверна, однако прошу заметить, что главное, а именно то, что имеется в виду операция выделения подстроки я все-таки угадал верно. Это уже немало, особенно для тех, кто не знает, что значит нерусское слово substring Также немаловажно, что в x.substring(3,5) неясностей с тем, что такое 3 и 5 по крайней мере не меньше, чем в x[3:5].


    А вот в Алголе-68 x[3:5] означает именно "элементы с 3 по 5", причем не только для строк, но и для любых массивов.
    Re[24]: Oberon???????????????????????????????????
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 17.11.04 21:07
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>>> Всплывающая подсказка — не свойство языка.


    VD>>От части свойство. Где ты видел подсказки на встроенные операторы? К тому же тут рассматриваются два конкретных случая. Так есть по факту. И думать, что там гипотетически возможно просто бессмысленно.


    F>Еще раз, медленно. Исходное сообщение звучало так:


    VD>> Все эти х[3:5] долеко не очевидны. Они требуют объяснения на пальцах. А вот x.substring(3, 5) как раз можно понять и без объяснения.


    F>Факт заключается в следующем. Я увидел эту фразу, в которой приводились два примера синтаксиса. На для первого, ни для второго примера мой веб-браузер не выдал мне никакой всплывающей подсказки. Далее, в фразе приводилось общее утверждение, что синтаксис х[3:5] не очевиден, а x.substring(3, 5) — очевиден.


    А ты не выдирай цитаты из контекста:

    Ничего мне не мешат. Я довольно адекватно могу оценивать достоинства если они очевидны. Все эти х[3:5] долеко не очевидны. Они требуют объяснения на пальцах. А вот x.substring(3, 5) как раз можно понять и без объяснения. Тому способствует то что все методы имеют единый принцип и описание видное в редакторе.


    И все будет очевидно.

    F> Это утверждение вступило в противоречие с моим первым интуитивным представлением (совершенно объективным, поскольку меня не интересуют судьбы Питона, и этого синтаксиса Питона я тогда не знал).


    Забавно, объективность по-твоему определяется не наличием четкого доказательства, а просто твоей непредвзятостью.

    F> Этот факт показался мне, во-первых, достаточно забавным, чтобы обнародовать его, а во-вторых, опровергающим общность утверждения исходной фразы (поскольку имеется, по крайней мере, одно исключение).


    А цитату покоцал для чего? И объективность то в чем?

    VD>>Очень разумно. Только это убдет частный случай. А вот высказывание "Шарп более прост в освоении нежели Оберон так как по Шарпу есть огромное комьюнити." как раз очень даже верно.


    F>

    Т.е. снача сам переключил нить обсуждения, а потом решил вернуться... Ну, ладно. ОК.

    Если уж возвращаться, то:
    1. Погляди на название темы (это к п. 3).
    2. В чем частность случая?
    3. Чем же [3:5] понятнее чем Substring(3, 5)? Только объективно, раз уж ты об обективности.

    VD>>Да. Давай доведем все до состояния сферического коня в вакуме и начнем утверждать все что захотим. Вот только зачем? Есть реальная сисуация. От абстрактных размышления она не изменится. По факту для методов Шарпа, Явы, ВБ подсказки есть. А для Питона нет. И вряд ли когда появятся подсказки для встроенных операторов. Так что понимать их совершенно невозможно. Их можно только заучивать.


    F>В моем веб-браузере, гдя я увидел эти примеры, подсказок не было.


    А причем тут твой веб-броузер? Ты на нем собрался программировать? Или ты код из него собрался читать? Ты будешь использовать те самые IDE. И по факту ты за пару секунд разберелся, что означает Substring(3, 5), так как увидишь имена параметров и будешь вынужден искать в довольно не малом талмуде описание работы со списками.

    F>>>Я не говорил про написание (тем более в "средах"), а только про чтение с листа.


    VD>>И где же ты читаешь код с листа?


    F>В данном конкретном случае — в веб-браузере. Еще я читаю код с листа в


    Напомню, что ты ошибся в своем восприямтии. Так что ты ошибашся с листа. Ну, и см. выше.

    F>

    Ты действительно будешь изучать код в фаре или с распечатки? Или все же откроешь проект в IDE?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[25]: Oberon???????????????????????????????????
    От: faulx  
    Дата: 18.11.04 06:46
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    F>>Факт заключается в следующем. Я увидел эту фразу, в которой приводились два примера синтаксиса. На для первого, ни для второго примера мой веб-браузер не выдал мне никакой всплывающей подсказки. Далее, в фразе приводилось общее утверждение, что синтаксис х[3:5] не очевиден, а x.substring(3, 5) — очевиден.


    VD>А ты не выдирай цитаты из контекста:

    VD>

    Ничего мне не мешат. Я довольно адекватно могу оценивать достоинства если они очевидны. Все эти х[3:5] долеко не очевидны. Они требуют объяснения на пальцах. А вот x.substring(3, 5) как раз можно понять и без объяснения. Тому способствует то что все методы имеют единый принцип и описание видное в редакторе.


    VD>И все будет очевидно.


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

    F>> Это утверждение вступило в противоречие с моим первым интуитивным представлением (совершенно объективным, поскольку меня не интересуют судьбы Питона, и этого синтаксиса Питона я тогда не знал).


    VD>Забавно, объективность по-твоему определяется не наличием четкого доказательства, а просто твоей непредвзятостью.


    Объективность впечатления — да. А я говорил только о своем впечатлении. Я ничего не доказывал и не приводил утверждений, требующих доказательства. Мое сообщение звучало так: прочтя текст А, я испытал ощущение Б. Что тут нужно доказывать, и в чем ты хочешь меня убедить? Что я этого ощущения не испытал?

    F>> Этот факт показался мне, во-первых, достаточно забавным, чтобы обнародовать его, а во-вторых, опровергающим общность утверждения исходной фразы (поскольку имеется, по крайней мере, одно исключение).


    VD>А цитату покоцал для чего?


    Для того, что остальная часть цитаты не изменила моего первого впечатления от приведенных примеров синтаксиса.

    VD>И объективность то в чем?


    Объективность в том, что впервые видя синтаксис х[3:5], я понял, что речь идет о выделении подстроки.

    VD>>>Очень разумно. Только это убдет частный случай. А вот высказывание "Шарп более прост в освоении нежели Оберон так как по Шарпу есть огромное комьюнити." как раз очень даже верно.


    F>>

    VD>Т.е. снача сам переключил нить обсуждения, а потом решил вернуться... Ну, ладно. ОК.


    Ты меня ни с кем не путаещь? С чего и на что я переключал нить?

    VD>Если уж возвращаться, то:

    VD>1. Погляди на название темы (это к п. 3).

    Я ничего не говорил об Обероне, поэтому воспротивился попыткам свести разговор к нему.

    VD>2. В чем частность случая?


    В том, что я не касался вопроса о понятности Питона и C# или о легкости обучения им, а говорил только о приведенных частных примерах синтаксиса.

    VD>3. Чем же [3:5] понятнее чем Substring(3, 5)? Только объективно, раз уж ты об обективности.


    Понятность в синтаксисе, на мой взгляд, проистекает от его похожести на какой-либо другой синтаксис, знакомый так давно, что кажется само собой разумеющимся. Скажем, синтаксис x + y более интуитивно понятен, чем (+ x y), x y +, Add(x, y) или x.add(y), потому что все мы учились в школе, и никакое отсутствие всплывающих подсказок не препятствует нам в написании арифметических выражений. Аналогично, синтаксис 3:5 вызывает, видимо, ассоциацию с выражениями вида "в 3-5 раз интуитивно понятнее" (в некоторых книгах вместо дефиса в таких случаях даже пишут специальный значок, который я не знаю как напечатать — помесь дефиса и двоеточия, что-то вроде -:-, только дефис сплошной). Впрочем, я не знаю, почему именно запись [3:5] показалась мне понятной, возможно, из-за каких-то виденных мною в других языках конструкций, которых я сейчас не могу вспомнить. Разумеется, другим людям эта запись ничего не будет напоминать, поэтому она для них не будет интуитивно понятной. Поэтому интуитивная понятность — субъективное понятие.


    F>>В моем веб-браузере, гдя я увидел эти примеры, подсказок не было.


    VD>А причем тут твой веб-броузер?


    При том, что приведенные примеры я прочитал именно в нем.

    F>>В данном конкретном случае — в веб-браузере. Еще я читаю код с листа в


    VD>Напомню, что ты ошибся в своем восприямтии. Так что ты ошибашся с листа. Ну, и см. выше.


    В чем я ошибся, в том, что x[3:5] — это подстрока? Но это действительно подстрока. А что означают конкретные значения 3 и 5 — это уже вторично, потому что, во-первых, как мне подсказали, например, в Алголе они действительно значили то, что я и подумал (следовательно, подобная мысль приходила не только мне в голову), а во-вторых, в Substring(3, 5) тоже непонятно, что означают 3 и 5 (только не надо про всплывающую подсказку).

    F>>

    VD>Ты действительно будешь изучать код в фаре или с распечатки? Или все же откроешь проект в IDE?


    Во-первых, лично у меня на диване IDE нету. Во-вторых, остаются еще бумажные книги. В-третьих, мы тут вроде школьников собрались учить? Ну так они еще будут читать код с доски и перечитывать собственные конспекты.
    Re[23]: Обновление
    От: SilverCloud Россия http://rodonist.wordpress.com
    Дата: 18.11.04 15:11
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    ЗХ>>Набирать ключевые слова большими буквами противоестественно


    СГ>ЭТО ВСЕГО ЛИШЬ ВОПРОС ПРИВЫЧКИ.


    да, конечно. Но эта привычка откуда-то взялась? Или ты предлагаешь все книги и газеты тоже НА ТАКОЙ ВОТ СТИЛЬ ВЁРСТКИ перевести? В конце концов, читать (и писать) слева направо — это тоже привычка
    Пельмени «Русские». ЧП Баркашов. silent
    О динозаврах ж-)
    От: SilverCloud Россия http://rodonist.wordpress.com
    Дата: 19.11.04 16:50
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>к таковым (ископаемым) можно разве только Форт причислить


    Ну, это смотря где. В промышленных контроллерах до сих пор жив.
    Впрочем, эта область — отдельный разговор. Недавно имел опыт писания на SCL (это нечто БэйсикоПаскалеПодобное от Зименса для своих контроллеров), так это что-то. В официальной доке хвалятся, как удобно у них в редакторе Ctr+C, Ctr+V делать Но, знаешь, это всё равно более высокий уровень, чем Ассемлер!
    <задумчиво-мечтательно>Эх, когда же в PLC CIL-ные сборки заливаться будут </задумчиво-мечтательно>
    Пельмени «Русские». ЧП Баркашов. silent
    Re[19]: Oberon???????????????????????????????????
    От: eugals Россия  
    Дата: 20.11.04 14:10
    Оценка:
    Здравствуйте, Undying, Вы писали:

    U>[3:5] это специальная конструкция введенная в язык и даже будь она очевидна (а для меня это совершенно не так), ее все равно приходилось бы заучивать. Сразу же возникает вопрос: достаточно ли часто в программах используется операции модифицирующие строку, чтобы имело смысл добавление в язык специальной конструкции?

    Если говорить о питоне, эта конструкция используется не только для модификации строк.
    Она применима ко всем объектам, которые поддерживают нужный ей интерфейс (спискам, кортежам и т.д.).

    U>Лично я модифицирую строки далеко не каждый день и не вижу в такой конструкции никакого смысла.

    Это не аргумент. Я вот модифицирую строки довольно часто и смысл вижу (особенно, учитывая сказанное выше).

    F>>Так что "очевидность" — вещь субъективная.

    +1

    U>В данном случае объективная. Имея x.Substring(3, 5) я могу, во-первых, навестись мышой на название метода и получить подсказку типа:

    U>string String.Substring(int startIndex, int length), во-вторых, поставить курсор на название метода и, нажав F1, получить полное описание метода.
    U>Что мне нужно сделать, чтобы получить аналогичную информацию о x[3:5]?
    1. К собственно языку этот вопрос не имеет никакого отношения. Всё зависит от IDE которой ты пользуешься. Или будешь утверждать, что распознать выражение "\[\d*:\*\]" сложнее, чем сначала найти "\w+", а потом поискать найденное слово в индексе хелпа?
    2. Ты же не задаешь вопрос, что нужно нажать, чтобы узнать смысл вот такого выражения: "a? b: c"
    ... << RSDN@Home 1.1.4 beta 3 rev. 215>>
    Re[20]: Oberon???????????????????????????????????
    От: Undying Россия  
    Дата: 20.11.04 18:43
    Оценка:
    Здравствуйте, eugals, Вы писали:

    E>Если говорить о питоне, эта конструкция используется не только для модификации строк.

    E>Она применима ко всем объектам, которые поддерживают нужный ей интерфейс (спискам, кортежам и т.д.).

    Радует, что обобщили. Но получение куска массива подобным образом еще более экзотическая операция, чем работа со строкой.

    U>>Лично я модифицирую строки далеко не каждый день и не вижу в такой конструкции никакого смысла.

    E>Это не аргумент. Я вот модифицирую строки довольно часто и смысл вижу (особенно, учитывая сказанное выше).

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

    E>1. К собственно языку этот вопрос не имеет никакого отношения.


    Имеет. Даже если используешь бумажный справочник, в случае Substring достаточно воспользоваться указателем к нему. В случае же х[3:5] нужно долго чесать репу, думая в какой же раздел поместила эту операцию фантазия автора.

    E> Всё зависит от IDE которой ты пользуешься. Или будешь утверждать, что распознать выражение "\[\d*:\*\]" сложнее, чем сначала найти "\w+", а потом поискать найденное слово в индексе хелпа?


    Сложнее. В случае x[3:5] уже нужно уметь распознавать контекст, т.е. наличие двоеточия. Питон, кстати, подсказывать умеет?

    Кроме того многовато операций на [] возлагается. Скажем есть два варианта: Substring(int startIndex, int length) и Substring(int startIndex). Если использовать x[3:5], то реализовать второй вариант уже не получится, т.к. он будет конфликтовать с обращением к массиву по индексу.

    E>2. Ты же не задаешь вопрос, что нужно нажать, чтобы узнать смысл вот такого выражения: "a? b: c"


    Задаю. Весьма неинтуитивная конструкция, кстати говоря, которая требует обязательного предварительного заучивания.
    ... << RSDN@Home 1.1.2 stable >>
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.