
Add(Memory,7389784,112,210)
{
Default=String(Hello )
}
Add(StrCat,7085365,133,280)
{
link(onStrCat,16684516:doMessage,[])
link(Str1,7389784:Value,[(139,261)(118,261)])
link(Str2,3687421:Value,[(146,261)(174,261)])
}
Add(Memory,3687421,168,210)
{
Default=String(world!!!)
}
Add(Message,16684516,196,280)
{
}
echo "Hello world!!!";[/code]
не зря же всетаки заявленно, что код практически не отличается от того, который мог бы написать программист вручную...
[quote=Galkov]везде вариантные типы, отсутствие контейнеризации (имею ввиду интеллектуальную, конечно), супер-инлайн.[/quote]
из этого понятно только первое. Действительно вариантные, и посколько это скрипт, то они таковыми и остануться. В этом направление пока вижу такой выход:
ввести еще один атрибут данных - тип выражения. Т.е. указывать, что это: константа(можно читать), переменная(можно читать, писать и брать адрес) или выражение(ф-ция, действительное выражение из нескольких аргументов). Добавить два оператора typeof() - возвращает тип данных, expof() - возвращает тип выражения. В этом случае можно будет как в Delphi пакете написать ToString(), ToInteger() и прочие. Тогда все отличие от WEB будет состоять в том, что мы при считывание данных просто вставим спецификатор:
// так делается в WEB
func doMessage()
println('MessageBox(', Handle, ',', Caption, ',', Text, ', MB_OK);')
end
// а так будет в Delphi
func doMessage()
println('MessageBox(', ToInteger(Handle), ',PChar(', ToString(Caption), '),PChar(', ToString(Text), '), MB_OK);')
end
// где
func ToInteger(data)
switch(typeof(data))
case data_int:
return(data)
case data_str:
return('Int2Str(' && data && ')')
case data_real:
return('Round(' && data && ')')
...
end
end
вот и всего делов-то