Size: a a a

Programming Offtop

2021 March 16

(

( in Programming Offtop
Alexander Nozik
Я тебе не про это. А про то, что когда ты саму entity собираешь, у тебя уже может быть фейл. А дальше вопрос в том, насколько разнообразные entity тебе нужны. Сколько у тебя их варианто?
Что значит может быть фейл, когда я собираю ентити? Когда только что её создал и добавляю в неё компоненты?
источник

AN

Alexander Nozik in Programming Offtop
(
Что значит может быть фейл, когда я собираю ентити? Когда только что её создал и добавляю в неё компоненты?
Когда у тебя в аргументов нет нужных для нее типов
источник

(

( in Programming Offtop
Alexander Nozik
Когда у тебя в аргументов нет нужных для нее типов
Вот здесь?

engine.getFor(family)
источник

AN

Alexander Nozik in Programming Offtop
(
Вот здесь?

engine.getFor(family)
да
источник

(

( in Programming Offtop
А
источник

AN

Alexander Nozik in Programming Offtop
Тебе все равно надо делать проверку типов. Просто в другом месте.
источник

(

( in Programming Offtop
Нет, там возвращается лист всех энтитей в енжине, у которых есть требуемые компоненты. Соответственно, если таковых нет, будет пустой лист
источник

Kd

Konstantin dmz9 in Programming Offtop
Vladimir Petrakovich
Вся суть в том, чтобы логические ошибки превратить в ошибки приведения типов. Тогда их сразу видно, и ловить проще.
так с динамической типизацией это не работает
источник

VP

Vladimir Petrakovich in Programming Offtop
Konstantin dmz9
так с динамической типизацией это не работает
Работает, но в рантайме. Если она ещё и слабая - то да, тебе пизда.
источник

AK

Anton Korotkikh in Programming Offtop
Vladimir Petrakovich
Вся суть в том, чтобы логические ошибки превратить в ошибки приведения типов. Тогда их сразу видно, и ловить проще.
но ведь этого всё равно нельзя сделать. логика зачастую вообще с типами никак не связанна особо, если мы про логику выполнения программы
источник

(

( in Programming Offtop
Anton Korotkikh
но ведь этого всё равно нельзя сделать. логика зачастую вообще с типами никак не связанна особо, если мы про логику выполнения программы
> логика не связана с типами
Есть пара людей, которые с тобой не согласны, их зовут Карри и Говард
источник

VP

Vladimir Petrakovich in Programming Offtop
Anton Korotkikh
но ведь этого всё равно нельзя сделать. логика зачастую вообще с типами никак не связанна особо, если мы про логику выполнения программы
Полностью - нецелесообразно, частично можно.
источник

AN

Alexander Nozik in Programming Offtop
(
Нет, там возвращается лист всех энтитей в енжине, у которых есть требуемые компоненты. Соответственно, если таковых нет, будет пустой лист
Ясно. Но я не вижу никаких проблем реализовать это без HListов.
источник

AK

Anton Korotkikh in Programming Offtop
(
> логика не связана с типами
Есть пара людей, которые с тобой не согласны, их зовут Карри и Говард
на тебе пример логической ошибки. как ты будешь ловить это типами

1. пришёл агент
2. залил какого-то своего говна в коллектор
3. отцепился
4. коллектор не закрывает сокет (логично, что его, блеать надо закрыть или переиспользовать)
5. спустя примерно 65к заливок, коллектор умирает, т.к. закончились сокеты

собственно тут ошибка - ты или закрывай соединение, либо переиспользуй его. но кодер обосрамс и просто не поудмал об этом. и кто его по рукам теперь шелпнёт, кроме нагрузочных тестов или уже инцидента на проде? типы?
источник

(

( in Programming Offtop
Alexander Nozik
Ясно. Но я не вижу никаких проблем реализовать это без HListов.
Ну, есть одна проблема. "Функция" contains: Entity<*> -> T -> Boolean (с различными вариациями сигнатуры, учитывая особенность системы типов целевого языка) должна быть вычислима на уровне типов (если говорить умным языком, система типов должна соответствовать логике высшего порядка или быть лямбда-исчислением выше просто-типизированного), чего в котлине нет. В котлине вообще так себе на уровне типов что-то посчитать
источник

AN

Alexander Nozik in Programming Offtop
(
Ну, есть одна проблема. "Функция" contains: Entity<*> -> T -> Boolean (с различными вариациями сигнатуры, учитывая особенность системы типов целевого языка) должна быть вычислима на уровне типов (если говорить умным языком, система типов должна соответствовать логике высшего порядка или быть лямбда-исчислением выше просто-типизированного), чего в котлине нет. В котлине вообще так себе на уровне типов что-то посчитать
Ты не поверишь, я даже понял все, что ты написал. Хотя это можно было написать на два порядка проще, не теряя смысла. Я же тебя специально спросил, сколько вариантов этих entity у тебя есть. По сути для всего этого тебе достаточно дата класса с фабрикой. Оно делается в 4 строки на каждый такой класс.
источник

(

( in Programming Offtop
Anton Korotkikh
на тебе пример логической ошибки. как ты будешь ловить это типами

1. пришёл агент
2. залил какого-то своего говна в коллектор
3. отцепился
4. коллектор не закрывает сокет (логично, что его, блеать надо закрыть или переиспользовать)
5. спустя примерно 65к заливок, коллектор умирает, т.к. закончились сокеты

собственно тут ошибка - ты или закрывай соединение, либо переиспользуй его. но кодер обосрамс и просто не поудмал об этом. и кто его по рукам теперь шелпнёт, кроме нагрузочных тестов или уже инцидента на проде? типы?
Ты про брекет-паттерн что-ли? Ну смотри, в х-ле большинство популярных либ ничего тебе с ресурсом не дадут сделать, если ты им не расскажешь, как их закрывать. Если дают - это, скорее всего, ансейфная часть либы

В идрисе вообще с брекетами и типчиками нормально так нахуеверчено

Но вообще конечно типы тут не нужны, проще просто не давать открывать ресурсов, не гарантируя закрытия скрытыми от кодера механизмами
источник

(

( in Programming Offtop
Alexander Nozik
Ты не поверишь, я даже понял все, что ты написал. Хотя это можно было написать на два порядка проще, не теряя смысла. Я же тебя специально спросил, сколько вариантов этих entity у тебя есть. По сути для всего этого тебе достаточно дата класса с фабрикой. Оно делается в 4 строки на каждый такой класс.
Угу. Вот сколько у меня есть компонентов https://github.com/happy-bracket/dreamwalkers/tree/master/core/src/main/kotlin/ru/substancial/dreamwalkers/ecs/component
И это даже не половина всех, что будет. Это охуенный комбинаторный взрыв
Ну и не по 4 строчки, если я правильно понял идею
источник

AN

Alexander Nozik in Programming Offtop
(
Угу. Вот сколько у меня есть компонентов https://github.com/happy-bracket/dreamwalkers/tree/master/core/src/main/kotlin/ru/substancial/dreamwalkers/ecs/component
И это даже не половина всех, что будет. Это охуенный комбинаторный взрыв
Ну и не по 4 строчки, если я правильно понял идею
Ясно. Но сделать фабрики вроде как не сложно
источник

AN

Alexander Nozik in Programming Offtop
Почему взрыв-то?

```
data class MyEntity( val a: A, val b: B){
 companion object: EntityFactory< MyEntity>{
   override fun buildEntity(heap: Heap)  = MyEntity(heap.get<A>(), heap.get<B>())
 }
}
источник