VCC now has type-driven properties

Poul-Henning Kamp phk at
Tue Jun 4 07:16:37 UTC 2019

As you may have spotted in recent commits and notably 2962375b4ed80e,
VCC now has type driven properties.

This means that subexpressions of a given type can express that
property, no matter how we got to it in the first place.

If we defined a type driven property from DURATION called
"foobar" it would be possible to write:

	set beresp.http.qqq = (beresp.ttl + 4m).foobar;

Right now, this has not changed the syntax of VCL, we're still 4.1
because the only use is for the storage.*.* variables for which
the syntax remains the exact same.

If we want to, some of the stuff in vmod_std can now be made
slightly more intutive syntax-wise:

	BACKEND.healthy -> BOOL

	IP.port -> INT

Note that these are *properties* `` they do not take any
VCL arguments beside the expression they work on.  (The C-implementation
can of course take other args, like VRT_CTX)

It would not be too hard to also do *methods* `EXPR.func(args)`,
so that one could also do things like:

	set bereq.http.qqq = beres.ttl.format("%.3f")

But I am not going to implement that until we have more convincing
use cases than that.

A bit more work would be to allow vmods to implement type driven
properties and methods, but again:  Convincing use cases ?.

Proposals and ideas are welcome.

Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.

More information about the varnish-dev mailing list