<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7920195922160761232</id><updated>2011-12-30T04:14:29.154-08:00</updated><category term='tuples'/><category term='community'/><category term='regexp'/><category term='fast fourier transform'/><category term='google trend'/><category term='lzw'/><category term='mtasc'/><category term='ocaml for scientists'/><category term='preconditioner'/><category term='sudoku'/><category term='combinators'/><category term='classes'/><category term='functor'/><category term='balanced tree'/><category term='unison'/><category term='c++'/><category term='closures'/><category term='ocaml 3.12'/><category term='sort'/><category term='substitution'/><category term='moving average'/><category term='covariance'/><category term='numerical integration'/><category term='visualization'/><category term='java'/><category term='labeled arguments'/><category term='binary tree'/><category term='simulated annealing'/><category term='leak'/><category term='graphics'/><category term='streams'/><category term='function pointers'/><category term='fork'/><category term='int'/><category term='ocamlnet'/><category term='cilk'/><category term='c'/><category term='logic programming'/><category term='native-code'/><category term='shared memory'/><category term='citrix'/><category term='convolution'/><category term='object oriented'/><category term='graph theory'/><category term='ocaml internals'/><category term='ubuntu'/><category term='compiler'/><category term='ruby'/><category term='priority queue'/><category term='parallel gc'/><category term='list'/><category term='summer project'/><category term='dynamic programming'/><category term='allocation'/><category term='data representation'/><category term='complex numbers'/><category term='ocaide'/><category term='remote procedure call'/><category term='atomic structure'/><category term='compilation'/><category term='computer'/><category term='xml-light'/><category term='mark-sweep'/><category term='physics'/><category term='lllvm'/><category term='jit'/><category term='huffman'/><category term='compiler options'/><category term='numerics'/><category term='allocate'/><category term='singular value decomposition'/><category term='unrolling'/><category term='inlining'/><category term='shortest path'/><category term='o&apos;reily'/><category term='size'/><category term='deletion'/><category term='ml'/><category term='lazy pattern'/><category term='libraries'/><category term='division'/><category term='mylife'/><category term='regex'/><category term='common subexpression elimination'/><category term='jacobi'/><category term='garbage collection'/><category term='neural network'/><category term='minimization'/><category term='gtk+'/><category term='source code'/><category term='opa'/><category term='lex'/><category term='gauss siedel'/><category term='pricer'/><category term='beginner'/><category term='camlp4'/><category term='hash table'/><category term='magazine'/><category term='finance'/><category term='SICP'/><category term='web'/><category term='lighting'/><category term='commercial'/><category term='type system'/><category term='poster'/><category term='puzzle'/><category term='ocaml journal'/><category term='combinatorial'/><category term='library'/><category term='dell'/><category term='numerical'/><category term='eigenvalues'/><category term='linear algebra'/><category term='journal'/><category term='sales'/><category term='power set'/><category term='edit distance'/><category term='performance'/><category term='review'/><category term='mldonkey'/><category term='traveling salesman'/><category term='knights tour'/><category term='xml'/><category term='simulation'/><category term='swarm'/><category term='functors'/><category term='finite element'/><category term='mlstate'/><category term='join calculus'/><category term='longest common subsequence'/><category term='curried functions'/><category term='language'/><category term='variant type'/><category term='phong'/><category term='regular expression'/><category term='gui'/><category term='random number'/><category term='interpreter'/><category term='dynamic typing'/><category term='success stories'/><category term='stop-the-world'/><category term='subscription'/><category term='xensource'/><category term='svg'/><category term='insertion'/><category term='intel'/><category term='pretty printer'/><category term='software'/><category term='glsl'/><category term='persistence'/><category term='proper tail recursion'/><category term='partition'/><category term='release'/><category term='chess'/><category term='revenue'/><category term='fft'/><category term='queens problem'/><category term='recursion'/><category term='articles'/><category term='correctness'/><category term='term-level'/><category term='design patterns'/><category term='planets'/><category term='bounds checking'/><category term='jane st capital'/><category term='queens'/><category term='benchmark'/><category term='depth-first search'/><category term='mesh'/><category term='dijkstra'/><category term='floating point'/><category term='concurrent'/><category term='developers'/><category term='batteries'/><category term='tail recursion'/><category term='postscript'/><category term='vector'/><category term='quicksort'/><category term='maze'/><category term='f#.net journal'/><category term='3.11'/><category term='uniform representation'/><category term='metaprogramming'/><category term='special offer'/><category term='lablgtk2'/><category term='chart'/><category term='run-time code generation'/><category term='adaptive subdivision'/><category term='levenshtein'/><category term='pattern matching'/><category term='hlvm'/><category term='modulo'/><category term='higher-order module'/><category term='search'/><category term='ocaml'/><category term='boids'/><category term='books'/><category term='memoization'/><category term='continuation'/><category term='gradient descent'/><category term='ledit'/><category term='type inference'/><category term='low-level'/><category term='recursive descent'/><category term='parsing'/><category term='roam'/><category term='optional arguments'/><category term='lexing'/><category term='svd'/><category term='syntax extension'/><category term='array'/><category term='freetennis'/><category term='catenable lists'/><category term='set'/><category term='job'/><category term='shadow stack'/><category term='union'/><category term='foreign function interface'/><category term='grad'/><category term='reliability'/><category term='standard library'/><category term='flocking'/><category term='video'/><category term='opengl 2'/><category term='pythagorean triplets'/><category term='bzip2'/><category term='binary format'/><category term='real time'/><category term='scheme'/><category term='packages'/><category term='price'/><category term='commercial applications'/><category term='lock'/><category term='sparse matrix'/><category term='geographic information systems'/><category term='xmlrpc'/><category term='hindley-milner'/><category term='subtyping'/><category term='diff'/><category term='memory'/><category term='industry'/><category term='pdf'/><category term='route finding'/><category term='metaocaml'/><category term='polymorphic variants'/><category term='term rewriting'/><category term='text'/><category term='unix systems programming in ocaml'/><category term='optimization'/><category term='network'/><category term='profit'/><category term='sliding window'/><category term='character'/><category term='error'/><category term='camlimages'/><category term='static typing'/><category term='tree'/><category term='emergent behaviour'/><category term='pythagoras'/><category term='lists'/><category term='perl'/><category term='numerical methods'/><category term='lu decomposition'/><category term='first-class structs'/><category term='concurrent gc'/><category term='interface'/><category term='ffi'/><category term='lazy'/><category term='value type'/><category term='lempel ziv welch'/><category term='virtual machine'/><category term='async'/><category term='artificial intelligence'/><category term='hoisting loop invariants'/><category term='advi'/><category term='best fit'/><category term='yacc'/><category term='major heap'/><category term='ray tracer'/><category term='gtk'/><category term='polymorphic recursion'/><category term='multicore'/><category term='meeting'/><category term='purely functional data structures'/><category term='dynamics'/><category term='derivatives'/><category term='non-uniform type'/><category term='popularity'/><category term='machine learning'/><category term='data compression'/><category term='bwt'/><category term='LL'/><category term='navier stokes'/><category term='calculator'/><category term='rigid body'/><category term='stanford bunny'/><category term='hevea'/><category term='lwt'/><category term='opteron'/><category term='erlang'/><category term='data structure'/><category term='objsize'/><category term='sml'/><category term='word'/><category term='product'/><category term='polygen'/><category term='first-class modules'/><category term='haskell'/><category term='metric'/><category term='web service'/><category term='oni'/><category term='queues'/><category term='macro'/><category term='scimark'/><category term='a* algorithm'/><category term='threads'/><category term='heap'/><category term='scalability'/><category term='apple store'/><category term='logic'/><category term='fluid dynamics'/><category term='school'/><category term='QR decomposition'/><category term='game'/><category term='salary'/><category term='semi-numerical methods'/><category term='geometry'/><category term='posix'/><category term='tutorials'/><category term='vector graphics'/><category term='boehm'/><category term='architecture'/><category term='recursive modules'/><category term='examples'/><category term='ide'/><category term='formal verification'/><category term='union type'/><category term='median'/><category term='asynchronous'/><category term='debugging'/><category term='gouraud'/><category term='oc4mc'/><category term='tail call elimination'/><category term='shader'/><category term='ipad'/><category term='conference'/><category term='graph'/><category term='higher-order functions'/><category term='string'/><category term='type checking'/><category term='rtin'/><category term='f#'/><category term='burrows wheeler'/><category term='opengl'/><category term='mutex'/><category term='f#.net'/><category term='python'/><category term='shootout'/><category term='comparison'/><category term='oberon-2'/><category term='top-level'/><category term='llvm'/><category term='debian'/><category term='parallel'/><category term='crawler'/><category term='randomized algorithm'/><category term='boxing'/><category term='fftw'/><category term='linux'/><category term='minor heap'/><category term='divide and conquer'/><category term='rendering'/><category term='2d'/><category term='tutorial'/><category term='gis'/><category term='sorting'/><category term='lisp'/><category term='reference type'/><category term='simple'/><category term='shading'/><category term='wavelet'/><category term='book'/><category term='incremental'/><category term='trie'/><category term='back propagation'/><category term='garbage collector'/><category term='web interface'/><category term='jobs'/><category term='james woodyatt'/><category term='functional programming'/><category term='amd'/><category term='least squares'/><category term='symbolic'/><category term='parser'/><category term='profiling'/><title type='text'>OCaml News</title><subtitle type='html'>Putting the fun in functional programming since 2005!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default?start-index=101&amp;max-results=100'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>161</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-2560839030597711654</id><published>2011-11-08T09:56:00.000-08:00</published><updated>2011-11-08T10:15:19.816-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='async'/><category scheme='http://www.blogger.com/atom/ns#' term='library'/><category scheme='http://www.blogger.com/atom/ns#' term='lwt'/><category scheme='http://www.blogger.com/atom/ns#' term='asynchronous'/><title type='text'>Jane St's Async library</title><content type='html'>&lt;p&gt;The good folks at &lt;a href="http://ocaml.janestreet.com"&gt;Jane St Capital&lt;/a&gt; have kindly released another of their &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; libraries as open source software. This is the &lt;a href="http://ocaml.janestreet.com/?q=node/100"&gt;Async library&lt;/a&gt; and it is an alternative to the traditional &lt;a href="http://ocsigen.org/lwt/"&gt;LWT&lt;/a&gt; library for asynchronous programming (including IO) in &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-2560839030597711654?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/2560839030597711654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=2560839030597711654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2560839030597711654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2560839030597711654'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2011/11/jane-sts-async-library.html' title='Jane St&apos;s Async library'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-3396816084896740388</id><published>2011-07-10T10:57:00.000-07:00</published><updated>2011-07-10T11:01:02.207-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='james woodyatt'/><category scheme='http://www.blogger.com/atom/ns#' term='library'/><category scheme='http://www.blogger.com/atom/ns#' term='oni'/><category scheme='http://www.blogger.com/atom/ns#' term='data structure'/><title type='text'>James Woodyatt's Oni library (including lots of data structures)</title><content type='html'>&lt;p&gt;James Woodyatt has published his &lt;a href="https://bitbucket.org/jhw/oni"&gt;Oni library&lt;/a&gt; of miscellaneous OCaml goodness that includes lots of interesting data structures.&lt;/p&gt;&lt;p&gt;Highlighted features include:&lt;/p&gt;&lt;p&gt;- Functional streams and stream processors (extended).&lt;/br&gt;- Functional bootstrapped skew-binomial heap.&lt;/br&gt;- Functional red-black binary tree (associative array).&lt;/br&gt;- Functional sets based on red-black binary tree.&lt;/br&gt;- Functional real-time catenable deque.&lt;/br&gt;- Functional LL(x) parsing using state-exception monad.&lt;/br&gt;- Functional lazy deterministic finite automaton (DFA).&lt;/br&gt;- Functional lexical analyzer (using lazy DFA and monadic parser).&lt;/br&gt;- Functional substring list manipulation (message buffer chains).&lt;/br&gt;- Gregorian calendar date manipulation.&lt;/br&gt;- Standard time manipulation.&lt;/br&gt;- System time in Temps Atomique International (TAI).&lt;/br&gt;- Unicode transcoding.&lt;/br&gt;- Universal resource identifier (URI) manipulation.&lt;/br&gt;- Extended socket interface (supports more options, and UDP w/multicast).&lt;/br&gt;- I/O event multiplexing (with Unix.select).&lt;/br&gt;- Functional XML stream parsing and generation - Functional MIME stream parsing and generation&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-3396816084896740388?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/3396816084896740388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=3396816084896740388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3396816084896740388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3396816084896740388'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2011/07/james-woodyatts-oni-library-including.html' title='James Woodyatt&apos;s Oni library (including lots of data structures)'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4940843330879635828</id><published>2011-03-05T09:03:00.000-08:00</published><updated>2011-03-09T01:17:55.198-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jobs'/><title type='text'>More OCaml jobs than ever before</title><content type='html'>&lt;p&gt;The &lt;a href="http://www.itjobswatch.co.uk/jobs/uk/ocaml.do"&gt;IT Jobs Watch website&lt;/a&gt; shows that the number of job advertisements citing &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml&lt;/a&gt; is at its highest level ever:&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-c7r9CQf0m2Y/TXJtfu84Y8I/AAAAAAAAALw/Vh1nPnqtpn8/s1600/OCamlDemand.aspx"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 182px;" src="http://3.bp.blogspot.com/-c7r9CQf0m2Y/TXJtfu84Y8I/AAAAAAAAALw/Vh1nPnqtpn8/s400/OCamlDemand.aspx" border="0" alt="" id="BLOGGER_PHOTO_ID_5580643280212222914" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4940843330879635828?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4940843330879635828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4940843330879635828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4940843330879635828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4940843330879635828'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2011/03/more-ocaml-jobs-than-ever-before.html' title='More OCaml jobs than ever before'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-c7r9CQf0m2Y/TXJtfu84Y8I/AAAAAAAAALw/Vh1nPnqtpn8/s72-c/OCamlDemand.aspx' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-6951129697896009351</id><published>2010-11-21T08:16:00.000-08:00</published><updated>2010-11-21T08:28:03.156-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apple store'/><category scheme='http://www.blogger.com/atom/ns#' term='ipad'/><title type='text'>OCaml on the iPad</title><content type='html'>&lt;p&gt;The &lt;a href="http://itunes.apple.com/app/ocamlexample/id396515573?mt=8"&gt;OCaml Example&lt;/a&gt; app in the iPad store lets you write and run OCaml programs on your iPad:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://a1.phobos.apple.com/us/r1000/057/Purple/25/0e/d4/mzl.tewvmvty.480x480-75.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 360px; height: 480px;" src="http://a1.phobos.apple.com/us/r1000/057/Purple/25/0e/d4/mzl.tewvmvty.480x480-75.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-6951129697896009351?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/6951129697896009351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=6951129697896009351' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6951129697896009351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6951129697896009351'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/11/ocaml-on-ipad.html' title='OCaml on the iPad'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-3861106719074527370</id><published>2010-08-06T06:57:00.000-07:00</published><updated>2010-08-06T06:59:38.390-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='functor'/><category scheme='http://www.blogger.com/atom/ns#' term='priority queue'/><category scheme='http://www.blogger.com/atom/ns#' term='set'/><category scheme='http://www.blogger.com/atom/ns#' term='higher-order module'/><category scheme='http://www.blogger.com/atom/ns#' term='data structure'/><category scheme='http://www.blogger.com/atom/ns#' term='heap'/><title type='text'>Data structures: Heaps</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob77"&gt;The OCaml Journal&lt;/a&gt; just published an article about data structures:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"A min-heap is a tree-based data structure that satisfies the constraint that the children at any given branch are always larger than their parent and, consequently, the minimum element is at the root. Heaps are most notable as an efficient way to implement priority queues which, in turn, underpin a variety of algorithms including some seen in previous OCaml Journal articles. This article examines skew heaps, leftist heaps, pairing heaps and binomial heaps. Higher-order modules are used to create reusable implementations..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob77"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-3861106719074527370?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/3861106719074527370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=3861106719074527370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3861106719074527370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3861106719074527370'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/08/data-structures-heaps.html' title='Data structures: Heaps'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-6375884369420452936</id><published>2010-08-02T15:35:00.000-07:00</published><updated>2010-08-02T15:58:31.611-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml 3.12'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>OCaml 3.12 released!</title><content type='html'>&lt;p&gt;A new version of the OCaml distribution was released today, &lt;a href="http://caml.inria.fr/ocaml/release.en.html"&gt;OCaml 3.12.0&lt;/a&gt;. This release includes many exciting developments to the language as well as a multitude of other improvements:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Improved record patterns.&lt;/li&gt;&lt;li&gt;Explicit method override.&lt;/li&gt;&lt;li&gt;Local &lt;span style="font-family:courier new;"&gt;open&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Direct polymorphic recursion via type annotations.&lt;/li&gt;&lt;li&gt;First-class modules.&lt;/li&gt;&lt;li&gt;Named types as parameters to functions.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-6375884369420452936?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/6375884369420452936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=6375884369420452936' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6375884369420452936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6375884369420452936'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/08/ocaml-312-released.html' title='OCaml 3.12 released!'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-321533672588550349</id><published>2010-07-30T19:01:00.000-07:00</published><updated>2010-07-30T19:03:07.250-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='physics'/><category scheme='http://www.blogger.com/atom/ns#' term='rigid body'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>Rigid body dynamics</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob76"&gt;The OCaml Journal&lt;/a&gt; just published an article about game physics:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"A common technique to simulate the dynamics of objects is to model them as interacting rigid components. This article describes the design and implementation of a simple OCaml program that uses rigid body dynamics to simulate balls bouncing around in 2D, using OpenGL for 2D visualization..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob76"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-321533672588550349?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/321533672588550349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=321533672588550349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/321533672588550349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/321533672588550349'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/07/rigid-body-dynamics.html' title='Rigid body dynamics'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-6423518946030962310</id><published>2010-07-08T21:15:00.000-07:00</published><updated>2010-07-08T21:16:30.354-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diff'/><category scheme='http://www.blogger.com/atom/ns#' term='longest common subsequence'/><title type='text'>The diff tool</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob75"&gt;The OCaml Journal&lt;/a&gt; just published an article about sequence algorithms:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"The unix program diff identifies differences between text files, line by line. This tool is most useful for comparing two versions of a program. This article develops a simple implementation of the diff tool based upon the longest common subsequence (LCS) algorithm and examines the output from it..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob75"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-6423518946030962310?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/6423518946030962310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=6423518946030962310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6423518946030962310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6423518946030962310'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/07/diff-tool.html' title='The diff tool'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-2147654117396058470</id><published>2010-06-25T18:11:00.000-07:00</published><updated>2010-06-25T18:13:27.825-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='garbage collector'/><title type='text'>Tuning the OCaml memory allocator for large data processing jobs</title><content type='html'>&lt;p&gt;Michael Ekstrand has published an &lt;a href="http://www.elehack.net/michael/blog/2010/06/ocaml-memory-tuning"&gt;interesting blog article&lt;/a&gt; about tuning the OCaml garbage collector for large-scale computations.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-2147654117396058470?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/2147654117396058470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=2147654117396058470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2147654117396058470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2147654117396058470'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/06/tuning-ocaml-memory-allocator-for-large.html' title='Tuning the OCaml memory allocator for large data processing jobs'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4787209220899682852</id><published>2010-06-25T18:08:00.000-07:00</published><updated>2010-06-25T18:09:37.763-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quicksort'/><category scheme='http://www.blogger.com/atom/ns#' term='divide and conquer'/><category scheme='http://www.blogger.com/atom/ns#' term='recursion'/><category scheme='http://www.blogger.com/atom/ns#' term='sorting'/><title type='text'>Quicksort</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob74"&gt;The OCaml Journal&lt;/a&gt; just published an article about sorting:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"The quicksort algorithm was invented by Tony Hoare in 1960 and remains one of the most celebrated algorithms and is still of great practical value. Implementing some of the many variations of the quicksort algorithm serves as an excellent introduction to programming in OCaml..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob74"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4787209220899682852?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4787209220899682852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4787209220899682852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4787209220899682852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4787209220899682852'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/06/quicksort.html' title='Quicksort'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-7445421419952042033</id><published>2010-06-14T14:58:00.000-07:00</published><updated>2010-06-14T14:59:53.259-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='fft'/><title type='text'>Visualizing the 2D Fourier Transform</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob73"&gt;The OCaml Journal&lt;/a&gt; just published an article about the visualization of numerical methods:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"The Fourier transform is one of the most important numerical methods and underpins most forms of spectral analysis. This article describes a simple image compression technique that uses the 2D Fast Fourier Transform (FFT) to remove the high-frequency components of an image, visualizing the result using GTK..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob73"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-7445421419952042033?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/7445421419952042033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=7445421419952042033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7445421419952042033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7445421419952042033'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/06/visualizing-2d-fourier-transform.html' title='Visualizing the 2D Fourier Transform'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4691764194795252872</id><published>2010-06-08T08:11:00.000-07:00</published><updated>2010-06-08T08:33:58.795-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='industry'/><category scheme='http://www.blogger.com/atom/ns#' term='xensource'/><category scheme='http://www.blogger.com/atom/ns#' term='citrix'/><title type='text'>ICFP draft from Citrix</title><content type='html'>&lt;p&gt;Citrix have published a &lt;a href="http://www.cl.cam.ac.uk/~avsm2/icfp2010-xen-draft.pdf"&gt;draft&lt;/a&gt; of a report due to appear at ICFP describing their use of OCaml in industry, specifically the Management Tools Team (MTT) responsible for the 130kLOC of OCaml code that runs XenServer. The &lt;a href="http://www.citrix.com/English/ps2/products/feature.asp?contentID=1297949"&gt;free&lt;/a&gt; and &lt;a href="http://store.citrix.com/store/citrixus/DisplayProductDetailsPage&amp;amp;productID=165895400"&gt;commercial&lt;/a&gt; editions of the product are deployed in over 40,000 companies worldwide.&lt;/p&gt;&lt;p&gt;Interestingly, none of the perceived risks associated with using a non-mainstream programming language turned out to be a problem. Good OCaml programmers were in abundance. XenSource was acquired by Citrix without any concern about the use of OCaml. Other teams within the company had no problem contributing to the OCaml code base. The OCaml tool chain turned out to be mature enough to support the project.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4691764194795252872?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4691764194795252872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4691764194795252872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4691764194795252872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4691764194795252872'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/06/using-functional-programming-within.html' title='ICFP draft from Citrix'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-3672670368221118475</id><published>2010-06-06T08:41:00.000-07:00</published><updated>2010-06-06T09:28:25.275-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='success stories'/><category scheme='http://www.blogger.com/atom/ns#' term='industry'/><title type='text'>OCaml in industry 2007-2010</title><content type='html'>&lt;p&gt;Looking back, there have been a number of significant advances in the use of OCaml in industry over the past few years:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ocamlnews.blogspot.com/2008/11/stunning-slides-about-growth-of-ocaml.html"&gt;The number of developers contributing to the OCaml code base at XenSource grew to 18&lt;/a&gt; in November 2008. XenSource was subsequently sold to Citrix for US$500,000,000. &lt;/li&gt;&lt;li&gt;&lt;a href="http://ocamlnews.blogspot.com/2009/01/jane-st-capital-expand-their-ocaml.html"&gt;The number of full-time OCaml developers at Jane St grew beyond 30&lt;/a&gt; in January 2009.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.drdobbs.com/cpp/218900367"&gt;MIT startup Cilk Arts sold their Cilk++ tool chain, which is partly written in OCaml, to Intel&lt;/a&gt; in August 2009.&lt;/li&gt;&lt;li&gt;Intel, Jane St, Citrix, CEA, OCamlCore, SimCorp and MLState paid to join the &lt;a href="http://caml.inria.fr/consortium"&gt;CAML Consortium&lt;/a&gt; (now 11 members in total).&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.coherentgraphics.co.uk/cpdf.html"&gt;Coherent Graphics shipped their first product&lt;/a&gt;, written in OCaml.&lt;/li&gt;&lt;li&gt;The world's largest people search engine, &lt;a href="http://wink.com/"&gt;Wink&lt;/a&gt;, was launched (and it is written almost entirely in OCaml).&lt;/li&gt;&lt;li&gt;&lt;a href="http://ocamlnews.blogspot.com/2010/01/mlstate-release-their-first-product-opa.html"&gt;MLState released their first product, Opa&lt;/a&gt;, which is written entirely in OCaml (Nov 2009). &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;And, of course, Microsoft released the world's first mainstream functional programming language &lt;a href="http://www.ffconsultancy.com/products/fsharp_for_technical_computing/"&gt;F#&lt;/a&gt; in April 2010 and it is a close relative of OCaml. That had the knock-on effect of boosting interest in OCaml considerably.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-3672670368221118475?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/3672670368221118475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=3672670368221118475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3672670368221118475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3672670368221118475'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/06/ocaml-in-industry-2007-2010.html' title='OCaml in industry 2007-2010'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-8906982037043538917</id><published>2010-05-23T20:17:00.000-07:00</published><updated>2010-05-23T20:18:38.399-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='partition'/><category scheme='http://www.blogger.com/atom/ns#' term='semi-numerical methods'/><category scheme='http://www.blogger.com/atom/ns#' term='median'/><category scheme='http://www.blogger.com/atom/ns#' term='set'/><category scheme='http://www.blogger.com/atom/ns#' term='sliding window'/><category scheme='http://www.blogger.com/atom/ns#' term='tree'/><category scheme='http://www.blogger.com/atom/ns#' term='sort'/><category scheme='http://www.blogger.com/atom/ns#' term='moving average'/><title type='text'>Sliding Median</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob72"&gt;The OCaml Journal&lt;/a&gt; just published an article about sliding window algorithms:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"Sliding window algorithms are a class of algorithms that treat streams of data by computing a statistic across a window for each position of the window within the data stream. Moving averages are sliding window algorithms that compute an average over each window. This article examines the moving median algorithm that tracks the median value in a window as it slides across a stream of data. Several possible solutions are examined and their performance is studied on an example data set..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob72"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-8906982037043538917?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/8906982037043538917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=8906982037043538917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8906982037043538917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8906982037043538917'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/05/sliding-median.html' title='Sliding Median'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4888776609996367502</id><published>2010-05-13T16:10:00.000-07:00</published><updated>2010-05-13T16:30:11.494-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='neural network'/><category scheme='http://www.blogger.com/atom/ns#' term='artificial intelligence'/><category scheme='http://www.blogger.com/atom/ns#' term='machine learning'/><category scheme='http://www.blogger.com/atom/ns#' term='back propagation'/><title type='text'>Artificial Intelligence: Neural Networks</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob71"&gt;The OCaml Journal&lt;/a&gt; just published an article about artificial intelligence:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"Artificial neural networks are a relatively simple and early form of artificial intelligence modelled directly on the structure of an organic brain. A neural network is composed of many interconnected neurons. Each neuron acts as a simple linear classifier by summing its weighted inputs and firing an output accordingly. The functions involved are essentially ad-hoc but are usually modelled on those of real neurons. This article describes the design and implementation of a neural network that uses an unconventional functional approach to handle vector-matrix operations that allows temporary data structures to be avoided..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob71"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4888776609996367502?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4888776609996367502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4888776609996367502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4888776609996367502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4888776609996367502'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/05/artificial-intelligence-neural-networks.html' title='Artificial Intelligence: Neural Networks'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-1259525571975304045</id><published>2010-04-24T18:51:00.000-07:00</published><updated>2010-04-24T18:56:28.244-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='union type'/><category scheme='http://www.blogger.com/atom/ns#' term='pattern matching'/><category scheme='http://www.blogger.com/atom/ns#' term='hlvm'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='variant type'/><title type='text'>Compiler development: part 3</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob70"&gt;The OCaml Journal&lt;/a&gt; just published an article about &lt;a href="http://www.ffconsultancy.com/ocaml/hlvm/"&gt;HLVM&lt;/a&gt;:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"This article continues our series on compiler development using &lt;a href="http://www.ffconsultancy.com/ocaml/hlvm/"&gt;HLVM&lt;/a&gt;. An example is provided that breaks the current compiler. The bug is investigated using different techniques and a well-known solution is implemented. The resulting compiler is then tested on a substantially more complicated symbolic computation and is found to obtain the correct result. Moreover, the time taken to perform this symbolic computation using &lt;a href="http://www.ffconsultancy.com/ocaml/hlvm/"&gt;HLVM&lt;/a&gt; is found to be very competitive despite the fact that &lt;a href="http://www.ffconsultancy.com/ocaml/hlvm/"&gt;HLVM&lt;/a&gt; was not at all designed for this purpose...."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob70"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-1259525571975304045?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/1259525571975304045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=1259525571975304045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1259525571975304045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1259525571975304045'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/04/compiler-development-part-3.html' title='Compiler development: part 3'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-7992115529157692619</id><published>2010-04-24T10:46:00.000-07:00</published><updated>2010-04-24T11:03:58.421-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='first-class modules'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='developers'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml 3.12'/><category scheme='http://www.blogger.com/atom/ns#' term='meeting'/><title type='text'>OCaml meeting 2010 debriefing</title><content type='html'>&lt;p&gt;Members of the &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml&lt;/a&gt; community met with the core developers at this year's &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml&lt;/a&gt; Meeting 2010 on April 16th. Attendance was up to the maximum capacity of 80 people this year! The meeting was funded by the 11 corporate members of the &lt;a href="http://caml.inria.fr/consortium/"&gt;CAML Consortium&lt;/a&gt; that now includes &lt;a href="http://www.mlstate.com/"&gt;MLState&lt;/a&gt; as a new addition this year.&lt;/p&gt;&lt;p&gt;Slides and references for the lectures given by Xavier Leroy, Sylvain Le Gall, Stefano Zacchiroli, Julien Robert, Guillaume Von Tokarski, Sylvain Conchon, Jean-Christophe Filliâtre, Fabrice Le Fessant, Gerd Stolpmann, Dario Teixeira, Daniel Bünzli, David Rajchenbach-Teller, Philippe Wang, Jérémie Dimino, William Le Ferrand and Anil Madhavapeddy are available &lt;a href="http://www.cocan.org/events/europe/ocamlmeetingparis2010"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Of particular interest was the keynote speech by Xavier Leroy (&lt;a href="https://forge.ocamlcore.org/docman/view.php/77/112/leroy-cug2010.pdf"&gt;read the slides&lt;/a&gt;) about the forthcoming &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml&lt;/a&gt; 3.12 release that introduces lots of exciting new features to the &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml&lt;/a&gt; programming language such as first-class modules.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-7992115529157692619?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/7992115529157692619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=7992115529157692619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7992115529157692619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7992115529157692619'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/04/ocaml-meeting-2010-debriefing.html' title='OCaml meeting 2010 debriefing'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-1149296296638863999</id><published>2010-04-10T12:39:00.000-07:00</published><updated>2010-04-10T12:42:37.897-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graph theory'/><category scheme='http://www.blogger.com/atom/ns#' term='route finding'/><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='a* algorithm'/><category scheme='http://www.blogger.com/atom/ns#' term='dijkstra'/><category scheme='http://www.blogger.com/atom/ns#' term='artificial intelligence'/><category scheme='http://www.blogger.com/atom/ns#' term='shortest path'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>The A* algorithm</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob69"&gt;The OCaml Journal&lt;/a&gt; just published an article about path finding:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"The A* algorithm is often used for route finding in game AI and is a generalization of Dijkstra's shortest-path algorithm from graph theory. This article describes a simple implementation of the A* algorithm written in OCaml that makes extensive use of the module system including higher-order modules (functors) in order to provide a reusable implementation of this algorithm that is generic over the kinds of graphs that it can handle. Finally, an example application is provided that finds a route around a hill...."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob69"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-1149296296638863999?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/1149296296638863999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=1149296296638863999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1149296296638863999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1149296296638863999'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/04/a-algorithm.html' title='The A* algorithm'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-1435704856211809265</id><published>2010-04-08T12:34:00.001-07:00</published><updated>2010-04-08T12:48:51.947-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unix systems programming in ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Unix systems programming in OCaml</title><content type='html'>&lt;p&gt;The English translation of the introductory book &lt;a href="http://ocamlunix.forge.ocamlcore.org/"&gt;Unix systems programming in OCaml&lt;/a&gt; by Xavier Leroy and Didier Rémy was just completed and is now freely available on-line.&lt;/p&gt;&lt;p&gt;This book is an excellent complement to our own &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml for Scientists&lt;/a&gt; book.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-1435704856211809265?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/1435704856211809265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=1435704856211809265' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1435704856211809265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1435704856211809265'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/04/unix-systems-programming-in-ocaml.html' title='Unix systems programming in OCaml'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-3179772122314828194</id><published>2010-03-29T19:25:00.000-07:00</published><updated>2010-03-29T19:27:19.393-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='parser'/><category scheme='http://www.blogger.com/atom/ns#' term='union'/><category scheme='http://www.blogger.com/atom/ns#' term='pattern matching'/><category scheme='http://www.blogger.com/atom/ns#' term='hlvm'/><category scheme='http://www.blogger.com/atom/ns#' term='lex'/><category scheme='http://www.blogger.com/atom/ns#' term='compiler'/><category scheme='http://www.blogger.com/atom/ns#' term='variant type'/><title type='text'>Compiler development: part 2</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob68"&gt;The OCaml Journal&lt;/a&gt; just published an article about HLVM:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"This article is the second in a series describing the design and implementation of a complete compiler using the freely-available HLVM project described in previous articles. This article extends the compiler implemented in part 1 of the series with support for variant types and basic pattern matching. This requires changes to the representation of the compiler's input, the lexer, the parser, the compiler and the REPL. The language implemented by the resulting compiler is substantially more expressive than the previous version and allows monomorphic ML-style programs to be compiled and executed..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob68"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-3179772122314828194?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/3179772122314828194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=3179772122314828194' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3179772122314828194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3179772122314828194'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/03/compiler-development-part-2.html' title='Compiler development: part 2'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-1888993091152199959</id><published>2010-03-15T18:03:00.000-07:00</published><updated>2010-03-15T18:04:45.279-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='word'/><category scheme='http://www.blogger.com/atom/ns#' term='puzzle'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='string'/><category scheme='http://www.blogger.com/atom/ns#' term='sort'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>Word games</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob67"&gt;The OCaml Journal&lt;/a&gt; just published an article about string-based algorithms:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"String manipulation is a common task in programming and, in particular, when scripting. Solving word puzzles is an excellent way to learn how these kinds of problems can be approached. This article uses the example of word games to develop a series of program that manipulate strings using different techniques in OCaml, including sorting and searching..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob67"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-1888993091152199959?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/1888993091152199959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=1888993091152199959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1888993091152199959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1888993091152199959'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/03/word-games.html' title='Word games'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-2825508506453854557</id><published>2010-03-06T19:50:00.000-08:00</published><updated>2010-03-06T19:51:33.066-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='type system'/><category scheme='http://www.blogger.com/atom/ns#' term='hindley-milner'/><category scheme='http://www.blogger.com/atom/ns#' term='type checking'/><category scheme='http://www.blogger.com/atom/ns#' term='type inference'/><title type='text'>Implementing Hindley-Milner type inference</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob66"&gt;The OCaml Journal&lt;/a&gt; just published an article about type checking:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"This article walks through the design and implementation of the Hindley-Milner type inference algorithm written in OCaml. This algorithm is the foundation of type inference most modern functional programming languages including OCaml. The algorithm acts upon expressions and types using type scheme, substitutions and type environments to infer the type of a given expression..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob66"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-2825508506453854557?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/2825508506453854557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=2825508506453854557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2825508506453854557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2825508506453854557'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/03/implementing-hindley-milner-type.html' title='Implementing Hindley-Milner type inference'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-3126665801064924599</id><published>2010-02-07T20:18:00.000-08:00</published><updated>2010-02-08T10:32:30.283-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='parser'/><category scheme='http://www.blogger.com/atom/ns#' term='streams'/><category scheme='http://www.blogger.com/atom/ns#' term='calculator'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax extension'/><category scheme='http://www.blogger.com/atom/ns#' term='recursive descent'/><title type='text'>Recursive descent parsing with OCaml's streams</title><content type='html'>&lt;p&gt;The &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; distribution includes a mutable stream type that allows sequences to be dissected efficiently. The camlp4 syntax for OCaml includes support for pattern matching over streams.&lt;/p&gt;&lt;p&gt;The following example uses the camlp4 stream-parsing syntax extension to implement a recursive descent parser for a simple calculator:&lt;/p&gt;&lt;pre&gt;&lt;p&gt;&amp;#108;&amp;#101;&amp;#116;&amp;#032;&amp;#114;&amp;#101;&amp;#099;&amp;#032;&amp;#102;&amp;#097;&amp;#099;&amp;#116;&amp;#111;&amp;#114;&amp;#032;&amp;#061;&amp;#032;&amp;#112;&amp;#097;&amp;#114;&amp;#115;&amp;#101;&amp;#114;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#124;&amp;#032;&amp;#091;&amp;#060;&amp;#032;&amp;#039;&amp;#039;&amp;#040;&amp;#039;&amp;#059;&amp;#032;&amp;#101;&amp;#032;&amp;#061;&amp;#032;&amp;#101;&amp;#120;&amp;#112;&amp;#114;&amp;#059;&amp;#032;&amp;#039;&amp;#039;&amp;#041;&amp;#039;&amp;#032;&amp;#062;&amp;#093;&amp;#032;&amp;#045;&amp;#062;&amp;#032;&amp;#101;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#124;&amp;#032;&amp;#091;&amp;#060;&amp;#032;&amp;#039;&amp;#099;&amp;#032;&amp;#062;&amp;#093;&amp;#032;&amp;#045;&amp;#062;&amp;#032;&amp;#105;&amp;#110;&amp;#116;&amp;#095;&amp;#111;&amp;#102;&amp;#095;&amp;#115;&amp;#116;&amp;#114;&amp;#105;&amp;#110;&amp;#103;&amp;#032;&amp;#040;&amp;#083;&amp;#116;&amp;#114;&amp;#105;&amp;#110;&amp;#103;&amp;#046;&amp;#109;&amp;#097;&amp;#107;&amp;#101;&amp;#032;&amp;#049;&amp;#032;&amp;#099;&amp;#041;&amp;#013;&amp;#010;&amp;#013;&amp;#010;&amp;#097;&amp;#110;&amp;#100;&amp;#032;&amp;#116;&amp;#101;&amp;#114;&amp;#109;&amp;#032;&amp;#061;&amp;#032;&amp;#112;&amp;#097;&amp;#114;&amp;#115;&amp;#101;&amp;#114;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#124;&amp;#032;&amp;#091;&amp;#060;&amp;#032;&amp;#101;&amp;#049;&amp;#032;&amp;#061;&amp;#032;&amp;#102;&amp;#097;&amp;#099;&amp;#116;&amp;#111;&amp;#114;&amp;#059;&amp;#032;&amp;#101;&amp;#032;&amp;#061;&amp;#032;&amp;#116;&amp;#101;&amp;#114;&amp;#109;&amp;#095;&amp;#097;&amp;#117;&amp;#120;&amp;#032;&amp;#101;&amp;#049;&amp;#032;&amp;#062;&amp;#093;&amp;#032;&amp;#045;&amp;#062;&amp;#032;&amp;#101;&amp;#013;&amp;#010;&amp;#097;&amp;#110;&amp;#100;&amp;#032;&amp;#116;&amp;#101;&amp;#114;&amp;#109;&amp;#095;&amp;#097;&amp;#117;&amp;#120;&amp;#032;&amp;#101;&amp;#049;&amp;#032;&amp;#061;&amp;#032;&amp;#112;&amp;#097;&amp;#114;&amp;#115;&amp;#101;&amp;#114;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#124;&amp;#032;&amp;#091;&amp;#060;&amp;#032;&amp;#039;&amp;#039;&amp;#042;&amp;#039;&amp;#059;&amp;#032;&amp;#101;&amp;#050;&amp;#032;&amp;#061;&amp;#032;&amp;#116;&amp;#101;&amp;#114;&amp;#109;&amp;#032;&amp;#062;&amp;#093;&amp;#032;&amp;#045;&amp;#062;&amp;#032;&amp;#101;&amp;#049;&amp;#032;&amp;#042;&amp;#032;&amp;#101;&amp;#050;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#124;&amp;#032;&amp;#091;&amp;#060;&amp;#032;&amp;#039;&amp;#039;&amp;#047;&amp;#039;&amp;#059;&amp;#032;&amp;#101;&amp;#050;&amp;#032;&amp;#061;&amp;#032;&amp;#116;&amp;#101;&amp;#114;&amp;#109;&amp;#032;&amp;#062;&amp;#093;&amp;#032;&amp;#045;&amp;#062;&amp;#032;&amp;#101;&amp;#049;&amp;#032;&amp;#047;&amp;#032;&amp;#101;&amp;#050;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#124;&amp;#032;&amp;#091;&amp;#060;&amp;#032;&amp;#062;&amp;#093;&amp;#032;&amp;#045;&amp;#062;&amp;#032;&amp;#101;&amp;#049;&amp;#013;&amp;#010;&amp;#013;&amp;#010;&amp;#097;&amp;#110;&amp;#100;&amp;#032;&amp;#101;&amp;#120;&amp;#112;&amp;#114;&amp;#032;&amp;#061;&amp;#032;&amp;#112;&amp;#097;&amp;#114;&amp;#115;&amp;#101;&amp;#114;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#124;&amp;#032;&amp;#091;&amp;#060;&amp;#032;&amp;#101;&amp;#049;&amp;#032;&amp;#061;&amp;#032;&amp;#116;&amp;#101;&amp;#114;&amp;#109;&amp;#059;&amp;#032;&amp;#101;&amp;#032;&amp;#061;&amp;#032;&amp;#101;&amp;#120;&amp;#112;&amp;#114;&amp;#095;&amp;#097;&amp;#117;&amp;#120;&amp;#032;&amp;#101;&amp;#049;&amp;#032;&amp;#062;&amp;#093;&amp;#032;&amp;#045;&amp;#062;&amp;#032;&amp;#101;&amp;#013;&amp;#010;&amp;#097;&amp;#110;&amp;#100;&amp;#032;&amp;#101;&amp;#120;&amp;#112;&amp;#114;&amp;#095;&amp;#097;&amp;#117;&amp;#120;&amp;#032;&amp;#101;&amp;#049;&amp;#032;&amp;#061;&amp;#032;&amp;#112;&amp;#097;&amp;#114;&amp;#115;&amp;#101;&amp;#114;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#124;&amp;#032;&amp;#091;&amp;#060;&amp;#032;&amp;#039;&amp;#039;&amp;#043;&amp;#039;&amp;#059;&amp;#032;&amp;#101;&amp;#050;&amp;#032;&amp;#061;&amp;#032;&amp;#101;&amp;#120;&amp;#112;&amp;#114;&amp;#032;&amp;#062;&amp;#093;&amp;#032;&amp;#045;&amp;#062;&amp;#032;&amp;#101;&amp;#049;&amp;#032;&amp;#043;&amp;#032;&amp;#101;&amp;#050;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#124;&amp;#032;&amp;#091;&amp;#060;&amp;#032;&amp;#039;&amp;#039;&amp;#045;&amp;#039;&amp;#059;&amp;#032;&amp;#101;&amp;#050;&amp;#032;&amp;#061;&amp;#032;&amp;#101;&amp;#120;&amp;#112;&amp;#114;&amp;#032;&amp;#062;&amp;#093;&amp;#032;&amp;#045;&amp;#062;&amp;#032;&amp;#101;&amp;#049;&amp;#032;&amp;#045;&amp;#032;&amp;#101;&amp;#050;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#124;&amp;#032;&amp;#091;&amp;#060;&amp;#032;&amp;#062;&amp;#093;&amp;#032;&amp;#045;&amp;#062;&amp;#032;&amp;#101;&amp;#049;&amp;#013;&amp;#010;&amp;#013;&amp;#010;&amp;#108;&amp;#101;&amp;#116;&amp;#032;&amp;#114;&amp;#101;&amp;#099;&amp;#032;&amp;#115;&amp;#116;&amp;#097;&amp;#116;&amp;#101;&amp;#109;&amp;#101;&amp;#110;&amp;#116;&amp;#032;&amp;#061;&amp;#032;&amp;#112;&amp;#097;&amp;#114;&amp;#115;&amp;#101;&amp;#114;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#124;&amp;#032;&amp;#091;&amp;#060;&amp;#032;&amp;#101;&amp;#032;&amp;#061;&amp;#032;&amp;#101;&amp;#120;&amp;#112;&amp;#114;&amp;#059;&amp;#032;&amp;#039;&amp;#039;&amp;#059;&amp;#039;&amp;#059;&amp;#032;&amp;#039;&amp;#039;&amp;#046;&amp;#039;&amp;#059;&amp;#032;&amp;#115;&amp;#116;&amp;#114;&amp;#101;&amp;#097;&amp;#109;&amp;#032;&amp;#062;&amp;#093;&amp;#032;&amp;#045;&amp;#062;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#032;&amp;#032;&amp;#032;&amp;#032;&amp;#080;&amp;#114;&amp;#105;&amp;#110;&amp;#116;&amp;#102;&amp;#046;&amp;#112;&amp;#114;&amp;#105;&amp;#110;&amp;#116;&amp;#102;&amp;#032;&amp;#034;&amp;#061;&amp;#032;&amp;#037;&amp;#100;&amp;#092;&amp;#110;&amp;#037;&amp;#033;&amp;#034;&amp;#032;&amp;#101;&amp;#059;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#032;&amp;#032;&amp;#032;&amp;#032;&amp;#115;&amp;#116;&amp;#097;&amp;#116;&amp;#101;&amp;#109;&amp;#101;&amp;#110;&amp;#116;&amp;#032;&amp;#115;&amp;#116;&amp;#114;&amp;#101;&amp;#097;&amp;#109;&amp;#013;&amp;#010;&amp;#013;&amp;#010;&amp;#108;&amp;#101;&amp;#116;&amp;#032;&amp;#114;&amp;#101;&amp;#099;&amp;#032;&amp;#114;&amp;#101;&amp;#097;&amp;#100;&amp;#040;&amp;#041;&amp;#032;&amp;#061;&amp;#032;&amp;#109;&amp;#097;&amp;#116;&amp;#099;&amp;#104;&amp;#032;&amp;#105;&amp;#110;&amp;#112;&amp;#117;&amp;#116;&amp;#095;&amp;#099;&amp;#104;&amp;#097;&amp;#114;&amp;#032;&amp;#115;&amp;#116;&amp;#100;&amp;#105;&amp;#110;&amp;#032;&amp;#119;&amp;#105;&amp;#116;&amp;#104;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#124;&amp;#032;&amp;#039;&amp;#032;&amp;#039;&amp;#032;&amp;#124;&amp;#032;&amp;#039;&amp;#092;&amp;#116;&amp;#039;&amp;#032;&amp;#124;&amp;#032;&amp;#039;&amp;#092;&amp;#110;&amp;#039;&amp;#032;&amp;#045;&amp;#062;&amp;#032;&amp;#091;&amp;#060;&amp;#032;&amp;#114;&amp;#101;&amp;#097;&amp;#100;&amp;#040;&amp;#041;&amp;#032;&amp;#062;&amp;#093;&amp;#013;&amp;#010;&amp;#032;&amp;#032;&amp;#124;&amp;#032;&amp;#099;&amp;#032;&amp;#045;&amp;#062;&amp;#032;&amp;#091;&amp;#060;&amp;#032;&amp;#039;&amp;#099;&amp;#059;&amp;#032;&amp;#114;&amp;#101;&amp;#097;&amp;#100;&amp;#040;&amp;#041;&amp;#032;&amp;#062;&amp;#093;&amp;#013;&amp;#010;&amp;#013;&amp;#010;&amp;#108;&amp;#101;&amp;#116;&amp;#032;&amp;#040;&amp;#041;&amp;#032;&amp;#061;&amp;#032;&amp;#115;&amp;#116;&amp;#097;&amp;#116;&amp;#101;&amp;#109;&amp;#101;&amp;#110;&amp;#116;&amp;#032;&amp;#040;&amp;#114;&amp;#101;&amp;#097;&amp;#100;&amp;#040;&amp;#041;&amp;#041;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;This program may be compiled and run as follows:&lt;/p&gt;&lt;pre&gt;&lt;p&gt;&amp;#036;&amp;#032;&amp;#111;&amp;#099;&amp;#097;&amp;#109;&amp;#108;&amp;#099;&amp;#032;&amp;#045;&amp;#103;&amp;#032;&amp;#045;&amp;#100;&amp;#116;&amp;#121;&amp;#112;&amp;#101;&amp;#115;&amp;#032;&amp;#045;&amp;#112;&amp;#112;&amp;#032;&amp;#099;&amp;#097;&amp;#109;&amp;#108;&amp;#112;&amp;#052;&amp;#111;&amp;#032;&amp;#112;&amp;#097;&amp;#114;&amp;#115;&amp;#101;&amp;#114;&amp;#046;&amp;#109;&amp;#108;&amp;#032;&amp;#045;&amp;#111;&amp;#032;&amp;#112;&amp;#097;&amp;#114;&amp;#115;&amp;#101;&amp;#114;&amp;#013;&amp;#010;&amp;#036;&amp;#032;&amp;#046;&amp;#047;&amp;#112;&amp;#097;&amp;#114;&amp;#115;&amp;#101;&amp;#114;&amp;#013;&amp;#010;&amp;#049;&amp;#043;&amp;#050;&amp;#043;&amp;#051;&amp;#059;&amp;#046;&amp;#013;&amp;#010;&amp;#061;&amp;#032;&amp;#054;&amp;#013;&amp;#010;&amp;#049;&amp;#043;&amp;#050;&amp;#042;&amp;#051;&amp;#059;&amp;#046;&amp;#013;&amp;#010;&amp;#061;&amp;#032;&amp;#055;&amp;#013;&amp;#010;&amp;#049;&amp;#043;&amp;#050;&amp;#042;&amp;#051;&amp;#043;&amp;#052;&amp;#059;&amp;#046;&amp;#013;&amp;#010;&amp;#061;&amp;#032;&amp;#049;&amp;#049;&lt;/p&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-3126665801064924599?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/3126665801064924599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=3126665801064924599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3126665801064924599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3126665801064924599'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/02/recursive-descent-parsing-with-ocamls.html' title='Recursive descent parsing with OCaml&apos;s streams'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-7033332433266698225</id><published>2010-02-07T20:14:00.000-08:00</published><updated>2010-02-07T20:16:51.204-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='graph'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><title type='text'>Force-based network visualization</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob65"&gt;The OCaml Journal&lt;/a&gt; just published an article about the interactive visualization of networks:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"Visualizing a graph or network of interconnected nodes is a fascinating and important challenge with a wide variety of practical applications. This article looks at a simple but effective force-based approach to the visualization of networks and uses OpenGL to display the results in real-time as they emerge and GTK+ to provide interactive user control. The result is a compelling interactive animation of the layout algorithm as it progresses..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob65"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-7033332433266698225?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/7033332433266698225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=7033332433266698225' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7033332433266698225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7033332433266698225'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/02/force-based-network-visualization.html' title='Force-based network visualization'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-3143769735151581751</id><published>2010-01-30T11:09:00.000-08:00</published><updated>2010-01-30T11:43:51.567-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opa'/><category scheme='http://www.blogger.com/atom/ns#' term='product'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='mlstate'/><title type='text'>MLState release their first product: OPA</title><content type='html'>&lt;p&gt;The One Pot Application (OPA) from &lt;a href="http://www.mlstate.com/"&gt;MLState&lt;/a&gt; is a complete development platform for web applications and services:&lt;/p&gt;&lt;blockquote&gt;Development in OPA requires no plumbing. Applications developed with OPA are automatically checked for safety and security before they are executed. Applications developed with OPA are automatically (and provably) immune to cross-site scripting, to SQL injections and to most existing forms of attacks. And OPA provides language support for storage, communication between client and server (Ajax and Comet), concurrency, distribution, mobility, etc.&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://dutherenverseauborddelatable.wordpress.com/2009/11/28/we-call-it-opa/"&gt;Read more&lt;/a&gt; from MLState or watch &lt;a href="http://go2.wordpress.com/?id=725X1342&amp;amp;site=dutherenverseauborddelatable.wordpress.com&amp;amp;url=http%3A%2F%2Fvidiowiki.com%2Fwatch%2Ft53c29y%2F"&gt;the video&lt;/a&gt;.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-3143769735151581751?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/3143769735151581751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=3143769735151581751' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3143769735151581751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3143769735151581751'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/01/mlstate-release-their-first-product-opa.html' title='MLState release their first product: OPA'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-8453528158068220266</id><published>2010-01-26T11:00:00.000-08:00</published><updated>2010-01-26T11:02:22.433-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='ray tracer'/><category scheme='http://www.blogger.com/atom/ns#' term='threads'/><category scheme='http://www.blogger.com/atom/ns#' term='hlvm'/><category scheme='http://www.blogger.com/atom/ns#' term='scalability'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel'/><title type='text'>High-performance parallel programming with HLVM</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob64"&gt;The OCaml Journal&lt;/a&gt; just published an article about HLVM:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"This article describes how a global adjustment of the calling convention brings the performance of the multicore-capable HLVM within 17% of its original single-threaded performance. A simple parallelization of the new ray tracer benchmark is then described that obtains a substantial 6.3× speedup on 8 cores, demonstrating the potential of the new design for high-performance parallel computing..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob64"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-8453528158068220266?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/8453528158068220266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=8453528158068220266' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8453528158068220266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8453528158068220266'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/01/high-performance-parallel-programming.html' title='High-performance parallel programming with HLVM'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-5917191102850039062</id><published>2010-01-26T10:29:00.000-08:00</published><updated>2010-01-26T11:00:29.044-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mylife'/><category scheme='http://www.blogger.com/atom/ns#' term='jobs'/><category scheme='http://www.blogger.com/atom/ns#' term='citrix'/><title type='text'>More OCaml jobs</title><content type='html'>&lt;p&gt;The world's second largest OCaml employer (Citrix) have &lt;a href="http://groups.google.com/group/fa.caml/browse_thread/thread/aaf2dbb80d8b3d8e"&gt;announced&lt;/a&gt; that they are hiring more OCaml programmers in the UK to maintain and develop their code base that has grown to hundreds of thousands of lines of OCaml code.&lt;/p&gt;&lt;p&gt;Martin Jambon also &lt;a href="http://groups.google.com/group/fa.caml/msg/d790d1f01fd44510"&gt;announced&lt;/a&gt; recently that MyLife (formerly Wink) are also looking for an OCaml developer.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-5917191102850039062?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/5917191102850039062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=5917191102850039062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/5917191102850039062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/5917191102850039062'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/01/more-ocaml-jobs.html' title='More OCaml jobs'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-1753289194373195365</id><published>2010-01-20T06:08:00.000-08:00</published><updated>2010-01-20T06:11:15.437-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='polymorphic variants'/><category scheme='http://www.blogger.com/atom/ns#' term='closures'/><category scheme='http://www.blogger.com/atom/ns#' term='data representation'/><category scheme='http://www.blogger.com/atom/ns#' term='int'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='allocation'/><category scheme='http://www.blogger.com/atom/ns#' term='memory'/><category scheme='http://www.blogger.com/atom/ns#' term='heap'/><category scheme='http://www.blogger.com/atom/ns#' term='functors'/><category scheme='http://www.blogger.com/atom/ns#' term='bounds checking'/><title type='text'>Low-level optimization tips and tricks: part 4</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob63"&gt;The OCaml Journal&lt;/a&gt; just published an article about optimization:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"The OCaml programming language is unusually well suited to high-performance computing among functional programming languages because it provides a highly efficient code generator with a performant run-time and garbage collector. This makes it feasible to write high performance programs entirely in OCaml without having to drop to lower-level languages like C and Fortran for performance-critical sections of code. This article focuses on the internal representation of data structures. An overview of OCaml's data representation strategy is given. Tools to examine values in the heap, including OCaml's own Obj module, are described. Then several approaches to optimization that are related to data representations are covered, including closures, polymorphic variants, bounds checking, functors and integer arithmetic..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob63"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-1753289194373195365?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/1753289194373195365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=1753289194373195365' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1753289194373195365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1753289194373195365'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/01/low-level-optimization-tips-and-tricks.html' title='Low-level optimization tips and tricks: part 4'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-8792264991790915516</id><published>2010-01-20T05:34:00.000-08:00</published><updated>2010-01-20T05:50:30.291-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='library'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='batteries'/><title type='text'>OCaml Batteries included 1.0.0 released</title><content type='html'>&lt;p&gt;The Batteries Included project that has intended to provide an extensive defacto-standard library for OCaml for over two years has &lt;a href="http://groups.google.com/group/fa.caml/msg/6782c880d213a177"&gt;finally reached version 1&lt;/a&gt;!&lt;/p&gt;&lt;p&gt;This library includes a wealth of indispensable features with extensive documentation covering topics such as:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Mutable and immutable data structures (reusable AVL trees, bit sets, string buffers, extensible arrays, lazy lists, polymorphic sets and maps, ropes).&lt;/li&gt;&lt;li&gt;Mathematics (extensive complex number support).&lt;/li&gt;&lt;li&gt;Abstractions (enumerations).&lt;/li&gt;&lt;li&gt;File and IO related helper functions.&lt;/li&gt;&lt;li&gt;Pretty printers and functional unparsers.&lt;/li&gt;&lt;li&gt;Memory management helper functions.&lt;/li&gt;&lt;li&gt;Consistent interfaces/signatures.&lt;/li&gt;&lt;li&gt;Unicode support.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Download your copy &lt;a href="https://forge.ocamlcore.org/frs/download.php/346/batteries-1.0.0.tar.gz"&gt;here&lt;/a&gt;!&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-8792264991790915516?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/8792264991790915516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=8792264991790915516' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8792264991790915516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8792264991790915516'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/01/ocaml-batteries-included-100-released.html' title='OCaml Batteries included 1.0.0 released'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4844756661240038971</id><published>2010-01-03T09:42:00.000-08:00</published><updated>2010-01-03T09:53:11.636-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='posix'/><category scheme='http://www.blogger.com/atom/ns#' term='garbage collector'/><category scheme='http://www.blogger.com/atom/ns#' term='threads'/><category scheme='http://www.blogger.com/atom/ns#' term='hlvm'/><category scheme='http://www.blogger.com/atom/ns#' term='mutex'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel'/><category scheme='http://www.blogger.com/atom/ns#' term='llvm'/><title type='text'>Garbage collecting multithreaded programs</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob62"&gt;The OCaml Journal&lt;/a&gt; just published an article about HLVM:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"Executing threads in parallel is the cornerstone of efficient parallel programming on shared-memory machines including today's multicores. This article describes how a simple stop-the-world garbage collector can be implemented in HLVM, allowing code generated from an OCaml program to leverage multicores easily..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob62"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4844756661240038971?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4844756661240038971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4844756661240038971' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4844756661240038971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4844756661240038971'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/01/garbage-collecting-multithreaded.html' title='Garbage collecting multithreaded programs'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-173633726812714443</id><published>2010-01-03T09:37:00.000-08:00</published><updated>2010-01-03T09:41:29.999-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='gis'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><category scheme='http://www.blogger.com/atom/ns#' term='geographic information systems'/><category scheme='http://www.blogger.com/atom/ns#' term='binary format'/><title type='text'>Parsing and visualizing binary Geographic Information System data</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob61"&gt;The OCaml Journal&lt;/a&gt; just published an article about parsing binary data:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"Detailed vector descriptions of worldwide geographical data are freely available in the Shapefile format. This article describes how polygonal data can be parsed from the binary Shapefile format and visualized using OpenGL and GLU easily and efficiently with OCaml. The result is a simple program that can be used as the basis for a wide variety of Geographic Information System (GIS) applications from cartography to climatology..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob61"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-173633726812714443?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/173633726812714443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=173633726812714443' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/173633726812714443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/173633726812714443'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2010/01/parsing-and-visualizing-binary.html' title='Parsing and visualizing binary Geographic Information System data'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-5865681930429503517</id><published>2009-12-21T18:42:00.000-08:00</published><updated>2009-12-21T20:17:40.205-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='formal verification'/><category scheme='http://www.blogger.com/atom/ns#' term='intel'/><category scheme='http://www.blogger.com/atom/ns#' term='correctness'/><category scheme='http://www.blogger.com/atom/ns#' term='floating point'/><title type='text'>Formally verifying Intel's floating-point arithmetic using OCaml</title><content type='html'>&lt;p&gt;When a bug in floating point division on the Pentium processor was discovered, Intel had to set aside $475,000,000 to cover the cost of replacing the faulty hardware. To minimize the risk of this happening again, Intel now formally verify their floating point hardware using theorem-proving software written in &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cl.cam.ac.uk/~jrh13/"&gt;John Harrison&lt;/a&gt; of Intel has kindly made &lt;a href="http://www.cl.cam.ac.uk/~jrh13/slides/jnao-02jun06/slides.pdf"&gt;the fascinating slides from his lecture&lt;/a&gt; about Intel's use of OCaml freely available.&lt;/p&gt;&lt;p&gt;John has a new book out called the &lt;a href="http://www.cambridge.org/9780521899574"&gt;Handbook of Practical Logic and Automated Reasoning&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-5865681930429503517?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/5865681930429503517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=5865681930429503517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/5865681930429503517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/5865681930429503517'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/12/formally-verifying-intels-floating.html' title='Formally verifying Intel&apos;s floating-point arithmetic using OCaml'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-3898712923225314193</id><published>2009-11-30T16:16:00.000-08:00</published><updated>2009-12-01T09:41:36.810-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mark-sweep'/><category scheme='http://www.blogger.com/atom/ns#' term='garbage collector'/><category scheme='http://www.blogger.com/atom/ns#' term='threads'/><category scheme='http://www.blogger.com/atom/ns#' term='hlvm'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel gc'/><category scheme='http://www.blogger.com/atom/ns#' term='mutex'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel'/><category scheme='http://www.blogger.com/atom/ns#' term='stop-the-world'/><title type='text'>Parallel programming from OCaml using HLVM</title><content type='html'>&lt;p&gt;Our &lt;a href="http://hlvm.forge.ocamlcore.org/"&gt;HLVM&lt;/a&gt; project has hit another milestone with new support for parallel programming using threads.&lt;/p&gt;&lt;p&gt;HLVM threads and mutexes are a thin wrapper over POSIX threads. The mark+sweep garbage collector now uses a stop-the-world algorithm to suspend all mutator threads while a single thread traverses the entire heap marking and then traverses all allocated values reclaiming unmarked values. This is a very simple design and an unoptimized implementation but it already makes it possible to write parallel programs passing shared mutable state between threads by reference from OCaml.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-3898712923225314193?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/3898712923225314193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=3898712923225314193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3898712923225314193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3898712923225314193'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/11/parallel-programming-from-ocaml-using.html' title='Parallel programming from OCaml using HLVM'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-6181959829417360478</id><published>2009-11-27T11:50:00.000-08:00</published><updated>2009-11-27T11:55:05.350-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='purely functional data structures'/><category scheme='http://www.blogger.com/atom/ns#' term='depth-first search'/><category scheme='http://www.blogger.com/atom/ns#' term='2d'/><category scheme='http://www.blogger.com/atom/ns#' term='maze'/><category scheme='http://www.blogger.com/atom/ns#' term='randomized algorithm'/><title type='text'>Generating and visualizing 2D mazes</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob60"&gt;The OCaml Journal&lt;/a&gt; just published an article about mazes:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"Maze generation is a remarkably complex and diverse subject that essentially falls into the category of network or graph theory but is most often seen in the context of games and puzzles. The characteristics that make a maze interesting for humans to try to navigate are subjective and not easily defined and, consequently, the design and implementation of an automatic maze generator is as much an art as it is a science. This article describes the design and implementation of a simple but effective maze generation algorithm including OpenGL-based visualization. The algorithm is elegantly expressed in terms of recursive functions and purely functional data structures..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob60"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-6181959829417360478?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/6181959829417360478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=6181959829417360478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6181959829417360478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6181959829417360478'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/11/generating-and-visualizing-2d-mazes.html' title='Generating and visualizing 2D mazes'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-3792071707503769466</id><published>2009-11-11T08:20:00.000-08:00</published><updated>2009-11-11T08:23:09.965-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='queens problem'/><category scheme='http://www.blogger.com/atom/ns#' term='logic programming'/><category scheme='http://www.blogger.com/atom/ns#' term='recursion'/><category scheme='http://www.blogger.com/atom/ns#' term='garbage collector'/><category scheme='http://www.blogger.com/atom/ns#' term='knights tour'/><category scheme='http://www.blogger.com/atom/ns#' term='lists'/><title type='text'>Logic programming: n-queens and knight's tour problems</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob59"&gt;The OCaml Journal&lt;/a&gt; just published an article about AI:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"Logic programming is a paradigm often seen in problem solving and AI. This article introduces the subject of logic programming and explains why the OCaml language and implementation are ideally suited to these kinds of applications, using the familiar examples of solving the n-queens problem and finding a knights tour..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob59"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-3792071707503769466?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/3792071707503769466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=3792071707503769466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3792071707503769466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3792071707503769466'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/11/logic-programming-n-queens-and-knights.html' title='Logic programming: n-queens and knight&apos;s tour problems'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-6733327171464069867</id><published>2009-10-25T09:49:00.000-07:00</published><updated>2009-10-25T09:51:15.004-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mark-sweep'/><category scheme='http://www.blogger.com/atom/ns#' term='garbage collector'/><category scheme='http://www.blogger.com/atom/ns#' term='hlvm'/><category scheme='http://www.blogger.com/atom/ns#' term='llvm'/><title type='text'>LLVM 2.6 support and a new HLVM garbage collector</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob58"&gt;The OCaml Journal&lt;/a&gt; just published an article about LLVM and HLVM:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"This article describes the changes required to bring HLVM up to date with respect to the new LLVM 2.6 release as well as a new garbage collector design. The previous collector mapped pointers onto their mark state via a hash table. This update uses the more conventional design of placing the mark state in the heap, using a mark-sweep garbage collector to reclaim unreachable values. The new collector is simpler and offers different performance characteristics..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob58"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-6733327171464069867?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/6733327171464069867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=6733327171464069867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6733327171464069867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6733327171464069867'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/10/llvm-26-support-and-new-hlvm-garbage.html' title='LLVM 2.6 support and a new HLVM garbage collector'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-6464542745141444857</id><published>2009-10-25T09:46:00.000-07:00</published><updated>2009-10-25T09:48:55.812-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='garbage collector'/><category scheme='http://www.blogger.com/atom/ns#' term='oc4mc'/><category scheme='http://www.blogger.com/atom/ns#' term='compiler'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel'/><title type='text'>OCaml4Multicore (oc4mc)</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob57"&gt;The OCaml Journal&lt;/a&gt; just published an article about the new parallel OCaml implementation:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"OCaml4Multicore is a modified OCaml compiler that allows POSIX threads to run in parallel. This is a major development that makes shared-memory parallel programming much easier and also has the potential to make it far more efficient for many important appications. This article introduces the subject of thread-based parallel programming, explains why it is difficult to facilitate in OCaml-like language implementations and examines the performance characteristics of oc4mc..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob57"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-6464542745141444857?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/6464542745141444857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=6464542745141444857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6464542745141444857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6464542745141444857'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/10/ocaml4multicore-oc4mc.html' title='OCaml4Multicore (oc4mc)'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-8966263767251222284</id><published>2009-09-24T07:26:00.000-07:00</published><updated>2009-09-24T14:11:03.369-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='pythagoras'/><category scheme='http://www.blogger.com/atom/ns#' term='geometry'/><title type='text'>The Graphics module: Pythagoras Tree</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob56"&gt;The OCaml Journal&lt;/a&gt; just published an article about the built-in Graphics module:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"The OCaml distribution includes a Graphics module that provides a set of easy-to-use portable drawing primitives ideal for educational purposes and experimentation. This article describes the recursive construction of some digital art built around Pythagoras' triangle. The results are visualized interactively using the Graphics module..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob56"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-8966263767251222284?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/8966263767251222284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=8966263767251222284' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8966263767251222284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8966263767251222284'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/09/graphics-module-pythagoras-tree.html' title='The Graphics module: Pythagoras Tree'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-8148429515878992468</id><published>2009-09-24T05:08:00.000-07:00</published><updated>2009-09-24T05:19:08.400-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='parallel gc'/><category scheme='http://www.blogger.com/atom/ns#' term='oc4mc'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel'/><title type='text'>OCaml finally goes multicore</title><content type='html'>&lt;p&gt;Philippe Wang made the exciting &lt;a href="http://groups.google.com/group/fa.caml/msg/991e0411b19dc2eb"&gt;announcement&lt;/a&gt; recently that the first working version of &lt;a href="http://www.algo-prog.info/ocmc/"&gt;oc4mc&lt;/a&gt;, OCaml with a new parallel garbage collector, has been released. This revolutionary development allows threads in OCaml programs to be executed in parallel for the first time, making it possible to leverage multicores efficiently in OCaml programs.&lt;/p&gt;&lt;p&gt;We can confirm that &lt;a href="http://groups.google.com/group/fa.caml/msg/ae7580b800a7eb7e"&gt;oc4mc is working on one of our 8-core machines&lt;/a&gt; and shows excellent speedups for simple multithreaded numerical computations.&lt;/p&gt;&lt;p&gt;The next major developments in this area will doubtless be better libraries for parallel programming in OCaml, the adoption of oc4mc in the major apt repositories used by the majority of Linux programmers and finally the creation of literature describing the design and characteristics of this implementation.&lt;/p&gt;&lt;p&gt;Congratulations to the team (Mathias Bourgoin, Adrien Jonquet, Emmanuel Chailloux, Benjamin Canou and Philippe Wang) for making this happen and thanks to &lt;a href="http://www.janestreet.com/"&gt;Jane St. Capital&lt;/a&gt; for making the project possible!&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-8148429515878992468?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/8148429515878992468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=8148429515878992468' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8148429515878992468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8148429515878992468'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/09/ocaml-finally-goes-multicore.html' title='OCaml finally goes multicore'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-7019070920199946072</id><published>2009-09-24T04:54:00.000-07:00</published><updated>2009-09-24T04:56:28.376-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mesh'/><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='stanford bunny'/><title type='text'>Stanford Bunny</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob55"&gt;The OCaml Journal&lt;/a&gt; just published an article about mesh visualization:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"The Stanford bunny is a 3D mesh of triangles commonly used as a benchmark for computer graphics applications. This article presents an 85-line OCaml program that uses OpenGL to render the Stanford bunny in real time: the mesh is represented as a vertex array and an index array. The vertex array is a sequence of 3D vertex coordinates. The index array is a sequence of triples of indices into the vertex array referring to the three vertices of each triangle. Normals are generated independently for each vertex as the sum of the normals of every triangular face sharing each vertex, in order to provide smooth shading..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob55"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-7019070920199946072?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/7019070920199946072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=7019070920199946072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7019070920199946072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7019070920199946072'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/09/stanford-bunny.html' title='Stanford Bunny'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-8459609888712738574</id><published>2009-09-24T04:53:00.000-07:00</published><updated>2009-09-24T04:54:29.482-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graph theory'/><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='atomic structure'/><title type='text'>Traversing networks: the nth-nearest neighbor</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob54"&gt;The OCaml Journal&lt;/a&gt; just published an article about graph theory:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"Graph theory has a great many practical applications ranging from compiler internals to the study of the structural characteristics of materials. This article describes the design and implementation of a program that finds the nth-nearest neighbors of a given vertex in an infinite graph. This problem is of interest in the context of atomic structures..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob54"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-8459609888712738574?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/8459609888712738574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=8459609888712738574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8459609888712738574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8459609888712738574'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/09/traversing-networks-nth-nearest.html' title='Traversing networks: the nth-nearest neighbor'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-8391412148607301508</id><published>2009-08-24T01:35:00.001-07:00</published><updated>2009-08-24T01:46:56.626-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uniform representation'/><category scheme='http://www.blogger.com/atom/ns#' term='major heap'/><category scheme='http://www.blogger.com/atom/ns#' term='garbage collector'/><category scheme='http://www.blogger.com/atom/ns#' term='minor heap'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml internals'/><title type='text'>OCaml internals</title><content type='html'>&lt;p&gt;Richard Jones has written an excellent series of blog posts about the internals of the OCaml implementation:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://rwmj.wordpress.com/2009/08/04/ocaml-internals/"&gt;Uniform representation of values.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rwmj.wordpress.com/2009/08/05/ocaml-internals-part-2-strings-and-other-types/"&gt;Strings and other blocks.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rwmj.wordpress.com/2009/08/06/ocaml-internals-part-3-the-minor-heap/"&gt;The Minor heap.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rwmj.wordpress.com/2009/08/07/ocaml-internals-part-4-the-major-heap/"&gt;The Major heap.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rwmj.wordpress.com/2009/08/08/ocaml-internals-part-5-garbage-collection/"&gt;Garbage collector: write barriers and collection phases.&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-8391412148607301508?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/8391412148607301508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=8391412148607301508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8391412148607301508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8391412148607301508'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/08/ocaml-internals.html' title='OCaml internals'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-6963087472283726160</id><published>2009-08-09T11:00:00.001-07:00</published><updated>2009-08-09T11:03:01.740-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deletion'/><category scheme='http://www.blogger.com/atom/ns#' term='metric'/><category scheme='http://www.blogger.com/atom/ns#' term='dynamic programming'/><category scheme='http://www.blogger.com/atom/ns#' term='levenshtein'/><category scheme='http://www.blogger.com/atom/ns#' term='edit distance'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='string'/><category scheme='http://www.blogger.com/atom/ns#' term='substitution'/><category scheme='http://www.blogger.com/atom/ns#' term='insertion'/><category scheme='http://www.blogger.com/atom/ns#' term='memoization'/><title type='text'>Dynamic programming: Levenshtein edit distance</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob53"&gt;The OCaml Journal&lt;/a&gt; just published an article about dynamic programming and memoization:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"Levenshtein distance is a metric used to measure the amount of difference between a pair of sequences in terms of the number of insertions, deletions and substitutions required to get from one sequence to the other. Computing the Levenshtein distance is an interesting problem in dynamic programming with many practical applications including spell checkers and the study of DNA in bioinformatics. This article describes how the basic algorithm may be implemented and then optimized, including the use of both generic and specialized memoization..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob53"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-6963087472283726160?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/6963087472283726160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=6963087472283726160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6963087472283726160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6963087472283726160'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/08/dynamic-programming-levenshtein-edit.html' title='Dynamic programming: Levenshtein edit distance'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4811742676729700586</id><published>2009-07-25T07:08:00.000-07:00</published><updated>2009-07-25T07:13:11.838-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bzip2'/><category scheme='http://www.blogger.com/atom/ns#' term='fork'/><category scheme='http://www.blogger.com/atom/ns#' term='bwt'/><category scheme='http://www.blogger.com/atom/ns#' term='burrows wheeler'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel'/><category scheme='http://www.blogger.com/atom/ns#' term='shared memory'/><category scheme='http://www.blogger.com/atom/ns#' term='preconditioner'/><category scheme='http://www.blogger.com/atom/ns#' term='data compression'/><title type='text'>Optimizing the Burrows-Wheeler Transform</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob52"&gt;The OCaml Journal&lt;/a&gt; just published an article about parallelized data compression:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"The Burrows-Wheeler Transform (BWT) is one of the few preconditioners used in data compression and, in particular, is the core of the popular bzip2 compression utility. This article describes a simple 19-line implementation of the BWT in OCaml and progressively optimizes the implementation to use a customized quicksort then distributed fork-based parallelism and finally shared-memory parallelism. On 8 cores, the final optimized implementation is over 65&amp;#215; faster than the original..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob52"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4811742676729700586?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4811742676729700586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4811742676729700586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4811742676729700586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4811742676729700586'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/07/optimizing-burrows-wheeler-transform.html' title='Optimizing the Burrows-Wheeler Transform'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4475399340516379012</id><published>2009-07-10T21:35:00.000-07:00</published><updated>2009-07-10T21:38:24.306-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='least squares'/><category scheme='http://www.blogger.com/atom/ns#' term='QR decomposition'/><category scheme='http://www.blogger.com/atom/ns#' term='numerical methods'/><category scheme='http://www.blogger.com/atom/ns#' term='linear algebra'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='profiling'/><category scheme='http://www.blogger.com/atom/ns#' term='best fit'/><title type='text'>QR decomposition: a case study in profiling and optimization</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob51"&gt;The OCaml Journal&lt;/a&gt; just published an article about high-performance numerical methods:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"The challenge of finding the least squares best fit of a linear sum of functions is a common problem in regression. Linear algebra provides a powerful and general solution by expressing this problem in terms of matrices and then computing the QR decomposition in order to solve the matrix equation. This article describes a remarkably simple implementation of QR decomposition in OCaml and uses it as a case study for profiling and optimization..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob51"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4475399340516379012?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4475399340516379012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4475399340516379012' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4475399340516379012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4475399340516379012'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/07/qr-decomposition-case-study-in.html' title='QR decomposition: a case study in profiling and optimization'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4200652768546300194</id><published>2009-06-24T17:18:00.001-07:00</published><updated>2009-06-24T17:25:31.914-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hlvm'/><title type='text'>HLVM documentation now on-line</title><content type='html'>&lt;p&gt;To celebrate &lt;a href="http://www.ffconsultancy.com/ocaml/hlvm/?ob"&gt;HLVM&lt;/a&gt; entering the &lt;a href="http://forge.ocamlcore.org/top/toplist.php?type=downloads"&gt;top 10 most downloaded projects on OCamlForge&lt;/a&gt;, we have created &lt;a href="http://www.ffconsultancy.com/ocaml/hlvm/?ob"&gt;a new home page for the project&lt;/a&gt; that includes a description of the motivation behind the creation of HLVM and a link to the &lt;a href="http://www.ffconsultancy.com/ocaml/hlvm/docs/"&gt;ocamldoc-generated documentation&lt;/a&gt; for the &lt;a href="http://www.ffconsultancy.com/ocaml/hlvm/?ob"&gt;HLVM&lt;/a&gt; virtual machine and well as references to the growing number of articles about &lt;a href="http://www.ffconsultancy.com/ocaml/hlvm/?ob"&gt;HLVM&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;We are also starting a consortium of industrial users to provide financial backing for the HLVM project in order to accelerate its development and we are offering technical support at competitive rates.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4200652768546300194?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4200652768546300194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4200652768546300194' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4200652768546300194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4200652768546300194'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/06/hlvm-documentation-now-on-line.html' title='HLVM documentation now on-line'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4973762218483204297</id><published>2009-06-23T19:24:00.000-07:00</published><updated>2009-06-23T19:36:56.744-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lexing'/><category scheme='http://www.blogger.com/atom/ns#' term='tuples'/><category scheme='http://www.blogger.com/atom/ns#' term='parsing'/><category scheme='http://www.blogger.com/atom/ns#' term='compiler'/><category scheme='http://www.blogger.com/atom/ns#' term='virtual machine'/><title type='text'>Compiler development: part 1</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob50"&gt;The OCaml Journal&lt;/a&gt; just published an article about compilers:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"This article is the first in a series describing the design and implementation of a complete compiler for a non-trivial language using the freely-available HLVM project described in previous articles. The representation of types, patterns and expressions, the lexer, parser and Read-Evaluate-Print-Loop (REPL) with JIT compilation are described in this article..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob50"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4973762218483204297?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4973762218483204297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4973762218483204297' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4973762218483204297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4973762218483204297'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/06/compiler-development-part-1.html' title='Compiler development: part 1'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4133839244488830085</id><published>2009-06-21T14:19:00.001-07:00</published><updated>2009-06-22T13:49:36.791-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hlvm'/><category scheme='http://www.blogger.com/atom/ns#' term='calculator'/><category scheme='http://www.blogger.com/atom/ns#' term='compiler'/><title type='text'>New HLVM examples</title><content type='html'>&lt;p&gt;The &lt;a href="https://forge.ocamlcore.org/projects/hlvm/"&gt;High-Level Virtual Machine (HLVM) project&lt;/a&gt; aims to combine the expressiveness of functional programming languages, the performance of C and the interoperability and libraries of an industrial-strength virtual machine. This project was recently updated to include two new example programs built upon HLVM:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;A calculator that JIT compiles arithmetic expressions in order to evaluate them, written in only 28 lines of OCaml!&lt;/li&gt;&lt;li&gt;A compiler for a tiny caml-like language that handles unit, char, int, float and tuple types along with some example programs written in only 228 lines of OCaml!&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;These working examples should help HLVM users. In particular, the design and implementation of the second example, a complete compiler, will be described in the next &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml Journal&lt;/a&gt; article.&lt;/p&gt;&lt;p&gt;Check out &lt;a href="https://forge.ocamlcore.org/plugins/scmsvn/viewcvs.php/?root=hlvm"&gt;HLVM's SVN repository&lt;/a&gt; now with:&lt;/p&gt;&lt;p&gt;&lt;tt&gt;svn checkout svn://svn.forge.ocamlcore.org/svnroot/hlvm&lt;/tt&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4133839244488830085?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4133839244488830085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4133839244488830085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4133839244488830085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4133839244488830085'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/06/new-hlvm-examples.html' title='New HLVM examples'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4590306499326686615</id><published>2009-06-08T18:38:00.000-07:00</published><updated>2009-06-08T18:41:19.839-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='sparse matrix'/><category scheme='http://www.blogger.com/atom/ns#' term='singular value decomposition'/><category scheme='http://www.blogger.com/atom/ns#' term='linear algebra'/><category scheme='http://www.blogger.com/atom/ns#' term='svd'/><category scheme='http://www.blogger.com/atom/ns#' term='eigenvalues'/><category scheme='http://www.blogger.com/atom/ns#' term='camlimages'/><title type='text'>Visualizing the Singular Value Decomposition</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob49"&gt;The OCaml Journal&lt;/a&gt; just published an article about the illustration of matrix computations:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"Singular Value Decomposition (SVD) is an important algorithm from linear algebra that decomposes a matrix into the product of three simpler matrices. The resulting decomposition has several applications. This article describes the design and implementation of an OCaml program that computes the SVD of an image and uses it to create a lossy compression algorithm with controllable quality. This involves numerical methods for computing the eigenvalues of real symmetric matrices and interactive visualization of the result as a GTK application using the camlimages library to load images from file..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob49"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4590306499326686615?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4590306499326686615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4590306499326686615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4590306499326686615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4590306499326686615'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/06/visualizing-singular-value.html' title='Visualizing the Singular Value Decomposition'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-7609984129505112029</id><published>2009-05-23T06:08:00.000-07:00</published><updated>2009-05-23T06:12:20.599-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='top-level'/><category scheme='http://www.blogger.com/atom/ns#' term='parser'/><category scheme='http://www.blogger.com/atom/ns#' term='camlp4'/><category scheme='http://www.blogger.com/atom/ns#' term='pretty printer'/><category scheme='http://www.blogger.com/atom/ns#' term='recursive descent'/><title type='text'>Pretty printing with the Format module and Camlp4 stream parsers</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob48"&gt;The OCaml Journal&lt;/a&gt; just published an article about pretty printing and parsing:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"The OCaml programming language has evolved a rich variety of libraries and tools over the past thirteen years. The domain of metaprogramming is particularly well supplied. This article describes the basic design of OCaml's Format module which provides customizable formatting and, in particular, user-extensible pretty printing for the top-level as well as the stream parsers provided by camlp4..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob48"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-7609984129505112029?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/7609984129505112029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=7609984129505112029' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7609984129505112029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7609984129505112029'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/05/pretty-printing-with-format-module-and.html' title='Pretty printing with the Format module and Camlp4 stream parsers'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4015829676707755746</id><published>2009-05-09T07:14:00.000-07:00</published><updated>2009-05-09T07:16:22.786-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lzw'/><category scheme='http://www.blogger.com/atom/ns#' term='hash table'/><category scheme='http://www.blogger.com/atom/ns#' term='lempel ziv welch'/><category scheme='http://www.blogger.com/atom/ns#' term='trie'/><category scheme='http://www.blogger.com/atom/ns#' term='data compression'/><title type='text'>Lempel-Ziv-Welch data compression</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob47"&gt;The OCaml Journal&lt;/a&gt; just published an article about data compression:&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;em&gt;"LZW is a simple and effective dictionary-based data compression algorithm originally published in 1984 and subsequently used in several prominent places including the GIF image format. This article describes simple purely functional implementations of the compression and corresponding decompression algorithms before examining the optimization of these implementations via the selective inclusion of mutable data structures..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob47"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4015829676707755746?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4015829676707755746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4015829676707755746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4015829676707755746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4015829676707755746'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/05/lempel-ziv-welch-data-compression.html' title='Lempel-Ziv-Welch data compression'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4735006653629636934</id><published>2009-04-24T19:49:00.000-07:00</published><updated>2009-04-24T19:50:20.763-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml journal'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Review: The OCaml Journal</title><content type='html'>&lt;p&gt;Daniel de Kok has kindly written a &lt;a href="http://blog.danieldk.org/post/2009/04/09/OCaml-Journal"&gt;review&lt;/a&gt; of &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;The OCaml Journal&lt;/a&gt;. He says:&lt;/p&gt;&lt;div class="post-content"&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"Alp Mestan has written a &lt;a href="http://blog.mestan.fr/2009/04/09/review-of-ocaml-journal-articles-low-level-optimization-tips-and-tricks/"&gt; short review&lt;/a&gt; of the &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml Journal&lt;/a&gt;. I can only echo his recommendation. I have just started learning OCaml, and can use as much exposure as possible to a variety of interesting problems and solutions. Last week I subscribed to the OCaml Journal, and that has been a very good decision.&lt;/p&gt; &lt;p&gt;Subscribers have access to the archive of previous articles, which are very diverse, both in subject and level. As a newcomer, I have enjoyed the articles about pattern matching, the OCaml standard library, and object-oriented programming in OCaml. I have started looking into the articles about combinators, parser combinators, and optimization. All articles are written in a clear manner and complemented by fun examples and plenty of code to tinker with. If you enjoy OCaml, and want to learn more by theory and practice, I can wholeheartedly recommend the OCaml Journal."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Great to see another happy customer. Thanks Daniel!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4735006653629636934?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4735006653629636934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4735006653629636934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4735006653629636934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4735006653629636934'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/04/review-ocaml-journal_24.html' title='Review: The OCaml Journal'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-7115940511193614861</id><published>2009-04-24T19:44:00.000-07:00</published><updated>2009-04-24T19:47:53.765-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='lazy pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='purely functional data structures'/><category scheme='http://www.blogger.com/atom/ns#' term='persistence'/><category scheme='http://www.blogger.com/atom/ns#' term='lazy'/><category scheme='http://www.blogger.com/atom/ns#' term='streams'/><category scheme='http://www.blogger.com/atom/ns#' term='queues'/><category scheme='http://www.blogger.com/atom/ns#' term='lists'/><category scheme='http://www.blogger.com/atom/ns#' term='catenable lists'/><title type='text'>Purely functional data structures: streams, queues and catenable lists</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob46"&gt;The OCaml Journal&lt;/a&gt; just published an article about the implementation of efficient purely functional data structures using OCaml 3.11 and its new lazy patterns:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"This article is the first in a series describing the design and implementation of some very useful purely functional data structures. Lazy streams, batched and real-time queues and lists with O(1) concatenation are described in detail. In particular, functors are used extensively to provide elegant parameterization over data structures and some of the new features in OCaml 3.11 are used to improve both performance and clarity..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob46"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-7115940511193614861?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/7115940511193614861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=7115940511193614861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7115940511193614861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7115940511193614861'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/04/purely-functional-data-structures.html' title='Purely functional data structures: streams, queues and catenable lists'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-5784398857509735504</id><published>2009-04-09T08:54:00.000-07:00</published><updated>2009-04-09T09:02:16.845-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml journal'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Review: The OCaml Journal</title><content type='html'>&lt;p&gt;Alp Mestan has kindly written a review of &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;The OCaml Journal&lt;/a&gt; and, in particular, our series of articles about low-level optimization. He says "These articles have really helped me". The full review is &lt;a href="http://blog.mestan.fr/2009/04/09/review-of-ocaml-journal-articles-low-level-optimization-tips-and-tricks/"&gt;available here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-5784398857509735504?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/5784398857509735504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=5784398857509735504' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/5784398857509735504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/5784398857509735504'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/04/review-ocaml-journal.html' title='Review: The OCaml Journal'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-1103874274060189066</id><published>2009-04-09T08:24:00.000-07:00</published><updated>2009-04-09T08:53:18.981-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='lazy pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='3.11'/><title type='text'>OCaml 3.11 moves into Debian testing!</title><content type='html'>&lt;p&gt;The highly-anticipated &lt;a href="http://caml.inria.fr/pub/distrib/ocaml-3.11/notes/Changes"&gt;OCaml 3.11&lt;/a&gt; just made it into the current &lt;a href="http://packages.debian.org/squeeze/ocaml-nox"&gt;Debian testing distribution&lt;/a&gt;, codename Squeeze. Debian is a famously-robust Linux distribution with a superb packaging system and an army of expert package maintainers. Debian-based distributions such as Ubuntu account for over 70% of all Linux users. So this is excellent news for the tens of thousands of OCaml programmers who rely on Debian packages for their OCaml distribution!&lt;/p&gt;&lt;p&gt;This new version of OCaml includes several important improvements. Perhaps the most notable of which is the new support for &lt;span style="font-style: italic;"&gt;lazy patterns&lt;/span&gt; that force lazy values only when they are required by the pattern matcher. This makes it easy to dissect lazy data structures such as lazy sequences using pattern matching and, consequently, will spark a marked change in data structure APIs. For example, it is now easy to expose a lazy sequence interface to a set data structure and use that to detect sets that contain exactly three elements. Previously, that would have been done by beginning a fold and terminating when three elements had been visited.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Another important new feature is native-code support for the Dynlink module that handles dynamically-loaded OCaml libraries or &lt;span style="font-style: italic;"&gt;plugins&lt;/span&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Thank to everyone involved for making this happen! Needless to say, all of the new features provided by OCaml 3.11 will be covered in detail in &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;The OCaml Journal&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-1103874274060189066?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/1103874274060189066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=1103874274060189066' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1103874274060189066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1103874274060189066'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/04/ocaml-311-moves-into-debian-testing.html' title='OCaml 3.11 moves into Debian testing!'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-6864465668976780716</id><published>2009-04-05T02:04:00.000-07:00</published><updated>2009-04-05T02:07:30.415-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='boids'/><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='swarm'/><category scheme='http://www.blogger.com/atom/ns#' term='lablgtk2'/><category scheme='http://www.blogger.com/atom/ns#' term='simulation'/><category scheme='http://www.blogger.com/atom/ns#' term='school'/><category scheme='http://www.blogger.com/atom/ns#' term='emergent behaviour'/><category scheme='http://www.blogger.com/atom/ns#' term='flocking'/><title type='text'>Emergent behaviour: flocking boids</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob45"&gt;The OCaml Journal&lt;/a&gt; just published an article about emergent behaviour:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"Artificial life became a popular topic in the 1980s. In particular, with the discovery that simple rules defining the behaviour of individuals could give rise to sophisticated behaviour of groups of individuals. This unexpected result was described as "emergent behaviour" and one of the most famous examples was a computer program called "Boids" that used only three simple rules to govern the dynamics of individuals but produced remarkably realistic flocking behaviour of the population as a whole. This article describes an interactive boids simulator with a graphical user interface implemented using GTK+..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob45"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-6864465668976780716?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/6864465668976780716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=6864465668976780716' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6864465668976780716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6864465668976780716'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/04/emergent-behaviour-flocking-boids.html' title='Emergent behaviour: flocking boids'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-2120939837623773250</id><published>2009-04-05T01:53:00.000-07:00</published><updated>2009-04-05T02:03:56.516-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='library'/><category scheme='http://www.blogger.com/atom/ns#' term='batteries'/><title type='text'>OCaml batteries included</title><content type='html'>&lt;p&gt;The &lt;a href="http://batteries.forge.ocamlcore.org/"&gt;batteries included&lt;/a&gt; project is one of the most exciting developments in the &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; world today and promises to provide a comprehensive suite of well-documented libraries and language extensions that will be bundled with any compliant OCaml distribution.&lt;/p&gt;&lt;p&gt;The project is apparently nearing its first major release and has even found its way into current &lt;a href="http://packages.debian.org/experimental/ocaml-batteries-included"&gt;Debian-based distros&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The language extensions are one of the most interesting aspects of this project because they augment OCaml with first-class support for a variety of new features. David Rajchenbach-Teller was kind enough to list some of the features related specifically to strings on the caml-list:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Regular OCaml strings.&lt;/li&gt;&lt;li&gt;Strings with capabilities (i.e. strings which, depending on their type, can be read-only/write-only/read-write) -- sometimes faster than regular strings, never slower.&lt;/li&gt;&lt;li&gt;Immutable Unicode ropes.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Given OCaml's recent uptake as a scripting language for concurrent programming, string handling is of growing importance and these language extensions will be a welcome addition!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-2120939837623773250?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/2120939837623773250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=2120939837623773250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2120939837623773250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2120939837623773250'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/04/ocaml-batteries-included.html' title='OCaml batteries included'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-7997126029451755435</id><published>2009-03-22T21:35:00.000-07:00</published><updated>2009-03-22T21:44:18.727-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shadow stack'/><category scheme='http://www.blogger.com/atom/ns#' term='allocate'/><category scheme='http://www.blogger.com/atom/ns#' term='boxing'/><category scheme='http://www.blogger.com/atom/ns#' term='value type'/><category scheme='http://www.blogger.com/atom/ns#' term='reference type'/><category scheme='http://www.blogger.com/atom/ns#' term='hlvm'/><category scheme='http://www.blogger.com/atom/ns#' term='function pointers'/><category scheme='http://www.blogger.com/atom/ns#' term='garbage collection'/><category scheme='http://www.blogger.com/atom/ns#' term='heap'/><title type='text'>Building a Virtual Machine with LLVM: part 3</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob44"&gt;The OCaml Journal&lt;/a&gt; just published an article about the HLVM project:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"This is the third and final article in the series about the design and construction of the high-level virtual machine (HLVM). This article describes the design and implementation of boxed values for sum types and a simple garbage collector. In particular, the difference between the run-time representations of values in OCaml and HLVM is described in detail and the GC implementation described is partially generated at run-time and JIT compiled..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob44"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-7997126029451755435?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/7997126029451755435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=7997126029451755435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7997126029451755435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7997126029451755435'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/03/building-virtual-machine-with-llvm-part.html' title='Building a Virtual Machine with LLVM: part 3'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-9124296586532858961</id><published>2009-03-19T12:43:00.000-07:00</published><updated>2009-03-22T21:48:10.268-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='industry'/><category scheme='http://www.blogger.com/atom/ns#' term='cilk'/><title type='text'>OCaml at Cilk Arts Ltd.</title><content type='html'>&lt;p&gt;&lt;a href="http://supertech.csail.mit.edu/cilk/"&gt;Cilk&lt;/a&gt; is an &lt;a href="http://www.cilk.com/company/awards"&gt;award-winning&lt;/a&gt; language for multithreaded parallel programming based on ANSI C and is the culmination of 15 years of research at MIT in preparation for the shared memory multicore computers that are now ubiquitous. An open source implementation of Cilk is freely available.&lt;/p&gt;&lt;p&gt;We have tried Cilk ourselves and found the solution it provides to be both easy and extremely efficient and it is certainly preferable to cumbersome alternatives like OpenMP. In fact, we were so impressed that we are not only using Cilk to write an experimental parallel garbage collector for our &lt;a href="http://hlvm.forge.ocamlcore.org/"&gt;HLVM&lt;/a&gt; project but we are also drawing upon the design of Cilk to provide high-level parallel constructs as well.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The group responsible for Cilk founded a spin-off company &lt;a href="http://www.cilk.com/"&gt;Cilk Arts Ltd.&lt;/a&gt; in 2006 using venture capital. Cilk Arts released their first commercial product, Cilk++, in 2008. The company is now rapidly asserting itself as a major player for shared memory parallel programming.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Interestingly, although the open source implementation of Cilk is written in C, Cilk Arts have been &lt;a href="http://groups.google.co.uk/group/cufp/browse_thread/thread/37ca54f6fdf9f9e8/f8d3f9c8e147de65?hl=en&amp;amp;ie=UTF-8&amp;amp;q=%2Bcilk+%2Bocaml+%2Bhiring&amp;amp;pli=1"&gt;hiring OCaml programmers&lt;/a&gt; since 2007 because a "major part" of their code base is written in &lt;a href="http://ocamlnews.blogspot.com/"&gt;OCaml&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-9124296586532858961?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/9124296586532858961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=9124296586532858961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/9124296586532858961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/9124296586532858961'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/03/ocaml-at-cilk-arts-ltd.html' title='OCaml at Cilk Arts Ltd.'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-8681983029692013010</id><published>2009-03-07T21:19:00.000-08:00</published><updated>2009-03-07T21:23:18.126-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='division'/><category scheme='http://www.blogger.com/atom/ns#' term='modulo'/><category scheme='http://www.blogger.com/atom/ns#' term='ffi'/><category scheme='http://www.blogger.com/atom/ns#' term='common subexpression elimination'/><category scheme='http://www.blogger.com/atom/ns#' term='hoisting loop invariants'/><title type='text'>Low-level optimization tips and tricks: part 3</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob43"&gt;The OCaml Journal&lt;/a&gt; just published an article about optimization:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"The OCaml programming language is unusually well suited to high-performance computing among functional programming languages because it provides a highly efficient code generator with a performant run-time and garbage collector. This makes it feasible to write high performance programs entirely in OCaml without having to drop to lower-level languages like C and Fortran for performance-critical sections of code. This article gives a case study that covers many of the techniques described so far before describing how the performance of the FFI can be improved and some optimizations that often provide substantial performance improvements in OCaml..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob43"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-8681983029692013010?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/8681983029692013010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=8681983029692013010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8681983029692013010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8681983029692013010'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/03/low-level-optimization-tips-and-tricks.html' title='Low-level optimization tips and tricks: part 3'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4116652094585062292</id><published>2009-02-28T06:03:00.000-08:00</published><updated>2009-02-28T11:56:20.404-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Book review: "The Objective Caml Programming Language" by Tim Rentsch</title><content type='html'>&lt;p&gt;Abscissa Press recently published &lt;span style="font-style: italic;"&gt;The Objective Caml Programming Language&lt;/span&gt; by Tim Rentsch and were kind enough to send us a complimentary copy of the book for review even though we are the creators of the related book &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml for Scientists&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The Objective Caml Programming Language is a 264-page paperback that covers many features of the &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; programming language including expressions, variables, functions, pattern matching, tuples, lists, polymorphism, unions, references, loops, records, arrays, strings, exceptions, IO, compilation, debugging, modules, functors, objects, inheritance, polymorphic classes and touches upon some other topics including labeled and optional arguments and laziness.&lt;/p&gt;&lt;p&gt;The core content is derived largely from Jason Hickey's academic course on &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; at Caltech but also includes 87 pages describing &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt;'s object system. The book has been carefully typeset and is a pleasure to read. The style of writing is purely theoretical and presents technical content with many examples, academic exercises and it is mostly accurate. Consequently, this book is ideal for anyone who already has a strong background in computer science and wants to learn the &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; language.&lt;/p&gt;&lt;p&gt;However, this is not a pragmatic book and no attention is given to programming style, libraries, tools, optimization or other issues that are very important for anyone who wants to use OCaml for general purpose programming.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The Objective CAML programming language by Tim Rentsch is available from &lt;a href="http://search.barnesandnoble.com/The-Objective-Caml-Programming-Language/Tim-Rentsch/e/9780981599205"&gt;Barnes and Noble&lt;/a&gt; and &lt;a href="http://www.amazon.com/Objective-Caml-Programming-Language/dp/0981599206"&gt;Amazon&lt;/a&gt; for only £25.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4116652094585062292?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4116652094585062292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4116652094585062292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4116652094585062292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4116652094585062292'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/02/book-review-objective-caml-programming.html' title='Book review: &quot;The Objective Caml Programming Language&quot; by Tim Rentsch'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-2345001676870710187</id><published>2009-02-20T06:45:00.000-08:00</published><updated>2009-02-20T06:51:22.559-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='proper tail recursion'/><category scheme='http://www.blogger.com/atom/ns#' term='ffi'/><category scheme='http://www.blogger.com/atom/ns#' term='tuples'/><category scheme='http://www.blogger.com/atom/ns#' term='foreign function interface'/><category scheme='http://www.blogger.com/atom/ns#' term='hlvm'/><category scheme='http://www.blogger.com/atom/ns#' term='function pointers'/><category scheme='http://www.blogger.com/atom/ns#' term='tail call elimination'/><category scheme='http://www.blogger.com/atom/ns#' term='first-class structs'/><category scheme='http://www.blogger.com/atom/ns#' term='llvm'/><title type='text'>Building a Virtual Machine using LLVM: part 2</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob42"&gt;The OCaml Journal&lt;/a&gt; just published an article about the LLVM:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"This is the second article in the series about our high-level virtual machine (HLVM) project. This article builds upon the foundations laid in the first article to create a much more practically useful language implementation by adding tail call elimination, first-class structs, a foreign function interface (FFI) and first-class function pointers..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob42"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-2345001676870710187?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/2345001676870710187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=2345001676870710187' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2345001676870710187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2345001676870710187'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/02/building-virtual-machine-using-llvm.html' title='Building a Virtual Machine using LLVM: part 2'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-855078293823253091</id><published>2009-02-19T10:55:00.000-08:00</published><updated>2009-02-19T11:06:39.292-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='closures'/><category scheme='http://www.blogger.com/atom/ns#' term='dynamic typing'/><category scheme='http://www.blogger.com/atom/ns#' term='lllvm'/><title type='text'>Toy Lisp implementation written in C++ using LLVM</title><content type='html'>&lt;p&gt;We recently stumbled upon &lt;a href="http://paste.lisp.org/display/74068"&gt;this&lt;/a&gt; toy Lisp implementation. The compiler is written in C++ and uses &lt;a href="http://llvm.org"&gt;LLVM&lt;/a&gt; for high performance JIT compilation. Although the compiler makes no attempt to be efficient with statically-known types the implementation is still interesting from an OCaml perspective because it includes first-class functions.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-855078293823253091?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/855078293823253091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=855078293823253091' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/855078293823253091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/855078293823253091'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/02/toy-lisp-implementation-written-in-c.html' title='Toy Lisp implementation written in C++ using LLVM'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-411347536756555083</id><published>2009-02-08T03:45:00.000-08:00</published><updated>2009-02-08T03:52:14.875-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fluid dynamics'/><category scheme='http://www.blogger.com/atom/ns#' term='numerical methods'/><category scheme='http://www.blogger.com/atom/ns#' term='real time'/><category scheme='http://www.blogger.com/atom/ns#' term='gauss siedel'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><category scheme='http://www.blogger.com/atom/ns#' term='navier stokes'/><title type='text'>Simulating smoke in real-time using fluid dynamics</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob41"&gt;The OCaml Journal&lt;/a&gt; just published an article about computational fluid dynamics:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"In scientific computing, the task of simulating fluid flow accurately by solving the Navier-Stokes equation is notoriously difficult. However, it is possible to compute numerical approximations quickly enough that fluids dynamics may be simulated in real time. This article describes a simple fluid dynamics simulator that uses OpenGL to visualize the results in real time..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob41"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-411347536756555083?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/411347536756555083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=411347536756555083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/411347536756555083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/411347536756555083'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/02/simulating-smoke-in-real-time-using.html' title='Simulating smoke in real-time using fluid dynamics'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-6086046840879188278</id><published>2009-02-08T01:42:00.000-08:00</published><updated>2009-02-08T01:57:24.467-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>New book: The Objective Caml Programming Language</title><content type='html'>&lt;p&gt;Abscissa Press published a new book on OCaml called &lt;a href="http://www.amazon.com/Objective-Caml-Programming-Language/dp/0981599206"&gt;The Objective Caml Programming Language&lt;/a&gt; by Tim Rentsch in September 2008.&lt;/p&gt;&lt;p&gt;Information about this product is sparse: there have been no advertisements, nobody has written a review yet and it is not even clear what subjects the book covers but the description on Amazon implies that this is the first book to cover OCaml's object oriented capabilities in detail.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-6086046840879188278?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/6086046840879188278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=6086046840879188278' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6086046840879188278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6086046840879188278'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/02/new-book-objective-caml-programming.html' title='New book: The Objective Caml Programming Language'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-7993264664059625198</id><published>2009-01-25T04:19:00.000-08:00</published><updated>2009-01-25T04:24:49.635-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='hlvm'/><category scheme='http://www.blogger.com/atom/ns#' term='compilation'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='llvm'/><category scheme='http://www.blogger.com/atom/ns#' term='jit'/><category scheme='http://www.blogger.com/atom/ns#' term='virtual machine'/><title type='text'>Building a Virtual Machine using LLVM: part 1</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob40"&gt;The OCaml Journal&lt;/a&gt; just published an article about compiler writing:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"This article is the first in a series examining the design and construction of a simple high-level virtual machine (HLVM) written in OCaml and building upon LLVM. Despite its simple design, the HLVM offers excellent performance, rich run-time types with reflection, tail calls, accurate garbage collection and an easy-to-use C-compatible Foreign Function Interface (FFI). This article describes the first step in construction: JIT compilation of programs from a minimal language..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob40"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-7993264664059625198?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/7993264664059625198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=7993264664059625198' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7993264664059625198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7993264664059625198'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/01/building-virtual-machine-using-llvm.html' title='Building a Virtual Machine using LLVM: part 1'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-8422233640323440062</id><published>2009-01-09T17:40:00.000-08:00</published><updated>2009-01-09T18:05:01.702-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simulated annealing'/><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='combinatorial'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><category scheme='http://www.blogger.com/atom/ns#' term='traveling salesman'/><title type='text'>Solving the Traveling Salesman problem using Simulated Annealing</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob39"&gt;The OCaml Journal&lt;/a&gt; just published an article about combinatorial optimization:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"Finding global minima of an arbitrary function is a significantly more challenging problem than local function minimization and has many practical applications from the simulation of molecules to the design of printed circuit board layouts. Several different global function minimization algorithms exist, many of which make repeated use of local function-minimization algorithms. This article describes a simple and elegant solution to the traveling salesman problem that uses the simulated annealing approach to global function minimization. The results are visualized in real time using OpenGL. In particular, we use an efficient purely functional data structure to represent the path..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob39"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-8422233640323440062?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/8422233640323440062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=8422233640323440062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8422233640323440062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/8422233640323440062'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/01/solving-traveling-salesman-problem.html' title='Solving the Traveling Salesman problem using Simulated Annealing'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-5661951298894871037</id><published>2009-01-09T10:19:00.000-08:00</published><updated>2009-01-09T13:34:50.279-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='jobs'/><category scheme='http://www.blogger.com/atom/ns#' term='finance'/><category scheme='http://www.blogger.com/atom/ns#' term='jane st capital'/><title type='text'>Jane St. Capital expand their OCaml effort</title><content type='html'>&lt;p&gt;Financial trading company &lt;a href="http://www.janestreet.com/"&gt;Jane Street Capital&lt;/a&gt; recently &lt;a href="http://groups.google.com/group/fa.caml/msg/0b27115fb4f96cf5"&gt;announced&lt;/a&gt; that their growing profits are to be ploughed back into the company that will now employ over 30 OCaml programmers, 50% up on the 20 programmers reported to have worked there only one year ago. This ossifies their position as the world's largest employer of OCaml programmers. Yaron Minsky of Jane St. also commented that they probably have the largest OCaml code base in the world as well, weighing in at just under one million lines of code.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Citrix take second place with just under 20 programmers contributing to their OCaml code base. However, &lt;a href="http://ocamlnews.blogspot.com/2008/11/stunning-slides-about-growth-of-ocaml.html"&gt;previous news&lt;/a&gt; shows that the number of OCaml programmers at Citrix has been growing over 80% per annum since mid-2006.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-5661951298894871037?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/5661951298894871037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=5661951298894871037' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/5661951298894871037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/5661951298894871037'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/01/jane-st-capital-expand-their-ocaml.html' title='Jane St. Capital expand their OCaml effort'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-6595880924232400039</id><published>2009-01-02T18:09:00.000-08:00</published><updated>2009-01-02T18:14:26.755-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unrolling'/><category scheme='http://www.blogger.com/atom/ns#' term='inlining'/><category scheme='http://www.blogger.com/atom/ns#' term='garbage collection'/><category scheme='http://www.blogger.com/atom/ns#' term='allocation'/><title type='text'>Low-level optimization tips and tricks: part 2</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob38"&gt;The OCaml Journal&lt;/a&gt; just published the second article in a series about low-level optimization:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"The OCaml programming language is unusually well suited to high-performance computing among functional programming languages because it provides a highly efficient code generator with a performant run-time and garbage collector. This makes it feasible to write high performance programs entirely in OCaml without having to drop to lower-level languages like C and Fortran for performance-critical sections of code. This article covers allocation and garbage collection and various forms of specialization including type, function and data structure specialization..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob38"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-6595880924232400039?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/6595880924232400039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=6595880924232400039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6595880924232400039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6595880924232400039'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2009/01/low-level-optimization-tips-and-tricks.html' title='Low-level optimization tips and tricks: part 2'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-780515228999544522</id><published>2008-12-11T19:18:00.000-08:00</published><updated>2008-12-11T19:37:08.198-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='regexp'/><category scheme='http://www.blogger.com/atom/ns#' term='lexing'/><category scheme='http://www.blogger.com/atom/ns#' term='character'/><category scheme='http://www.blogger.com/atom/ns#' term='text'/><category scheme='http://www.blogger.com/atom/ns#' term='regular expression'/><category scheme='http://www.blogger.com/atom/ns#' term='regex'/><category scheme='http://www.blogger.com/atom/ns#' term='string'/><title type='text'>Working with Regular Expressions</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob37"&gt;The OCaml Journal&lt;/a&gt; just published an article about regular expression for string manipulation:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"Regular expressions are a domain-specific language for pattern matching over sequences of characters. This functionality provides a concise and efficient way to dissect strings and, consequently, is used in many forms of string processing including the definition of lexers. This article describes OCaml's built-in support for regular expressions..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob37"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-780515228999544522?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/780515228999544522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=780515228999544522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/780515228999544522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/780515228999544522'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/12/working-with-regular-expressions.html' title='Working with Regular Expressions'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-2211127621529306331</id><published>2008-11-26T13:01:00.000-08:00</published><updated>2008-11-26T21:00:51.039-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='llvm'/><category scheme='http://www.blogger.com/atom/ns#' term='run-time code generation'/><title type='text'>LLVM 2.4 released</title><content type='html'>&lt;p&gt;Developers of the compiler framework LLVM are sticking to a rapid release schedule, shipping the latest &lt;a href="http://llvm.org/releases/"&gt;2.4 version of LLVM&lt;/a&gt;. This includes extensive &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; bindings that can be used to generate arbitrary native code at run time.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; and LLVM form a powerful team that can be of mutual benefit in many different ways. Firstly, the &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; language is derived from a family of languages that were specifically designed for manipulating programs and writing compilers. So &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; is ideally suited for this task and many LLVM users stand to gain a lot by writing their high-level code (particularly front-ends) in &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt;. Secondly, the current &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; implementation can be improved in many different ways using LLVM. One alluring project is the creation of an automated FFI for &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; that uses run-time generated code to interface to existing native code libraries with a minimum of fuss by eliminating the impedance mismatch between the &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; and C type systems and representations.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Using LLVM from &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; has been the topic of two &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml Journal&lt;/a&gt; articles already this year.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-2211127621529306331?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/2211127621529306331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=2211127621529306331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2211127621529306331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2211127621529306331'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/11/llvm-24-released.html' title='LLVM 2.4 released'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-2785037911035443789</id><published>2008-11-24T20:07:00.000-08:00</published><updated>2008-11-24T20:09:11.578-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='covariance'/><category scheme='http://www.blogger.com/atom/ns#' term='classes'/><category scheme='http://www.blogger.com/atom/ns#' term='subtyping'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml journal'/><category scheme='http://www.blogger.com/atom/ns#' term='object oriented'/><title type='text'>Object-oriented programming in OCaml</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob36"&gt;The OCaml Journal&lt;/a&gt; just published an article about object oriented programming:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"The OCaml programming language is unique among member of the ML family because it provides not only the core ML features of variant types, pattern matching and functors but also two different features of the type system that provide subtyping: objects and polymorphic variants. Compared to conventional object-oriented languages, OCaml's objects are unusual because they are structurally typed, a characteristic that removed the need to declare class types but which can adversely affect developer productivity and run-time efficiency if used inappropriately. This article describes the design, implementation and use of OCaml's object system, giving references to examples of good design..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob36"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-2785037911035443789?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/2785037911035443789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=2785037911035443789' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2785037911035443789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2785037911035443789'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/11/object-oriented-programming-in-ocaml.html' title='Object-oriented programming in OCaml'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-2093573235944825622</id><published>2008-11-24T13:24:00.001-08:00</published><updated>2008-11-24T15:10:27.565-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='industry'/><category scheme='http://www.blogger.com/atom/ns#' term='commercial applications'/><category scheme='http://www.blogger.com/atom/ns#' term='xensource'/><category scheme='http://www.blogger.com/atom/ns#' term='citrix'/><title type='text'>Stunning slides about the growth of OCaml at XenSource/Citrix</title><content type='html'>&lt;p&gt;In 2002, members of Cambridge University released the open source &lt;a href="http://www.xen.org/"&gt;Xen&lt;/a&gt; project to provide free high-performance virtualization technology for the masses.&lt;/p&gt;&lt;p&gt;In 2004, the team founded the company XenSource and began developing the enterprise-level distributed management software that would make virtualization easy and form the backbone of their products in the years to come. A team of thirty dedicated programmers in Palo Alto California began developing the software in C, Python and Ruby.&lt;/p&gt;&lt;p&gt;Two years later, the US team had succeeded in burning tens of millions of dollars funding but had failed to produce any product. So XenSource, under new management, took the bold step of replacing their large team of US developers with a team of only four British &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; developers. Within months, all of the Python and Ruby was replaced, both reliability and performance were dramatically improved and the company shipped their first product. One year later, XenSource sold to Citrix for $500M.&lt;/p&gt;&lt;p&gt;One of the first &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; developers to join XenSource, Anil Madhavapeddy, stunned the audience at this years CUFP conference with the tale of Citrix growing from 4 to 18 &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; developers since April 2006. Anil has kindly made his awe-inspiring &lt;a href="http://cufp.galois.com/2008/slides/MadhavapeddyAnil.pdf"&gt;slides&lt;/a&gt; available on-line.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-2093573235944825622?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/2093573235944825622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=2093573235944825622' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2093573235944825622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2093573235944825622'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/11/stunning-slides-about-growth-of-ocaml.html' title='Stunning slides about the growth of OCaml at XenSource/Citrix'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4285298825361555168</id><published>2008-11-10T17:04:00.000-08:00</published><updated>2008-11-10T17:07:16.966-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='huffman'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml journal'/><category scheme='http://www.blogger.com/atom/ns#' term='data compression'/><title type='text'>Huffman data compression</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob35"&gt;The OCaml Journal&lt;/a&gt; just published an article about data compression:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"Data compression algorithms are not only very useful in practice but are also extremely compelling pragmatic examples of programming theory. The popular Huffman data compression algorithm is from the family of entropy encoding compression algorithms. This article walks through the construction of a simple but efficient Huffman compressor and decompressor written entirely in OCaml..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob35"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4285298825361555168?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4285298825361555168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4285298825361555168' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4285298825361555168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4285298825361555168'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/11/huffman-data-compression.html' title='Huffman data compression'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-7587716155658307398</id><published>2008-11-02T19:15:00.000-08:00</published><updated>2008-11-02T19:17:48.302-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='compiler options'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml journal'/><category scheme='http://www.blogger.com/atom/ns#' term='low-level'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='allocation'/><title type='text'>Low-level optimization tips and tricks: part 1</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob34"&gt;The OCaml Journal&lt;/a&gt; just published an article about optimization:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"The OCaml programming language is unusually well suited to high-performance computing among functional programming languages because it provides a highly efficient code generator with a performant run-time and garbage collector. This makes it feasible to write high performance programs entirely in OCaml without having to drop to lower-level languages like C and Fortran for performance-critical sections of code. This article describes the low-level optimizations that underpin the ability to write performant OCaml programs by leveraging knowledge about the OCaml compiler..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob34"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-7587716155658307398?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/7587716155658307398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=7587716155658307398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7587716155658307398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7587716155658307398'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/11/low-level-optimization-tips-and-tricks.html' title='Low-level optimization tips and tricks: part 1'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-7382675738882298387</id><published>2008-11-01T16:29:00.000-07:00</published><updated>2008-11-01T16:45:05.628-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml for scientists'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Largest order of OCaml for Scientists</title><content type='html'>&lt;p&gt;&lt;a href="http://www.cornell.edu/"&gt;Cornell University&lt;/a&gt; recently placed the largest ever order of our book &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml for Scientists&lt;/a&gt; in order to use our monograph as a text book for their students when teaching the awesome &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; programming language. To date, &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml for Scientists&lt;/a&gt; has sold hundreds of copies worldwide and continues to be one of our best selling products, having earned us 4.5× more profit than the average programming book.&lt;/p&gt;&lt;p&gt;If you would like to place a bulk order of &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml for Scientists&lt;/a&gt;, please &lt;a href="http://www.ffconsultancy.com/contact.html?ob"&gt;contact us&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-7382675738882298387?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/7382675738882298387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=7382675738882298387' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7382675738882298387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7382675738882298387'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/11/largest-order-of-ocaml-for-scientists.html' title='Largest order of OCaml for Scientists'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4907902742896865491</id><published>2008-10-11T05:57:00.000-07:00</published><updated>2008-10-11T06:16:55.773-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rtin'/><category scheme='http://www.blogger.com/atom/ns#' term='adaptive subdivision'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml journal'/><category scheme='http://www.blogger.com/atom/ns#' term='roam'/><title type='text'>Triangulated Irregular Networks (TINs)</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob33"&gt;The OCaml Journal&lt;/a&gt; just published an article about computer graphics:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"Adaptive subdivision is a hot topic in computer graphics and forms the foundation of many state-of-the-art algorithms for large scale visualization used for everything from scientific visualization of huge data sets to game graphics that immerse players in expansive virtual worlds. This article describes one of the most popular approaches for the adaptive subdivision of 3D meshes and implements a capable plotting algorithm with real-time OpenGL-based visualization showcasing how this simple algorithm works and can be used to solve many different problems..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob33"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4907902742896865491?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4907902742896865491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4907902742896865491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4907902742896865491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4907902742896865491'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/10/triangulated-irregular-networks-tins.html' title='Triangulated Irregular Networks (TINs)'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-6390056427496558105</id><published>2008-10-08T20:14:00.000-07:00</published><updated>2008-10-08T21:14:22.184-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='boehm'/><category scheme='http://www.blogger.com/atom/ns#' term='compiler'/><category scheme='http://www.blogger.com/atom/ns#' term='oberon-2'/><title type='text'>Oberon-2 compiler written in 6kLOC of OCaml</title><content type='html'>&lt;p&gt;Mike Spivey from the Computer Lab at Oxford University hosts the &lt;a href="http://spivey.oriel.ox.ac.uk/mike/obc/"&gt;Oxford Oberon-2 compiler&lt;/a&gt;, which is written in &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/"&gt;OCaml&lt;/a&gt; with C for the Boehm-based run-time. The source code to the compiler is recommended reading for budding compiler writers using MLs such as OCaml.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-6390056427496558105?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/6390056427496558105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=6390056427496558105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6390056427496558105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6390056427496558105'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/10/oberon-2-compiler-written-in-6kloc-of.html' title='Oberon-2 compiler written in 6kLOC of OCaml'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-1603372398772215477</id><published>2008-09-25T19:06:00.000-07:00</published><updated>2008-09-25T19:12:19.287-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='threads'/><category scheme='http://www.blogger.com/atom/ns#' term='lock'/><category scheme='http://www.blogger.com/atom/ns#' term='crawler'/><category scheme='http://www.blogger.com/atom/ns#' term='mutex'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrent'/><title type='text'>Concurrent web crawling</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob32"&gt;The OCaml Journal&lt;/a&gt; just published an article about concurrent web programming:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"Web-enabled technology is now ubiquitous and of huge commercial value. These kinds of programs share two common characteristics: they send information over the internet and they perform tasks concurrently. This article is the first in a series to examine the use of the OCaml programming language and its relatives in the growing area of concurrent web programming..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob32"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-1603372398772215477?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/1603372398772215477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=1603372398772215477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1603372398772215477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1603372398772215477'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/09/concurrent-web-crawling.html' title='Concurrent web crawling'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-4609156474583712799</id><published>2008-09-12T17:14:00.000-07:00</published><updated>2008-09-12T17:16:39.808-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='vector graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><category scheme='http://www.blogger.com/atom/ns#' term='postscript'/><title type='text'>Building a 2D vector graphics library</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob31"&gt;The OCaml Journal&lt;/a&gt; just published an article about vector graphics:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"Vector graphics represent images in terms of lines and curves on a fictional canvas. This resolution-independent representation is ideal for high resolution output devices such as printers but the inevitable march of technology has ossified vector graphics on the desktop as a fundamental component of both Apple's and Microsoft's latest operating systems. This article describes the design and implementation of a simple library for 2D vector graphics written in OCaml and using OpenGL for visualization..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob31"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-4609156474583712799?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/4609156474583712799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=4609156474583712799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4609156474583712799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/4609156474583712799'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/09/building-2d-vector-graphics-library.html' title='Building a 2D vector graphics library'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-7763440172018803298</id><published>2008-09-10T01:34:00.000-07:00</published><updated>2008-09-10T01:51:26.132-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='llvm'/><category scheme='http://www.blogger.com/atom/ns#' term='run-time code generation'/><title type='text'>LLVM tutorials ported to OCaml</title><content type='html'>&lt;p&gt;Erick Tryzelaar has done a fantastic job translating the &lt;a href="http://www.llvm.org"&gt;LLVM&lt;/a&gt; tutorials from C++ to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt;. The fruits of his labor are available &lt;a href="http://llvm.org/docs/tutorial/OCamlLangImpl1.html"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;This tutorial describes the implementation of a compiler for the "Kaleidoscope" language including lexing, parsing, basic code generation using LLVM, JIT compilation using LLVM and the introduction of control flow and mutable variables.&lt;/p&gt;&lt;p&gt;LLVM is one of the world's most exciting open source projects and the early development of comprehensive &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; bindings to LLVM has fuelled a great deal of cross-pollination.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-7763440172018803298?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/7763440172018803298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=7763440172018803298' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7763440172018803298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7763440172018803298'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/09/llvm-tutorials-ported-to-ocaml.html' title='LLVM tutorials ported to OCaml'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-7557237409668342270</id><published>2008-09-08T19:22:00.000-07:00</published><updated>2008-09-08T19:27:38.301-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='special offer'/><category scheme='http://www.blogger.com/atom/ns#' term='f#.net journal'/><category scheme='http://www.blogger.com/atom/ns#' term='subscription'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml journal'/><title type='text'>Year long subscriptions to the OCaml Journal!</title><content type='html'>&lt;p&gt;Due to popular demand we have introduced year-long subscriptions to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;The OCaml Journal&lt;/a&gt;. Subscribers taking out 1 year subscriptions to both &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;The OCaml Journal&lt;/a&gt; and &lt;a href="http://www.ffconsultancy.com/products/fsharp_journal/?ob"&gt;The F#.NET Journal&lt;/a&gt; at the same time can currently benefit from a 25% discount!&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-7557237409668342270?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/7557237409668342270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=7557237409668342270' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7557237409668342270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7557237409668342270'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/09/year-long-subscriptions-to-ocaml.html' title='Year long subscriptions to the OCaml Journal!'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-5693570020350503708</id><published>2008-09-05T21:11:00.000-07:00</published><updated>2008-09-05T21:24:51.377-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='multicore'/><category scheme='http://www.blogger.com/atom/ns#' term='amd'/><category scheme='http://www.blogger.com/atom/ns#' term='dell'/><category scheme='http://www.blogger.com/atom/ns#' term='opteron'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>OCaml on eight cores</title><content type='html'>&lt;p&gt;In preparation for &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt;'s forthcoming &lt;a href="http://ocamlnews.blogspot.com/2008/04/ocaml-to-get-concurrent-garbage.html"&gt;parallel garbage collector&lt;/a&gt;, Flying Frog Consultancy have invested in an eight core computer. The machine is a &lt;a href="http://dell.com/"&gt;Dell&lt;/a&gt; &lt;a href="http://www.dell.com/content/products/productdetails.aspx/pedge_t605?c=us&amp;amp;cs=555&amp;amp;l=en&amp;amp;s=biz"&gt;PowerEdge T605&lt;/a&gt; with eight AMD Opteron cores and 4Gb of RAM.&lt;/p&gt;&lt;p&gt;Unable to resist temptation, we immediately reran the parallel ray tracer from the &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; Journal article &lt;a href="http://ocamlnews.blogspot.com/2008/08/fork-based-parallelism.html"&gt;Fork-based parallelism&lt;/a&gt; and obtained near-optimal speedup when using all eight cores:&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NMRkpon4Ps0/SMIFarvm9OI/AAAAAAAAABA/Iet8FdCdSRI/s1600-h/speedup.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_NMRkpon4Ps0/SMIFarvm9OI/AAAAAAAAABA/Iet8FdCdSRI/s400/speedup.gif" alt="" id="BLOGGER_PHOTO_ID_5242758872189826274" border="0" /&gt;&lt;/a&gt;&lt;p&gt;Watch this space for more parallel benchmarks using OCaml!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-5693570020350503708?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/5693570020350503708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=5693570020350503708' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/5693570020350503708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/5693570020350503708'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/09/ocaml-on-eight-cores.html' title='OCaml on eight cores'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NMRkpon4Ps0/SMIFarvm9OI/AAAAAAAAABA/Iet8FdCdSRI/s72-c/speedup.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-1366883173915318843</id><published>2008-09-05T21:03:00.000-07:00</published><updated>2008-09-05T21:06:48.752-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='compiler'/><category scheme='http://www.blogger.com/atom/ns#' term='llvm'/><title type='text'>Writing a bytecode compiler using LLVM</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob30"&gt;The OCaml Journal&lt;/a&gt; just published an article about the compilation of bytecodes:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"The Low-Level Virtual Machine (LLVM) provides the machinery to generate high-performance native code programmatically and on-demand. One of the most important applications of this technology is the Just In Time (JIT) compilation of bytecode intermediate representations into native code as found in Sun's Java Virtual Machine (JVM) and Microsoft's Common Language Runtime (CLR). This article describes how a simple bytecode interpreter can be developed into a JIT compiler using LLVM with relatively little effort..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob30"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-1366883173915318843?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/1366883173915318843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=1366883173915318843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1366883173915318843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1366883173915318843'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/09/writing-bytecode-compiler-using-llvm.html' title='Writing a bytecode compiler using LLVM'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-3449973797644667383</id><published>2008-08-29T12:02:00.001-07:00</published><updated>2008-08-29T12:13:44.533-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml for scientists'/><category scheme='http://www.blogger.com/atom/ns#' term='price'/><title type='text'>OCaml for Scientists now at least as cheap as ever!</title><content type='html'>&lt;p&gt;Many readers will already know that the &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob"&gt;OCaml&lt;/a&gt; programming language is &lt;a href="http://www.janestcapital.com/"&gt;widely used&lt;/a&gt; in the finance industry. What many people do not know is that workers in the finance industry often live on the bread line and, consequently, they have no choice but to find ways to obtain essential items cost effectively.&lt;/p&gt;&lt;p&gt;This appears to have been the case for our famous &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml for Scientists&lt;/a&gt; book, which has seen its price slashed from US$170 to only US$155 in recent weeks thanks to some ingenious gambles made by workers in the finance industry helping to drive down the prices of essential European goods. Everyone in the US and other countries (like Canada) can now benefit from a cheaper but equally comprehensive &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml for Scientists&lt;/a&gt;.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-3449973797644667383?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/3449973797644667383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=3449973797644667383' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3449973797644667383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3449973797644667383'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/08/ocaml-for-scientists-now-at-least-as.html' title='OCaml for Scientists now at least as cheap as ever!'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-6063065134197688731</id><published>2008-08-12T06:10:00.000-07:00</published><updated>2008-08-12T06:13:00.166-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='multicore'/><category scheme='http://www.blogger.com/atom/ns#' term='fork'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrent'/><title type='text'>Fork-based Parallelism</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob29"&gt;The OCaml Journal&lt;/a&gt; just published an article about parallel programming:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"As the world transitions to multicore desktop computers over the next few years it is essential that software evolves to take advantage of this new dimension in processing power by exposing parallelism. Although the current OCaml implementation has a serial run-time that limits multithreaded OCaml programs to serial concurrency, it is actually entirely possible to use separate processes to create parallel OCaml programs that do exploit multicores. This article examines a simple but powerful approach to parallelism using Unix process forking..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob29"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-6063065134197688731?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/6063065134197688731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=6063065134197688731' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6063065134197688731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6063065134197688731'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/08/fork-based-parallelism.html' title='Fork-based Parallelism'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-1931729112885086148</id><published>2008-07-28T14:25:00.000-07:00</published><updated>2008-07-28T15:22:13.950-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='job'/><category scheme='http://www.blogger.com/atom/ns#' term='salary'/><title type='text'>Growth of the OCaml job market</title><content type='html'>&lt;p&gt;Functional programming languages have been around for a long time, of course, but they have only very recently begun to be adopted for more mainstream programming tasks. This is reflected in the job market and the IT Jobs Watch website does an excellent job of trending job market trends over time for different programming languages, including &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml&lt;/a&gt;. The &lt;a href="http://www.itjobswatch.co.uk/jobs/uk/ocaml.do"&gt;results&lt;/a&gt; are nothing short of miraculous:&lt;/p&gt;&lt;p&gt;This shows that, at least in the UK, the &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml&lt;/a&gt; job market is growing at an incredible rate: 12× as many &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml&lt;/a&gt; jobs on the market as last year.&lt;/p&gt;&lt;p&gt;Moreover, the range of salaries for &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml&lt;/a&gt; developers is substantially higher than all mainstream languages: £45-68k compared to only £38-45k for C# and £42-52k for Java. As we predicted last year, this trend is driven by employers using programming language diversity as a way to identify superior candidates and this trend is driving more and more young developers to better their programming abilities and job prospects by learning advanced languages like &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;We believe this trend will continue for several years to come.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-1931729112885086148?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/1931729112885086148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=1931729112885086148' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1931729112885086148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1931729112885086148'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/07/growth-of-ocaml-job-market.html' title='Growth of the OCaml job market'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-243660238233581165</id><published>2008-07-27T19:31:00.000-07:00</published><updated>2008-07-27T19:32:22.023-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='metaocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='metaprogramming'/><category scheme='http://www.blogger.com/atom/ns#' term='compiler'/><title type='text'>Metaprogramming with MetaOCaml</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob28"&gt;The OCaml Journal&lt;/a&gt; just published an article about MetaOCaml:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"Metaprogramming is a term used to describe programs that generate or manipulate other programs. The ML family of languages were bred specifically for this purpose and, indeed, that is where their name MetaLanguage is derived from. Run-time compilation and execution of programs is a notable feature once present in Lisp as EVAL but sacrificed in the transition to ML. The MetaOCaml language is a prototype OCaml derivative that is designed to bring statically-typed metaprogramming to the OCaml family of languages. This article examines the use of MetaOCaml for metaprogramming including some of the practical applications of this technology and the challenges faced by users of this technology..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob28"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-243660238233581165?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/243660238233581165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=243660238233581165' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/243660238233581165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/243660238233581165'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/07/metaprogramming-with-metaocaml.html' title='Metaprogramming with MetaOCaml'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-2866408460487516243</id><published>2008-07-12T18:06:00.000-07:00</published><updated>2008-07-12T18:09:57.934-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='ffi'/><category scheme='http://www.blogger.com/atom/ns#' term='c'/><category scheme='http://www.blogger.com/atom/ns#' term='llvm'/><category scheme='http://www.blogger.com/atom/ns#' term='run-time code generation'/><title type='text'>Calling C code from OCaml</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob27"&gt;The OCaml Journal&lt;/a&gt; just published an article about OCaml's foreign function interface:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"Although the OCaml programming language offers many improvements over older languages such as C, C++ and Fortran the need to interoperate with native code can still arise. The two most important uses for native code interoperability are performance and legacy. This article describes how native code can be invoked from OCaml programs using both the conventional OCaml approach of writing stub functions in C and also a new approach using LLVM to generate the necessary interface code at run-time..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob27"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-2866408460487516243?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/2866408460487516243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=2866408460487516243' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2866408460487516243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2866408460487516243'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/07/calling-c-code-from-ocaml.html' title='Calling C code from OCaml'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-3786101490343123228</id><published>2008-06-24T05:01:00.000-07:00</published><updated>2008-06-24T05:04:22.547-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recursion'/><category scheme='http://www.blogger.com/atom/ns#' term='polymorphic recursion'/><category scheme='http://www.blogger.com/atom/ns#' term='recursive modules'/><category scheme='http://www.blogger.com/atom/ns#' term='non-uniform type'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml journal'/><title type='text'>Tricks with recursion: knots, modules and polymorphism</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob26"&gt;The OCaml Journal&lt;/a&gt; just published an article about recursive type and function definitions:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"This article introduces some of the design patterns found in functional programming. The phrase "untying the recursive knot" refers to the ability to remove direct recursion from value and type definitions through the use of parameterization. OCaml's recursive modules allow recursion to cross module boundaries. Polymorphic recursion allows functions to call themselves with different type parameters. This article introduces all of these functional design patterns with illustrations and worked examples..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob26"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-3786101490343123228?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/3786101490343123228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=3786101490343123228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3786101490343123228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/3786101490343123228'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/06/tricks-with-recursion-knots-modules-and.html' title='Tricks with recursion: knots, modules and polymorphism'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-1521274366661422683</id><published>2008-06-13T03:04:00.000-07:00</published><updated>2008-06-13T03:08:55.522-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='finite element'/><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='numerical integration'/><category scheme='http://www.blogger.com/atom/ns#' term='simulation'/><category scheme='http://www.blogger.com/atom/ns#' term='numerics'/><title type='text'>Real-time Finite Element Materials simulation</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob25"&gt;The OCaml Journal&lt;/a&gt; just published an article about real-time simulation:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"Finite Element Materials simulations (FEMs) model a continuous volume of material by breaking it down into a discrete representation with many finite parts. This article describes a simple but fun program that simulates the dynamics of a 2D system of particles and springs in real-time. The program visualizes the results using OpenGL..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob25"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-1521274366661422683?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/1521274366661422683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=1521274366661422683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1521274366661422683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/1521274366661422683'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/06/real-time-finite-element-materials.html' title='Real-time Finite Element Materials simulation'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-6674887066238310950</id><published>2008-05-26T04:49:00.000-07:00</published><updated>2008-05-26T04:51:43.853-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='remote procedure call'/><category scheme='http://www.blogger.com/atom/ns#' term='xml-light'/><category scheme='http://www.blogger.com/atom/ns#' term='ocamlnet'/><category scheme='http://www.blogger.com/atom/ns#' term='xmlrpc'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='web service'/><title type='text'>Implementing a simple XML-RPC client and server</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob24"&gt;The OCaml Journal&lt;/a&gt; just published an article explaining how both producers and consumers of remote procedure calls can be written in OCaml:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"XML-RPC is a protocol for remote procedure calls that is built upon the XML format. Method calls are packaged up by the client as an XML request sent via HTTP to the server whereupon action is taken and a response is packaged up and returned in the same way. This article describes how a complete client-server pair using XML-RPC can be designed and built from scratch in OCaml using only the XML-Light and OcamlNet libraries..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob24"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-6674887066238310950?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/6674887066238310950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=6674887066238310950' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6674887066238310950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/6674887066238310950'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/05/implementing-simple-xml-rpc-client-and.html' title='Implementing a simple XML-RPC client and server'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-7276350265478565432</id><published>2008-05-12T18:32:00.000-07:00</published><updated>2008-05-12T18:36:20.255-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='lu decomposition'/><category scheme='http://www.blogger.com/atom/ns#' term='random number'/><category scheme='http://www.blogger.com/atom/ns#' term='sparse matrix'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml journal'/><category scheme='http://www.blogger.com/atom/ns#' term='fast fourier transform'/><category scheme='http://www.blogger.com/atom/ns#' term='jacobi'/><category scheme='http://www.blogger.com/atom/ns#' term='numerical'/><category scheme='http://www.blogger.com/atom/ns#' term='scimark'/><category scheme='http://www.blogger.com/atom/ns#' term='benchmark'/><title type='text'>Porting and optimizing the SciMark2 benchmark</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob23"&gt;The OCaml Journal&lt;/a&gt; just published an article about the SciMark2 benchmark:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"The SciMark2 benchmark is a suite of numerical algorithms that were originally collated into a benchmark for scientific computing on the Java platform. Porting this benchmark to OCaml provides an excellent tutorial on the implementation of efficient numerical algorithms using the current OCaml implementation. The results illustrate the strengths and weaknesses of the current OCaml implementation in terms of performance..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob23"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-7276350265478565432?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/7276350265478565432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=7276350265478565432' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7276350265478565432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/7276350265478565432'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/05/porting-and-optimizing-scimark2.html' title='Porting and optimizing the SciMark2 benchmark'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-214739189844977000</id><published>2008-04-28T06:08:00.000-07:00</published><updated>2008-04-28T06:41:21.100-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='term rewriting'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml journal'/><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><title type='text'>Language oriented programming: Term Rewriting</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob22"&gt;The OCaml Journal&lt;/a&gt; just published an article describing term rewriting:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"An interesting and powerful alternative to the conventional term-level interpreter is called term rewriting. Rather than reducing expressions down to values, term rewriting simply evaluates expressions by performing substitutions and the result is another expression. This approach is particularly well suited to computer algebra systems such as Mathematica but is also an underappreciated alternative to dynamically-typed programming languages that can integrate useful features like pattern matching and make techniques like partial specialization far easier. This article describes how a simple term rewriter can be constructed and introduces the concept of private variant type constructors in the process..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob22"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-214739189844977000?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/214739189844977000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=214739189844977000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/214739189844977000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/214739189844977000'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/04/language-oriented-programming-term.html' title='Language oriented programming: Term Rewriting'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-2846055701655216110</id><published>2008-04-28T05:28:00.000-07:00</published><updated>2008-04-28T09:26:09.579-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrent gc'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrent'/><title type='text'>OCaml to get Concurrent Garbage Collection</title><content type='html'>&lt;p&gt;Following our exploits with Microsoft's &lt;a href="http://www.ffconsultancy.com/products/fsharp_journal/?ob"&gt;F# programming language&lt;/a&gt;, which inherits a concurrent garbage collector from their excellent common-language run-time (CLR) implementation, we have been wondering if OCaml would ever acquire a concurrent GC of its own. Concurrent garbage collection is tremendously useful in a wide variety of circumstances and is of increasing importance as the world transitions to multicore CPUs for desktop computers. Compared to OCaml, concurrency in F# makes it much easier to spawn interactive visualizations from the top-level, write high performance parallel numerical codes and keep GUI applications fluid.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The developers of OCaml at INRIA in France, led by Xavier Leroy, have long since given up on developing their own concurrent GC for OCaml, famously &lt;a href="http://caml.inria.fr/pub/ml-archives/caml-list/2002/11/64c14acb90cb14bedb2cacb73338fb15.en.html"&gt;stating&lt;/a&gt; in 2002 that developing their own concurrent GC was "Too complex" and "too hard to debug".&lt;/p&gt;&lt;p&gt;Fortunately, Jane St. Capital (one of the largest industrial users of OCaml) have chosen to fund a "multicore" &lt;a href="http://osp.janestcapital.com/wordpress/"&gt;summer project&lt;/a&gt; that aims to provide a basic concurrent garbage collector implementation for OCaml. The team from the &lt;a href="http://english.upmc.fr/UK/info/00"&gt;Université Pierre et Marie Curie&lt;/a&gt;, led by &lt;a href="http://www-spiral.lip6.fr/%7Echaillou/"&gt;Emmanuel Chailloux&lt;/a&gt;, intend to complete this project during the summer of 2008.&lt;/p&gt;&lt;p&gt;We have already written to team to suggest that they might also make their run-time compatible with the excellent LLVM project because this would make it much easier for open source developers to reuse this exciting technology.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-2846055701655216110?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/2846055701655216110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=2846055701655216110' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2846055701655216110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2846055701655216110'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/04/ocaml-to-get-concurrent-garbage.html' title='OCaml to get Concurrent Garbage Collection'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-2473944870341622689</id><published>2008-04-11T06:02:00.000-07:00</published><updated>2008-04-11T06:08:20.585-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='optional arguments'/><category scheme='http://www.blogger.com/atom/ns#' term='labeled arguments'/><title type='text'>Labeled and Optional arguments</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob21"&gt;The OCaml Journal&lt;/a&gt; just published an article describing the use of labeled and optional function arguments:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"The OCaml programming language provides a variety of useful features that are not found in many other functional programming languages. This is why OCaml is widely accepted as a functional language for practical use. Labeled and optional function arguments are two related features that can be used to great effect in simplifying interfaces. This article introduces the syntax required to define and use both labeled and optional arguments in OCaml and describes some pedagogical uses of these features, with references to existing libraries, as well as examining some of the problems often encountered by programmers using these features..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob21"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-2473944870341622689?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/2473944870341622689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=2473944870341622689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2473944870341622689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2473944870341622689'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/04/labeled-and-optional-arguments.html' title='Labeled and Optional arguments'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-5322883970567112647</id><published>2008-03-28T08:11:00.000-07:00</published><updated>2008-03-28T08:15:02.406-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='ray tracer'/><title type='text'>Nice ray tracer in OCaml</title><content type='html'>&lt;p&gt;The Bla Repository just posted an interesting &lt;a href="http://bla.thera.be/archives/17"&gt;ray tracer example&lt;/a&gt;, written entirely in OCaml.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-5322883970567112647?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/5322883970567112647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=5322883970567112647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/5322883970567112647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/5322883970567112647'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/03/nice-ray-tracer-in-ocaml.html' title='Nice ray tracer in OCaml'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-2791767113161484052</id><published>2008-03-27T10:48:00.000-07:00</published><updated>2008-03-27T10:52:41.557-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='static typing'/><category scheme='http://www.blogger.com/atom/ns#' term='reliability'/><category scheme='http://www.blogger.com/atom/ns#' term='correctness'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml journal'/><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><title type='text'>Getting the most out of Static Typing</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob20"&gt;The OCaml Journal&lt;/a&gt; just published an article explaining how OCaml's static type system can be leveraged to improve program reliability and development speed:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"The OCaml language arms programmers with one of the most sophisticated static type systems of any general-purpose programming language. This static type system can be used to remove large classes of common bugs that are otherwise tedious or impossible to track down. The benefits in terms of programmer productivity and program reliability are tremendous. However, leveraging such a type system is an art that requires significant effort to learn. This article describes idiomatic OCaml style and a variety of techniques that can be used to leverage the static type system in order to catch errors earlier and more easily..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob20"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-2791767113161484052?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/2791767113161484052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=2791767113161484052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2791767113161484052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2791767113161484052'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/03/getting-most-out-of-static-typing.html' title='Getting the most out of Static Typing'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-5901237332092137531</id><published>2008-03-09T15:09:00.000-07:00</published><updated>2008-03-09T15:13:08.425-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='ffi'/><category scheme='http://www.blogger.com/atom/ns#' term='interface'/><category scheme='http://www.blogger.com/atom/ns#' term='compiler'/><category scheme='http://www.blogger.com/atom/ns#' term='llvm'/><category scheme='http://www.blogger.com/atom/ns#' term='jit'/><title type='text'>Run-time compilation with LLVM</title><content type='html'>&lt;p&gt;&lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob19"&gt;The OCaml Journal&lt;/a&gt; just published an article describing basic use of the &lt;a href="http://www.llvm.org"&gt;LLVM&lt;/a&gt; library:&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;"The Low-Level Virtual Machine (LLVM) project brings high-performance static and JIT compilation to code generators written in the OCaml programming language. This article describes the basic use of LLVM from OCaml including both static and JIT compilation, argument passing, control flow and the compilation of expression trees..."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To read this article and more, subscribe to &lt;a href="http://www.ffconsultancy.com/products/ocaml_journal/?ob19"&gt;The OCaml Journal&lt;/a&gt; today!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-5901237332092137531?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/5901237332092137531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=5901237332092137531' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/5901237332092137531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/5901237332092137531'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/03/run-time-compilation-with-llvm.html' title='Run-time compilation with LLVM'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7920195922160761232.post-2757618861181076158</id><published>2008-03-01T01:47:00.000-08:00</published><updated>2008-03-25T19:43:17.737-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml for scientists'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Book Review: OCaml for Scientists</title><content type='html'>&lt;p&gt;Fabrice Marchant has kindly written and published the following &lt;a href="http://fabrice.marchant.free.fr/siteOCaml/books.html"&gt;review&lt;/a&gt; (also available &lt;a href="http://fabrice.marchant.free.fr/siteOCaml/OfSrevFr.html"&gt;in French&lt;/a&gt;) of the book &lt;a href="http://www.ffconsultancy.com/products/ocaml_for_scientists/?ob"&gt;OCaml for Scientists&lt;/a&gt;:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;"&lt;span style="font-style: italic;"&gt;I have read OCaml for Scientists,&lt;/span&gt; the work of Dr Jon Harrop, which is dedicated to the OCaml programming language. Even &lt;/span&gt;&lt;span style="font-style: italic;"&gt;though science and technical computing are inherent aspects of this book this is not restrictive with the exception of a few complicated examples in the final chapter.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;The OCaml language combines functional and imperative programming. It is very fast and has garbage collection. Type inference makes coding particularly concise, safe and easy. OCaml's embedded module language and object orientation form a powerful software engineering tool.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;Without requiring knowledge of ML-type languages, OCaml for Scientists teaches the reader how to use OCaml for scientific computing, including the use of several powerful libraries among the examples.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;There are few prerequisites for correctly following the book because the author introduces the classical concepts of programming (such as recursion) before progressively developing.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;That being said, the knowledge of an imperative programming language (like C or Pascal) or a functional one (such as Lisp or Scheme) is not absolutely required but would make the book more straightforward.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;An important part, at the beginning of the book, is dedicated to a proper understanding of the language itself: here one finds coverage of the functionalities offered by OCaml's many keywords, illustrated by numerous clear examples.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;This book does not content itself with being only a tutorial of the language. The author shows the proper usage of the possibilities of OCaml - such as the best programming practices - and often goes further in justifying things by studying the internal representation used by the compiler.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;Working side-by-side with practical examples, the clarity of the exposition of this part of the book constitutes what is probably one of the most efficient mediums offered to the beginner, to rapidly acquire an understanding of the basic language necessary to program.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;Dr Harrop teaches things in such a manner that reading is always easy, even when covering non-trivial scientific subjects.  The syntactic coloration, on large white pages, makes the book pleasant to open.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;These two aspects work together to give an impression of clarity and simplicity.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;The book, stuffed with examples, has a practical view of the different programming components comprising the OCaml system: The customisable  top-level, the many compilers, the dependency visualiser and profiler, are all presented together with their usage.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;The book's examples are worth a special mention. With the exception of the contents page, it is difficult to find a page which does not present several concrete examples of programming. Some of them are surprisingly elaborate.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;Similarly, on the practical side:  The use of certain libraries, such as "command line arguments, big arrays, vector matrix and lexing and parsing, are presented in detail.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;Despite the scientific focus, the first few chapters are of general interest.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Other parts such as visualisation (with OpenGL) or lexing and parsing, are  perhaps particularly useful for game designers.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;In addition to OCaml for Scientists, I own "Programmation fonctionnelle, générique et objet (Une introduction avec le langage OCaml)" by Philippe Narbel. The two works complement each other, OCaml for Scientists being more concrete. To cite only the unique parts of OCaml for Scientists, it presents libraries and studies optimisation in detail.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;Certainly, IMHO, a section detailing the writing of functors would have been welcome. However, studying the book gives an understanding of the language such that one can undertake substantial programming projects.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;The book, preceded by a glossary, is divided into ten thick chapters:&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;Introduction, Program Structure, Data Structures, Numérical Analysis, Input and Output, Visualization, Optimization, Libraries, Simple Examples and Complete Examples, Bibliography, Advanced Topics and Troubleshouting.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;To conclude, OCaml for Scientists is an excellent book, clear and practical, which can be used as a reference work.&lt;/span&gt;"&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7920195922160761232-2757618861181076158?l=ocamlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocamlnews.blogspot.com/feeds/2757618861181076158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7920195922160761232&amp;postID=2757618861181076158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2757618861181076158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7920195922160761232/posts/default/2757618861181076158'/><link rel='alternate' type='text/html' href='http://ocamlnews.blogspot.com/2008/03/book-review-ocaml-for-scientists.html' title='Book Review: OCaml for Scientists'/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
