cson  Hex Artifact Content

Artifact 13dca03411474adfb0f1ec632c7fc68da1fe0699:

Wiki page [News] by stephan 2011-05-09 17:58:46.
0000: 44 20 32 30 31 31 2d 30 35 2d 30 39 54 31 37 3a  D 2011-05-09T17:
0010: 35 38 3a 34 36 2e 32 39 36 0a 4c 20 4e 65 77 73  58:46.296.L News
0020: 0a 50 20 39 62 65 64 66 39 66 64 31 66 35 31 38  .P 9bedf9fd1f518
0030: 31 61 36 62 39 35 30 31 30 64 62 62 62 64 32 39  1a6b95010dbbbd29
0040: 63 31 64 36 64 34 31 63 64 37 65 0a 55 20 73 74  c1d6d41cd7e.U st
0050: 65 70 68 61 6e 0a 57 20 34 34 31 35 0a 3c 73 74  ephan.W 4415.<st
0060: 72 6f 6e 67 3e 41 43 48 54 55 4e 47 3a 20 54 48  rong>ACHTUNG: TH
0070: 49 53 20 50 41 47 45 20 49 53 20 4e 4f 57 20 4d  IS PAGE IS NOW M
0080: 41 49 4e 54 41 49 4e 45 44 20 49 4e 20 54 48 45  AINTAINED IN THE
0090: 20 4e 45 57 20 57 49 4b 49 3a 3c 2f 73 74 72 6f   NEW WIKI:</stro
00a0: 6e 67 3e 20 5b 68 74 74 70 3a 2f 2f 77 68 69 6b  ng> [http://whik
00b0: 69 2e 77 61 6e 64 65 72 69 6e 67 68 6f 72 73 65  i.wanderinghorse
00c0: 2e 6e 65 74 2f 77 69 6b 69 73 2f 63 73 6f 6e 2f  .net/wikis/cson/
00d0: 3f 70 61 67 65 3d 4e 65 77 73 5d 0a 0a 0a 3c 68  ?page=News]...<h
00e0: 31 3e 63 73 6f 6e 20 6e 65 77 73 3c 2f 68 31 3e  1>cson news</h1>
00f0: 0d 0a 0d 0a 4e 65 77 65 73 74 20 69 74 65 6d 73  ....Newest items
0100: 20 61 72 65 20 61 74 20 74 68 65 20 74 6f 70 2e   are at the top.
0110: 2e 2e 0d 0a 0d 0a 32 30 31 31 2d 4d 61 79 2d 36  ......2011-May-6
0120: 3a 0d 0a 20 20 20 2a 20 20 53 74 61 72 74 65 64  :..   *  Started
0130: 20 70 6f 72 74 69 6e 67 20 77 69 6b 69 20 70 61   porting wiki pa
0140: 67 65 73 20 6f 76 65 72 20 74 6f 20 61 20 6e 65  ges over to a ne
0150: 77 20 70 6c 61 74 66 6f 72 6d 2e 20 47 6f 69 6e  w platform. Goin
0160: 67 20 66 6f 72 77 61 72 64 20 74 68 65 20 63 73  g forward the cs
0170: 6f 6e 20 77 69 6b 69 20 77 69 6c 6c 20 62 65 20  on wiki will be 
0180: 6d 61 69 6e 74 61 69 6e 65 64 20 61 74 20 5b 68  maintained at [h
0190: 74 74 70 3a 2f 2f 77 68 69 6b 69 2e 77 61 6e 64  ttp://whiki.wand
01a0: 65 72 69 6e 67 68 6f 72 73 65 2e 6e 65 74 2f 77  eringhorse.net/w
01b0: 69 6b 69 73 2f 63 73 6f 6e 2f 5d 2e 0d 0a 0d 0a  ikis/cson/].....
01c0: 32 30 31 31 2d 4d 61 79 2d 32 3a 0d 0a 20 20 20  2011-May-2:..   
01d0: 2a 20 20 41 64 64 65 64 20 73 65 76 65 72 61 6c  *  Added several
01e0: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 72 6f 75   convenience rou
01f0: 74 69 6e 65 73 20 74 6f 20 5b 63 73 6f 6e 5f 63  tines to [cson_c
0200: 70 64 6f 5d 20 66 6f 72 20 62 69 6e 64 69 6e 67  pdo] for binding
0210: 20 3c 74 74 3e 63 73 6f 6e 5f 76 61 6c 75 65 3c   <tt>cson_value<
0220: 2f 74 74 3e 20 28 4a 53 4f 4e 29 20 6f 62 6a 65  /tt> (JSON) obje
0230: 63 74 73 20 74 6f 20 64 62 20 63 6f 6c 75 6d 6e  cts to db column
0240: 73 20 61 6e 64 20 70 61 72 73 69 6e 67 20 4a 53  s and parsing JS
0250: 4f 4e 20 66 72 6f 6d 20 74 68 6f 73 65 20 63 6f  ON from those co
0260: 6c 75 6d 6e 73 2e 0d 0a 0d 0a 32 30 31 31 2d 41  lumns.....2011-A
0270: 70 72 2d 32 31 3a 0d 0a 20 20 20 2a 20 20 41 64  pr-21:..   *  Ad
0280: 64 65 64 20 5b 63 73 6f 6e 5f 73 65 73 73 6d 67  ded [cson_sessmg
0290: 72 5f 77 68 69 6f 5f 65 70 66 73 5d 20 5b 63 73  r_whio_epfs] [cs
02a0: 6f 6e 5f 73 65 73 73 69 6f 6e 5d 20 73 74 6f 72  on_session] stor
02b0: 61 67 65 20 62 61 63 6b 2d 65 6e 64 2e 0d 0a 0d  age back-end....
02c0: 0a 32 30 31 31 2d 41 70 72 2d 31 38 3a 0d 0a 20  .2011-Apr-18:.. 
02d0: 20 20 2a 20 20 41 64 64 65 64 20 61 6e 20 6f 6e    *  Added an on
02e0: 2d 64 69 73 6b 2d 68 61 73 68 74 61 62 6c 65 2d  -disk-hashtable-
02f0: 62 61 73 65 64 20 73 65 73 73 69 6f 6e 20 6d 61  based session ma
0300: 6e 61 67 65 72 20 74 6f 20 5b 63 73 6f 6e 5f 73  nager to [cson_s
0310: 65 73 73 69 6f 6e 5d 2e 0d 0a 0d 0a 32 30 31 31  ession].....2011
0320: 2d 41 70 72 2d 31 37 3a 0d 0a 20 20 20 2a 20 20  -Apr-17:..   *  
0330: 41 64 64 65 64 20 74 68 65 20 5b 73 65 6c 65 63  Added the [selec
0340: 74 2d 74 6f 2d 6a 73 6f 6e 5d 20 61 70 70 6c 69  t-to-json] appli
0350: 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 2a 20 20 41  cation...   *  A
0360: 64 64 65 64 20 69 6e 69 74 69 61 6c 20 73 75 70  dded initial sup
0370: 70 6f 72 74 20 66 6f 72 20 68 61 6e 64 6c 69 6e  port for handlin
0380: 67 20 66 6f 72 6d 2d 75 72 6c 65 6e 63 6f 64 65  g form-urlencode
0390: 64 20 48 54 54 50 20 50 4f 53 54 20 64 61 74 61  d HTTP POST data
03a0: 2e 20 53 65 65 6d 73 20 74 6f 20 77 6f 72 6b 2e  . Seems to work.
03b0: 0d 0a 0d 0a 32 30 31 31 2d 41 70 72 2d 31 31 3a  ....2011-Apr-11:
03c0: 0d 0a 20 20 20 2a 20 20 4d 6f 76 65 64 20 74 68  ..   *  Moved th
03d0: 65 20 5b 63 73 6f 6e 5f 63 67 69 5d 20 41 50 49  e [cson_cgi] API
03e0: 20 69 6e 74 6f 20 74 68 65 20 74 72 75 6e 6b 2e   into the trunk.
03f0: 20 43 72 65 61 74 65 64 20 73 65 76 65 72 61 6c   Created several
0400: 20 64 69 66 66 65 72 65 6e 74 20 5b 41 6d 61 6c   different [Amal
0410: 67 61 6d 61 74 69 6f 6e 42 75 69 6c 64 7c 61 6d  gamationBuild|am
0420: 61 6c 67 61 6d 61 74 69 6f 6e 20 62 75 69 6c 64  algamation build
0430: 5d 20 76 61 72 69 61 6e 74 73 20 70 72 6f 76 69  ] variants provi
0440: 64 69 6e 67 20 76 61 72 69 6f 75 73 20 6c 65 76  ding various lev
0450: 65 6c 73 20 6f 66 20 66 65 61 74 75 72 65 73 2e  els of features.
0460: 0d 0a 0d 0a 32 30 31 31 2d 41 70 72 2d 30 39 3a  ....2011-Apr-09:
0470: 0d 0a 20 20 20 2a 20 20 54 68 65 20 6e 65 77 20  ..   *  The new 
0480: 5b 63 73 6f 6e 5f 63 67 69 5d 20 41 50 49 20 69  [cson_cgi] API i
0490: 73 20 62 61 73 69 63 61 6c 6c 79 20 66 75 6e 63  s basically func
04a0: 74 69 6f 6e 61 6c 2e 0d 0a 0d 0a 32 30 31 31 2d  tional.....2011-
04b0: 4d 61 72 63 68 2d 32 35 3a 0d 0a 20 20 20 2a 20  March-25:..   * 
04c0: 20 41 64 64 65 64 20 3c 74 74 3e 63 73 6f 6e 5f   Added <tt>cson_
04d0: 76 61 6c 75 65 5f 63 6c 6f 6e 65 28 29 3c 2f 74  value_clone()</t
04e0: 74 3e 20 74 6f 20 64 65 65 70 6c 79 20 63 6f 70  t> to deeply cop
04f0: 79 20 4a 53 4f 4e 20 76 61 6c 75 65 73 2e 0d 0a  y JSON values...
0500: 20 20 20 2a 20 20 50 75 6c 6c 65 64 20 74 68 65     *  Pulled the
0510: 20 72 65 66 65 72 65 6e 63 65 2d 63 6f 75 6e 74   reference-count
0520: 69 6e 67 20 63 6f 64 65 20 69 6e 74 6f 20 74 68  ing code into th
0530: 65 20 74 72 75 6e 6b 2e 20 49 74 20 69 73 20 6e  e trunk. It is n
0540: 6f 77 20 6c 65 67 61 6c 20 66 6f 72 20 61 20 67  ow legal for a g
0550: 69 76 65 6e 20 3c 74 74 3e 63 73 6f 6e 5f 76 61  iven <tt>cson_va
0560: 6c 75 65 3c 2f 74 74 3e 20 69 6e 73 74 61 6e 63  lue</tt> instanc
0570: 65 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  e to be inserted
0580: 20 69 6e 74 6f 20 6d 75 6c 74 69 70 6c 65 20 6f   into multiple o
0590: 62 6a 65 63 74 2f 61 72 72 61 79 20 63 6f 6e 74  bject/array cont
05a0: 61 69 6e 65 72 73 20 6f 72 20 69 6e 74 6f 20 74  ainers or into t
05b0: 68 65 20 73 61 6d 65 20 63 6f 6e 74 61 69 6e 65  he same containe
05c0: 72 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  r multiple times
05d0: 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61 74 20  , provided that 
05e0: 6e 6f 20 63 79 63 6c 65 73 20 61 72 65 20 69 6e  no cycles are in
05f0: 74 72 6f 64 75 63 65 64 20 28 63 79 63 6c 65 73  troduced (cycles
0600: 20 61 72 65 20 73 74 69 6c 6c 20 73 74 72 69 63   are still stric
0610: 74 6c 79 20 69 6c 6c 65 67 61 6c 29 2e 20 54 68  tly illegal). Th
0620: 69 73 20 66 65 61 74 75 72 65 20 63 6f 73 74 73  is feature costs
0630: 20 75 73 20 34 20 62 79 74 65 73 20 6f 66 20 6d   us 4 bytes of m
0640: 65 6d 6f 72 79 20 70 65 72 20 76 61 6c 75 65 20  emory per value 
0650: 69 6e 73 74 61 6e 63 65 20 28 62 6f 6f 21 29 20  instance (boo!) 
0660: 62 75 74 20 67 69 76 65 73 20 75 73 20 61 20 67  but gives us a g
0670: 6f 6f 64 20 64 65 61 6c 20 6d 6f 72 65 20 66 6c  ood deal more fl
0680: 65 78 69 62 69 6c 69 74 79 20 69 6e 20 77 68 61  exibility in wha
0690: 74 20 77 65 20 63 61 6e 20 64 6f 20 77 69 74 68  t we can do with
06a0: 20 3c 74 74 3e 63 73 6f 6e 5f 76 61 6c 75 65 3c   <tt>cson_value<
06b0: 2f 74 74 3e 20 69 6e 73 74 61 6e 63 65 73 20 28  /tt> instances (
06c0: 79 65 61 68 21 29 2e 0d 0a 0d 0a 32 30 31 31 2d  yeah!).....2011-
06d0: 4d 61 72 63 68 2d 32 33 3a 0d 0a 0d 0a 20 20 20  March-23:....   
06e0: 2a 20 20 53 74 61 72 74 65 64 20 77 6f 72 6b 20  *  Started work 
06f0: 6f 6e 20 61 20 62 72 61 6e 63 68 20 77 68 69 63  on a branch whic
0700: 68 20 75 73 65 73 20 72 65 66 65 72 65 6e 63 65  h uses reference
0710: 20 63 6f 75 6e 74 69 6e 67 20 74 6f 20 61 6c 6c   counting to all
0720: 6f 77 20 76 61 6c 75 65 20 69 6e 73 74 61 6e 63  ow value instanc
0730: 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  es to be inserte
0740: 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
0750: 20 69 6e 74 6f 20 74 68 65 20 73 61 6d 65 20 63   into the same c
0760: 6f 6e 74 61 69 6e 65 72 20 6f 72 20 61 63 72 6f  ontainer or acro
0770: 73 73 20 64 69 66 66 65 72 65 6e 74 20 63 6f 6e  ss different con
0780: 74 61 69 6e 65 72 73 2e 20 54 68 65 20 3c 65 6d  tainers. The <em
0790: 3e 4e 6f 20 43 79 63 6c 65 73 3c 2f 65 6d 3e 20  >No Cycles</em> 
07a0: 72 75 6c 65 20 73 74 69 6c 6c 20 61 70 70 6c 69  rule still appli
07b0: 65 73 2c 20 68 6f 77 65 76 65 72 2e 20 54 68 69  es, however. Thi
07c0: 73 20 66 65 61 74 75 72 65 20 61 64 64 73 20 61  s feature adds a
07d0: 20 62 69 74 20 6f 66 20 6d 65 6d 6f 72 79 20 6f   bit of memory o
07e0: 76 65 72 68 65 61 64 20 28 34 20 62 79 74 65 73  verhead (4 bytes
07f0: 2f 76 61 6c 75 65 29 20 62 75 74 20 73 68 6f 75  /value) but shou
0800: 6c 64 20 65 6e 61 62 6c 65 20 75 73 20 74 6f 20  ld enable us to 
0810: 64 6f 20 6d 6f 72 65 20 69 6e 74 65 72 65 73 74  do more interest
0820: 69 6e 67 20 74 68 69 6e 67 73 20 77 69 74 68 20  ing things with 
0830: 74 68 65 20 6f 62 6a 65 63 74 20 74 72 65 65 73  the object trees
0840: 2e 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 63  . This code is c
0850: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
0860: 3c 74 74 3e 77 69 74 68 2d 72 65 66 63 6f 75 6e  <tt>with-refcoun
0870: 74 3c 2f 74 74 3e 20 62 72 61 6e 63 68 2c 20 61  t</tt> branch, a
0880: 6e 64 20 69 27 6d 20 6e 6f 74 20 79 65 74 20 64  nd i'm not yet d
0890: 65 63 69 64 65 64 20 61 73 20 74 6f 20 77 68 65  ecided as to whe
08a0: 74 68 65 72 20 74 6f 20 70 75 6c 6c 20 69 74 20  ther to pull it 
08b0: 69 6e 74 6f 20 74 68 65 20 74 72 75 6e 6b 2e 0d  into the trunk..
08c0: 0a 0d 0a 32 30 31 31 2d 4d 61 72 63 68 2d 31 31  ...2011-March-11
08d0: 3a 0d 0a 20 20 20 2a 20 20 4d 61 6e 75 65 6c 20  :..   *  Manuel 
08e0: 52 26 75 75 6d 6c 3b 6c 6b 65 20 6b 69 6e 64 6c  R&uuml;lke kindl
08f0: 79 20 70 6f 69 6e 74 65 64 20 6f 75 74 20 74 68  y pointed out th
0900: 61 74 20 73 6f 6d 65 6f 6e 65 20 28 61 20 62 6f  at someone (a bo
0910: 74 29 20 68 61 64 20 76 61 6e 64 61 6c 69 7a 65  t) had vandalize
0920: 64 20 61 6c 6c 20 74 68 65 20 77 69 6b 69 20 70  d all the wiki p
0930: 61 67 65 73 20 61 6e 64 20 74 69 63 6b 65 74 73  ages and tickets
0940: 20 69 6e 20 74 68 69 73 20 73 69 74 65 2e 20 57   in this site. W
0950: 68 69 6c 65 20 6e 6f 20 73 6f 75 72 63 65 20 63  hile no source c
0960: 6f 64 65 20 61 70 70 65 61 72 73 20 74 6f 20 68  ode appears to h
0970: 61 76 65 20 62 65 65 6e 20 76 69 6f 6c 61 74 65  ave been violate
0980: 64 2c 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72  d, the repositor
0990: 79 20 68 61 73 20 62 65 65 6e 20 72 65 2d 62 75  y has been re-bu
09a0: 69 6c 74 20 66 72 6f 6d 20 6b 6e 6f 77 6e 2d 63  ilt from known-c
09b0: 6c 65 61 6e 20 73 6f 75 72 63 65 73 2e 0d 0a 0d  lean sources....
09c0: 0a 32 30 31 31 2d 4a 61 6e 2d 32 38 3a 0d 0a 20  .2011-Jan-28:.. 
09d0: 20 20 2a 20 20 41 64 64 65 64 20 5b 63 73 6f 6e    *  Added [cson
09e0: 5f 73 71 6c 69 74 65 33 5d 2e 0d 0a 20 20 20 2a  _sqlite3]...   *
09f0: 20 20 53 6f 6d 65 20 6f 66 20 74 68 65 20 72 6f    Some of the ro
0a00: 75 74 69 6e 65 73 2c 20 6c 69 6b 65 20 3c 74 74  utines, like <tt
0a10: 3e 63 73 6f 6e 5f 76 61 6c 75 65 5f 6e 65 77 28  >cson_value_new(
0a20: 29 3c 2f 74 74 3e 20 61 6e 64 20 3c 74 74 3e 63  )</tt> and <tt>c
0a30: 73 6f 6e 5f 76 61 6c 75 65 5f 73 65 74 5f 78 78  son_value_set_xx
0a40: 78 28 29 3c 2f 74 74 3e 2c 20 68 61 76 65 20 62  x()</tt>, have b
0a50: 65 65 6e 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  een removed from
0a60: 20 74 68 65 20 70 75 62 6c 69 63 20 41 50 49 20   the public API 
0a70: 62 65 63 61 75 73 65 20 74 68 65 79 20 61 72 65  because they are
0a80: 20 65 61 73 79 20 74 6f 20 6d 69 73 2d 75 73 65   easy to mis-use
0a90: 20 28 69 6e 20 74 65 72 6d 73 20 6f 66 20 6d 65   (in terms of me
0aa0: 6d 6f 72 79 20 6d 61 6e 61 67 65 6d 65 6e 74 29  mory management)
0ab0: 20 61 6e 64 20 62 65 63 61 75 73 65 20 74 68 65   and because the
0ac0: 79 20 6d 61 6b 65 20 69 6d 70 6c 65 6d 65 6e 74  y make implement
0ad0: 69 6e 67 20 63 65 72 74 61 69 6e 20 6d 65 6d 6f  ing certain memo
0ae0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 70  ry allocation op
0af0: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 69 6d 70 6f  timizations impo
0b00: 73 73 69 62 6c 65 2e 0d 0a 20 20 20 2a 20 20 49  ssible...   *  I
0b10: 6e 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69  nternal allocati
0b20: 6f 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  on optimizations
0b30: 20 68 61 76 65 20 63 75 74 20 74 68 65 20 74 6f   have cut the to
0b40: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63 61  tal number of ca
0b50: 6c 6c 73 20 74 6f 20 3c 74 74 3e 6d 61 6c 6c 6f  lls to <tt>mallo
0b60: 63 28 29 3c 2f 74 74 3e 20 62 79 20 32 30 2d 33  c()</tt> by 20-3
0b70: 30 25 20 66 6f 72 20 22 73 6f 6d 65 20 61 76 65  0% for "some ave
0b80: 72 61 67 65 20 74 65 73 74 20 69 6e 70 75 74 2e  rage test input.
0b90: 22 20 43 65 72 74 61 69 6e 20 69 6e 74 65 72 6e  " Certain intern
0ba0: 61 6c 20 63 6f 6e 73 74 61 6e 74 20 76 61 6c 75  al constant valu
0bb0: 65 73 20 28 65 2e 67 2e 20 74 72 75 65 2c 20 66  es (e.g. true, f
0bc0: 61 6c 73 65 2c 20 6e 75 6c 6c 2c 20 69 6e 74 65  alse, null, inte
0bd0: 67 65 72 20 30 2c 20 64 6f 75 62 6c 65 20 30 2e  ger 0, double 0.
0be0: 30 2c 20 61 6e 64 20 65 6d 70 74 79 20 73 74 72  0, and empty str
0bf0: 69 6e 67 73 29 20 6e 6f 77 20 69 6e 74 65 72 6e  ings) now intern
0c00: 61 6c 6c 79 20 75 73 65 20 73 68 61 72 65 64 20  ally use shared 
0c10: 76 61 6c 75 65 20 69 6e 73 74 61 6e 63 65 73 2e  value instances.
0c20: 20 41 20 6d 69 6e 6f 72 20 6f 70 74 69 6d 69 7a   A minor optimiz
0c30: 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ation in the par
0c40: 73 65 72 20 63 75 74 73 20 74 68 65 20 74 6f 74  ser cuts the tot
0c50: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c  al number of all
0c60: 6f 63 61 74 69 6f 6e 73 20 73 6f 6d 65 77 68 61  ocations somewha
0c70: 74 2c 20 62 75 74 20 64 6f 65 73 20 6e 6f 74 20  t, but does not 
0c80: 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 20 63 68  significantly ch
0c90: 61 6e 67 65 20 74 68 65 20 74 6f 74 61 6c 20 61  ange the total a
0ca0: 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 20  mount of memory 
0cb0: 61 6c 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 2a  allocated...   *
0cc0: 20 20 57 65 20 6e 6f 20 6c 6f 6e 67 65 72 20 6e    We no longer n
0cd0: 65 65 64 20 74 6f 20 64 79 6e 61 6d 69 63 61 6c  eed to dynamical
0ce0: 6c 79 20 61 6c 6c 6f 63 61 74 65 20 69 6e 74 65  ly allocate inte
0cf0: 67 65 72 20 76 61 6c 75 65 73 20 66 6f 72 20 70  ger values for p
0d00: 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 3c  latforms where <
0d10: 74 74 3e 28 76 6f 69 64 20 2a 29 3c 2f 74 74 3e  tt>(void *)</tt>
0d20: 20 69 73 20 62 69 67 20 65 6e 6f 75 67 68 20 74   is big enough t
0d30: 6f 20 68 6f 6c 64 20 61 20 3c 74 74 3e 63 73 6f  o hold a <tt>cso
0d40: 6e 5f 69 6e 74 5f 74 3c 2f 74 74 3e 20 76 61 6c  n_int_t</tt> val
0d50: 75 65 2e 20 54 68 69 73 20 69 73 20 61 20 63 6f  ue. This is a co
0d60: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
0d70: 6e 20 64 65 66 61 75 6c 74 69 6e 67 20 74 6f 20  n defaulting to 
0d80: 33 32 2d 62 69 74 20 62 65 68 61 76 69 6f 75 72  32-bit behaviour
0d90: 20 28 69 2e 65 2e 20 64 79 6e 61 6d 69 63 61 6c   (i.e. dynamical
0da0: 6c 79 20 61 6c 6c 6f 63 61 74 65 20 69 6e 74 65  ly allocate inte
0db0: 67 65 72 20 76 61 6c 75 65 73 29 20 69 66 20 69  ger values) if i
0dc0: 74 20 63 61 6e 6e 6f 74 20 61 75 74 6f 6d 61 74  t cannot automat
0dd0: 69 63 61 6c 6c 79 20 64 65 74 65 72 6d 69 6e 65  ically determine
0de0: 20 28 61 74 20 70 72 65 70 72 6f 63 65 73 73 6f   (at preprocesso
0df0: 72 20 74 69 6d 65 29 20 74 68 61 74 20 79 6f 75  r time) that you
0e00: 72 20 3c 74 74 3e 28 76 6f 69 64 20 2a 29 3c 2f  r <tt>(void *)</
0e10: 74 74 3e 20 69 73 20 62 69 67 20 65 6e 6f 75 67  tt> is big enoug
0e20: 68 20 74 6f 20 68 6f 6c 64 20 61 20 3c 74 74 3e  h to hold a <tt>
0e30: 63 73 6f 6e 5f 69 6e 74 5f 74 3c 2f 74 74 3e 20  cson_int_t</tt> 
0e40: 76 61 6c 75 65 2e 20 49 6e 74 65 72 65 73 74 69  value. Interesti
0e50: 6e 67 6c 79 2c 20 69 6e 20 6d 79 20 74 65 73 74  ngly, in my test
0e60: 73 20 74 68 69 73 20 63 75 74 73 20 64 6f 77 6e  s this cuts down
0e70: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
0e80: 6c 6c 6f 63 61 74 69 6f 6e 73 20 63 6f 6d 70 61  llocations compa
0e90: 72 65 64 20 74 6f 20 33 32 2d 62 69 74 20 62 75  red to 32-bit bu
0ea0: 69 6c 64 73 2c 20 62 75 74 20 69 74 20 64 6f 65  ilds, but it doe
0eb0: 73 20 6e 6f 74 20 63 75 74 20 74 68 65 20 61 63  s not cut the ac
0ec0: 74 75 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 6d  tual amount of m
0ed0: 65 6d 6f 72 79 20 75 73 65 64 20 77 68 65 6e 20  emory used when 
0ee0: 63 6f 6d 70 61 72 65 64 20 74 6f 20 33 32 2d 62  compared to 32-b
0ef0: 69 74 20 62 75 69 6c 64 73 20 62 65 63 61 75 73  it builds becaus
0f00: 65 20 74 68 65 20 6f 76 65 72 68 65 61 64 20 6f  e the overhead o
0f10: 66 20 74 68 65 20 6c 61 72 67 65 72 20 70 6f 69  f the larger poi
0f20: 6e 74 65 72 20 73 69 7a 65 20 6d 61 6b 65 73 20  nter size makes 
0f30: 73 75 63 68 20 61 20 64 69 66 66 65 72 65 6e 63  such a differenc
0f40: 65 20 6f 6e 20 36 34 2d 62 69 74 20 62 75 69 6c  e on 64-bit buil
0f50: 64 73 2e 0d 0a 20 20 20 2a 20 20 59 65 74 20 6d  ds...   *  Yet m
0f60: 6f 72 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ore optimization
0f70: 73 20 69 6e 20 68 6f 77 20 6f 62 6a 65 63 74 20  s in how object 
0f80: 6b 65 79 73 20 61 72 65 20 68 61 6e 64 6c 65 64  keys are handled
0f90: 20 73 61 76 65 73 20 75 73 20 6f 6e 65 20 61 6c   saves us one al
0fa0: 6c 6f 63 61 74 69 6f 6e 20 61 6e 64 20 31 20 73  location and 1 s
0fb0: 74 72 63 70 79 20 6f 70 2c 20 66 75 72 74 68 65  trcpy op, furthe
0fc0: 72 20 72 65 64 75 63 69 6e 67 20 74 6f 74 61 6c  r reducing total
0fd0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 63   number of alloc
0fe0: 61 74 69 6f 6e 73 20 6d 61 64 65 20 64 75 72 69  ations made duri
0ff0: 6e 67 20 70 61 72 73 69 6e 67 20 62 79 20 61 62  ng parsing by ab
1000: 6f 75 74 20 31 32 2d 31 34 25 20 69 6e 20 6d 79  out 12-14% in my
1010: 20 74 65 73 74 73 2e 0d 0a 20 20 2a 20 20 49 6e   tests...  *  In
1020: 20 74 6f 74 61 6c 2c 20 61 6e 64 20 74 68 65 20   total, and the 
1030: 61 62 6f 76 65 20 6f 70 74 69 6d 69 7a 61 74 69  above optimizati
1040: 6f 6e 73 20 68 61 76 65 20 63 75 74 20 6d 61 6c  ons have cut mal
1050: 6c 6f 63 20 63 61 6c 6c 73 20 28 77 68 65 6e 20  loc calls (when 
1060: 70 61 72 73 69 6e 67 29 20 62 79 20 61 62 6f 75  parsing) by abou
1070: 74 20 33 30 2d 34 30 25 20 66 6f 72 20 6d 79 20  t 30-40% for my 
1080: 74 65 73 74 73 2c 20 61 6e 64 20 74 6f 74 61 6c  tests, and total
1090: 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 20 62 79   memory usage by
10a0: 20 31 35 2d 32 30 25 2c 20 63 6f 6d 70 61 72 65   15-20%, compare
10b0: 64 20 74 6f 20 33 36 20 68 6f 75 72 73 20 61 67  d to 36 hours ag
10c0: 6f 2e 20 54 68 65 73 65 20 72 65 73 75 6c 74 73  o. These results
10d0: 20 61 72 65 20 66 6f 72 20 36 34 2d 62 69 74 20   are for 64-bit 
10e0: 62 75 69 6c 64 73 2c 20 77 68 69 63 68 20 6d 69  builds, which mi
10f0: 67 68 74 20 6e 6f 74 20 68 61 76 65 20 74 6f 20  ght not have to 
1100: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1110: 63 61 74 65 20 69 6e 74 65 67 65 72 73 2e 20 4f  cate integers. O
1120: 6e 20 33 32 2d 62 69 74 20 70 6c 61 74 66 6f 72  n 32-bit platfor
1130: 6d 73 2c 20 6f 72 20 77 68 65 6e 20 63 73 6f 6e  ms, or when cson
1140: 20 69 73 20 62 75 69 6c 74 20 77 69 74 68 6f 75   is built withou
1150: 74 20 22 6c 61 72 67 65 20 76 6f 69 64 20 70 6f  t "large void po
1160: 69 6e 74 65 72 22 20 73 75 70 70 6f 72 74 2c 20  inter" support, 
1170: 74 68 61 74 20 70 61 72 74 69 63 75 6c 61 72 20  that particular 
1180: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 64 6f 65  optimization doe
1190: 73 6e 27 74 20 61 70 70 6c 79 2e 0a 0a 5a 20 61  sn't apply...Z a
11a0: 32 39 63 64 33 38 35 36 61 66 61 38 37 34 34 34  29cd3856afa87444
11b0: 31 36 62 62 64 63 66 33 31 35 32 35 35 30 61 0a  16bbdcf3152550a.