Google arendab kogumise süsteemi , mis on mõeldud asendama Androidi platvormi vanu kogumise skripte, mis põhinevad utiliidi make kasutamisel. Soong pakub lihtsate deklaratiivsete moodulite kogumise reeglite failides, millel on laiend «.bp» (blueprints). Failide formaat on sarnane JSON-ile ja püüab võimalikult palju järgida kogumise failide süntaksit ja semantikat . Kood on kirjutatud Go keeles ja levitatakse Apache 2.0 litsentsi alusel.
Soongi kogumifailid ei toeta tingimuslikke operaatorite ja harude väljendeid, vaid kirjeldavad ainult projekti struktuuri, kogumist vajavaid mooduleid ja sõltuvusi. Kogumisele allutatud faile kirjeldatakse mustrite abil ja grupeeritakse pakettidesse, millest igaüks esindab seotud sõltuvustega failide kogumit. On võimalik määrata muutujaid. Muutujad ja omadused on rangelt tüübid (muutujate tüüp valitakse dünaamiliselt esimese määramise ajal, omaduste puhul staatiliselt mooduli tüübi järgi). Kogumise loogika keerukamad elemendid on välja viidud töötlejatesse, Go keeles.
Soong põimikub laiemasse projekti , mille raames arendatakse Androidist sõltumatut meta-süsteemi, mis, tuginedes deklaratiivsete kirjelduste failidele moodulitest, genereerib kogumisskripte (make'i asendus), mis kirjeldavad käsklusi, mida tuleb kogumiseks täita, ja sõltuvusi. Selle asemel, et kasutada keerulisi reegleid või ainepõhist keelt kogimise loogika määramiseks, rakendatakse Blueprintis kogumisprojektide jaoks spetsiifilisi töötlejaid, mis on kirjutatud Go keeles (Soong on sisuliselt kogumisprojektide jaoks mõeldud töötlejate komplekt Androidi jaoks).
Selline lähenemine võimaldab suurtele ja mitmekesistele projektidele, nagu Android, rakendada keerukaid kogumise loogika elemente kõrgetasemelises programmeerimiskeeles, säilitades samas lihtsa deklaratiivse süntaksi kaudu võimaluse teha muudatusi, mis on seotud kogumise korralduse ja projekti struktuuriga. Näiteks Soongis valib kompilaatori lippude määramine töötleja , samas kui riistvara arhitektuuridele spetsiifiliste seadistuste rakendamine toimub töötleja abil , kuid koodifailide sidumine toimub failis «.bp».
cc_library {
…
srcs: [«generic.cpp»],
arh: {
arm: {
srcs: [«arm.cpp»],
},
x86: {
srcs: [«x86.cpp»],
},
},
}
Allikas: opennet.ru
