Martin Jambon | 1 May 2011 01:10

Re: Differences between Array and Strings

On 04/30/11 06:34, David Allsopp wrote:
> Radu Grigore wrote:
>> On Friday, April 29, 2011 12:51:59 PM UTC+1, louis.... <at> ens.fr wrote:
>>>> let l () = "1" ;;
>>>> [...]
>>>> l()==l();;
>>> # val l : unit -> string = <fun>
>>> # [...]
>>> # - : bool = true
>>
>> Is there a good reason for this behavior?
> 
> Whether it's good is debatable, but in most instances you don't want a fresh string being allocated each
time for a constant value as it would be a waste of time and memory (most strings are used immutably).

I concur.
And the strings that we mutate are buffers which are not created from
string literals anyway.

Martin

--

-- 
Caml-list mailing list.  Subscription management and archives:
https://sympa-roc.inria.fr/wws/info/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

redfire | 1 May 2011 12:10
Picon
Favicon

Byte code generation for the Ocaml virtual machine (ZAM)

Hello all,

I'm currently doing a student project where I have to generate bytecode
for the caml virtual machine. I convert a subset of the Scheme language.
My main issue concerns the dynamic typing mechanism. My idea is to store
every values I manipulate like this (type, value).
But I have a problem with the generation of the data section. For the
moment, I found on the Internet a snippet using the Obj module but I
don't exactly know what this implies in the rest of the code (especially
Obj.repr). The Obj.repr allows the possibility to mix datas of different
type in the same table. Then I can do an output_value (Pervasives) on it
and my data section seems to be correct.

I have a problem to get back these information. With the snippet using
Obj, I was hoping to get a block structure with field 0 -> type and
field 1 -> value. But it doesn't seem to be the case.

With a piece of code maybe it's going to be clearer.

Example of data : (2, 5). 2 is for the type, so here we suppose that 2
means integer and 5 the value integer.
For the moment, I store Obj.repr (2, 5) in a table (code from the
snippet of the Internet), but it doesn't work.
At generation time, I do a output_value oc t where t is the table
containing all tuples.

So what I'm looking for, is a way to get back a block of size 2 with a
field 0 for the type and then field 1 for the value. Is it possible ?

Thank you for your time ;-)
(Continue reading)

Basile Starynkevitch | 1 May 2011 12:30

Re: Byte code generation for the Ocaml virtual machine (ZAM)

On Sun, 01 May 2011 12:10:54 +0200
redfire <jeremie.salvucci <at> free.fr> wrote:

> Hello all,
> 
> I'm currently doing a student project where I have to generate bytecode
> for the caml virtual machine. I convert a subset of the Scheme language.
> My main issue concerns the dynamic typing mechanism. My idea is to store
> every values I manipulate like this (type, value).

Salut Jérémie, 

je suis très heureux de te lire. Par contre, je n'ai pas compris ton message (alors que je connais bien Ocaml
et bien son bytecode). C'est quoi ton but exact? Coder un Scheme en Ocaml?

Amicalement

-- 
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} ***

--

-- 
Caml-list mailing list.  Subscription management and archives:
https://sympa-roc.inria.fr/wws/info/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

(Continue reading)

redfire | 1 May 2011 12:55
Picon
Favicon

Re: Byte code generation for the Ocaml virtual machine (ZAM)

Salut Basile,

Je compile un sous ensemble de Scheme vers la ZAM. La machine virtuelle
d'Ocaml n'étant pas typée pour Scheme, je dois implémenter un mécanisme
qui va me permettre de tester les types à l'exécution.

D'après ce que j'ai compris, la machine virtuelle ne prend en compte que
les entiers de base. Le reste est géré par l'intermédiaire de primitives
C. Donc par exemple, si dans le programme source Scheme il est écrit
(display 5), je voulais stocker dans l'environnement global un couple
(2, 5). Le 2 représentant le type integer ici. Comme ça à l'exécution,
je sais que je  dois convertir cet entier en une chaîne de caractères à
l'aide de la primitive C correspondante.
Donc ici, je souhaitais sérialiser (2, 5) dans la zone data (avec le
module Marshall) en espérant récupérer un bloc composé d'au moins deux
champs dont deux d'entre eux seraient, le type et la valeur.
Malheureusement, je ne parviens pas à ce résultat. Je ne récupère que le
5.

En écrivant ce mail, je pense à une autre technique qui consisterait
plutôt à sérialiser seulement la valeur (vu que je ne parviens qu'à
récupérer celle-ci) et à générer le bloc à l'aide de MAKEBLOCK. Mais ça
me ferait modifier pas mal de choses.

Donc mon principal problème concerne la mise en place de ces couples
dans la zone data et leur récupération. Dans le mail précédent,
j'expliquais que j'ai trouvé un exemple sur internet qui sérialisait les
données dans un tableau à l'aide de Obj.repr pour mettre des données de
types différents dans un même tableau. Ensuite il fait un output value
et ça fonctionne. Sauf que ce morceau de code ne travaille que sur des
(Continue reading)

redfire | 1 May 2011 15:24
Picon
Favicon

Re: Byte code generation for the Ocaml virtual machine (ZAM)

Bonjour,

Le dimanche 01 mai 2011 à 15:01 +0200, Guillaume Yziquel a écrit :
> Bonjour.
> 
> Je pense que cela serait une bonne idée que vous soyez plus explicite
> sur ce que vous faites et là où cela ne marche pas. À priori, je ne vois
> pas pourquoi cela ne serait pas possible, au contraire. Mais je me vois
> mal vous répondre sans plus de détails.
> 
> Le Sunday 01 May 2011 à 12:55:07 (+0200), redfire a écrit :
> > Salut Basile,
> > 
> > Je compile un sous ensemble de Scheme vers la ZAM. La machine virtuelle
> > d'Ocaml n'étant pas typée pour Scheme, je dois implémenter un mécanisme
> > qui va me permettre de tester les types à l'exécution.
> > 
> > D'après ce que j'ai compris, la machine virtuelle ne prend en compte que
> > les entiers de base. Le reste est géré par l'intermédiaire de primitives
> > C. Donc par exemple, si dans le programme source Scheme il est écrit
> > (display 5), je voulais stocker dans l'environnement global un couple
> > (2, 5). Le 2 représentant le type integer ici. Comme ça à l'exécution,
> > je sais que je  dois convertir cet entier en une chaîne de caractères à
> > l'aide de la primitive C correspondante.
> > Donc ici, je souhaitais sérialiser (2, 5) dans la zone data (avec le
> > module Marshall) en espérant récupérer un bloc composé d'au moins deux
> > champs dont deux d'entre eux seraient, le type et la valeur.
> > Malheureusement, je ne parviens pas à ce résultat. Je ne récupère que le
> > 5.
> 
(Continue reading)

Guillaume Yziquel | 1 May 2011 16:15
Picon
Favicon

Re: Byte code generation for the Ocaml virtual machine (ZAM)

Le Sunday 01 May 2011 à 12:55:07 (+0200), redfire a écrit :
> Salut Basile,
> 
> Je compile un sous ensemble de Scheme vers la ZAM. La machine virtuelle
> d'Ocaml n'étant pas typée pour Scheme, je dois implémenter un mécanisme
> qui va me permettre de tester les types à l'exécution.
> 
> D'après ce que j'ai compris, la machine virtuelle ne prend en compte que
> les entiers de base. Le reste est géré par l'intermédiaire de primitives
> C. Donc par exemple, si dans le programme source Scheme il est écrit
> (display 5), je voulais stocker dans l'environnement global un couple
> (2, 5). Le 2 représentant le type integer ici. Comme ça à l'exécution,
> je sais que je  dois convertir cet entier en une chaîne de caractères à
> l'aide de la primitive C correspondante.
> Donc ici, je souhaitais sérialiser (2, 5) dans la zone data (avec le
> module Marshall) en espérant récupérer un bloc composé d'au moins deux
> champs dont deux d'entre eux seraient, le type et la valeur.
> Malheureusement, je ne parviens pas à ce résultat. Je ne récupère que le
> 5.

yziquel <at> seldon:~/sandbox/ocaml/bytecode$ cat couple.ml 
let get_type : int * int -> int = function (t, _) -> t 
yziquel <at> seldon:~/sandbox/ocaml/bytecode$ ocamlc -c -dlambda couple.ml 
(setglobal Couple!
  (let (get_type/1030 (function param/1033 (field 0 param/1033)))
    (makeblock 0 get_type/1030)))
yziquel <at> seldon:~/sandbox/ocaml/bytecode$ ls
couple.cmi  couple.cmo  couple.ml
yziquel <at> seldon:~/sandbox/ocaml/bytecode$ ocamldumpobj couple.cmo 
## start of ocaml dump of "couple.cmo"
(Continue reading)

Peter Ronnquist | 1 May 2011 16:24
Picon

f#/mono vs ocaml runtime system - open gl animation screen tearing.

While making the simple examples for SDL+opengl for the C language I
realized that even the C version showed "stuttering" but the fsharp
version is completely smooth and synced to the vblank.
Appearantly the fsharp version somehow manages to sync to the vblank
probably thanks to  the openTK api:

  do base.VSync <- VSyncMode.On

I had to configure the nvidia driver with
X Server XVideo Settings:
Video Texture Adaptor -> Sync to VBlank
Video Blitter Adaptor Settings -> Sync to VBlank

OpenGL Settings
Performance -> Sync to VBlank
                   -> Allow Flipping

then both the C sdl opengl version and ocaml sdl openg version worked smoothly.

So to sum it up, I had the wrong setting of the nvidia driver and was
fooled sinced the fsharp version still synced with the vblank.

I am posting the ocaml sdl openg test program here in case someone
would like to try it on debian 6 squeeze:

Sorry for the "false alarm", it was not ocamls fault,  and thank you
for the good advice.

(*

(Continue reading)

Sen Horak | 1 May 2011 20:07
Picon

Polymorphism question

Hi,

I am trying to model a situation in which a caller calls a combination
of two functions:

- The first is a postprocessor that depends on the invocation g: a -> 'b
- The second is a higher order function: f: c x d x g -> 'b

One could leave the application of 'g' to the caller, making f: c x d -> a.
Then the caller would run:
let res_a = f inp_c inp_d in my_g res_a

But it would be nice to hide 'a' from the caller and have her call:

let res_b = f inp_c inp_d my_g

I guess I could use functors, and configure a generic f with a
particular type of g. Does that seem right, and if so could there be a
simper or easier way?

Sen

--

-- 
Caml-list mailing list.  Subscription management and archives:
https://sympa-roc.inria.fr/wws/info/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Gaetan Hains | 1 May 2011 21:19
Picon

Fwd: invitation soutenance

Bonjour,

J'ai le plaisir de vous inviter à la soutenance de ma thèse  intitulée

"Algorithms for XML Stream Processing: Massive Data, External Memory and Scalable Performance".

 Elle aura lieu le 16 mai 2011, à 10h,  à la Faculté des Sciences et Technologie de l'Université Paris-Est Créteil Val de Marne, dans la salle des thèses (Bâtiment P2 niveau dalle),
et à la fin de la soutenance  un pot sera donné dans la même salle.

Jury :

- Rapporteurs :
 Rada CHIRKOVA, North Carolina State University,  USA
 Véronique BENZAKEN, Université Paris-Sud 11,  France

- Examinateurs :
  Mohamed ZERGAOUI, Innovimax SARL, France
  Mostafa BAMHA, Université d’Orléans, France

- Directeur de thèse :
  Gaétan, HAINS Université Paris-Est, France

Résumé :

Plusieurs applications modernes nécessitent un traitement de flux massifs de données XML, cela crée des défis techniques. Parmi ces derniers, il y a la conception et la mise en ouvre d’outils pour optimiser le traitement des requêtes XPath. Il s’agit alors de fournir une estimation précise des coûts de ces requêtes traitées sur un flux massif de données XML.

Dans cette thèse, nous proposons un nouveau modèle de prévision de performance qui estime à priori le coût (en terme d’espace utilisé et de temps écoulé) pour les requêtes structurelles du fragment de langage Forward XPath.
Ce faisant, nous réalisons une étude expérimentale pour confirmer la relation linéaire entre le traitement de flux, et les ressources d’accès aux données. Par conséquent, nous présentons un modèle mathématique (utilisant des régressions linéaires) pour prévoir le coût d’une requête XPath.
En outre, nous présentons une technique nouvelle d’estimation de la sélectivité. Elle constituée de deux éléments. Le premier est le résumé path tree ou arbre des chemins: une présentation concise et précise de la structure d’un document XML. Le second est l’algorithme d’estimation de sélectivité: un algorithme efficace de flux pour traverser l’arbredes chemins afin d’estimer les valeurs des paramètres de coût. Ces paramètres sont utilisés par le modèle mathématique pour déterminer le coût d’une requête XPath.
Nous comparons les performances de notre modèle avec les approches existantes. De plus, nous présentons un cas d’utilisation de celui-ci dans un système en ligne appelé "online stream-querying system". Le système utilise notre modèle de prédiction de performance pour estimer le coût (en terme de temps / mémoire) d’une requête XPath. En outre, il fournit une estimation précise à l’auteur de la requête relativement au coût et au volume de sa requête. Ce cas d’utilisation illustre les avantages pratiques de la gestion de performance avec nos techniques.

Mots clés: Traitement de flux, données XML, requêtes XPath, estimation de sélectivité, Modèle de performance, optimisation de requêtes.


""


--
Muath ALRAMMAL, Ph.D. student.
LACL, Université Paris-Est, 94000 Créteil,
muath.alrammal <at> u-pec.fr

SW Engineer at Innovimax SARL
Consulting, Training & XML Development
9, impasse des Orteaux
75020 Paris, France

Please consider the environment before printing this e-mail



--
Gaétan Hains, Professor of Computer Science
LACL Université Paris-Est & EXQIM SAS Paris
+33 678 25 58 22 gaetan.hains <at> u-pec.fr

Edgar Friendly | 1 May 2011 21:32
Picon
Gravatar

Re: Polymorphism question

On 05/01/2011 02:07 PM, Sen Horak wrote:
> Hi,
>
> I am trying to model a situation in which a caller calls a combination
> of two functions:
> let res_a = f inp_c inp_d in my_g res_a
>
> But it would be nice to hide 'a' from the caller and have her call:
> let res_b = f inp_c inp_d my_g
>
> I guess I could use functors, and configure a generic f with a
> particular type of g. Does that seem right, and if so could there be a
> simper or easier way?
Yes:
let f_simplified inp_c inp_d my_g = let res_a = f inp_c inp_d in my_g res_a

If you want, you can inline f_simplified into the original f, or use 
some sugar notation included in both batteries and core as:
let f_simplified c d g = f c d |> g

This is a straightforward application of higher order functions, where 
the function g is taken as a parameter of f_simplified and called from 
inside it.  The type of f_simplified is 'c -> 'd -> ('a -> 'b) -> 'b, 
showing the third parameter (g) has type ('a -> 'b).

If I were designing this, I'd have the caller use |> to convert the 
output instead of putting this in your function.

E.

--

-- 
Caml-list mailing list.  Subscription management and archives:
https://sympa-roc.inria.fr/wws/info/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Gmane