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

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

Send message
Занимался как-то тем же самым. Только у нас ещё и bitmap шрифты были. То есть надо было все возможные графемы затолкать, а потом рендерер научить их мёржить. Как до, так и после этой работы, считал, что никогда не надо писать свои рендереры шрифтов. Да, мы добились успеха и многие подтвердили, что рисуем правильно, но невозможно забыть тот месяц, когда хинди стоял третьей раскладкой клавиатуры в системы на равне с RU и ENG. Там же каждая гласная может модифицировать написание предыдущей согласной, (и) меняет порядок, (р) хоть и согласная, но умеет сливаться с другими согласнымии и с самой собой. Как оказалось, word неправильно рисует длинные последовательности из этой (р), да и вообще ошибки много где нашлись, видимо потому, что в языке не встречается.
По этой причине мне кажется, что подход с фиксированной таблицей в статье не может работать. Общее количество возможных лигатур в деванагари колоссально, их надо уметь рисовать на ходу. Та же шапочка у (и) вообще-то имеет очень много разных длин, так как она относится к слогу, и между ней и согласной может быть ещё пачка графем. Хотя на это обычно забивают.
Вариативность у (р) с отсечением матры (|) вообще безумная и часто своя для каждой пары.
Это, кстати, оказалось даже рентабельно. Индусов много.
Решите уравнение теплопроводности в обратном времени для начала. Без физики, без машин времени, без вообще ограничений физического мира. Простейшая мат. модель — стержень с некоторым распределением температур. Задача — описать распределение температур 1 секунду/минуту/год назад. Это принципиально невозможно, это некорректно поставленная задача.
Не стоит считать производительность по количеству инструкций. Одна инструкция div (divq) требует десятки тактов, тогда как большинство битовых — 1 такт.
Огромное спасибо за перевод. Собирался переводить эту статью для хабра, но вы опередили.
Что касается темы, то удивительно, что в этой области ещё столько простора для исследований и оптимизаций. Казалось бы структура данных, старая как мир, уже не может быть улучшена. Не сказал бы, что использованные в статье техники очень сложные или тянут на докторскую. Просто оптимизации, а значит есть куда расти дальше.
взять JS код, распарсить его с помощью D при компиляции

Где-то на этом месте ничего не получится :)
Это кончено возможно, но применимо только для ненормального программирования. AOT оптимизации в JS почти невозможны без изменения поведения кода. Парсинг в D превратится в ещё одну виртуальную машину. Слишком уж он динамичный и многое себе позволяет. Если же ввести ограничения на код, не давать менять типы в рантайме, добавлять свойства и тд, то может и получится. Только с такими ограничениями проще сразу на D писать.
Не зависят. С концептами лучше, но работают и без них. Достаточно брать с гитхаба. Там всё макросами завёрнуто, поэтому работает даже на старых компилерах. Так что ranges-v3 однозначно лучше того, что предложено в статье. И судя по моим бенчмаркам очень резво работает.
Поделитесь пожалуйста ссылкой или хотябы названием мануала. В гугле не забанили, но хочется быть уверенным, что я нашёл то, что надо.
Во-первых, измерить иррациональную величину невозможно. Измерение — процесс сверения с эталоном. Сколько эталонов помещается, такова и величина. Поэтому результат измерений всегда рационален. Вы можете ввести иррациональный эталон (иррационален он относительнодругого, например гипотенуза относительно катета), но количество эталонов в измеряемой величине будет рациональным. А как уже ответили, плотность множества рациональных позволяет сколь угодно точно измерить что-угодно.
Во-вторых, по поводу интуитивности. Попробуйте описать множество иррациональных чисел, не вводя определение предела или других контринтуитивных идей. Даже через геометрические интерпретации + корни рациональных уравнений вы не опишете всех. А предел — довольно сложная идея, которая решила всевозможные апории Зенона и им подобные.
С этой точки зрения оно мало чем отличается от бесконечной дроби 0.(3).

В том-то и дело, что отличается. Любое рациональное число представимо обыкновенной дробью. 0.3(3) — не более чем запись числа 1/3. Одна из многих. Так же как 0.9(9) — другая запись 1. Я всё ещё могу сказать, что 1 карандаш — треть от пачки из 3-х карандашей.
Рациональное число — всегда количество долей чего-то в чём-то. Оно интуитивно, потому что люди осознают только целые, а это просто способ на пальцах посчитать доли. Иррациональные числа не представимы никакой дробью. Нельзя сказать, что это доля чего-то. Считалось, что рациональных чисел достаточно для оперирования геометрии, а оказалось, что нет. Абстракция отрезка и описывающего его числа развалилась, они перестали быть тождественны.
Сомнительной выглядит статистика по времени жизни веганов и вегетарианцев. Точнее мне не нравится её интерпретация. Я склонен считать, что дольше подобные группы живут не благодаря ограничениям, а скорее вопреки. То есть они вынуждены более тщательно относиться к выбору еды, поэтому их диета более сбалансирована. Но это не значит, что нельзя сбалансировать диету мясоеда так же или даже лучше.
Интересно было бы посмотреть на подобную статистику, где разбивка будет по вопросу «Следите-ли вы за своим рационом? Сидите-ли на диете».
А зачем? Может стоит возвращать константную ссылку, чтобы подобного не происходило? Или это замысел такой?
Вы очень сильно недооцениваете влияние философии. Понятно, что большинство современных философов сильно отстали от науки и не в состоянии что-либо объяснять. Однако, существует множество вопросов, поставленных точными дисциплинами, ответы на которые выходят за их рамки. Например, проблема корня из 2 и появления иррациональных чисел в математике. У математики нет проблем с иррациональностью, она с ней работает. А вот интерпретация и осознание этих величин — вопрос скорее философский. Когда-то он переворачивал мировоззрение и представления об устройстве мира.
Точно так же квантовая физика и подтверждение неравенства Белла перевернуло мировоззрение в ХХ веке. Детерминизм как идея мироздания умер. Сейчас мы сталкиваемся с ещё более запутанными свойствами мира в физике и сложной сущностью ИИ в технике. И вопрос осознания явлений — всё ещё вотчина философии. Просто она становится всё сложнее и сложнее.
Ожидал увидеть что-то вроде https://github.com/libffcall/libffcall
Там в рантайме генерируется код для каждого использования, что позволяет передать замыкание туда, где ожидается обычная сишная функция, не предусматривающая пользовательских данных. Руки чешутся начать использовать, но уровень шаманства отпугивает.
Спасибо за статью, радикальный подход!
Проясните, пожалуйста, следующий момент:
test().setX(1000); // не поменяет исходный объект

Что такое setX на неизменяемом объекте? Какой объект поменяется? Я ожидал увидеть здесь ошибку компиляции, так как не константные методы не должны работать на immutable.
Могли бы и поискать. Этот вопрос очень часто задаётся. Причин много:
1) Ваша версия про сопротивление воздуха, ракета в первую очередь должна лететь вверх, а уж потом садиться.
2) Тонкий цилиндр гораздо проще трансопртировать. Можно найти видео, где первую ступень везут по обычной дороге на «обычном» тягаче. При чём со скоростью всего потока на автостраде.
3) Ваш исходный тезис ложен. В ситуации управления перевёрнутым маятником, чем длиннее, тем лучше. Вы ни за что не сможете удерживать вертикально на пальце обычную ручку, но стоит удлинить её хотя бы вдвое и получится. Так что высокая узкая ступень граздо устойчивее. Пирамида лучше, когда уже всё посадили и нужно просто стоять без динамического управления. Для этого есть раздвижные ноги, а ещё ракету хорошо крепят к платформе.
Это касается не только обучения. Часто намеренно оставляю задачу незавершённой чтобы вернуться к ней на следующий день. Это позволяет легче вернуться в контекст работы. Если же приходишь на работу и тебе надо начинать что-то с нуля, но настраиваться сложнее. Главное правило — не оставлять больше одной задачи, то есть не превращать в откладывание на потом. Незавершённая работа — закладка в книге, их не может быть больше одной.
Статистику можно хранить в куках, в БД, если вы залогинены или с вас можно снять нормальный отпечаток (а его почти всегда можно снять). Релевантная реклама гуглом совсем не по IP выдаётся. А как правильно заметили ниже, сам факт использования анонимайзеров и отключения куков и js сужает круг поиска до очень маленькой группы лиц.
Технических способов для анонимности мало, нужны социальные. Ну и вообще надо понимать, что именно вам надо и от кого, что и как вы собираетесь скрыть.
Как будто Tor защищает от поведенческого анализа. Максимум, что он даёт — сокрытие точки выхода в интернет, а дальше всё как обычно. Для хоть какой-то анонимности нужен выключенный js и cookies, что делает совершенно неюзабельным большинство сайтов. А использовать соцсети хоть из бункера через личный канал президента не анонимно по определению, на то они и соцсети.
</паранойя>
Начал использовать Catch только благодаря header-only. Ваша реализация тоже выглядит достойно, возможно попробую.
Для окружности достаточно взять всего 2 точки, определяемые касательными к окружности из точки обзора. Их придётся менять при сдвиге точки, но для этих расчётов не критично. Это в целом привычная практика по-разному обрабатывать окружности и полигоны, и хотя в рендеринге окружность тоже полигон, в модели она может оставаться идеальной окружностью.

Information

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