I am currently writing a concurrent server under contract in F#. Due to the 
poor performance of the default .NET serialization (over 170x slower than 
Marshal in OCaml!), I had to completely replace the serialization layer. 
Ideally, I would just write a script to compile my type definitions into 
serializers and deserializers over them. However, I haven't found time to do 
that yet so I am maintaining a set of combinators instead. They account for 
over 15% of the source code now. Every time I change a type (e.g. adding a 
field to a record type), I must update the combinators to reflect the changes. 
This is getting seriously tedious as the project is experimental and my types 
need to evolve rapidly.

If I were using OCaml, Marshal would be easily fast enough and I wouldn't even 
need to update my type definitions by hand because I could use structural 
typing (polymorphic variants and objects). Unfortunately, this is not yet 
possible in F#. Another problem area has been the incrementality of garbage 
collection. OCaml is good in this respect among functional languages but still 
orders of magnitude behind the state-of-the-art. With enough care and 
attention, .NET can be almost as good as OCaml is ordinarily but .NET's worse 
cases are horrific:

  
http://flyingfrogblog.blogspot.com/2010/10/can-you-repro-this-64-bit-net-gc-bug.html

Cheers,
Jon.

> -----Original Message-----
> From: caml-list-boun...@yquem.inria.fr [mailto:caml-list-
> boun...@yquem.inria.fr] On Behalf Of Stephan Tolksdorf
> Sent: 10 November 2010 16:11
> To: caml-l...@inria.fr
> Subject: Re: [Caml-list] Infix function composition operator
> 
> On Wed, Nov 10, 2010 at 14:13 -0000, Jon Harrop wrote:
> > However, I don't see it as a useful advantage in practice because
> parser combinators are so tedious during development (they require
> constant attention as types evolve): you want code generation like
> ocamlyacc or camlp4. OCaml is a very strong contender here, of course.
> 
> Could you maybe elaborate a bit on what you find tedious with regard to
> evolving types in the context of parser combinators?
> 
> In my parser code (using FParsec in F#) most types get inferred by the
> compiler and in the remaining instances the type annotations can hardly
> be called tedious. Actually, I find the types and the Visual Studio
> tooltips with the inferred types rather helpful for development.
> 
> - Stephan
> 
> >
> > Cheers,
> > Jon.
> >
> >> -----Original Message-----
> >> From: m...@proof-technologies.com [mailto:m...@proof-
> technologies.com]
> >> Sent: 10 November 2010 13:44
> >> To: jonathandeanhar...@googlemail.com; ymin...@gmail.com;
> >> ar...@noblesamurai.com
> >> Cc: caml-l...@inria.fr
> >> Subject: Re: [Caml-list] Infix function composition operator
> >>
> >> So how does value restriction affect things here?  (excuse my lack
> of
> >> knowledge)
> >>
> >> One thing about using a pipeline like this is that it relies on '|>'
> >> being
> >> left-associative (which it is due to OCaml's convention on operators
> >> that
> >> start with "|").
> >>
> >> Mark.
> >>
> >>
> >> on 10/11/10 12:52 PM, Jon Harrop<jonathandeanhar...@googlemail.com>
> >> wrote:
> >>
> >>> A pipeline operator is usually preferred over function composition
> in
> >> impure
> >>> languages like OCaml and F# due to the value restriction. For
> >> example,
> >> your
> >>> example would be written in F# as:
> >>>
> >>> x |>  op1 |>  op2 |>  op3 |>  op4 |>  op5
> >>>
> >>> This style is very common in F#, particularly when dealing with
> >> collections.
> >>>
> >>> Cheers,
> >>> Jon.
> >>>
> >>>> -----Original Message-----
> >>>> From: caml-list-boun...@yquem.inria.fr [mailto:caml-list-
> >>>> boun...@yquem.inria.fr] On Behalf Of m...@proof-technologies.com
> >>>> Sent: 10 November 2010 07:00
> >>>> To: ymin...@gmail.com; ar...@noblesamurai.com
> >>>> Cc: caml-l...@inria.fr
> >>>> Subject: Re: [Caml-list] Infix function composition operator
> >>>>
> >>>> on 10/11/10 3:45 AM, ymin...@gmail.com wrote:
> >>>>
> >>>>> This is probably a minority opinion, but I have written and read
> >>>> quite a
> >>>> lot
> >>>>> of OCaml code over the years, and I've seen surprisingly few
> >>>> effective
> >>>> uses
> >>>>> of the composition operator.  Somehow, I usually find that code
> >> that
> >>>> avoids
> >>>>> it is simpler and easier to read.
> >>>>
> >>>> I agree that using a composition operator can make the code
> obtuse,
> >> and
> >>>> so
> >>>> should not be overused.  But it's incredibly useful for certain
> >>>> situations:
> >>>>
> >>>> 1) If you are performing a long chain of composed operations, it
> >> avoids
> >>>> nested bracketing piling up.
> >>>>
> >>>> For example:
> >>>>        (op5<<- op4<<- op3<<- op2<<- op1) x
> >>>> Instead of:
> >>>>        op5 (op4 (op3 (op2 (op1 x))))
> >>>>
> >>>> This sort of thing happens quite a lot in certain applications,
> e.g.
> >> in
> >>>> language processing, to get at subexpressions.
> >>>>
> >>>> 2) Creating an anonymous function to be passed as an argument, it
> >>>> avoids
> >>>> explicitly mentioning arguments of that function.
> >>>>
> >>>> This sort of thing can happen a lot in functional programming
> >>>> generally.
> >>>>
> >>>> For example:
> >>>>        List.map (op2<<- op1) xs
> >>>> Instead of:
> >>>>        List.map (fun x ->  op2 (op1 x)) xs
> >>>>
> >>>> Mark Adams
> >>>>
> >>>> _______________________________________________
> >>>> Caml-list mailing list. Subscription management:
> >>>> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> >>>> Archives: http://caml.inria.fr
> >>>> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> >>>> Bug reports: http://caml.inria.fr/bin/caml-bugs
> >>>
> >>>
> >>>
> >>>
> >
> > _______________________________________________
> > Caml-list mailing list. Subscription management:
> > http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> > Archives: http://caml.inria.fr
> > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> > Bug reports: http://caml.inria.fr/bin/caml-bugs
> >
> 
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs

_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Reply via email to