Size: a a a

Compiler Development

2020 January 28

FO

FORTRAN ONE LOVE in Compiler Development
а смысл в таком поведении? Напоминает C++ с шаблонами
источник

OM

Oleg Morozov in Compiler Development
чтоб не городить шаблоны?
или использовать шаблоны по-умолчанию
источник

BD

Berkus Decker in Compiler Development
Михаил Бахтерев
Эмс... Но он же, типа, должен контекст понимать... Нет? Разве в C++ бывает ptr->void?
он без контекста, это предиктивная сетка простая
источник

BD

Berkus Decker in Compiler Development
контекст неявный в виде уже изученного кода
источник

FO

FORTRAN ONE LOVE in Compiler Development
Oleg Morozov
чтоб не городить шаблоны?
или использовать шаблоны по-умолчанию
ну напишите свое надмножество над C++, который транпилируется в C++ с шаблонами
источник

МБ

Михаил Бахтерев in Compiler Development
Oleg Morozov
а кто-нибудь встречал статические типизируемые АОТ компилируемые языки со структурной эквивалентностью типов?

как пример
struct Foo {
   public int a;
   public int b;
}

struct Bar {
   public int a;
   public int b;
   public int c;
}

void DoSomething(Foo f) { ... }


вот в DoSomething можно передать как и Foo так и Bar без использования обобщений или чего-то подобного
то есть по-русски функция принимает любой тип содержащий определенный набор полей
подойдут любые типы содержащие такие же поля
Отчасти: Go, Scala, OCaml
источник

BD

Berkus Decker in Compiler Development
Oleg Morozov
а кто-нибудь встречал статические типизируемые АОТ компилируемые языки со структурной эквивалентностью типов?

как пример
struct Foo {
   public int a;
   public int b;
}

struct Bar {
   public int a;
   public int b;
   public int c;
}

void DoSomething(Foo f) { ... }


вот в DoSomething можно передать как и Foo так и Bar без использования обобщений или чего-то подобного
то есть по-русски функция принимает любой тип содержащий определенный набор полей
подойдут любые типы содержащие такие же поля
где-то было что-то такое, Modula-3?
источник

FO

FORTRAN ONE LOVE in Compiler Development
Да и непонятен случай, если:

struct Foo {
   public int a;
   public int b;
   public int d;
}

struct Bar {
   public int a;
   public int b;
   public int c;
}

int DoSomething1(Foo f) { return f.a + f.b; } // correct
int DoSomething2(Foo f) { return f.a + f.d; } // incorrect
источник

OM

Oleg Morozov in Compiler Development
FORTRAN ONE LOVE
ну напишите свое надмножество над C++, который транпилируется в C++ с шаблонами
это понятно
интересно посмотреть на что-то готовое, если вообще существует
источник

BD

Berkus Decker in Compiler Development
FORTRAN ONE LOVE
Да и непонятен случай, если:

struct Foo {
   public int a;
   public int b;
   public int d;
}

struct Bar {
   public int a;
   public int b;
   public int c;
}

int DoSomething1(Foo f) { return f.a + f.b; } // correct
int DoSomething2(Foo f) { return f.a + f.d; } // incorrect
это уже не структурно эквивалентно
источник

YS

Yuriy Syrovetskiy in Compiler Development
Oleg Morozov
а кто-нибудь встречал статические типизируемые АОТ компилируемые языки со структурной эквивалентностью типов?

как пример
struct Foo {
   public int a;
   public int b;
}

struct Bar {
   public int a;
   public int b;
   public int c;
}

void DoSomething(Foo f) { ... }


вот в DoSomething можно передать как и Foo так и Bar без использования обобщений или чего-то подобного
то есть по-русски функция принимает любой тип содержащий определенный набор полей
подойдут любые типы содержащие такие же поля
вам нужны безымянные структуры или возможность бесплатно явно кастовать Foo <-> Bar?
источник

OM

Oleg Morozov in Compiler Development
Yuriy Syrovetskiy
вам нужны безымянные структуры или возможность бесплатно явно кастовать Foo <-> Bar?
да, типа такого
источник

YS

Yuriy Syrovetskiy in Compiler Development
Oleg Morozov
да, типа такого
типа одного или другого?
источник

FO

FORTRAN ONE LOVE in Compiler Development
Berkus Decker
это уже не структурно эквивалентно
а являются ли структурноэквивалентными следующие структуры?
struct Foo {
   public int a;
   public int b;
}

struct Bar {
   public int b;
   public int a;
   public int c;
}
источник

OM

Oleg Morozov in Compiler Development
Yuriy Syrovetskiy
типа одного или другого?
второе*
источник

YS

Yuriy Syrovetskiy in Compiler Development
в Хаскеле безымянные структуры есть в библиотеках
источник

OM

Oleg Morozov in Compiler Development
посмотрю
источник

OM

Oleg Morozov in Compiler Development
FORTRAN ONE LOVE
а являются ли структурноэквивалентными следующие структуры?
struct Foo {
   public int a;
   public int b;
}

struct Bar {
   public int b;
   public int a;
   public int c;
}
вот такие случаи тоже интересны
по идее нужно считать эквивалетными
источник

OM

Oleg Morozov in Compiler Development
но при таком придется компилировать разные функции видимо?
оффсеты в памяти у полей будут различные
источник

FO

FORTRAN ONE LOVE in Compiler Development
Oleg Morozov
вот такие случаи тоже интересны
по идее нужно считать эквивалетными
а я думаю ,что не эквивалентны, так как (простите за UB):
Foo f;
address(f.a[1]) == address(f.b)
-> верно, но
Bar b;
address(b.a[1]) != addess(b.b)
-> не верно
источник