|laziness, impatience, and hubris|
RFC: On renaming Tracing and Assertionsby simonflk (Pilgrim)
|on Oct 27, 2004 at 15:23 UTC||Need Help??|
I'd be grateful for some feedback on the naming of two modules that my $ORGANISATION is planning to release to the CPAN. I realise that we need to change both names - there is already an assertions.pm and neither module is named suitably for CPAN.
A logging/debugging library. Tracing can output to a number of targets:
In this example, Tracing is imported in print mode, so arguments to TRACE will be printed to the currently selected filehandle. TRACEF is the printf equivalent of TRACE. TRACE_HERE traces contextual information such as filename, line number, subroutine name, and the current contents of @_. And DUMP uses Data::Dumper where available to trace a dump of a data structure.
You can write modules that cooperate with Tracing by defining empty TRACE (and optionally, TRACEF, TRACE_HERE and DUMP) stubs. For example:
In your main script, you might do something like:
deep_import searches the symbol table for packages that have a TRACE subroutine defined and installs itself by performing an import as if called from that package. deep_import accepts additional parameters that give you more control over which packages to export to, and which to exclude.
Possible names: Log::Trace, Debug::Tracing, Devel::Tracing
Note: Tracing also supports logging levels and tracing the execution path of code.
Assertions and testing functions.
An assertion is a boolean expression at a specific point in a program which will be true unless there is a bug in the program. An assertion could simply be a comment used by the programmer to think about how the code works. Or an assertion could document a constraint on the system. (See also: ExceptionsAsConstraints) However, it is often possible to actually compile the assertion to code and let it be executed in context to see if the statment it makes really does hold. When programmers talk about assertions they usually mean this kind of executed assertion.-- http://c2.com/cgi/wiki?WhatAreAssertions
Assertions also operates in a number of modes: die, warn, silent and test. If an assertion fails, it will die, warn or do nothing. In test mode, it will print output suitable for capture by Test::Harness.
Here's a couple of contrived examples:
The first argument to ASSERT is a boolean expression. It also takes an optional comment that will be reported if the assertion fails. The next example uses Assertions in unit test mode, and demonstrates some of the other helper functions that are available:
Possible names: Debug::Assertions, Test::Assertions, Devel::Assertions,
I'd appreciate any feedback on the module names, and I should be able to post the POD if required. Thanks