Hi Chad,

on Sun, Mar 18, 2012 at 07:18:01PM -0400, Chad wrote:
> I'd also add that the behavior of assertions vary based on configuration,
> which is confusing at best.

Being able to vary based on configuration actually is a feature. An
essential one. It lowers assert's impact on performance.
But there is no need to mess with configuration. asserts work out of
the box.
You are only given the possibility to turn them off.

The same holds true for the very software MediaWiki is built on. The
software uses and relies on asserts, but gives you the possibility to
turn assertion checking off.
* MySQL uses asserts [1].
* PHP uses asserts [2].

asserts and the possibility to turn them on and off is not confusing
there.

But MySQL and PHP are not the only adopters of asserts.
Just take about any quality software.
The source code takes advantage of asserts (e.g.: Libreoffice [3])

But it's not only practical software engineering. Literature is also
strongly in favor of using asserts as well:
In books: E.g.: S. McConnell. Code Complete [4]
In papers: E.g.: G. Kudrjavets, N. Nagappan, T. Ball. Assessing the
  Relationship between Software Assertions and Code Quality: An
  Empirical Investigation [5]
In talks: E.g.: T. Hoare. Assert early, assert often [6]

Kind regards,
Christian




[1] E.g.: ./mysql-5.1.59/regex/engine.c:199--206 in the MySQL 5.1.59
    tarball:

    -----8<-----BEGIN-----8<-----
                assert(dp == NULL || dp == endp);
                if (dp != NULL)         /* found a shorter one */
                        break;

                /* despite initial appearances, there is no match here */
                NOTE("false alarm");
                start = m->coldp + 1;   /* recycle starting later */
                assert(start <= stop);
    -----8<-----END-----8<-----

    And here you clearly see what asserts buy you. With just this
    snippet of code, the first assert tells you what to expect from
    “dp” at this point.  At development time, this contract is
    automatically checked and a breach thereof is signalled.
    On production systems, the asserts are deactivated and are
    ignored.

[2] E.g.: main/streams/memory.c:86--97 in the PHP 5.3.9 tarball:

    -----8<-----BEGIN-----8<-----
    static size_t php_stream_memory_read(php_stream *stream, char *buf, size_t 
count TSRMLS_DC)
    {
        php_stream_memory_data *ms = (php_stream_memory_data*)stream->abstract;
        assert(ms != NULL);

        if (ms->fpos + count >= ms->fsize) {
                count = ms->fsize - ms->fpos;
                stream->eof = 1;
        }
        if (count) {
                assert(ms->data!= NULL);
                assert(buf!= NULL);
    -----8<-----END-----8<-----

    Again, the asserts tell you what to expect from “ms” etc.

[3] E.g.: sc/source/core/data/markdata.cxx:241--243 in the
    libreoffice-calc 3.4.4.2 tarball:

    -----8<-----BEGIN-----8<-----
    if ( bMultiMarked )
    {
        DBG_ASSERT(pMultiSel, "bMultiMarked, aber pMultiSel == 0");
    -----8<-----END-----8<-----

    (At this point, you see the German StarOffice roots of
    LibreOffice/OpenOffice.org. The German “aber” means “but” in
    English. So the assertion message would be
      bMultiMarked, but pMultiSel == 0
    in English)

[4] isbn:9780735619678

[5] http://research.microsoft.com/pubs/70290/tr-2006-54.pdf

[6] http://research.microsoft.com/en-us/people/thoare/assertearlyassertoften.ppt
    Be sure to read the notes within the ppt.

  

-- 
---- quelltextlich e.U. ---- \\ ---- Christian Aistleitner ----
                           Companies' registry: 360296y in Linz
Christian Aistleitner
Gruendbergstrasze 65a        Email:  [email protected]
4040 Linz, Austria           Phone:          +43 732 / 26 95 63
                             Fax:            +43 732 / 26 95 63
                             Homepage: http://quelltextlich.at/
---------------------------------------------------------------

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Wikitech-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to