Size: a a a

Compiler Development

2020 January 28

OM

Oleg Morozov in Compiler Development
да в Go слава Богу отвязались от прямой связанности при объявлении типа, но это все еще коллекция методов
но это по правде тонкости
те же трейты в Расте работают аналогично

хотелось бы просто их не писать, а объединить это.
использовать тип сразу как самодостаточную единицу, так и как контракт
источник

OM

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

короче код ради кода выходит
источник

AV

Alexander Vershilov in Compiler Development
как хорошо же жить с классами типов..
источник

OM

Oleg Morozov in Compiler Development
Alexander Tchitchigin
В системе типов для таких случаев как Вы хотите будут так или иначе subtyping rules (subtyping relation).
если считать, что тип может быть сабтипом разных типов, то в принципе да, можно считать сабтайпингом
источник

OM

Oleg Morozov in Compiler Development
сабтайпинг для меня больше ассоциируется с underlying types
типа как в Go
где ты можешь сделать именованный int, и он будет относится  именно к интам и ничему больше
источник

AV

Alexander Vershilov in Compiler Development
Ну вообще сабтайминг это когда подтип можно подставить вместо типа, никакого ограничения на то, может ли тип быть подтипом многих и прочих нет.
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Vershilov
как хорошо же жить с классами типов..
Интерфейсы, вид сбоку. Даже реализованы точно так же
источник

AV

Alexander Vershilov in Compiler Development
Только при каком-то ну очень свободном определении интерфейса
источник

AV

Alexander Vershilov in Compiler Development
Обычно с интефейсами, что-то такое плохо выражается:
class Monoid a where
  mempty :: a
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Vershilov
Только при каком-то ну очень свободном определении интерфейса
Там и там таблица функций. В чём разница?
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Vershilov
Обычно с интефейсами, что-то такое плохо выражается:
class Monoid a where
  mempty :: a
Почему? В чём проблема?
источник

AV

Alexander Vershilov in Compiler Development
А как это выразить? тут у нас в наличии нет объекта или класса через который можно получить доступ к словарю
источник

AV

Alexander Vershilov in Compiler Development
На низком уровне устройства полиморфного метода, которому мы даём словарь - действительно разницы нет
источник

AV

Alexander Vershilov in Compiler Development
Что и как у интерфейсов с когерентностью - я сказать затрудняюсь и послушаю других с удовольствием
источник

AK

Andrei Kurosh 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 без использования обобщений или чего-то подобного
то есть по-русски функция принимает любой тип содержащий определенный набор полей
подойдут любые типы содержащие такие же поля
@maxgraey вроде как AssemblyScript должен такое уметь?
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Vershilov
А как это выразить? тут у нас в наличии нет объекта или класса через который можно получить доступ к словарю
interface Monoid<A> { public A mempty(); ... } ?
источник

AV

Alexander Vershilov in Compiler Development
И как применяться будет?
источник

AV

Alexander Vershilov in Compiler Development
я могу написать
foo :: Monoid a => a
foo = mempty

или
foo :: (Show a, Monoid a) => String
foo = show mempty
источник

AV

Alexander Vershilov in Compiler Development
Мне кажется, мне придётся явно передавать тот A, что я захочу?
источник

А

Алексей in Compiler Development
Alexander Vershilov
Обычно с интефейсами, что-то такое плохо выражается:
class Monoid a where
  mempty :: a
придётся объект передавать тогда
источник