17.2 Versioning Options

By default, any D programs you compile using dtrace -s or specify using the dtrace -P, -m, -f, -n, or -i command-line options are bound to the most recent D programming interface version offered by the D compiler. You can determine the current D programming interface version by using the -V option:

$ dtrace -V
dtrace: Sun D 1.6.3

If you wish to establish a binding to a specific version of the D programming interface, you can set the version option to an appropriate version string. Similar to other DTrace options (see Chapter 10, Options and Tunables), you can set the version option on the command line using dtrace -x:

# dtrace -x version=1.0 -n 'BEGIN{trace("hello");}'

Alternatively, you can use the #pragma D option syntax to set the option in your D program source file:

#pragma D option version=0.3 

BEGIN
{
  trace("hello");
}

If you use the #pragma D option syntax to request a version binding, you must place this directive at the top of your D program file prior to any other declarations and probe clauses. If the version binding argument is not a valid version string or refers to a version not offered by the D compiler, an appropriate error message will be produced and compilation will fail. You can therefore also use the version binding facility to cause execution of a D script on an older version of DTrace to fail with an obvious error message.

Before compiling your program declarations and clauses, the D compiler loads the set of D types, functions, constants, and translators for the appropriate interface version into the compiler namespaces. Therefore, any version binding options you specify simply control the set of identifiers, types, and translators that are visible to your program in addition to the variables, types, and translators that your program defines. Version binding prevents the D compiler from loading newer interfaces that may define identifiers or translators that conflict with declarations in your program source code and would therefore cause a compilation error. See Section 2.8.1, “Identifier Names and Keywords” for tips on how to pick identifier names that are unlikely to conflict with interfaces offered by future versions of DTrace.