[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]
Re: st: inline mata vs mo/mlib?
Thanks to Bill for his very helpful advice.
While still on the subject of good Mata practice, -[M-1] naming- recommends
that we name our functions with long names and do not choose words in the
English language dictionary, to reduce the probability of name clashes with
StataCorp and/or other users. I have just written a pair of Mata functions
named _balancedtree() and balancedtree(), which I intend to distribute in
due course. Should I rename them?
At 14:21 10/08/2005, Bill wrote:
Kit Baum <email@example.com> asked,
> [...] Say that you
> have an ado-file that calls one (or several) of your own mata
> functions. You could place those functions in-line in the ado-file,
> or you could compile them into .mo and put them into an .mlib.
> is there any real downside to distributing a single ado-file
> containing the mata functions inline versus distributing the .ado
> and .mlib (and presumably the .mata if you want to expose the code)?
> The inline code will be compiled when loaded, but once per session.
I recently wrote an ado file for which the ado part was 17 lines and
the Mata part 491. I recommend the all-ado construction if
1. there is not too much Mata code (say more than 2,000 lines),
2. you are willing to make public the Mata part, and
3. The Mata routines are not general-purpose functions that
you will want to call from other ado-files.
Concerning (1), remember compiles occur only when the ado-file is loaded.
Concerning the 2,000-line guideline, I should mention that lots of short
functions compile very quickly, whereas one 2,000-line function takes
longer. The compile time for a single function increases quadratically with
the number of lines in the function.
Lecturer in Medical Statistics
Department of Public Health Sciences
Division of Asthma, Allergy and Lung Biology
King's College London
5th Floor, Capital House
42 Weston Street
London SE1 3QD
Tel: 020 7848 6648 International +44 20 7848 6648
Fax: 020 7848 6620 International +44 20 7848 6620
or 020 7848 6605 International +44 20 7848 6605
Opinions expressed are those of the author, not the institution.
* For searches and help try: