Ленивые вычисления на этапе компиляции

Довольно интересная публикация. Жаль, что мне она попалась на глаза только теперь, через 11 лет после выхода. Ленивые вычисления на этапе компиляции реализованы посредством метапрограммирования на шаблонах. Тем самым функциональный язык со своей стратегией вычислений встроен в C++.

https://www.sciencedirect.com/science/article/pii/S1571066109001285 

Тёмный лес

"Тёмный лес" - второй роман трисолярианской трилогии - прочитан. Если нарисованную в нём картину мира выразить предельно кратко, то это полная, абсолютная противоположность Великому Кольцу Ефремова. Вместо содружества цивилизаций, в котором до технической возможности контакта и межзвёздных путешествий дорастают - в силу непреложных законлв развития общества - лишь те цивилизации, которые забыли о жажде наживы, имеем предельно жестокое противостояние всех против всех, где нанести удар первым - единственная выигрышная стратегия, а единственная возможность остановить такой удар - угроза гарантированного взаимного уничтожения. Потому что цивилизации множатся, а количество ресурсов во Вселенной - нет. Мальтус нервно курит в сторонке.
Картина не только отталкивающа, но и - главное - совершенно притянута за уши и антилогична. Но небезынтересна.

(no subject)

Роман Лю Цысиня "Задача трёх тел" прочитан, это была первая чась трилогии, сейчас читается вторая часть - "Тёмный лес".  Начну с более широкого контекста.

Тридцать лет назад заканчивалась золотая эпоха научной фантастики. Еще живы были Рэй Брэдбери и Айзек Азимов, ещё на заросла могила Клиффорда Симака (обычно ошибочно пишут "Саймак"). Но в воздухе носилось трудноуловимое ощущение смены эпох. Роботы, звездолёты, контакты с инопланетянами становились человечеству не нужны и неинтересны. Настала эпоха гоблинов, эльфов и магов, место бластера занял волшебный посох, а место кристалла с терабайтами научных открытий - затёртый свиток с древними рунами.

В этой, казалось бы, второстепенной тенденции в развлекательной литературе отразился поистине глобальный поворот, сделанный тогда всей нашей цивилизацией.  После потрясающего технологического рывка человечество почувствовало усталость от технологии.  Хотя изобретения продолжали делаться даже возрастающими темпами (процессоры, интернет, мобильная связь), новинки изобретались такими, чтобы у массового пользователя не возникало ни необходимости, ни желания интересоваться их деталями.  Скажем, мобильным телефоном можно пользоваться, ничего не зная о радиоволнах и кодировании сигнала.  Как сравнить это с духом 70-х, так ярко выраженным у Азимова, когда человек будущего свободно ориентировался в робототехнике, теории относительности, реактивном двигателе и многом другом.

Collapse )

Город засыпает, просыпаются программисты

Пришло время новых этюдов по метапрограммированию. Представим себе шаблон функции с одним универсальным определением и множеством специализаций для каких-то конкретных типов. При этом аргумента типа T (параметр шаблона) у функции нет, т.е. использовать для специализации обычную перегрузку не получится. Ситуация вполне возможная на практике.

В следующем игрушечном примере поток байт нужно десериализовать в объект типа T, а затем заново сериализовать в строку. Таким образом, получается функция конвертации из бинарного формата в текстовый через промежуточный тип.

Кашу, как известно, маслом не испортишь. Можно сходу предложить четыре существенно различных решения, отнюдь не равноценных по красоте. Конечно, в данном конкретном примере можно смело отбросить все, кроме последнего (основанного на полной специализации шаблона функции). Но этот подход неприменим, если у шаблона более одного параметра, а тем более - если нужно специализацию вести сразу по их комбинации.

https://github.com/vadimvinnik/non_arg_template