“Production-grade” hello world

View hello2-module.chpl on GitHub

This program is conceptually very similar to hello.chpl, but it uses a more structured programming style, explicitly defining a module, a configuration constant, and a main() procedure.

The following statement declares a module named ‘Hello’. If a source file contains no module declarations, the filename minus its .chpl extension serves as the module name for the code it contains. Thus, ‘hello’ would be the automatic module name for the previous hello.chpl example.

module Hello {

This next statement declares a configuration constant named message. The type is inferred to be a string since the initializing expression is a string literal. Users may override the default values of configuration constants and variables on the executable’s command-line. For example, we could change the default message for a given run using the command line: ./hello --message="hiya!".

config const message = "Hello, world!";

Any top-level code in a module is executed as part of the module’s initialization when the program begins executing. Thus, in the previous one-line hello.chpl, the presence of a writeln() at the file scope formed the implicit hello module’s initialization and would be executed at program startup. Since there was no explicit main() function or any other top-level code, that’s all that the program would do.

In this program, we define an entry point for the program by defining a procedure named main(). This will be invoked after this module and all the modules it uses are initialized.

  proc main() {
    writeln(message);
  }
}