* caml: camlp4 revised syntax
[not found] <mailman.7.1184494090.1020.caml-list@yquem.inria.fr>
@ 2007-07-15 10:48 ` tmp123
2007-07-15 11:42 ` unboxed scalars - was [Caml-list] " Basile STARYNKEVITCH
` (2 more replies)
2007-07-21 11:31 ` dml tmp123
1 sibling, 3 replies; 7+ messages in thread
From: tmp123 @ 2007-07-15 10:48 UTC (permalink / raw)
To: caml-list
Hello,
First of all, thanks to all people who develops this language and
related tools, and to people who supports them using it.
I decided to use it in several developments. When finished, the
developed modules will be made public, if they are enough generic (best
place to publish it?)
Two points still causing some troubles:
1) The internal integer coding:
It seems that an integer of value "x" is internally stored like "2x*1" (
x shift 1 or 1 ). That is a loss of performance, not only when doing
calculations, but also, by example, when using the integer as index of a
string character, ... . Usage of native-int doesn't improves the subject.
2) Syntax:
It seems better to use the camlp4 revised syntax than the usual one. The
reason is, by example, to skip this kind of errors:
initial version:
a1;
a2;
a3;
...
change to forget all exceptions produced by "a1": next source is
incorrect with normal syntax (at execution time), but correct with
revised one:
try
a1
with
_ -> ();
a2;
a3;
However, the revised syntax has a paradox. An "if" statement is, usually:
if ... then (
...
) else (
...
)
while a "for" statement can be:
for ... do
...
done
or
for ... do {
...
}
but not the expected one:
for ... (
)
why not a "for" that, as "let", "if" or "value", applies only to the
next statment (or grouped list of them)? Knows someone if it is very
dificult to modify the syntax to accept this?
Thanks again.
PS: direct mail to this address is filtered. To skip the filter, add
word "caml" to the subject of the mail.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: unboxed scalars - was [Caml-list] caml: camlp4 revised syntax
2007-07-15 10:48 ` caml: camlp4 revised syntax tmp123
@ 2007-07-15 11:42 ` Basile STARYNKEVITCH
2007-07-15 13:16 ` Gerd Stolpmann
2007-07-15 17:50 ` Christophe Raffalli
2007-07-16 16:40 ` Richard Jones
2007-07-17 3:08 ` Jon Harrop
2 siblings, 2 replies; 7+ messages in thread
From: Basile STARYNKEVITCH @ 2007-07-15 11:42 UTC (permalink / raw)
To: caml-list
tmp123@menta.net wrote:
> Hello,
>
> First of all, thanks to all people who develops this language and
> related tools, and to people who supports them using it.
>
> I decided to use it in several developments. When finished, the
> developed modules will be made public, if they are enough generic (best
> place to publish it?)
>
> Two points still causing some troubles:
>
> 1) The internal integer coding:
>
> It seems that an integer of value "x" is internally stored like "2x*1" (
> x shift 1 or 1 ). That is a loss of performance, not only when doing
> calculations, but also, by example, when using the integer as index of a
> string character, ... . Usage of native-int doesn't improves the subject.
This is unlikely to change any soon. It is (nearly) required by polymorphic functions (like List.map).
Changing it would require a very major change of the compiler, which should specialize all polymorphic functions for
such unboxed scalar types. If it was done, it would require either a whole program compilation, or a possible
(exponential) bloat of generated code size (basically for each polymorphic function, you would have to generate all the
scalar forms in addition of the polymorphic one).
I'm not an Ocaml implementation expert, so I could be wrong, and I would be delighted to be confirmed or infirmed by the
Ocaml guru implementors (e.g. Xavier Leroy).
IIRC, the ML/Ton implementation is rumored to do this kind of unboxing.
Besides, I am pretty sure than on current processors, unboxing scalars is probably more a win because of memory & cache
issues than because of the additional shift & add required to transform a 2n+1 into n or vice versa. Such ALU operations
are very cheap today.
--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net | mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mine, sont seulement les miennes} ***
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: unboxed scalars - was [Caml-list] caml: camlp4 revised syntax
2007-07-15 11:42 ` unboxed scalars - was [Caml-list] " Basile STARYNKEVITCH
@ 2007-07-15 13:16 ` Gerd Stolpmann
2007-07-15 17:50 ` Christophe Raffalli
1 sibling, 0 replies; 7+ messages in thread
From: Gerd Stolpmann @ 2007-07-15 13:16 UTC (permalink / raw)
To: Basile STARYNKEVITCH; +Cc: caml-list
Am Sonntag, den 15.07.2007, 13:42 +0200 schrieb Basile STARYNKEVITCH:
> Besides, I am pretty sure than on current processors, unboxing scalars is probably more a win because of memory & cache
> issues than because of the additional shift & add required to transform a 2n+1 into n or vice versa. Such ALU operations
> are very cheap today.
Absolutely. Given that any non-trivial program spends 20-40% of its time
in garbage collection, the net effect is probably positive, i.e. the GC
becomes more faster because of the tagged int representation than the
additional ALU cycles cost. (Any unboxing without tagging will make the
GC algorithm more complex and thus slower.)
You don't see this net effect in too simplistic benchmarks since you
need test programs of certain complexity.
Gerd
--
------------------------------------------------------------
Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany
gerd@gerd-stolpmann.de http://www.gerd-stolpmann.de
Phone: +49-6151-153855 Fax: +49-6151-997714
------------------------------------------------------------
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: unboxed scalars - was [Caml-list] caml: camlp4 revised syntax
2007-07-15 11:42 ` unboxed scalars - was [Caml-list] " Basile STARYNKEVITCH
2007-07-15 13:16 ` Gerd Stolpmann
@ 2007-07-15 17:50 ` Christophe Raffalli
1 sibling, 0 replies; 7+ messages in thread
From: Christophe Raffalli @ 2007-07-15 17:50 UTC (permalink / raw)
To: Basile STARYNKEVITCH, caml-list
Basile STARYNKEVITCH a écrit :
> tmp123@menta.net wrote:
>> Hello,
>>
>> First of all, thanks to all people who develops this language and
>> related tools, and to people who supports them using it.
>>
>> I decided to use it in several developments. When finished, the
>> developed modules will be made public, if they are enough generic
>> (best place to publish it?)
>>
>> Two points still causing some troubles:
>>
>> 1) The internal integer coding:
>>
>> It seems that an integer of value "x" is internally stored like
>> "2x*1" ( x shift 1 or 1 ). That is a loss of performance, not only
>> when doing calculations, but also, by example, when using the integer
>> as index of a string character, ... . Usage of native-int doesn't
>> improves the subject.
>
> This is unlikely to change any soon. It is (nearly) required by
> polymorphic functions (like List.map).
>
> Changing it would require a very major change of the compiler, which
> should specialize all polymorphic functions for such unboxed scalar
> types. If it was done, it would require either a whole program
> compilation, or a possible (exponential) bloat of generated code size
> (basically for each polymorphic function, you would have to generate
> all the scalar forms in addition of the polymorphic one).
>
Just look at MLTon, everything is monomorphised (and defunctorized)
before generating assembly code ... and it works, because polymorphic
functions are used
in fact with a very small set of types (often one !) and only small
function like map are used with many type ... So MLTon way may be the
future of ML
Christophe
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Caml-list] caml: camlp4 revised syntax
2007-07-15 10:48 ` caml: camlp4 revised syntax tmp123
2007-07-15 11:42 ` unboxed scalars - was [Caml-list] " Basile STARYNKEVITCH
@ 2007-07-16 16:40 ` Richard Jones
2007-07-17 3:08 ` Jon Harrop
2 siblings, 0 replies; 7+ messages in thread
From: Richard Jones @ 2007-07-16 16:40 UTC (permalink / raw)
To: tmp123; +Cc: caml-list
On Sun, Jul 15, 2007 at 12:48:42PM +0200, tmp123@menta.net wrote:
> 1) The internal integer coding:
>
> It seems that an integer of value "x" is internally stored like "2x*1" (
> x shift 1 or 1 ). That is a loss of performance, not only when doing
> calculations, but also, by example, when using the integer as index of a
> string character, ... . Usage of native-int doesn't improves the subject.
The cost is not as great as you think:
http://caml.inria.fr/pub/ml-archives/caml-list/2004/07/e86a25aa6c6a6a7d08dd7eb50cfd5d52.en.html
You also need to take into account the benefit of this representation
in other areas (eg. the GC). Let's see you compare the performance of
real programs before jumping to conclusions.
Rich.
--
Richard Jones
Red Hat
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Caml-list] caml: camlp4 revised syntax
2007-07-15 10:48 ` caml: camlp4 revised syntax tmp123
2007-07-15 11:42 ` unboxed scalars - was [Caml-list] " Basile STARYNKEVITCH
2007-07-16 16:40 ` Richard Jones
@ 2007-07-17 3:08 ` Jon Harrop
2 siblings, 0 replies; 7+ messages in thread
From: Jon Harrop @ 2007-07-17 3:08 UTC (permalink / raw)
To: caml-list
On Sunday 15 July 2007 11:48:42 tmp123@menta.net wrote:
> 1) The internal integer coding:
>
> It seems that an integer of value "x" is internally stored like "2x*1" (
> x shift 1 or 1 ). That is a loss of performance, not only when doing
> calculations, but also, by example, when using the integer as index of a
> string character, ... . Usage of native-int doesn't improves the subject.
This is a trade-off, of course. You can use untagged but usually boxed ints in
OCaml via the Int32 module.
> 2) Syntax:
>
> It seems better to use the camlp4 revised syntax than the usual one. The
> reason is, by example, to skip this kind of errors...
Such misunderstandings disappear when you use auto indentation in emacs.
--
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
OCaml for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists/?e
^ permalink raw reply [flat|nested] 7+ messages in thread
* dml
[not found] <mailman.7.1184494090.1020.caml-list@yquem.inria.fr>
2007-07-15 10:48 ` caml: camlp4 revised syntax tmp123
@ 2007-07-21 11:31 ` tmp123
1 sibling, 0 replies; 7+ messages in thread
From: tmp123 @ 2007-07-21 11:31 UTC (permalink / raw)
To: caml-list
Hello,
In order to have an "eval" function, I'm trying to compile "dml".
Two problems have appeared up to now. For the first one I've solution,
but not for the second one. Any help will be welcome.
1)
The first problem has appeared in the "configure" file of this package.
The result of "ocaml -v" is "3.10.0". When "configure" executes the line:
OCAML_MINOR=$(echo $OCAMLVER | cut -d '.' -f 2)
the variable takes a vlue of "0", instead of "10".
The problem can be skip changing the previous line to:
OCAML_MINOR=$(echo $OCAMLVER | cut -d '.' -f 2)
2) When executing "make", the following error appears:
ocamlc -pp \
"camlp4 -I /usr/local/lib/ocaml/camlp4 pa_o.cmo pa_extend.cmo
q_MLast.cmo pr_dump.cmo -impl " \
-I /usr/local/lib/ocaml/camlp4 -I ../rtcg -c -impl dml.ml4
File "dml.ml4", line 82, characters 56-65:
While expanding quotation "expr" in a position of "expr":
Parse error: [ctyp] expected after "(" (in [ctyp])
where the related line is the line "Some s -> ..." of:
let build_patt_fun loc body = function
SimplePatt (Some id) ->
<:expr< fun $lid:id$ -> $body$ >>
| SimplePatt None ->
<:expr< fun _ -> $body$ >>
| TuplePatt l ->
let tuple_id, new_body, typ = gen_tuple_patts loc body l in
(match tuple_id with
None -> <:expr< fun _ -> $body$ >>
| Some s -> <:expr< fun ( $lid:s$ : Rtcg.code ($list:typ$))
-> $new_body$ >>)
No idea of where is the error here.
Thanks a lot.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2007-07-21 11:31 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <mailman.7.1184494090.1020.caml-list@yquem.inria.fr>
2007-07-15 10:48 ` caml: camlp4 revised syntax tmp123
2007-07-15 11:42 ` unboxed scalars - was [Caml-list] " Basile STARYNKEVITCH
2007-07-15 13:16 ` Gerd Stolpmann
2007-07-15 17:50 ` Christophe Raffalli
2007-07-16 16:40 ` Richard Jones
2007-07-17 3:08 ` Jon Harrop
2007-07-21 11:31 ` dml tmp123
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox