Re[25]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 12:42
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

E>>Вот в C++ для этого можно boost::multi_index применить.


AVK>А в C# DataView.


Глянул DataView и DataTable и не понял: DataView без DataTable можно использовать?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[25]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 17.08.05 12:49
Оценка: +3 -1
AndrewVK,

> E>Вот в C++ для этого можно boost::multi_index применить.

>
> А в C# DataView.

Это несколько другое. boost::multi_index -- контейнер, аналог map (Dictionary в C#), но со многими ключами. DataView -- компонент "легкой" базы данных. Ну и, естественно, все проверки типизации в случае последнего динамические. Ну и, опять-таки, это был пример "ситуации, когда C++ может быть короче, чем Java или C#, или Ruby". Использование DataView в данном случае получится значительно длиннее (закрывая глаза на эффективность, выразительность и т.п.).
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[26]: Стиль Дональда Эрвина Кнута
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.08.05 12:56
Оценка:
Здравствуйте, eao197, Вы писали:

E>Глянул DataView и DataTable и не понял: DataView без DataTable можно использовать?


Нет, а зачем?
... << RSDN@Home 1.2.0 alpha rev. 599>>
AVK Blog
Re[27]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 13:04
Оценка:
Здравствуйте, AndrewVK, Вы писали:

E>>Глянул DataView и DataTable и не понял: DataView без DataTable можно использовать?


AVK>Нет, а зачем?


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

Вообще Паша Кузнецов хорошо высказался: Re[25]: Стиль Дональда Эрвина Кнута
Автор: Павел Кузнецов
Дата: 17.08.05
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[28]: Стиль Дональда Эрвина Кнута
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.08.05 13:28
Оценка:
Здравствуйте, eao197, Вы писали:

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


А что не так?
... << RSDN@Home 1.2.0 alpha rev. 599>>
AVK Blog
Re[29]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 13:31
Оценка: -1
Здравствуйте, AndrewVK, Вы писали:

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


AVK>А что не так?


Не привычно.
Все же ADO.NET -- это для работы с БД.

Но я не возражаю -- возможно. Хотя, боюсь, будет больше кода, чем с boost::multi_index.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[26]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 17.08.05 13:44
Оценка: -1
P.S.

>> E>Вот в C++ для этого можно boost::multi_index применить.


>> А в C# DataView.


> Это несколько другое. boost::multi_index -- контейнер, аналог map (Dictionary в C#), но со многими ключами. DataView -- компонент "легкой" базы данных. <...>


Посмотрел на последнее еще чуть поближе... Похоже, DataView/DataTable работают в терминах предустановленных типов данных, на которые придется "раскладывать" объекты своих типов, и, похоже, не позволяют задавать свои отношения порядка и т.п. В общем, если это так, то это не "несколько другое", а "совсем другое".
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[22]: Стиль Дональда Эрвина Кнута
От: _Obelisk_ Россия http://www.ibm.com
Дата: 17.08.05 13:44
Оценка: 7 (2) +2
Здравствуйте, VladD2, Вы писали:

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


Если бы программисты не забывали совсем про математику, то сложностей никаких бы не возникало.



Душа обязана трудиться! (с) Н.Заболоцкий.
Re[30]: Стиль Дональда Эрвина Кнута
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.08.05 13:49
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>Не привычно.

E>Все же ADO.NET -- это для работы с БД.

Это для работы с данными, а не с БД (неймспейс называется System.Data, а не System.Database). Да и использование библиотеки в шарпе не сопряжено с таким же оверхедом, как в С++.

E>Но я не возражаю -- возможно. Хотя, боюсь, будет больше кода, чем с boost::multi_index.


В принципе есть еще BindingList<T>, но он, в текущей реализации, не поддерживает индексы. В любом случае никто не мешает нам написать на шарпе близкий аналог boost::multi_index. К языкам это имеет весьма опосредованное отношение.
... << RSDN@Home 1.2.0 alpha rev. 599>>
AVK Blog
Re[31]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 17.08.05 13:55
Оценка: +1 -1
AndrewVK,

> В любом случае никто не мешает нам написать на шарпе близкий аналог boost::multi_index. К языкам это имеет весьма опосредованное отношение.


В данном случае значение будет иметь степень поддержки языком обобщенного программирования.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[32]: Стиль Дональда Эрвина Кнута
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.08.05 14:11
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

>> В любом случае никто не мешает нам написать на шарпе близкий аналог boost::multi_index. К языкам это имеет весьма опосредованное отношение.


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


Да, но вот для обобщенных коллекций нетовских дженериков достаточно. А кодогенерации для такой коллекции не нужно.
... << RSDN@Home 1.2.0 alpha rev. 599>>
AVK Blog
Re[23]: Стиль Дональда Эрвина Кнута
От: xBlackCat Россия  
Дата: 17.08.05 14:18
Оценка: 51 (2)
Здравствуйте, _Obelisk_, Вы писали:

_O_>Если бы программисты не забывали совсем про математику, то сложностей никаких бы не возникало.


Можно сказать немного по-другому:

Если бы все программисты знали математику, то сложностей никаких бы не возникало.

... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Rojac &mdash; Rsdn Offline JAva Client
Анонсы и обсуждение здесь
Автор: xBlackCat
Дата: 08.02.10
Re[26]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 17:51
Оценка:
Здравствуйте, eao197, Вы писали:

E>Я не однозначно выразился в определении задачи. Есть map<X, Y>, нужно из него получить map2, где все X сохраняют свое значение, а все Y меняют.


А по какому принципу они это делают? Ну, зачем они меняют значения? Каков алгоритм?
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 17:51
Оценка:
Здравствуйте, eao197, Вы писали:

E>Я вот об этом http://en.wikipedia.org/wiki/Closure_(computer_science)


Еще раз повторюсь — это плохой термин. Он сильно перегружен и воспринимается по разному.

Есть функции высшего порядка. Это функция принимющая ссылку на другую функцию. Есть ссылка на метод (упрощенно — это то же самое что делегат или указатель на функцию). Есть лябда-функции. Они же (опять же упрощенно) анонимные методы. Вот этими терминами лучше и пользоваться. А клозюр просто забудь. Тут уже задолбались спорить по поводу значения этого слова.

E>А ты никогда суточных логов по 500Mb не видел?


Месячных... годовых... но чтобы суточных. Это если только милисекунды в лог писать.

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

E>Ага. Когда комплекс состоит из пяти процессов, которые работают на двух машинах (это пока, планируется еще большая распределенность), то просто обхахатываешься.


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

E>Не верю. Имхо, все же становится.


Верю, не верю. Что переть против фактов то?

E>И понимать короткий код все же проще.


А вот это не факт.

E>А ведь большинство прикладных задач как раз строятся на основе использования готовых библиотек.


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

E>А вот пример ситуации, когда C++ может быть короче, чем Java или C#, или Ruby. Представь, что нужно прочитать оглавление каталога в контейнер чтобы затем уметь обращаться к этому контейнеру по трем индексам: по именам файлов, по дате их изменения и по имени их фладельца. Причем вставка или удаление элемента в/из контейнера должна приводить к автоматическому обновлению индексов.


E>Вот в C++ для этого можно boost::multi_index применить.


Опять таки С++ тут не причем. Это вопрос библиотеки. Выкинь буст и получишь более сложное решение.

Что касается решения на Шарпе, то твой буст тут отдыхает, так как в дотнет входит такой класс как DataTable. В нем встрена поддержка индексов и представлений. Вот наклепал на коленке за пару минут:
using System;
using System.Data;
using System.IO;

class Program
{
    static void Main()
    {
        string path = @"c:\WINDOWS";

        DirectoryInfo dir = new DirectoryInfo(path);
        DataTable files = new DataTable("files");
        
        files.Columns.Add("Name", typeof(string));
        files.Columns.Add("Date", typeof(DateTime));
        files.PrimaryKey = new DataColumn[] { files.Columns["Name"] };
        // Создаем представление для поиска по имени
        DataView nameView = new DataView(files);
        nameView.Sort = "Name"; // это создаст индекс по полю "Name".
        // Создаем представление для поиска по дате
        DataView dateView = new DataView(files);
        dateView.Sort = "Date"; // это создаст индекс по полю "Date".
        // возиться с владельцем просто влом. Это не так просто. 
        // Но с точки зрения задачи проблем нет. Нужно бобавить еще одно предствление.
        // Если нужны индексы по нескольким полям, то это тоже не проблема.

        foreach (FileInfo file in dir.GetFiles())
            files.Rows.Add(file.Name, file.LastWriteTime);

        DataRowView[] rows = nameView.FindRows("winnt256.bmp");
        if (rows.Length > 0)
            Console.WriteLine(rows[0]["Date"]);

        rows = dateView.FindRows(
            new FileInfo(Path.Combine(path, "winnt.bmp")).LastWriteTime);

        foreach (DataRowView row in rows)
            Console.WriteLine(row["Name"]);
    }
}


Можешь ради хохмы попробовать то же саоме на С++ слабать. А потом сравнить время которое затратил, объем кода и понятность этого самого кода.

Вот только это опять таки наличие довольно крутого класса. Тоже смое можно сделать и на МС++.

E>Вот, нашел, кто запустил сюда эту информацию: http://www.rsdn.ru/Forum/?mid=588736
Автор: Gaperton
Дата: 30.03.04

E>Кстати, я в этот миф верю.

Ну, верь, верь. Ради хохмы мой пример (выше) запустился со второго раза. Опечатался в имени типа второй колонки. Ради хохмы реализуй аналог на С++ и посчитай сколько раз будшь компилировать/запускать.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 18:06
Оценка:
Здравствуйте, VladD2, Вы писали:

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


E>>Я не однозначно выразился в определении задачи. Есть map<X, Y>, нужно из него получить map2, где все X сохраняют свое значение, а все Y меняют.


VD>А по какому принципу они это делают? Ну, зачем они меняют значения? Каков алгоритм?


Да проще все записать
my_map_t updated;
for( my_map_t::iterator it = source.begin(), it_end = source.end(); it != it_end; ++it )
    updated[ it->first ] = new_value;
    
source.swap( updated );


Просто в реальном коде используются гораздо более длинные имена, поэтому такой тупой for там будет занимать намного больше места.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[26]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 18:33
Оценка:
Здравствуйте, eao197, Вы писали:

E>Глянул DataView и DataTable и не понял: DataView без DataTable можно использовать?


Работающий пример: Re[24]: Стиль Дональда Эрвина Кнута
Автор: VladD2
Дата: 17.08.05


Причем, учти, что до этого я с ним ни разу не возился. Время которое ушло на его написание и отладку примерно 5 минут.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 18:33
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

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


Забавно, что тот же DataTable таки объодится банальным полиморфизмом.

Хотя создать аналог на дженериках тоже не проблема. Объем кода просто не малый, а смысла не так много.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 18:33
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Это несколько другое. boost::multi_index -- контейнер, аналог map (Dictionary в C#), но со многими ключами.


И что дикая проблема такой написать? Просто уже есть не хуже.

ПК> DataView -- компонент "легкой" базы данных.


1. TataTable, так как DataView всего лишь средство создания представлений для TataTable.
2. Это не облегченная БД, а компонент работы с данными. Я, например, с удовольствием читаю им данные из ХМЛ-я когда они там в соотвествующем формате лежат (а это часто встречается). Кто-то получает данные из БД. А кто-то вот использует чтобы получить индексы.

ПК> Ну и, естественно, все проверки типизации в случае последнего динамические.


И? Ты просто пошуметь сюда влез? Поднимись выше и посмотри с чего это все началось:

А вот пример ситуации, когда C++ может быть короче, чем Java или C#, или Ruby. Представь, что нужно прочитать оглавление каталога в контейнер чтобы затем уметь обращаться к этому контейнеру по трем индексам: по именам файлов, по дате их изменения и по имени их фладельца. Причем вставка или удаление элемента в/из контейнера должна приводить к автоматическому обновлению индексов.

Вот в C++ для этого можно boost::multi_index применить.


ПК> Ну и, опять-таки, это был пример "ситуации, когда C++ может быть короче, чем Java или C#, или Ruby".


Это очередной пример пыпытки нечесной игры. В простонародье — мошейничества.

ПК> Использование DataView в данном случае получится значительно длиннее (закрывая глаза на эффективность, выразительность и т.п.).


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

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

Давай ради хохмы усложним задачу и предложим отобразить файлы имеющие дату совподающую с некоторым в некотором диалоге. Вот тогда оверхэд и посчитаем. Для дататэйбла это будет еще строчки 4-5 кода. На С++ поре грязи.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 18:33
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

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


Re[24]: Стиль Дональда Эрвина Кнута
Автор: VladD2
Дата: 17.08.05


ЗЫ

Особо спешит серьезность с которой ты говоришь все это.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 18:48
Оценка:
Здравствуйте, eao197, Вы писали:

E>Да проще все записать

E>
E>my_map_t updated;
E>for( my_map_t::iterator it = source.begin(), it_end = source.end(); it != it_end; ++it )
E>    updated[ it->first ] = new_value;
    
E>source.swap( updated );
E>


Т.е. просто забить одним значением? Неужели это может быть нужно?

Ну, да все равно не ясно зачем здесь функциональный подход.
Вот как бы это было на Шарпе:
string[] keys = new string[map.Count];
map.Keys.CopyTo(keys, 0);

foreach (string key in keys)
    map[key] = 123;

причем:
string[] keys = new string[map.Count];
map.Keys.CopyTo(keys, 0);

нужно только из-за того, что стандартные коллекции дотнета в целях уменьшения ошибок запрещают модификацию коллекций во время итерации по ней.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.