Red Hat-oficisto prezentis la kunigsistemon Goals. Eldono de GNU Make 4.2

Richard WM Jones, verkinto libguestfs, laborante ĉe Red Hat, enkondukita nova asembleo utileco celoj, celita forigi mankojn kaj problemojn en la utileco de make konservante la ĝeneralan simplecon kaj kompreneblecon de skriptoj. La make-utilo estis dizajnita en 1976 kaj havas kelkajn koncipajn mankojn Goals planas elimini tiujn mankojn sen ŝanĝi la ĝeneralan koncepton.
Celoj fontkodo distribuita de licencita laŭ GPLv2+.

Problemoj solvindaj:

  • Subteno por nur unu dependeca rezolucia taktiko - "la kunig instrukcio estas rulita se la celdosiero mankas aŭ estas pli malnova ol unu el la dependecoj." Celoj planas efektivigi aliajn taktikojn, kiel kontroli la ĉeeston de URL, kompari modiftempojn kun iu ajn dosiero, taksi la pakaĵon enkonstruitan. kōji, komparo de ĉeksumoj, prizorgado de testkazoj kun selektema transsaltado de testoj.
  • Dum prilaborado de konstruceloj, make ne apartigas dosierojn kaj regulnomojn, kaj kiel rezulto, ne estas kontrolo, ke dum rulado de regulo, la dosiero, kiun ĝi asertas esti kreita, efektive estos kreita. Ekzemple, se vi havas regulon nomitan "testo" kiu rulas skriptojn kun testoj, dosiero nomita "testo" estas hazarde kreita, tiam la testoj ne plu estos nomitaj, ĉar make konsideros ke la celo estas konstruita kaj ne postulas ajna ago (por Por ĉirkaŭlabori la problemon en make, vi povas specifi la direktivon “.PHONY: testo”). Celoj eksplicite apartigas dosierojn kaj regulnomojn.

    Red Hat-oficisto prezentis la kunigsistemon Goals. Eldono de GNU Make 4.2

  • Problemo kun disponigado de nur unu parametro por muntaj instrukcioj.

    Red Hat-oficisto prezentis la kunigsistemon Goals. Eldono de GNU Make 4.2

    Celoj permesas uzi arbitran nombron da nomitaj parametroj. Ekzemple, vi povas aparte ĉerpi la signon de sencimiga dosiero el la nomo:

    Red Hat-oficisto prezentis la kunigsistemon Goals. Eldono de GNU Make 4.2

  • Problemoj interagante kun la ŝela interpretisto. Ekzemple, la bezono kontroli la eskapon de spacoj en dosieroj kaj dosierujoj nomoj, la malŝparo de rimedoj dum lanĉo de aparta ŝelinterpretilo dum plenumado de ĉiu komando, la duobla interpreto de la "$" karaktero (uzita en ambaŭ ŝelo kaj make), konsiderante indentaĵojn.

    Ĉi tiuj problemoj estas solvitaj en Celoj uzante la simbolon "%" anstataŭ "$" por asemblaj variabloj ("$" restas nur por la ŝelo), uzante analizilon. LALR(1), kiu postulas vin ĉirkaŭi vojojn kaj dosiernomojn per citaĵoj kaj reliefigi kodblokojn per buklaj krampoj. La tuta komandbloko estas lanĉita en unu kazo de la komandŝelo, kaj ene de la bloko, arbitra kodformatado estas permesita, sen referenco al specialaj spacoj.

    Estis:
    celo: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    Ĝi fariĝis:
    "celo": "foo.o", "bar.o" {
    %CC %CFLAGS %< -o %@
    }

Aliaj trajtoj de Celoj:

  • Laŭvola subteno por specifado de arbitraj nomoj kaj parametroj:

    celo ĉiuj = : "celo"

    celligo =
    "celo" : "foo.o", "bar.o" { ... }

    celo kompili (nomo) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Du lanĉreĝimoj: faru reĝimon por kongrui konstrucelojn kun dosiernomoj (ekzemple, dosiero "foo.o" kongruas celon "%name.o"), kaj rekta kompilreĝimo:

    celo ĉiuj = : ligilo

    celligo =
    "celo" : "foo.o", kompili ("bar") { ... }

    celo kompili (nomo) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Kunigtaktikoj estas determinitaj per specialaj reguloj kiuj povas esti uzitaj por determini la bezonon rekunmeti kunigcelon. Se ligo estas farita al la ĉeesto de dosiero, tiam ĉi tio estas eksplicite determinita per la responda signo ("celo" por la regulnomo kaj *dosiero ("celo") por kontroli la dosieron).

    "celo" : "foo.o", "bar.o" { ... }

    *dosiero("celo"): *dosiero("foo.o"), *dosiero("bar.o") { ... }

  • La programisto povas difini arbitrajn atributojn de kunigtaktikoj. La flago "*dosiero" estas difinita defaŭlte (@{...} indikas forigon de eligo, kaj "elirejo 99" signalas la bezonon de rekonstruado):

    taktiko *dosiero (dosiernomo) = @{
    testo -f %dosiernomo || elirejo 99
    por f en %

    fonto: opennet.ru

Aldoni komenton