Size: a a a

Compiler Development

2020 March 12

АВ

Александр Вольнов in Compiler Development
Alexey Tkachenko
Закон Голла

   Работающая сложная система обязательно произошла от работавшей простой системы. Сложная система, разработанная с нуля, никогда не работает, и её невозможно исправить так, чтобы она заработала. Нужно начать заново, с простой работающей системы.
Это и без Голла понятно, что сложное состоит из простого.
Я и начинал с простого - формата моделей. То, что я не сделал реализации всех промежуточных итераций, не имеет большого значения. Я продумывал концепт и проверял, что он в принципе работоспособный, пусть и в голове. Конечно, при реализации вылезут мелкие детали и подводные камни, но я справлюсь с ними.
У меня есть план составных частей и в каком порядке я буду их разрабатывать. Каждая из них относительно простая и может быть протестирована отдельно.
Я всегда стремлюсь к простоте, а точнее к оптимальному балансу между простотой и функционалом. Большинство существующих решений очень далеко от этого баланса, и именно поэтому то, что делаю я, может восприниматься как серебряная пуля.
Я практически уверен, что реализация моей идеи займёт в разы меньше кода, чем тот же protocol buffers, возможности которого на порядок меньше.
источник

M

MaxGraey in Compiler Development
Александр Вольнов
Это и без Голла понятно, что сложное состоит из простого.
Я и начинал с простого - формата моделей. То, что я не сделал реализации всех промежуточных итераций, не имеет большого значения. Я продумывал концепт и проверял, что он в принципе работоспособный, пусть и в голове. Конечно, при реализации вылезут мелкие детали и подводные камни, но я справлюсь с ними.
У меня есть план составных частей и в каком порядке я буду их разрабатывать. Каждая из них относительно простая и может быть протестирована отдельно.
Я всегда стремлюсь к простоте, а точнее к оптимальному балансу между простотой и функционалом. Большинство существующих решений очень далеко от этого баланса, и именно поэтому то, что делаю я, может восприниматься как серебряная пуля.
Я практически уверен, что реализация моей идеи займёт в разы меньше кода, чем тот же protocol buffers, возможности которого на порядок меньше.
Мне кажется то, что ты делаешь уже есть. По крайней мере я видел такое у Халлидея еще 3 года назад:
https://github.com/substack/bga-format
https://github.com/substack/parse-bga-mesh

а до этого еще где-то
источник

АВ

Александр Вольнов in Compiler Development
MaxGraey
Мне кажется то, что ты делаешь уже есть. По крайней мере я видел такое у Халлидея еще 3 года назад:
https://github.com/substack/bga-format
https://github.com/substack/parse-bga-mesh

а до этого еще где-то
Для хранения мешей сейчас есть много всего, тот же glTF 2.0 довольно хорош. А когда передо мной стояла эта задача примерно 5 лет назад, не было ничего. А та идея, к чему моя первоначальная задача в итоге привела, не реализована нигде.
источник

K

Konstantin in Compiler Development
да норм идея у тебя
источник

M

MaxGraey in Compiler Development
Так и слава богу, что появились такие стандарты как glTF, Draco и Basis Universal GPU Texture Codec. А то, каждый игродел городил свои самокаты
источник
2020 March 13

DP

Dmitry Ponyatov in Compiler Development
Alexander Tchitchigin
Т.е. Вы переизобретаете SQLite? 😃
человек смолтолковское представление памяти изобретает, отображенное на диск — ну т.е. система может распотрошить память, выделить отдельные объекты, даже сможет прочитать определения классов, а вот сможет или нет конкретный софт работать с тем или иным объектом уже от него зависит
источник

DP

Dmitry Ponyatov in Compiler Development
хотя намного полезнее и эффективнее был бы генератор симметричных бинарных парсеров, чтобы можно было описать и разбор, и запись любых типов бинарных данных (типа kaitai) и сунуть сгенерированный сишный код в любой (микро)процессор
источник

А

Алексей in Compiler Development
Александр Вольнов
Ты можешь контролировать всё. Допустим, файл должен содержать два массива. Первый - массив чисел, второй - их квадратов.
Можешь хранить массив чисел (поле Numbers) и сделать виртуальное поле квадратов этих чисел NumbersSqr := Numbers.@map[:[x] {x*x}].
Можно наоборот хранить квадраты чисел и виртуальное поле, которое считает их корень.
А можно хранить и то и другое в виде данных, введя избыточность.
При этом, программе, которая с этими полями работает, всё равно, виртуальные они или реальные. Она просто обращается к Numbers или NumbersSqr. Тот, кто создаёт файл, решает, как он хранится.
Зачем?
источник

AK

Andrei Kurosh in Compiler Development
источник

А

Алексей in Compiler Development
Алексей
Зачем?
Сделайте компактный бинарный формат со схемой и возможностям храниь отдельные биты и всё.
источник

А

Алексей in Compiler Development
Смысл делать монстра с ЯП внутри, когда есть обычные ЯП.
источник

АВ

Александр Вольнов in Compiler Development
Dmitry Ponyatov
хотя намного полезнее и эффективнее был бы генератор симметричных бинарных парсеров, чтобы можно было описать и разбор, и запись любых типов бинарных данных (типа kaitai) и сунуть сгенерированный сишный код в любой (микро)процессор
Это почти оно и есть. Язык позволит описать всё, что умеет Kantai и больше. Для подмножества языка можно написать кодогенератор. Это отдельная фича, которая будет не сразу, но об этом я тоже думал.
источник

А

Алексей in Compiler Development
Алексей
Смысл делать монстра с ЯП внутри, когда есть обычные ЯП.
Точнее как раз имеет смысл этого не делать.
источник

АВ

Александр Вольнов in Compiler Development
Алексей
Смысл делать монстра с ЯП внутри, когда есть обычные ЯП.
Этот ЯП не похож ни на один из существующих ЯП и считать его ЯП можно лишь совсем условно. Это прямое и логическое продолжение данных.
источник

А

Алексей in Compiler Development
Александр Вольнов
Этот ЯП не похож ни на один из существующих ЯП и считать его ЯП можно лишь совсем условно. Это прямое и логическое продолжение данных.
То есть обычный ЯП?
источник

А

Алексей in Compiler Development
ну хорошо, функциональный ЯП
источник

АВ

Александр Вольнов in Compiler Development
Алексей
ну хорошо, функциональный ЯП
Декларативный ЯП с явной динамической типизацией. Таких в мире ещё не существует.
источник

А

Алексей in Compiler Development
Александр Вольнов
Этот ЯП не похож ни на один из существующих ЯП и считать его ЯП можно лишь совсем условно. Это прямое и логическое продолжение данных.
Если ЯП будет сидеть в схеме, то это ещё более-менее норм, хотя избыточно
источник

А

Алексей in Compiler Development
потому что есть обычные ЯП, которые данные и так сами умеют молотить
источник

А

Алексей in Compiler Development
если будет внутри сериализовнного представления сидеть ЯП или байткод какой-то
источник