You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucy.apache.org by Marvin Humphrey <ma...@rectangular.com> on 2011/09/14 06:38:28 UTC
[lucy-dev] Tcl API
Greets,
Brad and I were discussing the Tcl API for Lucy on IRC, and I proposed
something like this:
package require lucy
set termQuery [lucy termQuery new -field content -term foo]
set field [$termQuery getField]
The Tcl Style Guide and the example code in the docs for TclOO (in the 8.6b2
release) both influenced that code snippet strongly.
http://www.tcl.tk/doc/styleGuide.pdf
http://tcl.tk/man/tcl8.6/TclCmd/class.htm#M13
Regarding naming the package "lucy" (as opposed to "Lucy" or whatever),
section 3.1 of the Style Guide provided germane advice:
3.1 Package names
... It is best to have a simple one word name in all lower-case like http.
Regarding the capitalization pattern for the command name "termQuery", as in
"lucy termQuery new", and also the use of lowerCamelCase as opposed to
separation_by_underscore:
5.2 Basic syntax rules
Exported names for both procedures and variables always start with a
lower-case letter.
....
In multi-word names, the first letter of each trailing word is capitalized. Do
not use under-scores or dashes as separators between the words of a name.
Note that the naming convention for Clownfish methods (which is mandatory and
enforced by the compiler) was deliberately chosen with the task of
automatically deriving both camelCase and lowercase_seperated_by_underscore
names in mind:
Clownfish: Get_Field
Perl, Python, Ruby: get_field
Tcl, Java getField
The use of dashes to prefix parameter names is not spelled out in the official
Tcl Style Guide, but I understand that it's a long-standing convention in Tcl.
I don't know where the it originated, but it is apparently mentioned in Brent
Welch's popular book "Practical Programming in Tcl and Tk", and it is also
used by the Tk library.
The omission of the intermediate name "Search" in "lucy termQuery" is made
possible by the Clownfish requirement that the last component of any class
name within a Clownfish parcel be unique. I'm not clear on how method
dispatch for objects will work, but for static functions, it seems right for
"lucy" to be published as a Tcl "ensemble" which dispatches to other
ensembles such as "termQuery", "indexer", "queryParser", and so on.
The following passage from the Tcl tutorial was influential in publishing
"lucy" as an ensemble rather than requiring that users spell out fully
qualified procs:
http://www.tcl.tk/man/tcl8.5/tutorial/Tcl31.html
As well as providing a nicer syntax for accessing functionality in a
namespace, ensemble commands also help to clearly distinguish the public
interface of a package from the private implementation details, as only
exported commands will be registered as sub-commands and the ensemble will
enforce this distinction.
Marvin Humphrey