Никак. По крайней мере в продакшн коде. Если надо будет мокнуть для теста, то переопределяются Add и AddRange и складываются. Требует знания о связи этих методов, не зовут ли друг друга, но тут мы возвращаемся к первому ответу: никак.
Возможность наследования — часть интерфейса класса и, внезапно, его тоже надо проектировать. А если вы используете наследование для хаков против воли автора класса, то сами себе злобный Буратино. Вы ещё скажите, что package(или internal, только для этого пакета) область видимости это плохо и нарушает инкапсуляцию.
А вот проектировать под наследование многие действительно не умеют, а потом наезжают на ООП.
под сложностью мы понимает взвешенную сумму всех выполненных над заданным набором данных элементарных операций, сложность которых мы можем указать априори
Вот в определении этих элементарных операций у нас и проблема. Вся статья про квадратный корень была про то, что принято рандомный доступ принято считать элементарной операцией, а он на самом деле гораздо сложнее. Хорошим теоретическим обоснованием было бы формальное представление структуры данных, включающей все уровни кэшей, памяти, свопа и тд. Со всеми подструктурами, алгоритмами, работающими на каждом уровне, пока мы не доберёмся до действительно элементарных операций. И тогда окажется, что мы таки зависим от железа, потому что кэши и алгоритмы выборок разные.
Да, sqrt(N) — совершенно среднепотолочная штука, да O нотация ничего не обещает, особенно когда её так неправильно используют, но пользоваться чем-то надо, а оно берёт и работает, не обещая.
Вы конечно правы, теоретически. Но вот на практике знать об асимптотике без возможности проецировать на задачу бессмысленно. Какие применения O нотации в программировании? Отсечь на ранних этапах совсем невозможное (O(e^n) при заведомо известных n > 100500) и оценить масштабируемость работающего решения. И в большинстве случаев масштабируемость оценивается очень хорошо. Линейный поиск на вдвое большем массиве работает вдвое медленней. А перебор всех пар (O(n^2)) — в 4 раза медленней. И это действительно работает и этим активно пользуются. Предложение считать доступ к памяти как O(sqrt(n)) вместо O(1) — всего лишь способ учесть на практике иерархии кэшей, просто эвристика. В любом инженерном деле таких допущений множество, эврситики проще точной теории. У математиков всегда волосы дыбом встают от того, что вытворяют физики и тем более инженеры. «Так нельзя!», зато работает.
При программировании же не асимптотика нужна, а просто прогноз масштабируемости, и с sqrt он будет ближе к правде.
Эта статистика показывает только одно — абсолютно всё равно, пробелы или табы. Можно юзать и то, и то, и никто от этого не умрёт. Кодстайлы в первую очередь должны быть одинаковыми у всех в проекте и лишь во вторую очередь учитывать мелкие плюсы и минусы пробелов/табов, переноса открывающей фигурной скобки, ширины отступа и тд.
Спасибо за исследование.
Только как-то очень хаотично написан раздел про llvm. Что получилось собрать, а что нет? В графики попала wasm версия полученная через asm.js, а упрощённый тест был просто для проверки, что 64 бита возможны? Тогда можно ожидать, что когда всё заработает wasm версия будет в несколько раз быстрее?
А я вот чего не могу понять: все комментарии негативные, комментаторы не согласны со статьёй. Тогда какого… у неё 24 плюса?
Статья — непоследовательное попоулистское повествование с графиками чтобы выглядеть научным. Не рассмотрены никакие другие факторы, не оценены степени их влияния, а по стилю изложения и аргументации не уступает хрен-тв с инопланетянами.
Это твиттер? Тема важная и интересная, но пост из ссылки и приглашения на конференцию — совсем не формат хабра. Было бы очень здорово почитать подробнее. Хотя бы ввели в тему тех, кто хочет покопаться в исходниках и помочь.
GitHub — новомодное явление для новомодных языков. Под новым я понимаю лет 10. C, C++, asm x86, COBOL, FORTRAN и многие другие там представлены очень слабо. Просто потому, что программисты на этих языках часто не пользуются гитхабом. Да и Full Stack Overflow Developer'ов на этих языках нет — не взлетит. Но это не значит, что на этих языках не пишут. Большинство таких языков постепенно вымирает, в том числе из-за того, что не вписались в современный мир, но вымирать они могут ещё десятилетиями и будут востребованы очень долго.
Мне рейтинг IEEE Spectrum видится более реалистичным, нежели TIOBE. Первая десятка тиоба ещё ничего, но дальше сплошные странности. ActionScript, который живее всех живых, и процветает в социалках, не попал даже в топ50, хотя там есть куча экзотики.
Ну и всё равно все эти рейтинги не несут полезной информации. По ним бессмысленно выбирать язык для изучения, будь то первый или десятый изучаемый язык. С качеством языка, зарплатой или сложностью применения рейтинг никак не коррелирует. Так помериться, у кого длиннее популярнее
Это охренительно круто! Сходу понятно не всё, но интерполяция это интересно.
Вопрос не совсем по теме, но давно интересовал. А следует ли из гладкости однозначность представления каждого поворота? В общем случае точно нет, а что здесь? В углах 360 == 0, что иногда неудобно. Имеется в виду, например, такая задача: есть анимация вращения колеса, промежуточные кадры интерполируются по клбчевым, но при переходе через 360 мы интерполируем углы 359 и 0, получая резкий скачок на одном кадре. Понятно, что это легко решается на программном уровне, приводя всё в один отрезок, по сути оперируя углом по модулю 360, но всё же решается ли эта проблема более элегантно?
Ваш метод примеряется, только не с кадрами с разных телескопов, а с серией с одного. То есть берём 1000 кадров с одного и того же телескопа в примерно одинаковых условиях и стекируем. Все качественные любительские снимки так и сделаны. Поднять разрешающую способность стекирование позволяет очень слабо, скорее точнее приблизиться к теоретическому максимум телескопа, зато динамический диапазон поднимает многократно. Да и шум снижает. Это позволяет разглядывать очень тусклые объекты.
Хотя для повышения разрешения тоже применяется. Можете погуглить «вебкаминг планет», когда из видео с обычной вебкамеры получают качественные снимки Юпитера, Сатурна, Марса. И там снимают видео, потому что нужны тысячи и тысячи кадров.
P.S. Посмотрите на астрофоруме, там, кажется, кооперировались для совместного стекинга.
материнские платы чаще всего не поддерживают режим AHCI, а значит, режим «профилактики и самообслуживания» (TRIM) не будет работать.
Не правда, не укрепляйте мифы. Наличие AHCI вовсе не обязательно. TRIM — комманда ATA интерфейса, поэтому она может быть переслана контроллером даже в IDE режиме, даже контроллером, который не умеет AHCI. Я заводил TRIM на Win7 на материнке с мостом ICH9(не R). Да, это медленнее, но всёравно гораздо лучше HDD.
Справедливости ради отмечу, что под линуксом GDC действительно сгенерировал 10 мегабайт. Но gdc сейчас во многом отстаёт, вон и версия языка только 2.066.
Свежий LDC сгенерировал 645 килобайт. Много, но я не пытался ничего ужимать. Думаю, что тут как и у Rust пожмётся выкидыванием лишнего.
Не надо бросаться камнями в D, не проверив на хоть сколько-то актуальной версии. На Win7 64-bit с DMD 2.070.0 helloworld занимает 200 килобайт. Без ключей, без конфигов. Если заморочиться размером, то можно не отставать от C. Вот, например, helloworld в 438 байт: http://forum.dlang.org/thread/qcbicxrtmjmwiljsyhdf@forum.dlang.org
с lvalue gcc говорит, что error: call of overloaded 'bar(int&)' is ambiguous
bar(a);
^
Потому что обе сигнатуры — одно и то же для перегрузок. То есть всё работает, но ошибка совсем не информативна.
P.S. Лучше воспользоваться не =delete, а static_assert (false, «lvalue is not supported»);
Божественно. Особенно радует, что это не экран шаблонного кода, а вполне вменяемые 2 строки. Удачно отделяется концепт с условием от определения самого метода. Всё таки даже без концептов С++11 силён.
Долго соображал над конструкцией typename = std::enable_if_t<...>. Я правильно понял, что это просто безымянный аргумент шаблона для using? А то на первый взгляд выглядит как специальный синтаксис.
Никак. По крайней мере в продакшн коде. Если надо будет мокнуть для теста, то переопределяются Add и AddRange и складываются. Требует знания о связи этих методов, не зовут ли друг друга, но тут мы возвращаемся к первому ответу: никак.
Возможность наследования — часть интерфейса класса и, внезапно, его тоже надо проектировать. А если вы используете наследование для хаков против воли автора класса, то сами себе злобный Буратино. Вы ещё скажите, что package(или internal, только для этого пакета) область видимости это плохо и нарушает инкапсуляцию.
А вот проектировать под наследование многие действительно не умеют, а потом наезжают на ООП.
Вот в определении этих элементарных операций у нас и проблема. Вся статья про квадратный корень была про то, что принято рандомный доступ принято считать элементарной операцией, а он на самом деле гораздо сложнее. Хорошим теоретическим обоснованием было бы формальное представление структуры данных, включающей все уровни кэшей, памяти, свопа и тд. Со всеми подструктурами, алгоритмами, работающими на каждом уровне, пока мы не доберёмся до действительно элементарных операций. И тогда окажется, что мы таки зависим от железа, потому что кэши и алгоритмы выборок разные.
Да, sqrt(N) — совершенно среднепотолочная штука, да O нотация ничего не обещает, особенно когда её так неправильно используют, но пользоваться чем-то надо, а оно берёт и работает, не обещая.
При программировании же не асимптотика нужна, а просто прогноз масштабируемости, и с sqrt он будет ближе к правде.
Только как-то очень хаотично написан раздел про llvm. Что получилось собрать, а что нет? В графики попала wasm версия полученная через asm.js, а упрощённый тест был просто для проверки, что 64 бита возможны? Тогда можно ожидать, что когда всё заработает wasm версия будет в несколько раз быстрее?
Статья — непоследовательное попоулистское повествование с графиками чтобы выглядеть научным. Не рассмотрены никакие другие факторы, не оценены степени их влияния, а по стилю изложения и аргументации не уступает хрен-тв с инопланетянами.
всякими глупыми вставкамизачёркнутыми фразами. Очень утомляет и отвлекает.Ну и всё равно все эти рейтинги не несут полезной информации. По ним бессмысленно выбирать язык для изучения, будь то первый или десятый изучаемый язык. С качеством языка, зарплатой или сложностью применения рейтинг никак не коррелирует. Так помериться, у кого
длиннеепопулярнееВопрос не совсем по теме, но давно интересовал. А следует ли из гладкости однозначность представления каждого поворота? В общем случае точно нет, а что здесь? В углах 360 == 0, что иногда неудобно. Имеется в виду, например, такая задача: есть анимация вращения колеса, промежуточные кадры интерполируются по клбчевым, но при переходе через 360 мы интерполируем углы 359 и 0, получая резкий скачок на одном кадре. Понятно, что это легко решается на программном уровне, приводя всё в один отрезок, по сути оперируя углом по модулю 360, но всё же решается ли эта проблема более элегантно?
Хотя для повышения разрешения тоже применяется. Можете погуглить «вебкаминг планет», когда из видео с обычной вебкамеры получают качественные снимки Юпитера, Сатурна, Марса. И там снимают видео, потому что нужны тысячи и тысячи кадров.
P.S. Посмотрите на астрофоруме, там, кажется, кооперировались для совместного стекинга.
Не правда, не укрепляйте мифы. Наличие AHCI вовсе не обязательно. TRIM — комманда ATA интерфейса, поэтому она может быть переслана контроллером даже в IDE режиме, даже контроллером, который не умеет AHCI. Я заводил TRIM на Win7 на материнке с мостом ICH9(не R). Да, это медленнее, но всёравно гораздо лучше HDD.
Свежий LDC сгенерировал 645 килобайт. Много, но я не пытался ничего ужимать. Думаю, что тут как и у Rust пожмётся выкидыванием лишнего.
error: call of overloaded 'bar(int&)' is ambiguous
bar(a);
^
Потому что обе сигнатуры — одно и то же для перегрузок. То есть всё работает, но ошибка совсем не информативна.
P.S. Лучше воспользоваться не =delete, а static_assert (false, «lvalue is not supported»);
Долго соображал над конструкцией typename = std::enable_if_t<...>. Я правильно понял, что это просто безымянный аргумент шаблона для using? А то на первый взгляд выглядит как специальный синтаксис.