Pull to refresh
108
52.6
Send message
В C++ декораторы вообще нереализуемы, ну или реализуемы, но с сильными извращениями. Именно за этим автор поста создал свой язык.
Изменение сигнатуры возможно только статически, как и изложено в статье выше.
«Обычные функции» таки да, нельзя будет в таком подходе декорировать. Но поскольку автор поста свой язык пишет, он вполне может все функции реализовать подобным образом.
Можно использовать что-то вроде std::function:
#include <functional>

std::function<int(int)> some_func=
[](int x) -> int
{
    return x * 2;
};

void apply_decorator()
{
    some_func=
    [prev_func= some_func](int x) -> int
    {
        return prev_func(x + 1);
    };
}
Не вижу проблем, почему бы декоратор нельзя было бы задавать динамически.
Можно все функции сделать указателями, тогда бы задание декоратора делалось через присваивание нового значения этому указателю.
А что, если использовать технологию типа электронных чернил? Внутри, насколько я знаю, там тоже просто смена ориентации механических элементов, только они гораздо компактнее.
Проблема 15-го стандарта в том, что нету какого-либо органа, принуждающего соблюдать стандарты. Без него сколько стандарты не принимай, они все будут иметь только рекомендательный характер.
Было бы конечно хорошо такой орган создать, но это уже совсем другая история.
«простые» эффекты можно делать на шейдерах

Если разных эффектов много, то переключение шейдеров будет накладным.

такая техника очевидно накладывает ограничение на количество цветов и количество переходов цвета

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

Размер текстур частиц-градиентом по 100кб

Тут проблема скорее не в размере, а в переключении текстур или необходимости паковать их в атлас. Для эффектов на основе градиентных треугольников такой проблемы не стоит.

это отсутствие Mipmap

Можно LOD-ы самой геометрии сделать.
Zero overhead и браузеры — слабо совместимые вещи. Если браузерное приложение упирается в производительность WebGL — стоит задуматься о создании нативной версии приложения. А в нативной версии есть уже знакомый всем Vulkan.
Не понятно, зачем нужен ещё один графический API для браузеров. Неужели WebGL было мало?
Неэффективность госуправления — миф. Эффективность в госструктурах схожа с аналогичными по размеру и занимаемой доле рынка частными компаниями. Кажущаяся неэффективность происходит от того, что госструктуры как правило являются монополиями, но при этом монополисты-частники являются столь же забюрократизироваными и неповоротливыми.

Но при всей схожести государственных и частных монополий, для обычного гражданина предпочтительна госмонополия. Но её работу можно, в теории, хоть как-то повлиять — через выборы. На частную монополию повлиять можно только отказавшись от её услуг, что практически почти неосуществимо.

То, что в каких-то странах государство по сути неподконтрольно гражданам — отдельная проблема. Жителям этих стран сначала надо будет вернуть контроль над государством, а потом можно уже будет национализировать монополии и управлять ими себе во благо.
Мне, как разработчику конца 10-х годов XXI века, не понятно, а чего в этой игре потребовало 500 часов разработки? Сейчас игры гораздо большего наполнения пишут на сходках игроделов за выходные.
Или тогда процесс разработки был сильно трудозатратен из-за отсутствия вменяемых инструментов?
Чувствуется, автору не хватает опыта промышленной разработки. Имея опыт промышленного программирования, можно было бы не допустить изложенных выше ошибок. Тогда бы компилятор можно было бы написать гораздо быстрее и с меньшими страданиями.
Миллиардерам их бункеры помогут разве что жизнь сохранить, и то не факт. После серьёзных потрясений они могут потерять права собственности (Великая Французская Революция, Великая Октябрьская Социалистическая Революция). После выхода из бункера новые власти могут подвергнуть их преследованию, как старорежимный элемент.
Загранпаспорта для всех.

Не помогут, соседние страну закроют границы из-за большого количества беженцев. Пример Венгрии, озаборившей границу, показателен.

Канистры с бензином для машины.

Дороги в случае чего или перекроют, или они забьются. Так что надо или на месте сидеть, или по воздуху убираться.

В целом же вариант уехать есть только у небольшой части населения. У большинства населения России нету средств даже для поездки к родственникам в соседний регион, срочный переезд в другую страну они не потянут. Показателен тут пример Сирии — сколько убежало, а скольким пришлось остаться.
Хотелось бы добавить, что в статье перечислена только малая часть оптимизаций. В LLVM также есть оптимизации, которые могут целый цикл в формулу развернуть или преобразовать сложный набор инструкций в одну машинную, вроде bswap или popcnt.
Немножко саморекламы.
Именно из побуждений создать язык без излишних сложностей C++ я и начал велосипедить свой язык
С языком ADA я не знаком. Предположу, что в виду его древности в нём нету ряда концепций, считающихся сейчас строго необходимыми.
Очевидно, что halt надо использовать в крайнем случае, а в библиотечном коде так вообще, стараться воздерживаться от его использования.
С исключениями в C++ проблема схожая тоже присутствует, все вызовы к сторонним библиотекам в try-catch мало кто заворачивает, а значит, если оттуда прилетит исключение, его могут и не поймать, что закончится std::abot.
Выше уже отметил, что тип пишется после var, чтобы можно было объявить несколько переменных с одним типом.
Тип возвращаемого значения после описания аргументов функции, как мне кажется, более логичен.
имена фундаментальных типов специально включают разрядность, для наглядности, чтобы не вспоминать, сколько там байт в каких-нибудь shot, long.
Я тут исхожу из принципа, что все значения фундаментальных типов равозначны, а значит нельзя выбрать какое-то значения для умолчательной инициализации. Поэтому программисту явно надо указать, какое начальное значение ему нужно.
На счёт удобства — спорно. ак подсказывает мой опыт, чаще всего переменные объявляются сразу с инициализатором, где инициализатор это не просто какое-то число (вроде нуля) а значение сложного выражения, результат вызова функции и т. д. Случаи, когда мы объявляем переменную и только потом в неё что-то записываем редки, в основном это случай с аккумулятором для цикла.

Information

Rating
106-th
Registered
Activity