Re[19]: C# .NET vs Java 1.5
От: n0name2  
Дата: 09.12.05 08:46
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Гм. Ты не мог бы показать, как именно это сделать? Причем желательно, чтобы iterate() не зависел от TreeNode.


кстати, код ниже, ИМХО, лучше чем версия с мульти итератором хотябы тем, что не пораждает столькоже итераторов сколько ветвей у дерева. ну и позволяет частичную итерацию (достаточно бросить исключение в Closure или завести возвращаемое значение + флажок).

public class TestTree {
    public static interface Closure<T> {
        public void execute(T object);
    }

    public static interface Predicate<T> {
        public boolean evaluate(T object);
    }

    public static interface Iterator<T> {
        public void iterate(Closure<T> closure, Predicate<T> predicate);
    }

    public static class TreeNode implements Iterator<TreeNode> {
        private List<TreeNode> children = new ArrayList<TreeNode>();

        public void iterate(Closure<TreeNode> closure, Predicate<TreeNode> predicate) {
            if (predicate.evaluate(this)) closure.execute(this);
            for (TreeNode child : children) child.iterate(closure, predicate);
        }
    }

    public static <T> void iterateSorted(Iterator<T> iterator, Closure<T> closure, Predicate<T> predicate, Comparator<T> comparator) {
        final List<T> temp = new ArrayList<T>();
        iterator.iterate(new Closure<T>() { public void execute(T object) { temp.add(object); } }, predicate);
        Collections.sort(temp, comparator); for (T node : temp) closure.execute(node);
    }

    public static void main(String [] args) {
        iterateSorted(
            new TreeNode(),
            new Closure<TreeNode>() {
                public void execute(TreeNode object) { System.out.println(object); }
            },
            new Predicate<TreeNode>() {
                public boolean evaluate(TreeNode object) { return object != null; }
            },
            new Comparator<TreeNode>() {
                public int compare(TreeNode x, TreeNode y) { return 0; }
            });
    }
}


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


примерно также как код выше, только предикаты, замыкания и всякие утилиты там уже есть (правда называются немного подругому и чуть более обобщенные). т.е. достаточно пяти строчек кода, определяющий сам TreeNode.
Re[13]: C# .NET vs Java 1.5
От: Loafer  
Дата: 09.12.05 08:58
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Прекрасная идея. В отличие от тупикового пути с замыканиями.

S>Есть только одно "но": в отличие от дотнетной, эта реализация не "ленивая". Т.е. первое же обращение к Tree.getRoot().getAllChildren() приведет к почти полному обходу дерева — кроме листьев. Прелесть yield в том, что он исполняется по мере необходимости. К примеру, если я делаю CollectionHelper.Find(Tree.Root.AllChildren, ...), то обход прекратится сразу же, как только я найду нужный элемент.

К сожалению нет возможности узнать как внутренне реализован yeild и что внутри происходит, может просто весь стек рекурсии просто запрятан в недрах дотнета?. Насчет ленивой реализации, т.е. сделать так, чтобы итераторы добавлялись по мере исчерпания предыдущего, надо подумать выход должен быть, не такой простой конечно как в .Net.
Re[16]: C# .NET vs Java 1.5
От: Loafer  
Дата: 09.12.05 09:02
Оценка:
Здравствуйте, Azix, Вы писали:

A>Понятия не имею, что там гоаорят, но знаю — ВСЕ ЭТО РАБОТАЕТ, ОСНОВАНО НА Shared Source CLI Release (у MS тоже исходные коды выкладываются, иногда , основано на стандартах и спонсировано Novell.

A>Можно даже на сайте посмотреть список крупных корпоративных проектов, написанных на кросс-платформенной версии .Net.
A>Не думаю, что Java может предложить что-то похожее.

Ebay подойдет?
Re[17]: C# .NET vs Java 1.5
От: Azix Азербайджан  
Дата: 09.12.05 09:07
Оценка:
Здравствуйте, Loafer, Вы писали:

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


A>>Понятия не имею, что там гоаорят, но знаю — ВСЕ ЭТО РАБОТАЕТ, ОСНОВАНО НА Shared Source CLI Release (у MS тоже исходные коды выкладываются, иногда , основано на стандартах и спонсировано Novell.

A>>Можно даже на сайте посмотреть список крупных корпоративных проектов, написанных на кросс-платформенной версии .Net.
A>>Не думаю, что Java может предложить что-то похожее.

L>Ebay подойдет?


Тогда просто миру не был доступен .Net.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: C# .NET vs Java 1.5
От: Loafer  
Дата: 09.12.05 09:23
Оценка:
Можно вас попросить привести дизассемблированный код вашего TreeNode?

Как это сделано здесь: http://www.theserverside.net/articles/showarticle.tss?id=IteratorsWithC2
Re[16]: C# .NET vs Java 1.5
От: Cyberax Марс  
Дата: 09.12.05 09:35
Оценка: +1
Azix wrote:

> Понятия не имею, что там гоаорят, но знаю — ВСЕ ЭТО РАБОТАЕТ, ОСНОВАНО

> НА Shared Source CLI Release

Из shared source там нет ни строчки кода — лицензия на shared source не
позволяет. Mono'деятели все переписали с ноля.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[18]: C# .NET vs Java 1.5
От: Loafer  
Дата: 09.12.05 09:53
Оценка:
Здравствуйте, Azix, Вы писали:

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


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


A>>>Понятия не имею, что там гоаорят, но знаю — ВСЕ ЭТО РАБОТАЕТ, ОСНОВАНО НА Shared Source CLI Release (у MS тоже исходные коды выкладываются, иногда , основано на стандартах и спонсировано Novell.

A>>>Можно даже на сайте посмотреть список крупных корпоративных проектов, написанных на кросс-платформенной версии .Net.
A>>>Не думаю, что Java может предложить что-то похожее.

L>>Ebay подойдет?


A>Тогда просто миру не был доступен .Net.



здесь

2005 год
Re[17]: C# .NET vs Java 1.5
От: Azix Азербайджан  
Дата: 09.12.05 09:58
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Azix wrote:


>> Понятия не имею, что там гоаорят, но знаю — ВСЕ ЭТО РАБОТАЕТ, ОСНОВАНО

>> НА Shared Source CLI Release

C>Из shared source там нет ни строчки кода — лицензия на shared source не

C>позволяет. Mono'деятели все переписали с ноля.

CLI — стандартизирована и открыта, это означает то, что любой может реализовать ее. Microsoft открыла свою реализацию CLI, которая, кстати компилируется и работает не только под Windows, но еще и под FreeBSD.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: C# .NET vs Java 1.5
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.12.05 10:03
Оценка:
Здравствуйте, Loafer, Вы писали:
L>К сожалению нет возможности узнать как внутренне реализован yeild и что внутри происходит, может просто весь стек рекурсии просто запрятан в недрах дотнета?.
Да, конечно. Почему же нет? Смотришь рефлектором и все видишь.
L> Насчет ленивой реализации, т.е. сделать так, чтобы итераторы добавлялись по мере исчерпания предыдущего, надо подумать выход должен быть, не такой простой конечно как в .Net.
Конечно же есть. Я же говорю — вместо каждого метода, возвращающего IEnumerable<T>, придется реализовать два класса. Просто сишарп это делает автоматически.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[20]: C# .NET vs Java 1.5
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.12.05 10:03
Оценка:
Здравствуйте, n0name2, Вы писали:

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


S>>Гм. Ты не мог бы показать, как именно это сделать? Причем желательно, чтобы iterate() не зависел от TreeNode.


N>кстати, код ниже, ИМХО, лучше чем версия с мульти итератором хотябы тем, что не пораждает столькоже итераторов сколько ветвей у дерева. ну и позволяет частичную итерацию (достаточно бросить исключение в Closure или завести возвращаемое значение + флажок).

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

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


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

Ну вот мне и хотелось бы посмотреть на эти пять строчек. Хочу понять, что я теряю, не используя Java.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[19]: C# .NET vs Java 1.5
От: Azix Азербайджан  
Дата: 09.12.05 10:04
Оценка:
Здравствуйте, Loafer, Вы писали:

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


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


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


A>>>>Понятия не имею, что там гоаорят, но знаю — ВСЕ ЭТО РАБОТАЕТ, ОСНОВАНО НА Shared Source CLI Release (у MS тоже исходные коды выкладываются, иногда , основано на стандартах и спонсировано Novell.

A>>>>Можно даже на сайте посмотреть список крупных корпоративных проектов, написанных на кросс-платформенной версии .Net.
A>>>>Не думаю, что Java может предложить что-то похожее.

L>>>Ebay подойдет?


A>>Тогда просто миру не был доступен .Net.



L>здесь


L>2005 год


И о чем это говорит? О том, что кто-то выбрал Java? Ну это нормально, а что же теперь? Все должны разом перебегать на .Net?
Ну выбрали они Java — может денег сэкономили, может c Microsof'ом не дружат, может Solaris любят.

2005 год почти кончился, а вот это 2006-ой (будущее)!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: C# .NET vs Java 1.5
От: n0name2  
Дата: 09.12.05 10:04
Оценка:
>> Понятия не имею, что там гоаорят, но знаю — ВСЕ ЭТО РАБОТАЕТ, ОСНОВАНО
>> НА Shared Source CLI Release

ну как-то helloworld работает, не вопрос сильно повезет если приложение написаное на .NET достаточно тупое чтобы собратся под Моно.

из корпоративных клиентов — эти чтоли?

Projects Using Mono
* Novell's iFolder (http://www.ifolder.com) file sharing software.
* Novell's F-Spot (http://www.gnome.org/projects/f-spot) photo management software.
* Novell's Beagle (http://www.gnome.org/projects/beagle) desktop search.

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

а release notes этого чуда смотрели? почитайте — страшно становится ну и там FAQ

Do you fear that Microsoft will change the spec and render Mono useless?
...
Even if changes happened in the platform which were undocumented, the existing platform would a value on its own.

нуну
Re[18]: C# .NET vs Java 1.5
От: Cyberax Марс  
Дата: 09.12.05 10:14
Оценка: +1
Azix wrote:

> C>Из shared source там нет ни строчки кода — лицензия на shared source не

> C>позволяет. Mono'деятели все переписали с ноля.
> CLI — стандартизирована и открыта, это означает то, что любой может
> реализовать ее.

Я не спорю, именно это и сделали Mono'иды.

> Microsoft открыла свою реализацию CLI, которая, кстати компилируется и

> работает не только под Windows, но еще и под FreeBSD.

А вот тут уже не совсем все так — лицензия на Rotor не позволяет
использовать его в коммерческих целях.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[21]: C# .NET vs Java 1.5
От: n0name2  
Дата: 09.12.05 11:11
Оценка:
Здравствуйте, Sinclair, Вы писали:

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


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

S>Ты пошел по неверному пути, пытаясь сразу получить все возможные комбинации. К примеру, метод iterateSorted — неудачен, поскольку требует передать сразу все. А если нам не надо сортировку, а только фильтрацию?


если сортировку ненадо, то просто вызываем метод iterate() у TreeNode. короче — все это уже вопрос дизайна API, можно его долго вылизывать чтобы был супер удобным, но yield тебя от этого не избавит.

S>Ну вот мне и хотелось бы посмотреть на эти пять строчек. Хочу понять, что я теряю, не используя Java.


с т.з. итераторов — точно ничего не теряешь, JGA переделывается на C# почти без изменений. например, вот такой код обойдет только уникальные ветви дерева сразу за которыми идут повторяющиеся ветви (т.е. из ветвей 1, 2, 3, 3, 4, 5, 5, 6, 6, 7 будут обходится только 3, 5, 6). closure будет вызвана для поддерева вне зависимости от результата предиката.

import java.util.*;
import net.sf.jga.fn.*;
import static net.sf.jga.util.Iterables.*;
import static net.sf.jga.util.Algorithms.*;

public class Test {
    public static <T> Iterable<T> iterable(final Iterator<T> iterator) {
        return new Iterable<T>() { public Iterator<T> iterator() { return iterator; } };
    }

    public static class TreeNode extends BinaryFunctor<UnaryFunctor<TreeNode, Boolean>, UnaryPredicate<TreeNode>, Boolean> {
        private Collection<TreeNode> children = new ArrayList<TreeNode>();

        public Boolean fn(UnaryFunctor<TreeNode, Boolean> closure, UnaryPredicate<TreeNode> predicate) {
            for (TreeNode child : unique(iterable(findAdjacent(children)))) child.fn(closure, predicate);
            return predicate.fn(this) && closure.fn(this); 
        }
    }
}
Re[16]: C# .NET vs Java 1.5
От: mrozov  
Дата: 09.12.05 11:24
Оценка: -2
Коллега.
Фанатизм никого не красит.
В Java без делегатов — плохо. Ну плохо. Можно жить, но все равно плохо. И никуда от этого не деться.

И доп. настройки GC в .net ввести все-таки заметно проще, чем делегаты в Java (Хотя лично мне они до одного места). Собственно, история с шаблонами в этом плане очень показательна.

Ну некрасивая это позиция "раз в наш супер-пупер открытый и настраиваемый язык этого не ввели, значит это никому не нужно". Другое это значит.

А по поводу Hibernate — штука знатная. И вообще — многое в Java внушает уважение ("Давно тут сидим" (с)). Но вот Asp.Net в наше время ни Java-е, ни кому-либо еще, противопоставить откровенно нечего. Разные весовые категории просто. А этот рынок сейчас едва ли не самый серьезный.

Вообще — M$ — монстр. Во всех смыслах, и плохих и хороших. Сильную штуку сделали.
Re[17]: C# .NET vs Java 1.5
От: n0name2  
Дата: 09.12.05 11:37
Оценка: +3 :)
Здравствуйте, mrozov, Вы писали:

M>В Java без делегатов — плохо. Ну плохо. Можно жить, но все равно плохо. И никуда от этого не деться.


расскажи чем делегат лучше чем анонимный класс? ну чемже?

new Comparator<A>() {
    public int compare(A a, A b) { return 0; }
}


вот и делегат.

M>И доп. настройки GC в .net ввести все-таки заметно проще, чем делегаты в Java (Хотя лично мне они до одного места). Собственно, история с шаблонами в этом плане очень показательна.


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

M>Ну некрасивая это позиция "раз в наш супер-пупер открытый и настраиваемый язык этого не ввели, значит это никому не нужно". Другое это значит.


позиция — давайте в язык пришащим все что сможем придумать мне тожне не нравится — получится помойка.

M>А по поводу Hibernate — штука знатная. И вообще — многое в Java внушает уважение ("Давно тут сидим" (с)). Но вот Asp.Net в наше время ни Java-е, ни кому-либо еще, противопоставить откровенно нечего. Разные весовые категории просто. А этот рынок сейчас едва ли не самый серьезный.


кстати, лично я Hibernate совсем не уважаю и вообще большого смысла в ORM не вижу, но не суть. чем ваш хваленый ASP.NET лучше BEA WebLogic + нормальный IDE (хотябы даже бесплатный Eclipse с плагинами)? как раз в области web в Java есть столько всего — огромное кол-во веб серверов на все случаи жизни, огромное кол-во MVC frameworks на любой вкус, редакторы WISIWYG в т.ч. JavaScriptа, хитрые компоненты которые можно вставлять в страницы, поддержка AJAX... ИМХО, как раз ASP.NET ни в какое сравнение не идет с тем что дает Java.
Re[17]: C# .NET vs Java 1.5
От: Cyberax Марс  
Дата: 09.12.05 12:11
Оценка:
mrozov wrote:

> Но вот Asp.Net в наше время ни Java-е, ни кому-либо еще,

> противопоставить откровенно нечего. Разные весовые категории просто. А
> этот рынок сейчас едва ли не самый серьезный.

Ну есть JSF (ASP.NET вид сбоку).

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[18]: C# .NET vs Java 1.5
От: n0name2  
Дата: 09.12.05 12:15
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Ну есть JSF (ASP.NET вид сбоку).


не только, есть еще struts, spring, webworkz, trapesty и т.д. и т.п. многие из которых полноценная альтернатива ASP.NET
Re[17]: C# .NET vs Java 1.5
От: Dimonizhe  
Дата: 09.12.05 13:04
Оценка:
Здравствуйте, mrozov, Вы писали:
M>Но вот Asp.Net в наше время ни Java-е, ни кому-либо еще, противопоставить откровенно нечего. Разные весовые категории просто. А этот рынок сейчас едва ли не самый серьезный.

M>Вообще — M$ — монстр. Во всех смыслах, и плохих и хороших. Сильную штуку сделали.


Отсутствие знаний никого не красит. Смотреть Tapestry/JSF/Wicket
Re[18]: C# .NET vs Java 1.5
От: mrozov  
Дата: 09.12.05 15:03
Оценка:
N>расскажи чем делегат лучше чем анонимный класс? ну чемже?
1. Компактностью.
2. Логичностью.

N>вот и делегат.

воти оверхед

N>а что, собственно, с шаблонами, кстати? настройки ЖЦ зря вам до одного места, оч полезная штука. хотя, конечно если простейшие формы лобать то не нужно это все.


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


N>позиция — давайте в язык пришащим все что сможем придумать мне тожне не нравится — получится помойка.

Именно. Хороший пример — анонимные классы.

N>кстати, лично я Hibernate совсем не уважаю и вообще большого смысла в ORM не вижу,

о-о-о-о.

>Nно не суть. чем ваш хваленый ASP.NET лучше BEA WebLogic + нормальный IDE (хотябы даже бесплатный Eclipse с плагинами)? как раз в области web в Java есть столько всего — огромное кол-во веб серверов на все случаи жизни, огромное кол-во MVC frameworks на любой вкус, редакторы WISIWYG в т.ч. JavaScriptа, хитрые компоненты которые можно вставлять в страницы, поддержка AJAX... ИМХО, как раз ASP.NET ни в какое сравнение не идет с тем что дает Java.


Понятно.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.