войти зарегистрироваться

C++Строковое представление типа

Решил поддержать неделю метапрограммирования на Хабре. Здесь пост о работе с числами с плавающей точкой. Текст ниже посвящён вычислению строки типа.

C++Вычисления с плавающей точкой на этапе компиляции

Как известно, в C++ нельзя производить сложные вычисления с плавающей точкой на стадии компиляции. Я решил попробовать избавиться от этого досадного недостатка. Цель, к которой мы будем идти, на примере вычисления корня:
typedef RATIONAL(2,0) x;
typedef sqrt<x>::type result;

Корень числа вычислится на этапе компиляции. Представление числа хранится как отношение двух целых чисел, поэтому чтобы получить значение, нужно обращаться через метод get();
std::cout << result::get() << std::endl;
1.41421356

RubyКлассы — это объекты

Кто изучает Ruby, знает, что в нем все сущности — объекты, но порой не догадывается насколько. Так вот, классы в Ruby это тоже объекты.



JavaScriptКлассы и метаклассы в Javascript

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

Это часть фреймворка, который я сделал для своей платформы Akshell, вот полный код решения и документация. Однако оно может пригодиться в любой Server-Side Javascript среде, на стороне сервера удобное создание иерархий классов особенно актуально. Его можно использовать и на клиенте, если заменить работу со свойством __proto__ оператором new.

C++DSL для boost::MPL, превращаем f(x) в f<x>::type

Краткое содержание статьи (для тех кто знаком с boost::mpl), typename опущены для ясности:
a = b;				==>		typedef b a;
f(x)				==>		f<x>::type
f(x) { return x*; }		==>		template<typename x> struct x { typedef x* type; };
f()(x)				==>		f::apply<x>::type
a[x]				==>		mpl::at<a, x>::type
(x ? y : z)			==>		mpl::if_<x, y, z>::type
switch (if_<x, y, z>)		==>		*Уфф*, общая (default) и частичные специализации
{
	case if_<bool_<false>, y, z>: return y;
	default: return z;
}

Под хабракатом есть немного пояснений :)

Персональные блоги Meta Programming System

Интересная вещь. Некоторые вещи лежат на виду, но почему-то их не замечаешь. Вот и сейчас. Много раз заходил на сайт jetbrains.com, но не замечал такую интересную вещь как MPS (Meta Programming System). Данная система поддерживает новый подход в программирование, так называемая ориентация на язык (Language Oriented Programming). Говоря более изящно (дословный перевод не подходит) – это мета ориентированный подход программирования. Идея данного подхода в том, чтобы расширяя существующий язык программирования создать свой собственный, заточенный под свои бизнес правила. Не знаю насколько это удобно, но данная тема точно заслуживает того чтобы обратить на нее внимание. MPS был создан Jetbrains в 2003 год, как исследовательский проект. С 2006 года компания использовала данный проект в разработке новых продуктов. MPS является бесплатным продуктом выпускаемым под лицензией Apache 2.0 license.

.NETПрограммирование Magic: the Gathering — §1 Мана


Хочется начать посты про программирование Magic: the Gathering (M:tG), и начнем мы пожалу с самого простого – с концепции «маны». Мана – это то, чем оплачиваются все заклинания. Несмотря на то, что с виду маны всего 5 типов, на самом деле все чуть-чуть сложнее. Давайте попробуем разобраться.


RubyИнструменты метапрограммирования в Ruby

Что такое «метапрограммирование»?


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

В этом учебнике перечисляются все методы ядра Ruby, используемые при метапрограммировании и демонстрирующие обобщенные способы применения, которые будут полезны для вас. В завершение, представлен пример разработки динамического класса, работающего с базой данных, наподобие ActiveRecord, который автоматически генерирует классы для таблиц базы данных и заполняет каждый класс модели get/set-методами для ее полей.

РазработкаКак система JetBrains MPS позволяет достичь более широкого использование DSL-ей (языков специфичных для предметной области)

DSL-и (domain specific languages или языки для специфичных областей) известны программистам давно. Несмотря на это, они редко используются в реальных системах. В этой статье будет рассмотрено, что такое DSL-и, и почему они не получили широкого распространения. Также будет описано, как система JetBrains MPS решает проблемы, препятствующие их широкому использованию.

Ruby Ruby — проксирование методов класса

Иногда возникает необходимость, запроксировать (обернуть) методы класса в свой код.

Например:
  • запустить их в тредах
  • навесить фильтры до и после
  • померить производительность