Тема: TatEngine
Показать сообщение отдельно
Старый 02.09.2013, 00:25   #24
jimon
 
Сообщений: n/a
Ответ: TatEngine

Сообщение от moka Посмотреть сообщение
Какие преимущества у GML над JSON'ом?
удобнее писать руками, удобнее читать глазами, меньшая избыточность, lazy syntax, ну и да - комментарии в коде

разделителем может быть : или , или ; или его вообще может и не быть

например :
// gml
sprite { transform { x: 5 } }
sprite { transform { y: 20 } }
// json
[
{ "type" : "sprite", "childrens" : [ { "type" : "transform", "x" : 5 } ] },
{ "type" : "sprite", "childrens" : [ { "type" : "transform", "x" : 20 } ] },
]
еще думаем над всякими плюшками типа string literals и raw strings (как в C++), что позволит писать GML в UTF-8, а на выходе получать строку в UTF-16 или 32, а raw strings позволит не экранировать символы в теле строки и писать там скрипты любой сложности прям внутри GML файла

например :
script
{
text : R"(
// lua script
print("wow");
)"
}
стараемся упростить все до предела чтобы на нем именно ХОТЕЛОСЬ писать, есть много красивых инструментов, а любимых очень мало

так же в schema-driven будет много экспериментальных вещей : lazy types, lazy nested objects, lazy scripts и тд, но это не относится к синтаксису языка

например :
/* сам объект sprite по schema требует чтобы к нему был присоединен объект типа transform, у sprite для этого есть дефолтное поле с именем transform которое принимает ссылку (bind в терминологии qml) на объект с типом transform */
sprite 
{
  // но если мы опишем объект с типом transform в теле sprite то gml сам его подхватит и прилинкует к полю transform
  transform { }
}

sprite
{
  transform { id: a }
  transform { id: b }
  transform : a // спрайт будет двигаться трансформом A
}

sprite
{
  transform : transform { x : 5 } // nested objects
}

spr // вместо указания полного типа можно указывать только первые буквы, да и еще убирая гласные (эксперимент)
{
  trn { x: 5 }
}

spr
{
  trn.x : 5 // можно обращаться к полям объекта через поля-ссылки
}

spr
{
  trn.x := math.sin(t) * 50 // если вместо : написать = или := то парсер будет ожидать nested script, выражение с = выполнится во время загрузки, выражение с := будет выполнятся каждый кадр (reactive programming)
}
и всякие прочие штуки чтобы упростить жизнь и сделать язык от которого оргазмируешь в прямом смысле
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Harter (02.09.2013)