Чёрт, камент запотсился сам собой. Хотел ещё добавить, что для интранет-приложений (где известно, что у всех есть плагин) — да, Сервелат прекрасно подходит. Стоимость разработки и поддержки будет намного ниже.
Я — разработчик Silverlight. Мне нравится Silverlight, нравится с ним работать. Но я полностью согласен со статьёй — для интернет-приложений лучше выбрать HTML.
Меня слегка раздражает флешовый проигрыватель, поэтому некоторые ролики ставлю на закачку (стоит extension для оперы — один клик) и сразу запускаю играть в VLC. Но и таймлайн довольно быстро заполняется.
Я тут попробовал порешать задачу из статьи на C#, чтобы прочувствовать проблему.
Сразу решил обходиться без unsafe и написания собственных хэштаблиц, сортировок, итп. То есть использовать имеющиеся в стандартных библиотеках реализации.
Сразу скажу, ваше предложение использовать дерево — неэффективно по памяти из-за указателей.
Самый эффективный по памяти и простой по коду вариант — положить всё в массив (использовал несколько массивов, т.к. в .NET ограничен размер одного куска памяти на 2gb), применить Array.Sort (сортировка 1млн записей заняла 14 минут на Athlon X2 2.7 Ghz. Алгоритм QuickSort там). Потом использовать Array.BinarySearch. 2.4 гб памяти съело при работе.
Самый быстрый вариант — хэштаблица (опять же, несколько). Отдельная структура для ключа (вместо byte[16] я использовал два Int64, чтобы не использовать unsafe), отдельная структура для значений. Понадобилось 3.6 гигабайта памяти. У меня только 4 гб, поэтому часть хэштаблиц засвопилось, и всё стало тормозить. Для сравнения скорости я протестировал на половине объема (50млн). Хэширование заняло 20 секунд.
>На 8 и на 75 мегабитах ролики на ютубе грузятся с незначитальной разницей во времени.
Не соглашусь:
По торрентам тем более не согласен. На свежих фильмах несколько сотен сидов бывает, у меня в таких случаях вплоть до 9 мбайт/сек тянет. Я уже локалкой пользоваться перестал (DC++) — с торрентов такая же скорость, а искать удобнее, раздачи оформлены хорошо.
Такие объемы данных вы будете очень долго сортировать, а поиск ключа в хеш-таблице не зависит от её размера. Кнута вы не дочитали, похоже. Сравнение C# с C тут вообще неуместно.
В том-то и дело, хотелось бы увидеть пример для высокоуровневых языков C++, или C#, или Java.
У меня, конечно, не 20 лет опыта, но лет 6 уже получаю деньги за программирование (C#), и до сих пор ни разу не возникало нужды в goto.
А про системное программирование и микроконтроллеры спорить не буду, видимо, был не прав.
Ок, я понял, что рассмотрение этих надуманных функций — бессмысленно.
Давайте реальный пример, из реального приложения на языке высокого уровня рассмотрим. Без троеточий.
goto не нужен. goto плох тем, что программу сложно понимать и отлаживать.
switch — тоже несколько спорная команда, зачастую от неё можно (и нужно) избавляться при помощи, например, полиморфизма.
Все ваши примеры опровергать не буду, достаточно последнего: оттуда можно просто убрать goto, разве нет?
По поводу PDF. Когда делал программу — iTextSharp первый под руку попался и легко получилось его использовать.
Позже уже наткнулся на статью habrahabr.ru/blogs/open_source/112707/
Безусловно, если будет серьёзная задача — серьёзно подойду к выбору и учту ваш совет.
По поводу бинарников в репозитории — несколько спорно.
Сразу решил обходиться без unsafe и написания собственных хэштаблиц, сортировок, итп. То есть использовать имеющиеся в стандартных библиотеках реализации.
Сразу скажу, ваше предложение использовать дерево — неэффективно по памяти из-за указателей.
Самый эффективный по памяти и простой по коду вариант — положить всё в массив (использовал несколько массивов, т.к. в .NET ограничен размер одного куска памяти на 2gb), применить Array.Sort (сортировка 1млн записей заняла 14 минут на Athlon X2 2.7 Ghz. Алгоритм QuickSort там). Потом использовать Array.BinarySearch. 2.4 гб памяти съело при работе.
Самый быстрый вариант — хэштаблица (опять же, несколько). Отдельная структура для ключа (вместо byte[16] я использовал два Int64, чтобы не использовать unsafe), отдельная структура для значений. Понадобилось 3.6 гигабайта памяти. У меня только 4 гб, поэтому часть хэштаблиц засвопилось, и всё стало тормозить. Для сравнения скорости я протестировал на половине объема (50млн). Хэширование заняло 20 секунд.
Не соглашусь:
По торрентам тем более не согласен. На свежих фильмах несколько сотен сидов бывает, у меня в таких случаях вплоть до 9 мбайт/сек тянет. Я уже локалкой пользоваться перестал (DC++) — с торрентов такая же скорость, а искать удобнее, раздачи оформлены хорошо.
Что может C, чего не может C#, и что позволяет сделать лексический анализатор короче по коду?
Некто Кнут говорил, что «Преждевременная оптимизация — корень всех зол».
Ну и есть же inline в этом вашем С++, если уж действительно оказалось неэффективно.
habrahabr.ru/blogs/cpp/114211/#comment_3682679
В общем, по-прежнему здесь нет ни одного примера «жизненного» кода, где goto облегчал бы жизнь.
У меня, конечно, не 20 лет опыта, но лет 6 уже получаю деньги за программирование (C#), и до сих пор ни разу не возникало нужды в goto.
А про системное программирование и микроконтроллеры спорить не буду, видимо, был не прав.
Давайте реальный пример, из реального приложения на языке высокого уровня рассмотрим. Без троеточий.
switch — тоже несколько спорная команда, зачастую от неё можно (и нужно) избавляться при помощи, например, полиморфизма.
Все ваши примеры опровергать не буду, достаточно последнего: оттуда можно просто убрать goto, разве нет?
int f (…)
{
…
if (a)
…
if (b)
…
c = 15;
return 10;
}
Ну и пост будет неполон без этого:
Позже уже наткнулся на статью habrahabr.ru/blogs/open_source/112707/
Безусловно, если будет серьёзная задача — серьёзно подойду к выбору и учту ваш совет.
По поводу бинарников в репозитории — несколько спорно.