Size: a a a

Compiler Development

2020 March 13

MS

Mikola Summer Duck in Compiler Development
Alexander Tchitchigin
А где это Bret Victor про такое говорил???
Да хотя бы в Future of Programming. Мол штуки не должны взаимодействовать через API, вместо этого коммуницируя и находя общий интерфейс на лету.
источник

MS

Mikola Summer Duck in Compiler Development
источник

AT

Alexander Tchitchigin in Compiler Development
Mikola Summer Duck
Да хотя бы в Future of Programming. Мол штуки не должны взаимодействовать через API, вместо этого коммуницируя и находя общий интерфейс на лету.
Мне не кажется, что он при этом имел в виду подобное чудище... 😊
источник

MS

Mikola Summer Duck in Compiler Development
Ну я говорю „похоже“. Ну и я кстати не понял что он тогда под этим имел в виду, на самом деле.
источник

АВ

Александр Вольнов in Compiler Development
rbykov
Интересно а как будет выглядеть синтаксис.
Есть примеры?
Вот пример описания схемы изображения вместе с самим изображением шахматного узора 2x2, используя только 1 бит на пиксель.

@struct {
Image := @struct {
   ImageColorType = @type{}
   ImageWidth = @uint16{}
   ImageHeight = @uint16{}
   ImagePixels = [ImageHeight][ImageWidth]ImageColorType{}
}

BlackOrWhiteColor := @struct {
   Luminance = @bit{}
   R := Luminance
   G := Luminance
   B := Luminance
}

CheckerImage := Image{}(
   ImageColorType = BlackOrWhiteColor
   ImageWidth = 2
   ImageHeight = 2
   ImagePixels = {
       {
           {{0}, {1}}
           {{1}, {0}}
       }
   }
)
}{}
У цвета есть поле яркости и алиасы на него для красного, зелёного и синего.
Если нужен 24-битный цвет, можно вместо алиасов сделать каждое поле отдельно:
Color24 := @struct {
   R = @norm8{}
   G = @norm8{}
   B = @norm8{}
}

Схема от данных на уровне языка ничем не отличается. Типы - тоже данные. При желании, схему можно вынести отдельно от данных с помощью импорта внешнего модуля.
Тексту на языке взаимно-однозначно соответствует бинарный файл - можно перегонять туда и обратно.
источник

AT

Alexander Tchitchigin in Compiler Development
Mikola Summer Duck
Ну я говорю „похоже“. Ну и я кстати не понял что он тогда под этим имел в виду, на самом деле.
Чёрт его знает, что конкретно он имел в виду, но исследования в сторону service discovery и self-describing data идут всю дорогу и продолжают идти. Даже "индустрия" пыталась что-то такое внедрить сначала для XML Web Services со всякими WSDL, потом Semantic Web с онтологиями, сечас скотились просто к микро-форматам.
источник

r

rbykov in Compiler Development
Александр Вольнов
Вот пример описания схемы изображения вместе с самим изображением шахматного узора 2x2, используя только 1 бит на пиксель.

@struct {
Image := @struct {
   ImageColorType = @type{}
   ImageWidth = @uint16{}
   ImageHeight = @uint16{}
   ImagePixels = [ImageHeight][ImageWidth]ImageColorType{}
}

BlackOrWhiteColor := @struct {
   Luminance = @bit{}
   R := Luminance
   G := Luminance
   B := Luminance
}

CheckerImage := Image{}(
   ImageColorType = BlackOrWhiteColor
   ImageWidth = 2
   ImageHeight = 2
   ImagePixels = {
       {
           {{0}, {1}}
           {{1}, {0}}
       }
   }
)
}{}
У цвета есть поле яркости и алиасы на него для красного, зелёного и синего.
Если нужен 24-битный цвет, можно вместо алиасов сделать каждое поле отдельно:
Color24 := @struct {
   R = @norm8{}
   G = @norm8{}
   B = @norm8{}
}

Схема от данных на уровне языка ничем не отличается. Типы - тоже данные. При желании, схему можно вынести отдельно от данных с помощью импорта внешнего модуля.
Тексту на языке взаимно-однозначно соответствует бинарный файл - можно перегонять туда и обратно.
интересно а реально ли такое использовать для серилизации из json в бинарный формат и обратно (+ проверка на корректность)

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

АВ

Александр Вольнов in Compiler Development
Mikola Summer Duck
А как она будет работать со схемами, которые раньше не встречала? Например в случае когда версия сервера обновилась, а версия клиента осталась старой.
Будет автоматически преобразовывать получаемые и передаваемые данные на основании совпадения иерархической структуры и имён полей в схемах. Например, при смене одного числового типа на другой обратная совместимость сохраняется. Алиасы и вычисляемые поля также позволяют сохранять обратную совместимость при удалении фактических полей на их месте. Если поле было отсутствует в целевой схеме (удалено или переименовано, и на его месте нет алиаса), его значение будет потеряно при преобразовании.
источник

АВ

Александр Вольнов in Compiler Development
rbykov
интересно а реально ли такое использовать для серилизации из json в бинарный формат и обратно (+ проверка на корректность)

еще было бы забавно упаковывать саму схему вместе с данными
По умолчанию схема и будет вместе с данными, в примере выше так и есть. А при желании их можно разделить.
источник

r

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

AZ

Alexander Zaitsev in Compiler Development
rbykov
а где можно глянуть реализацию?
Коммерческая тайна
источник

АВ

Александр Вольнов in Compiler Development
rbykov
а где можно глянуть реализацию?
Пока нигде, я пока на этапе продумывания всех деталей, чтобы потом не переделывать.
источник

r

rbykov in Compiler Development
Александр Вольнов
Пока нигде, я пока на этапе продумывания всех деталей, чтобы потом не переделывать.
Один фиг придется переписывать и переделывать
источник

АВ

Александр Вольнов in Compiler Development
rbykov
интересно а реально ли такое использовать для серилизации из json в бинарный формат и обратно (+ проверка на корректность)

еще было бы забавно упаковывать саму схему вместе с данными
Сериализовать JSON в такой файл теоретически реально, но в самом JSON мало информации о типах (number, string, object). Надо либо написать свою схему, где будет указаны int/float и битность типов, либо всё по дефолту будет в даблах и т.п..
А сериализация бинаря в JSON вообще без проблем, потому что в бинаре информации более, чем достаточно.
источник

M

MaxGraey in Compiler Development
Александр Вольнов
Этот "байткод" - это декларативные описания типов, а не инструкции. Ими нельзя даже представить рекурсию и циклы.
Что то вроде описания протобуфера или это будут констрейны а-ля пролог?
источник

АВ

Александр Вольнов in Compiler Development
rbykov
Один фиг придется переписывать и переделывать
Там очень много всего взаимосвязано. Даже минимальный рабочий прототип в принципе не сделать, не продумав все детали.
источник

r

rbykov in Compiler Development
Александр Вольнов
Там очень много всего взаимосвязано. Даже минимальный рабочий прототип в принципе не сделать, не продумав все детали.
в любом случае успехов
источник

АВ

Александр Вольнов in Compiler Development
MaxGraey
Что то вроде описания протобуфера или это будут констрейны а-ля пролог?
Да, типа протобуфера, только с гораздо большей кастомизацией и на порядки большем количестве типов - любая битность полей и вложенность структур и массив. И никаких метаданных посреди данных типа ID поля. Можно описать отдельно тип, и отдельно данные.
источник

АВ

Александр Вольнов in Compiler Development
rbykov
в любом случае успехов
Спасибо
источник

АВ

Александр Вольнов in Compiler Development
Alexander Tchitchigin
Чёрт его знает, что конкретно он имел в виду, но исследования в сторону service discovery и self-describing data идут всю дорогу и продолжают идти. Даже "индустрия" пыталась что-то такое внедрить сначала для XML Web Services со всякими WSDL, потом Semantic Web с онтологиями, сечас скотились просто к микро-форматам.
Надо погуглить, что есть про self-describing data, такие ключевые слова я ещё не пробовал вводить...
источник