В 99% случаев использования, возвращается тип, реализующий range, пользователь не должен задумываться какой именно это range, почти все функции в Phobos работают с range'ами. В остальных экзотических случаях, да, придется явно описать в документации какой интерфейс реализует скрытый тип. Идея с шаблонами — статическими интерфейсами очень интересна, думаю можно реализовать это с помощью рефлексии как library solution.
Также можно поизвращаться и через рефлексию считать все поля и методы Voldemort типа и сконструировать свой (через mixin), а заодно функцию, которая превращает экземпляр Voldemort типа в кастомный. В общем, огромное поле для ненормального программирования.
Vibe не собрался с последним gdc, ldc не пробовал. На гитхабе есть тикет, в котором люди добивались большего быстродействия vibe перед node.js: github.com/rejectedsoftware/vibe.d/issues/38
Итого к этому и пришли, rdmd скрипт в /etc/init, но все же приятнее, когда в сервере есть встроенный daemon режим, так как не нужно придумывать своих config файлов и способов логирования ошибок.
Редис только пробовали, пока искали альтернативу сломанному монго драйверу. Вся суть:
1. import vibe.db.redis.redis;
2. создать RedisClient,
3. У полученного объекта есть все методы, которые описаны в офф. списке комманд
Давно использую vibe.d, но у него есть один большой недостаток: отсутствие daemon режима, который необходим при доступе через ssh. Пришлось писать костыльную обертку, форкающую процесс с vibe.
Очень важно: vibe еще не достиг production состояния (хотя сам язык близок к этому). Если решите использовать, готовьтесь столкнутся с сотнями багов и необходимостью допиливания напильником исходников фреймворка.
Причём оборудование требует сверхчистый воздух, обычные компрессоры не пойдут.
Можно пояснить этот момент подробнее? Понятно, что пыль на плате при нанесении пасты нежелательна, но зачем присоскам в СМД станке сверх чистый воздух? Как я представляю себе механизм работы этих присосок, сам поршень, создающий отрицательное давление, находится далеко от рабочей зоны.
Год назад все эти фреймворки были в альфа версиях. Постоянно пользуюсь GtkD, он пару месяцев назад релизнулся, и последняя версия точно собирается с dmd v2.062.
Double-spending атака возможна и при владении меньшей долей вычислительных ресурсов. При 20% и 3х подтверждениях атака пройдет в 10 случаях из ста. Чем меньше доля у плохих парней и чем больше подтверждений транзакции, тем меньше вероятность успеха атаки.
Думаю, именно из-за такого безобразия в метапрограммировании на шаблонах Александреску и сбежал в D.
Compile-time аналог на D (используя цепную дробь):
module ecompute;
import std.stdio;
// Вариант 1, используя CTFE
static double computeE1(int n)
{
double innerCompute(int i, int m)
{
if(m <= 0)
{
return 0.0;
}
return 1.0/(
1.0 + 1.0/(
i + 1.0/(
1.0 + innerCompute(i + 2, m - 1))));
}
return 2.0 + innerCompute(2, n);
}
// Вариант 2, олдскул
template computeE2(int n)
{
private template innerCompute(int i, int m)
{
static if(m <= 0)
{
enum innerCompute = 0.0;
} else
{
enum innerCompute = 1.0/(
1.0 + 1.0/(
i + 1.0/(
1.0 + innerCompute!(i + 2, m - 1))));
}
}
enum computeE2 = 2.0 + innerCompute!(2, n);
}
void main()
{
// Вариант 1
static immutable e1 = computeE1(20);
pragma(msg, e1);
printf("Case 1, e = %1.20f \n",e1);
// Вариант 2
static immutable e2 = computeE2!(20);
pragma(msg, e2);
printf("Case 2, e = %1.20f \n",e2);
}
D упрощает compile-time программирование, а люди идут в своих извращениях дальше: compile-time raytracer.
А шифрование и обусфикация может быть отключена (настроена), чтобы если я и так open-source, не получать замеделение из-за шифрования и выполнения обусфицированного кода?
С интерпретатором получается нечестно, задача интересней выглядит для компилируемых языков. Сможет ли какой-нибудь компилятор лиспа переварить эту программу? Получается, что с собой надо таскать компилятор и специальный «загрузчик» который будет заменять обновленные части программы в dll/so модулях. Мало того, такая программа будет вынужденно open-source, так как в памяти придется держать все исходники.
Также можно поизвращаться и через рефлексию считать все поля и методы Voldemort типа и сконструировать свой (через mixin), а заодно функцию, которая превращает экземпляр Voldemort типа в кастомный. В общем, огромное поле для ненормального программирования.
Проц: AMD Athlon(tm) 64 X2 Dual Core Processor 3800+
Сравнивал helloword для vibe и node.js:
1. import vibe.db.redis.redis;
2. создать RedisClient,
3. У полученного объекта есть все методы, которые описаны в офф. списке комманд
В репе vibe есть пример: github.com/rejectedsoftware/vibe.d/blob/master/examples/redis/source/app.d
*Промахнулся, это ответ для ветки чуть выше*
Очень важно: vibe еще не достиг production состояния (хотя сам язык близок к этому). Если решите использовать, готовьтесь столкнутся с сотнями багов и необходимостью допиливания напильником исходников фреймворка.
Можно пояснить этот момент подробнее? Понятно, что пыль на плате при нанесении пасты нежелательна, но зачем присоскам в СМД станке сверх чистый воздух? Как я представляю себе механизм работы этих присосок, сам поршень, создающий отрицательное давление, находится далеко от рабочей зоны.
Источник: btcsec.com/double-spending/
Compile-time аналог на D (используя цепную дробь):
D упрощает compile-time программирование, а люди идут в своих извращениях дальше: compile-time raytracer.