Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public String toString() {
StringBuilder result = new StringBuilder().
append(String.format("Byte: 0x%02X ; ", memoryByte)).
append(String.format("II: 0x%04X ; ", instrIndex)).
append(String.format("MI: 0x%04X ; ", memIndex)).
append(String.format("SI: 0x%02X ; ", sourceIndex)).
append(String.format("RI: 0x%02X", resultIndex));
return result.toString();
}
func main() {
tmp := test{}
fmt.Println(tmp)
}
fmt.Printf("%v", someValue)import std.stdio;
class A
{
string field = "Hello";
}
class B(T)
{
T sub = new T();
}
void main()
{
auto b = new B!A();
writeln(b.sub.field);
}
Книга предназначена для обучения языку D читателей — новичков в сфере программирования. Хотя наличие опыта в других языках программирования несомненно было бы полезным, эта книга начинает с самых основ
The C Preprocessor Way
#define X(i) ((i) = (i) / 3)
The D Way
int X(ref int i) { return i = i / 3; }
The compiler optimizer will inline it; no efficiency is lost.
int res = X(some_var); // run-time
auto res = X(some_var); // run-time
enum res = X(some_var); // compile-time only
immutable res = X(some_var); // compile-time или run-time, если не может выполниться в compile-time
static res = X(some_var); // compile-time или run-time, если не может выполниться в compile-time
#ifndef ALWAYS_INLINE
#if defined(_MSC_VER)
#define ALWAYS_INLINE __forceinline
#elif defined(__GNUC__) || defined(__MINGW32__)
#define ALWAYS_INLINE inline __attribute__((__always_inline__))
#else
#define ALWAYS_INLINE inline
#endif
#endif
__forceinline. Так что получается, по сути поддерживается всеми 3мя основными компиляторами :)template<class Args = PoolSettings<> >
struct Pool : SettingsHub<Pool, PoolSettings<Args> > {
using Base = SettingsHub<Pool, PoolSettings<Args> >; // вот - указываем полное имя родителя
void fire(){
std::cout << Base::length; // length у родителя лежит
}
};
-vgc (печатает все места в модуле, которые выделяют память через GC) и новый атрибут @nogc , гарантирующий, что функция транзитивно не использует GC (ошибка компиляции в противном случае).extern(C). Вот, например, отчёт об интеграции D с существующими библиотеками на C++ в Facebook: www.youtube.com/watch?v=1JZNvKhA3mAimport core.stdc.stdlib;
auto mallocArr(T)(size_t size)
{
auto chunk = malloc(T.sizeof * size);
auto typed = cast(int[]) chunk[0..(T.sizeof * size)];
typed[] = T.init;
return typed;
}
void main() @nogc
{
int[] arr = mallocArr!int(5);
assert(arr.length == 5);
assert(arr[0] == 0);
arr[0] = 42;
assert(arr[0] == 42);
}
Учебник по языку программирования D. Часть 1