Pull to refresh
154
0.1
Григорий@bfDeveloper

Программист на C++, D, Brainfuck

Send message
Как вы реализуете эти методы в классе-наследнике?

Никак. По крайней мере в продакшн коде. Если надо будет мокнуть для теста, то переопределяются 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 версия будет в несколько раз быстрее?
А как же всякие оливки? Некоторым под 3000 лет. Да и вообще на вики много европейских старых деревьев: https://ru.wikipedia.org/wiki/Список_старейших_деревьев
А я вот чего не могу понять: все комментарии негативные, комментаторы не согласны со статьёй. Тогда какого… у неё 24 плюса?
Статья — непоследовательное попоулистское повествование с графиками чтобы выглядеть научным. Не рассмотрены никакие другие факторы, не оценены степени их влияния, а по стилю изложения и аргументации не уступает хрен-тв с инопланетянами.
Комментарий был написан, когда статья состояла из двух абзацев. Теперь всё гораздо лучше и понятнее. Спасибо автору.
Это твиттер? Тема важная и интересная, но пост из ссылки и приглашения на конференцию — совсем не формат хабра. Было бы очень здорово почитать подробнее. Хотя бы ввели в тему тех, кто хочет покопаться в исходниках и помочь.
Идея интересная, но подача… В злоупотребляете всякими глупыми вставками зачёркнутыми фразами. Очень утомляет и отвлекает.
GitHub — новомодное явление для новомодных языков. Под новым я понимаю лет 10. C, C++, asm x86, COBOL, FORTRAN и многие другие там представлены очень слабо. Просто потому, что программисты на этих языках часто не пользуются гитхабом. Да и Full Stack Overflow Developer'ов на этих языках нет — не взлетит. Но это не значит, что на этих языках не пишут. Большинство таких языков постепенно вымирает, в том числе из-за того, что не вписались в современный мир, но вымирать они могут ещё десятилетиями и будут востребованы очень долго.
Мне рейтинг IEEE Spectrum видится более реалистичным, нежели TIOBE. Первая десятка тиоба ещё ничего, но дальше сплошные странности. ActionScript, который живее всех живых, и процветает в социалках, не попал даже в топ50, хотя там есть куча экзотики.
Ну и всё равно все эти рейтинги не несут полезной информации. По ним бессмысленно выбирать язык для изучения, будь то первый или десятый изучаемый язык. С качеством языка, зарплатой или сложностью применения рейтинг никак не коррелирует. Так помериться, у кого длиннее популярнее
Нашёл более точную ссылку: http://www.astronomy.ru/forum/index.php/topic,140490.0.html
Результат
image<>
Это охренительно круто! Сходу понятно не всё, но интерполяция это интересно.
Вопрос не совсем по теме, но давно интересовал. А следует ли из гладкости однозначность представления каждого поворота? В общем случае точно нет, а что здесь? В углах 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? А то на первый взгляд выглядит как специальный синтаксис.

Information

Rating
3,744-th
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity