flux changed the topic of #ocaml to: Discussions about the OCaml programming language | http://caml.inria.fr/ | OCaml 4.00.1 http://bit.ly/UHeZyT | http://www.ocaml.org | Public logs at http://tunes.org/~nef/logs/ocaml/
yezariaely has quit [Remote host closed the connection]
yezariaely has joined #ocaml
ollehar has quit [Ping timeout: 276 seconds]
<bernardofpc> tobiasBor> (I think that list.revert isn't fair isn't it ?) -> Batteries has a Obj.magic that makes some "list-building by ::" tail-recursive
<bernardofpc> (it lets the "next" pointer "dangling" from one iteration to the following
eikke has quit [Ping timeout: 256 seconds]
darkf has joined #ocaml
Anarchos has quit [Quit: Vision[0.9.7-H-090423]: i've been blurred!]
jcao219 has joined #ocaml
ontologiae has quit [Ping timeout: 264 seconds]
jcao219_ has joined #ocaml
thelema_ has joined #ocaml
bobry_ has joined #ocaml
jcao219 has quit [Read error: Connection reset by peer]
bobry has quit [Ping timeout: 245 seconds]
dwmw2 has quit [Ping timeout: 245 seconds]
thelema has quit [Ping timeout: 245 seconds]
vpm has quit [Ping timeout: 245 seconds]
rossberg has quit [Ping timeout: 245 seconds]
rednovae has quit [Ping timeout: 245 seconds]
rossberg has joined #ocaml
rednovae has joined #ocaml
vpm has joined #ocaml
fasta_ has joined #ocaml
dwmw2_gone has joined #ocaml
bitbckt has quit [Ping timeout: 264 seconds]
stomp has quit [Ping timeout: 264 seconds]
fasta has quit [Ping timeout: 264 seconds]
bitbckt has joined #ocaml
stomp has joined #ocaml
jcao219_ has quit [*.net *.split]
rks_ has quit [*.net *.split]
troydm has quit [*.net *.split]
stephe- has quit [*.net *.split]
lopex has quit [*.net *.split]
Armael has quit [*.net *.split]
jave has quit [*.net *.split]
jlouis has quit [*.net *.split]
TaXules has quit [*.net *.split]
bobry_ is now known as bobry
jave_ has joined #ocaml
rks_ has joined #ocaml
stephe has joined #ocaml
lopex has joined #ocaml
jcao219_ has joined #ocaml
jlouis has joined #ocaml
TaXules has joined #ocaml
q66 has quit [Remote host closed the connection]
pkrnj has joined #ocaml
madroach has quit [Ping timeout: 248 seconds]
madroach has joined #ocaml
thelema_ has quit [Remote host closed the connection]
stomp_ has joined #ocaml
stomp has quit [Ping timeout: 276 seconds]
thelema has joined #ocaml
Brocoli_ has joined #ocaml
troydm has joined #ocaml
bitbckt_ has joined #ocaml
ttm has joined #ocaml
bitbckt has quit [Ping timeout: 245 seconds]
bitbckt_ is now known as bitbckt
bitbckt has quit [Changing host]
bitbckt has joined #ocaml
The_third_man has quit [Ping timeout: 245 seconds]
pkrnj has quit [Quit: Textual IRC Client: www.textualapp.com]
companion_square has joined #ocaml
companion_cube has quit [Ping timeout: 245 seconds]
thizanne has quit [Ping timeout: 245 seconds]
thizanne has joined #ocaml
patronus_ has joined #ocaml
bobry has quit [Ping timeout: 245 seconds]
bobry_ has joined #ocaml
patronus has quit [Ping timeout: 276 seconds]
brendan has quit [Ping timeout: 276 seconds]
brendan has joined #ocaml
bitbckt has quit [Ping timeout: 245 seconds]
bholst_ has joined #ocaml
jcao219__ has joined #ocaml
orbitz has quit [Ping timeout: 245 seconds]
bholst has quit [Read error: Connection reset by peer]
mfp has quit [Ping timeout: 256 seconds]
mfp has joined #ocaml
stephe- has joined #ocaml
orbitz has joined #ocaml
vpit3833` has joined #ocaml
samebcha1e has joined #ocaml
fasta has joined #ocaml
rednovae_ has joined #ocaml
jcao219 has joined #ocaml
jcao219_ has quit [Read error: Connection reset by peer]
stomp_ has quit [Ping timeout: 264 seconds]
stephe has quit [Ping timeout: 245 seconds]
fasta_ has quit [Ping timeout: 245 seconds]
rednovae has quit [Ping timeout: 245 seconds]
vpm has quit [Ping timeout: 245 seconds]
yezariaely has quit [Ping timeout: 245 seconds]
samebchase has quit [Ping timeout: 245 seconds]
pr has quit [Ping timeout: 245 seconds]
yezariaely has joined #ocaml
dwmw2_gone has quit [Ping timeout: 245 seconds]
LeNsTR|away has joined #ocaml
jlouis_ has joined #ocaml
stomp has joined #ocaml
ski__ has joined #ocaml
j0sh_ has joined #ocaml
asmanur has joined #ocaml
Cypi_ has joined #ocaml
dwmw2_gone has joined #ocaml
TaXules_ has joined #ocaml
zen_ben_ has joined #ocaml
gustav__ has joined #ocaml
adrien_ has joined #ocaml
ohama has quit [Disconnected by services]
bitbckt has joined #ocaml
tizoc has quit [Ping timeout: 268 seconds]
TaXules has quit [Ping timeout: 268 seconds]
ben_zen has quit [Ping timeout: 268 seconds]
jcao219__ has quit [Ping timeout: 268 seconds]
Neros has quit [Ping timeout: 268 seconds]
ohama has joined #ocaml
asmanur_ has quit [Ping timeout: 268 seconds]
adrien has quit [Ping timeout: 268 seconds]
vpit3833 has quit [Ping timeout: 268 seconds]
sivoais has quit [Ping timeout: 268 seconds]
gustav has quit [Ping timeout: 268 seconds]
vpm has joined #ocaml
osnr has quit [Quit: Leaving.]
Neros_ has joined #ocaml
tizoc has joined #ocaml
pr has joined #ocaml
pr has quit [Changing host]
pr has joined #ocaml
jlouis has quit [*.net *.split]
j0sh has quit [*.net *.split]
Khady has quit [*.net *.split]
adrien_o1w has quit [*.net *.split]
snarkyboojum has quit [*.net *.split]
Cypi has quit [*.net *.split]
ski has quit [*.net *.split]
lenstr has quit [*.net *.split]
so has quit [*.net *.split]
adrien_oww has joined #ocaml
Khady has joined #ocaml
Drup has quit [Quit: Leaving.]
companion_cube has joined #ocaml
mattrepl_ has joined #ocaml
asmanur_ has joined #ocaml
TaXules_ has quit [*.net *.split]
companion_square has quit [*.net *.split]
TaXules has joined #ocaml
maxibolt has joined #ocaml
Jenza2 has joined #ocaml
mfp_ has joined #ocaml
samebchase has joined #ocaml
patronus has joined #ocaml
ben_zen has joined #ocaml
vpm has quit [Ping timeout: 245 seconds]
alxbl_ has joined #ocaml
deavidsedice has joined #ocaml
vpm has joined #ocaml
Derander has joined #ocaml
Neros has joined #ocaml
zen_ben_ has quit [*.net *.split]
asmanur has quit [*.net *.split]
samebcha1e has quit [*.net *.split]
vpit3833` has quit [*.net *.split]
mfp has quit [*.net *.split]
bobry_ has quit [*.net *.split]
patronus_ has quit [*.net *.split]
thizanne has quit [*.net *.split]
lopex has quit [*.net *.split]
alang__ has quit [*.net *.split]
mattrepl has quit [*.net *.split]
Jenza has quit [*.net *.split]
mattrepl_ is now known as mattrepl
Neros_ has quit [Read error: Connection reset by peer]
alang__ has joined #ocaml
ivan\_ has joined #ocaml
lopex has joined #ocaml
fasta_ has joined #ocaml
LeNsTR has joined #ocaml
_yezariaely has joined #ocaml
balouis has quit [Ping timeout: 272 seconds]
orbitz_ has joined #ocaml
ivan\ has quit [Ping timeout: 252 seconds]
alxbl has quit [Ping timeout: 252 seconds]
deavid has quit [Ping timeout: 252 seconds]
Derander_ has quit [Ping timeout: 252 seconds]
Fnar has quit [Ping timeout: 252 seconds]
pango has quit [Ping timeout: 252 seconds]
ivan\_ is now known as ivan\
Fnar has joined #ocaml
LeNsTR|away has quit [Ping timeout: 245 seconds]
yezariaely has quit [Ping timeout: 245 seconds]
pr has quit [Ping timeout: 245 seconds]
fasta has quit [Ping timeout: 245 seconds]
orbitz has quit [Ping timeout: 245 seconds]
brendan has quit [Ping timeout: 245 seconds]
bitbckt has quit [Ping timeout: 245 seconds]
bitbckt has joined #ocaml
bitbckt has quit [Changing host]
bitbckt has joined #ocaml
bobry__ has joined #ocaml
Derander has quit [*.net *.split]
alxbl_ has quit [*.net *.split]
Jenza2 has quit [*.net *.split]
Cypi_ has quit [*.net *.split]
stomp has quit [*.net *.split]
jave_ has quit [*.net *.split]
darkf has quit [*.net *.split]
alang_ has quit [*.net *.split]
pango has joined #ocaml
lopex is now known as lopex_
LeNsTR|away has joined #ocaml
pr has joined #ocaml
pr has quit [Changing host]
pr has joined #ocaml
yezariaely has joined #ocaml
Derander has joined #ocaml
alxbl_ has joined #ocaml
Jenza has joined #ocaml
Cypi_ has joined #ocaml
stomp has joined #ocaml
jave_ has joined #ocaml
darkf has joined #ocaml
alang_ has joined #ocaml
Derander has quit [Max SendQ exceeded]
Derander has joined #ocaml
balouis has joined #ocaml
ivan\_ has joined #ocaml
_yezariaely has quit [*.net *.split]
ivan\ has quit [*.net *.split]
LeNsTR has quit [*.net *.split]
ben_zen has quit [*.net *.split]
patronus has quit [Ping timeout: 276 seconds]
ben_zen has joined #ocaml
ivan\_ is now known as ivan\
lopex_ has quit [Ping timeout: 276 seconds]
brendan has joined #ocaml
patronus has joined #ocaml
pr_ has joined #ocaml
pango_ has joined #ocaml
TaXules_ has joined #ocaml
gnuvince- has joined #ocaml
jlouis has joined #ocaml
sivoais has joined #ocaml
rwmjones_ has joined #ocaml
ohama has quit [Disconnected by services]
ohama has joined #ocaml
rednovae has joined #ocaml
pr has quit [*.net *.split]
pango has quit [*.net *.split]
bobry__ has quit [*.net *.split]
Fnar has quit [*.net *.split]
alang__ has quit [*.net *.split]
TaXules has quit [*.net *.split]
jlouis_ has quit [*.net *.split]
jcao219 has quit [*.net *.split]
rednovae_ has quit [*.net *.split]
gnuvince has quit [*.net *.split]
rwmjones has quit [*.net *.split]
alang__ has joined #ocaml
deavid has joined #ocaml
mattrepl_ has joined #ocaml
LeNsTR|away has quit [Ping timeout: 268 seconds]
mattrepl has quit [Ping timeout: 268 seconds]
mattrepl_ is now known as mattrepl
LeNsTR has joined #ocaml
deavidsedice has quit [Ping timeout: 276 seconds]
bobry__ has joined #ocaml
sivoais has quit [Ping timeout: 252 seconds]
sivoais has joined #ocaml
sivoais has quit [Read error: Connection reset by peer]
sivoais has joined #ocaml
adrien_o1w has joined #ocaml
darkf_ has joined #ocaml
Fnar has joined #ocaml
Neros_ has joined #ocaml
orbitz has joined #ocaml
alxbl has joined #ocaml
adrien_oww has quit [Ping timeout: 268 seconds]
orbitz_ has quit [Ping timeout: 268 seconds]
Neros has quit [Ping timeout: 268 seconds]
alxbl_ has quit [Ping timeout: 264 seconds]
darkf has quit [Ping timeout: 264 seconds]
mattrepl has quit [Quit: mattrepl]
pango_ has quit [Ping timeout: 252 seconds]
thelema_ has joined #ocaml
samebchase has quit [*.net *.split]
mfp_ has quit [*.net *.split]
maxibolt has quit [*.net *.split]
asmanur_ has quit [*.net *.split]
Khady has quit [*.net *.split]
gustav__ has quit [*.net *.split]
ski__ has quit [*.net *.split]
stephe- has quit [*.net *.split]
bholst_ has quit [*.net *.split]
troydm has quit [*.net *.split]
thelema has quit [*.net *.split]
Brocoli_ has quit [*.net *.split]
ski has joined #ocaml
asmanur has joined #ocaml
Khady has joined #ocaml
Brocoli_ has joined #ocaml
stephe has joined #ocaml
samebchase has joined #ocaml
gustav has joined #ocaml
mfp_ has joined #ocaml
maxibolt has joined #ocaml
bholst has joined #ocaml
pango_ has joined #ocaml
troydm has joined #ocaml
asmanur_ has joined #ocaml
LeNsTR|away has joined #ocaml
asmanur has quit [*.net *.split]
LeNsTR has quit [*.net *.split]
testcocoon has quit [*.net *.split]
testcocoon has joined #ocaml
jcao219 has joined #ocaml
darkf_ is now known as darkf
cdidd has joined #ocaml
emmanuelux has quit [Quit: emmanuelux]
raichoo has quit [Quit: leaving]
lopex has joined #ocaml
wwilly has joined #ocaml
<wwilly> bonjour
ttamttam has joined #ocaml
ttamttam has left #ocaml []
Cyanure has joined #ocaml
rwmjones_ is now known as rjones
jcao219 has quit [Ping timeout: 264 seconds]
ggole has joined #ocaml
Kakadu has joined #ocaml
osnr has joined #ocaml
osnr has quit [Changing host]
osnr has joined #ocaml
Watcher7 is now known as Watcher7|off
gnuvince- has quit [Ping timeout: 245 seconds]
pr_ is now known as pr
pr has quit [Changing host]
pr has joined #ocaml
LeNsTR|away is now known as lenstr
lenstr has quit [Changing host]
lenstr has joined #ocaml
talzeus_ has quit [Quit: Where is the love...]
wmeyer`` has quit [Remote host closed the connection]
wmeyer` has quit [Remote host closed the connection]
wmeyer has quit [Remote host closed the connection]
asmanur has joined #ocaml
asmanur_ has quit [Ping timeout: 276 seconds]
sgnb has quit [Remote host closed the connection]
sgnb has joined #ocaml
Snark has joined #ocaml
wwilly has quit [Quit: This computer has gone to sleep]
UncleVasya has joined #ocaml
tani has quit [Quit: Verlassend]
ulfdoz has joined #ocaml
weie has joined #ocaml
zpe has joined #ocaml
Yoric has joined #ocaml
pango_ is now known as pango
ulfdoz_ has joined #ocaml
ulfdoz has quit [Ping timeout: 252 seconds]
ulfdoz_ is now known as ulfdoz
adrien_ is now known as adrien
ggole has quit [Ping timeout: 272 seconds]
ggole has joined #ocaml
ottbot has joined #ocaml
ollehar has joined #ocaml
ottbot has quit [Ping timeout: 256 seconds]
osnr has quit [Quit: Leaving.]
<gasche> bernardofpc: Obj.magic is a tabu word in any explanation
<gasche> we should stop mentioning that feature to people
<gasche> they just misuse it
osnr has joined #ocaml
osnr has quit [Changing host]
osnr has joined #ocaml
ontologiae has joined #ocaml
soulofpeace has joined #ocaml
q66 has joined #ocaml
hcarty has quit [Ping timeout: 252 seconds]
ontologiae has quit [Ping timeout: 268 seconds]
ottbot has joined #ocaml
Drup has joined #ocaml
Tobu has quit [Ping timeout: 246 seconds]
Tobu has joined #ocaml
soulofpeace has quit [Ping timeout: 272 seconds]
ollehar has quit [Ping timeout: 256 seconds]
<bernardofpc> well, I must say that I still fell unconfortable with the fact that list-building from head to tail is not efficient in OCaml (heap/stack-wise)
<bernardofpc> especially since I bet that lists are probably the most common data type in OCaml in general
soulofpeace has joined #ocaml
<ggole> You can't just smash the tail of a list though
<ggole> There's a write barrier problem
<bernardofpc> I'd say it's an abstraction barrier
ulfdoz has quit [Ping timeout: 268 seconds]
ottbot has quit [Ping timeout: 264 seconds]
<ousado> bernardofpc: "is not efficient in Ocaml" - what's ocaml specific about that?
<bernardofpc> that List.map is efficient only with open Batteries, that does use Obj.magic or some equivalent magic
hcarty has joined #ocaml
<bernardofpc> were I to take XL words that Obj.magic is not \in OCaml, then this is a problem
<ousado> weren't you talking about list-building just now?
<bernardofpc> ousado: precisely
<bernardofpc> list.map builds a list, doesn't it ?
eg0 has joined #ocaml
<ousado> List.map is a specific function that returns a list
<pippijn> bernardofpc: mutation in ocaml is not so fast
<ggole> The trick that OCaml "misses" is to hold a reference to the last cons, and mutate the end of that to append
<eg0> hi, im looking to learn a functional language. id like one that i could get a job with, and ive narrowed my list down to erlang, (j)ocaml, and openDylan
<ggole> But this isn't necessarily a good thing to add, because there is a write barrier cost to mutation
<eg0> how mature is JoCaml, and is it comparable to erlang in its ability to maintain concurrent and distributed systems?
<bernardofpc> ggole: I must confess I don't really use enough multiprocess that I understand write barriers
<bernardofpc> (OTOH, if that's a problem for the GC, it's sad)
<ggole> bernardofpc: it is GC jargon in this context
<ggole> A write barrier moves an object from the set which is known not to point to the old generation to the set which may
<ousado> the immutability of lists is a feature
<ggole> In OCaml it is implemented by pushing a pointer onto a vector (I believe)
<ggole> If you look at assembly you'll see calls to caml_modify that implement this barrier
<bernardofpc> ggole: so all "next" pointers in a list belong to the set which "may" ?
<ggole> bernardofpc: no
<ggole> Not unless you mutate them
<bernardofpc> but when you use List.map don't you always return something in the "young" ?
<bernardofpc> (hum, that depends on *F*)
<ggole> Sort of
<ggole> You might cause a GC, which could move the list structure out of the young heap
<bernardofpc> and at that point all previous pointers point in the wrong place
<ggole> The GC fixes all of that up
<bernardofpc> Ok, right
<ggole> Any pointer into the new heap met during traversal will cause that object to be copied out
<ggole> And the pointer will be fixed up
<bernardofpc> and from there on the new ones will again be on the young ?
<bernardofpc> (continuing down map, I mean)
<ggole> No, they'll point to wherever the list structure is
ontologiae has joined #ocaml
<ggole> The point is that OCaml has GC machinery that favours immutable data over mutable data
<bernardofpc> right, but when you're building a list using list.map you're not mutating anything, semantically
<bernardofpc> you're just deciding later where next points to
<ousado> of course you are
<ggole> The semantics are irrelevant: if you mutate a pointer value, the write barrier must be observed
<ousado> and map is jsut a specific case, you were referring to list building at large
<ggole> GC requires it to function correctly
<bernardofpc> ousado: you do deserve your nick
eg0 has quit [Read error: Connection reset by peer]
<pippijn> ocaml crashes if you don't observe it
<bernardofpc> Let me try to understand that again
<bernardofpc> take Batteries.List.map
<bernardofpc> you're telling me that after I find what the next should point to, it might happen that it points to a value in the old heap
<bernardofpc> (because the GC has gone through a collection, and moved whatever you returned to the old heap)
<bernardofpc> and when the linking code does prev.next = result, this implies a write barrier
<bernardofpc> right ?
<ggole> I'm not sure what you mean by linking code
<ggole> But assignment to the tail pointer does require a write barrier
ulfdoz has joined #ocaml
<ousado> ggole: so you're only talking about a specific optimization of list.map?
osnr has quit [Quit: Leaving.]
<ggole> I'm talking about any use of tail-allocation
<ggole> List.map is probably the most interesting one
<ousado> oops I meant bernardofpc, sorry
<ggole> Oh, right
<ousado> as in treating it as at atomic operation
<ousado> is that a yes or a no?
<bernardofpc> (answering "linking code" far above)
<ggole> That needs a write barrier, yep
<bernardofpc> ousado: I'm thinking concretely about list.map, yes
Jenza has quit [Ping timeout: 264 seconds]
<bernardofpc> because that was what made me dig into Batteries.list, and see that there is a problem somehow
<bernardofpc> ggole: what's the status of something constructed out of two "old" objects ?
<bernardofpc> is it by default "old", or it might be "young" ?
Jenza has joined #ocaml
<ggole> What you construct an object out of doesn't affect which heap it is on
<bernardofpc> ok
<bernardofpc> so if I could prove that f returns a "young" value then I don't need a write barrier
<bernardofpc> (for instance if the value f returns is built just before the return)
<ggole> I don't know what f is
<bernardofpc> right
<bernardofpc> so there you must put a write barrier because f might do fancy stuff such as looking up a Hashtable
<ggole> And no, that's not right
<bernardofpc> ??
<ggole> Maybe I've explained poorly. The write barrier is there so that any exception to the assumption that young objects are only pointed to by young objects can be tracked.
<ggole> So if you mutate a pointer and you know that it is *within* a young object, you don't need the barrier.
<ggole> It's hard to see how you could do so without the support of the compiler.
<bernardofpc> ggole: oh
<bernardofpc> the problem is that if the previous node goes into the "old" heap, then something must happen ?
<ggole> The problem is that the GC would like to assume that nothing on the old heap points into the new heap.
<ggole> It benefits from this assumption because it need not walk the old heap upon minor collections.
<bernardofpc> right
<ggole> If anything on the old heap is mutated, this assumption is violated.
<ggole> So such operations are tracked with the write barrier.
<bernardofpc> ok
<ggole> Note that this only applies to pointers. You can mutate integer fields all you like.
<bernardofpc> ouf ;-)
<pippijn> (Obj.magic ob : int array).(0) <- otherob;
<pippijn> don't do that :)
<pippijn> (Obj.magic ob : int array).(0) <- Obj.magic otherob; (* of course *)
<pippijn> either way, don't do it
<bernardofpc> sure
<bernardofpc> it would be nice though to have a TR List.map that did not incurr in so many write barriers
<pippijn> hm
<bernardofpc> but I see the problem
<bernardofpc> and perhaps list.rev_map might be enough
<pippijn> but map creates a new list, so the mutation occurs in young objects
<ggole> You could have a gc at any cons allocation
<ggole> So you do not know that
<pippijn> right
<ggole> It might be possible if you kept tight control over when everything happend
<pippijn> you would need a "stop gc for a moment" thing
<bernardofpc> you could pass the previous object (as it's already done) and if the caml_young compare fails, you do a GC keeping that pointer in the roots
<bernardofpc> (somehow)
<ggole> Well, the compiler has some knowledge about which points GC can occur at
<pippijn> for example Gc.collect() before doing map would make it less likely that the GC runs
<pippijn> but still not impossible
<pippijn> ggole: yes, every allocation
<ggole> And every function call (except to builtins)
<bernardofpc> pippijn: the compiler might be able to know muh better
<ggole> So if your assignment happened between those
<ggole> You might be able to get away with it
<pippijn> with functions, you can prove that they never allocate
<pippijn> the compiler could in theory record that in the interface
<bernardofpc> when you're building a list, you necessarily allocate some stuff, don't you ?
<bernardofpc> (not on "f", but in the (result, next) pair)
<pippijn> the problem is
<ggole> Constructors with arguments are heap allocated, if that's what you mean
<pippijn> you need to allocate the result object, then the next object, and put the next object into result object
<pippijn> so you have 2 allocations
<ggole> (Actually I can imagine calling conventions in which small constructors are kept in registers. But never mind that.)
<pippijn> so you would have to make those 2 allocations atomic
<ggole> You don't have to allocate the result object
<ggole> The function argument does that
<pippijn> if you don't allocate it, you don't know if it's new
<pippijn> my point is
<ggole> You don't have to
<ggole> You aren't changing it, just assigning it to the first bit of the cons
<pippijn> you can't put the next object into the result object unless you allocate it
<ggole> It's just a value
<pippijn> so the result object might be old by then
<ggole> True, but it doesn't matter
Neros_ has quit [Ping timeout: 256 seconds]
<ggole> So tail-allocation map without barriers is probably possible
<ggole> But you couldn't write it in OCaml
osnr has joined #ocaml
osnr has quit [Changing host]
osnr has joined #ocaml
dsheets has joined #ocaml
osnr has quit [Ping timeout: 240 seconds]
alang_ has quit [Quit: ZNC - http://znc.sourceforge.net]
<bernardofpc> thanks for this lecture on the GC ;-)
* ggole nods
alang_ has joined #ocaml
soulofpeace has quit [Ping timeout: 256 seconds]
Anarchos has joined #ocaml
dsheets has quit [Ping timeout: 272 seconds]
eikke has joined #ocaml
Anarchos has quit [Quit: Vision[0.9.7-H-090423]: i've been blurred!]
ontologiae has quit [Ping timeout: 245 seconds]
soulofpeace has joined #ocaml
Neros_ has joined #ocaml
soulofpeace has quit [Ping timeout: 256 seconds]
malo has joined #ocaml
jcao219 has joined #ocaml
wmeyer has joined #ocaml
<wmeyer> hi
jcao219 has quit [Ping timeout: 264 seconds]
talzeus has joined #ocaml
Yoric has quit [Ping timeout: 256 seconds]
Cypi_ is now known as Cypi
ski has quit [Ping timeout: 256 seconds]
rgrinberg1 has joined #ocaml
zpe has quit [Remote host closed the connection]
rgrinberg1 has quit [Ping timeout: 245 seconds]
dsheets has joined #ocaml
talzeus has quit [Ping timeout: 252 seconds]
sgnb has quit [Ping timeout: 252 seconds]
talzeus has joined #ocaml
ivan\ has quit [Ping timeout: 264 seconds]
Derander has quit [Ping timeout: 264 seconds]
asmanur has quit [Ping timeout: 264 seconds]
ohama has quit [Ping timeout: 264 seconds]
asmanur_ has joined #ocaml
Derander has joined #ocaml
ohama has joined #ocaml
UncleVasya has quit [Ping timeout: 245 seconds]
ivan\ has joined #ocaml
ontologiae has joined #ocaml
soulofpeace has joined #ocaml
zpe has joined #ocaml
zpe has quit [Ping timeout: 252 seconds]
Cyanure has quit [Remote host closed the connection]
ontologiae has quit [Ping timeout: 245 seconds]
weie_ has joined #ocaml
stephe- has joined #ocaml
ulfdoz_ has joined #ocaml
adrien_oww has joined #ocaml
alxbl_ has joined #ocaml
sgnb has joined #ocaml
deavidsedice has joined #ocaml
bitbckt_ has joined #ocaml
weie has quit [Ping timeout: 245 seconds]
Khady has quit [Ping timeout: 245 seconds]
alxbl has quit [Ping timeout: 245 seconds]
jlouis has quit [Ping timeout: 245 seconds]
bitbckt has quit [Ping timeout: 245 seconds]
adrien_o1w has quit [Ping timeout: 245 seconds]
alang__ has quit [Ping timeout: 245 seconds]
deavid has quit [Read error: Connection reset by peer]
bitbckt_ is now known as bitbckt
bitbckt has quit [Changing host]
bitbckt has joined #ocaml
alang__ has joined #ocaml
Khady has joined #ocaml
ulfdoz has quit [*.net *.split]
ggole has quit [*.net *.split]
cdidd has quit [*.net *.split]
stephe has quit [*.net *.split]
ulfdoz_ is now known as ulfdoz
jlouis has joined #ocaml
cdidd has joined #ocaml
ggole has joined #ocaml
zpe has joined #ocaml
Zeev has joined #ocaml
<Zeev> hello I try to install ocaml 4.01 on windows, and I get cannot install activetcl
<Zeev> I download manually activetcl (which is a higher version now that ocaml 4.01 is supposed to install
<Zeev> which directory I install it to?
<Zeev> c;\ocaml\activetcl?
<Zeev> c:*
wwilly has joined #ocaml
<Zeev> is there anything else I should do for ocaml to recognise activetcl installation?
zpe has quit [Ping timeout: 245 seconds]
rjones is now known as rwmjones
zpe has joined #ocaml
alang_ has quit [Ping timeout: 245 seconds]
jlouis has quit [Ping timeout: 245 seconds]
jlouis has joined #ocaml
cdidd has quit [Ping timeout: 245 seconds]
alxbl_ has quit [Ping timeout: 245 seconds]
ohama has quit [Ping timeout: 245 seconds]
Tobu has quit [Ping timeout: 245 seconds]
Tobu_ has joined #ocaml
alxbl has joined #ocaml
cdidd has joined #ocaml
alang_ has joined #ocaml
Snark has quit [Ping timeout: 245 seconds]
Snark has joined #ocaml
yacks has quit [Ping timeout: 246 seconds]
cdidd has quit [Max SendQ exceeded]
ohama has joined #ocaml
zpe has quit [Ping timeout: 276 seconds]
cdidd has joined #ocaml
jave has joined #ocaml
Cypi has quit [*.net *.split]
stomp has quit [*.net *.split]
jave_ has quit [*.net *.split]
Cypi has joined #ocaml
stomp has joined #ocaml
stomp has quit [Remote host closed the connection]
stomp has joined #ocaml
thelema has joined #ocaml
darkf has quit [Quit: Leaving]
bacam_ has joined #ocaml
bacam has quit [Ping timeout: 256 seconds]
bobry__ has quit [Ping timeout: 256 seconds]
ben_zen has quit [Ping timeout: 256 seconds]
bobry__ has joined #ocaml
ben_zen has joined #ocaml
thelema_ has quit [Ping timeout: 256 seconds]
hyperboreean has quit [Ping timeout: 256 seconds]
hto has quit [Ping timeout: 256 seconds]
hto has joined #ocaml
hyperboreean has joined #ocaml
zpe has joined #ocaml
def-lkb_ has joined #ocaml
vext01_ has joined #ocaml
vext01 has quit [Ping timeout: 256 seconds]
def-lkb has quit [Ping timeout: 256 seconds]
Anarchos has joined #ocaml
Zeev has quit [Disconnected by services]
UncleVasya has joined #ocaml
Zeev has joined #ocaml
wmeyer` has joined #ocaml
iZsh has quit [Quit: Coyote finally caught me]
Armael has joined #ocaml
zpe has quit [Ping timeout: 268 seconds]
|jbrown| has joined #ocaml
malo_ has joined #ocaml
dsheets_ has joined #ocaml
bacam_ is now known as bacam
orbitz_ has joined #ocaml
dsheets has quit [Disconnected by services]
dsheets_ is now known as dsheets
iZsh has joined #ocaml
wmeyer has quit [*.net *.split]
malo has quit [*.net *.split]
Kakadu has quit [*.net *.split]
Brocoli_ has quit [*.net *.split]
orbitz has quit [*.net *.split]
jbrown has quit [*.net *.split]
Kakadu has joined #ocaml
stomp_ has joined #ocaml
stomp has quit [Ping timeout: 276 seconds]
deavidsedice has quit [Ping timeout: 276 seconds]
yacks has joined #ocaml
deavid has joined #ocaml
zpe has joined #ocaml
emmanuelux has joined #ocaml
yacks has quit [Ping timeout: 248 seconds]
ulfdoz has quit [Ping timeout: 264 seconds]
zpe has quit [Ping timeout: 240 seconds]
soulofpe1ce has joined #ocaml
Neros__ has joined #ocaml
bholst_ has joined #ocaml
adrien_o1w has joined #ocaml
soulofpeace has quit [Ping timeout: 268 seconds]
Neros_ has quit [Ping timeout: 268 seconds]
bholst has quit [Ping timeout: 268 seconds]
ohama has quit [Remote host closed the connection]
adrien_oww has quit [Ping timeout: 268 seconds]
alxbl has quit [Ping timeout: 268 seconds]
alxbl has joined #ocaml
zpe has joined #ocaml
bacam_ has joined #ocaml
soulofpe1ce has quit [Ping timeout: 240 seconds]
bacam has quit [Ping timeout: 268 seconds]
samebcha1e has joined #ocaml
stomp_ has quit [*.net *.split]
eikke has quit [*.net *.split]
Jenza has quit [*.net *.split]
samebchase has quit [*.net *.split]
stomp has joined #ocaml
ohama has joined #ocaml
ottbot has joined #ocaml
<chris2> how can i tell ocamlbuild to pass -warn K? warn_X passes -warn X, but warn_K doesnt do anything
ttamttam has joined #ocaml
eikke has joined #ocaml
Jenza has joined #ocaml
emmanuelux has quit [Ping timeout: 264 seconds]
Yoric has joined #ocaml
Zeev has quit [Read error: Connection reset by peer]
Yoric has quit [Ping timeout: 245 seconds]
Zeev has joined #ocaml
maufred_ has joined #ocaml
vbmithr_ has joined #ocaml
tchell_ has joined #ocaml
diml has joined #ocaml
ggole has quit []
emmanuelux has joined #ocaml
AdmWiggin has joined #ocaml
bernardo1pc has joined #ocaml
eikke has quit [*.net *.split]
Jenza has quit [*.net *.split]
ottbot has quit [*.net *.split]
Anarchos has quit [*.net *.split]
vext01_ has quit [*.net *.split]
Snark has quit [*.net *.split]
Drup has quit [*.net *.split]
sivoais has quit [*.net *.split]
Tobu_ has quit [*.net *.split]
yezariaely has quit [*.net *.split]
vpm has quit [*.net *.split]
rossberg has quit [*.net *.split]
mal``` has quit [*.net *.split]
caligula__ has quit [*.net *.split]
_5kg has quit [*.net *.split]
BiDOrD has quit [*.net *.split]
IbnFirnas has quit [*.net *.split]
fds has quit [*.net *.split]
Asmadeus has quit [*.net *.split]
thelema has quit [*.net *.split]
cdidd has quit [*.net *.split]
jlouis has quit [*.net *.split]
lenstr has quit [*.net *.split]
mfp_ has quit [*.net *.split]
TaXules_ has quit [*.net *.split]
pr has quit [*.net *.split]
mcclurmc has quit [*.net *.split]
avsm has quit [*.net *.split]
gildor has quit [*.net *.split]
wagle has quit [*.net *.split]
pippijn has quit [*.net *.split]
ipoulet_ has quit [*.net *.split]
tlockney has quit [*.net *.split]
ccasin has quit [*.net *.split]
cow-orker has quit [*.net *.split]
Fnar has quit [*.net *.split]
diml_ has quit [*.net *.split]
dtg has quit [*.net *.split]
tianon has quit [*.net *.split]
vbmithr has quit [*.net *.split]
dwcook has quit [*.net *.split]
SuperNoeMan has quit [*.net *.split]
tchell has quit [*.net *.split]
bernardofpc has quit [*.net *.split]
maufred has quit [*.net *.split]
_habnabit has quit [*.net *.split]
fayden has quit [*.net *.split]
mathieui has quit [*.net *.split]
xaimus has quit [*.net *.split]
thelema has joined #ocaml
_habnabit has joined #ocaml
mathieui has joined #ocaml
fayden has joined #ocaml
gnuvince has joined #ocaml
nze has joined #ocaml
nze has left #ocaml []
Zeev has quit [Ping timeout: 264 seconds]
samebcha1e is now known as samebchase
Zeev has joined #ocaml
Fnar has joined #ocaml
SuperNoeMan_ has joined #ocaml
xaimus_ has joined #ocaml
dwcook_ has joined #ocaml
dtg_ has joined #ocaml
ottbot has joined #ocaml
Anarchos has joined #ocaml
vext01_ has joined #ocaml
Snark has joined #ocaml
Drup has joined #ocaml
sivoais has joined #ocaml
cdidd has joined #ocaml
jlouis has joined #ocaml
lenstr has joined #ocaml
mfp_ has joined #ocaml
TaXules_ has joined #ocaml
pr has joined #ocaml
mcclurmc has joined #ocaml
avsm has joined #ocaml
gildor has joined #ocaml
wagle has joined #ocaml
ipoulet_ has joined #ocaml
pippijn has joined #ocaml
tlockney has joined #ocaml
ccasin has joined #ocaml
cow-orker has joined #ocaml
Watcher7|off is now known as Watcher7
yacks has joined #ocaml
Tobu_ has joined #ocaml
yezariaely has joined #ocaml
vpm has joined #ocaml
rossberg has joined #ocaml
mal``` has joined #ocaml
caligula__ has joined #ocaml
_5kg has joined #ocaml
BiDOrD has joined #ocaml
IbnFirnas has joined #ocaml
fds has joined #ocaml
Asmadeus has joined #ocaml
Jenza has joined #ocaml
tane has joined #ocaml
vpm has quit [Read error: Operation timed out]
chrisdotcode has joined #ocaml
vpm has joined #ocaml
ttamttam has quit [Quit: ttamttam]
Fnar has quit [*.net *.split]
Zeev has quit [*.net *.split]
SuperNoeMan_ has quit [*.net *.split]
xaimus_ has quit [*.net *.split]
dwcook_ has quit [*.net *.split]
dtg_ has quit [*.net *.split]
ottbot has quit [*.net *.split]
Anarchos has quit [*.net *.split]
vext01_ has quit [*.net *.split]
Snark has quit [*.net *.split]
Drup has quit [*.net *.split]
sivoais has quit [*.net *.split]
chrisdotcode has quit [Read error: Operation timed out]
chrisdotcode has joined #ocaml
Zeev has joined #ocaml
Fnar has joined #ocaml
SuperNoeMan_ has joined #ocaml
xaimus_ has joined #ocaml
dwcook has joined #ocaml
dtg_ has joined #ocaml
ottbot has joined #ocaml
Anarchos has joined #ocaml
vext01_ has joined #ocaml
Snark has joined #ocaml
Drup has joined #ocaml
sivoais has joined #ocaml
sivoais has quit [Max SendQ exceeded]
Zeev has quit [Max SendQ exceeded]
_habnabit has quit [Changing host]
_habnabit has joined #ocaml
Zeev has joined #ocaml
sivoais has joined #ocaml
sivoais has quit [Changing host]
sivoais has joined #ocaml
emmanuelux has quit [Quit: emmanuelux]
sivoais has quit [Ping timeout: 264 seconds]
sivoais has joined #ocaml
sivoais has quit [Read error: Connection reset by peer]
sivoais has joined #ocaml
ottbot has quit [Ping timeout: 276 seconds]
chrisdotcode has quit [Read error: Operation timed out]
Fnar has quit [*.net *.split]
bacam_ is now known as bacam
maxibolt is now known as thizanne
sivoais has quit [Read error: Connection reset by peer]
sivoais has joined #ocaml
sivoais has quit [Ping timeout: 245 seconds]
sivoais has joined #ocaml
Anarchos has quit [Quit: Vision[0.9.7-H-090423]: i've been blurred!]
sivoais has quit [Read error: Connection reset by peer]
sivoais has joined #ocaml
osnr has joined #ocaml
sivoais has quit [Read error: Connection reset by peer]
sivoais has joined #ocaml
cdidd has quit [Read error: Connection reset by peer]
sivoais has quit [Ping timeout: 256 seconds]
sivoais has joined #ocaml
sivoais has quit [Read error: Connection reset by peer]
sivoais has joined #ocaml
Snark has quit [Quit: leaving]
sivoais has quit [Ping timeout: 256 seconds]
<gnuvince> Is it possible to create an array of N elements of a type to be determined later?
sivoais has joined #ocaml
<pippijn> later?
<pippijn> when is later?
<gnuvince> When an initial item is set.
<pippijn> what would the other items contain?
<gnuvince> I'd like to write an extensible array data structure, but at the moment I need to start with an empty array and grow it by 2N+1. I was wondering if it were possible to start with an array containing maybe 8 or 16 elements from the start.
sivoais has quit [Ping timeout: 264 seconds]
<thizanne> gnuvince: the question of pippijn was to be answered
sivoais has joined #ocaml
<gnuvince> I can do it if I change create : unit -> 'a t to create : 'a -> 'a t where I supply a sample element, but that seems hacky
<thizanne> when you set your first element, what do the other places of the array contain ?
<gnuvince> thizanne: they could have the same element.
<pippijn> you can create an array with all elements being that first element, yes
<thizanne> so when you put an element in your array, all the others must be set to this element
<pippijn> your structure would start out with [||], and when you put in the first, you do the actual allocation
<thizanne> and you need another reference to know if there is an element in your array
<thizanne> ... or maybe you can just go with length
<pippijn> you need a "size"
<pippijn> your array length is the "capacity"
<pippijn> and you need an additional count to keep track of the number of accessible elemnets
<pippijn> you could also just use BatDynArray
snarkyboojum has joined #ocaml
<gnuvince> I can check how BatDynArray does it.
<gnuvince> But the idea is to do it myself
dwcook_ has joined #ocaml
sivoais has quit [Ping timeout: 264 seconds]
sivoais has joined #ocaml
vext01 has joined #ocaml
Drup1 has joined #ocaml
<gnuvince> seems like Batteries uses Obj,magic
<thizanne> gnuvince: why couldnt't you create the array when the first element is inserted, like pippin suggested ?
<gnuvince> that,s probably what I'll do
<gnuvince> I was curious how batteries did it.
dwcook has quit [Ping timeout: 276 seconds]
vext01_ has quit [Ping timeout: 276 seconds]
Drup has quit [Ping timeout: 276 seconds]
seymour1 has joined #ocaml
seymour1 has left #ocaml []
Drup1 is now known as Drup
sivoais has quit [Ping timeout: 264 seconds]
sivoais has joined #ocaml
sivoais has quit [Read error: Connection reset by peer]
sivoais has joined #ocaml
xaimus has joined #ocaml
dtg has joined #ocaml
SuperNoeMan has joined #ocaml
SuperNoeMan_ has quit [*.net *.split]
xaimus_ has quit [*.net *.split]
dtg_ has quit [*.net *.split]
ottbot has joined #ocaml
ttamttam has joined #ocaml
ttamttam has quit [Client Quit]
UncleVasya has quit [Quit: UncleVasya]
thelema_ has joined #ocaml
dtg_ has joined #ocaml
wwilly has quit [Quit: This computer has gone to sleep]
wmeyer`` has joined #ocaml
dtg has quit [*.net *.split]
mathieui has quit [*.net *.split]
thelema has quit [*.net *.split]
iZsh has quit [*.net *.split]
def-lkb_ has quit [*.net *.split]
mathieui has joined #ocaml
wmeyer` has quit [Ping timeout: 264 seconds]
dwcook_ has quit [Ping timeout: 264 seconds]
fayden has quit [Ping timeout: 264 seconds]
dsheets has quit [Ping timeout: 264 seconds]
dwcook has joined #ocaml
dsheets has joined #ocaml
def-lkb has joined #ocaml
iZsh has joined #ocaml
Fnar has joined #ocaml
Kakadu has quit []
ottbot has quit [Ping timeout: 256 seconds]
dezzy_ has joined #ocaml
asmanur has joined #ocaml
lopex_ has joined #ocaml
hcarty_ has joined #ocaml
milosn_ has joined #ocaml
smango has joined #ocaml
gustav__ has joined #ocaml
osnr has quit [Changing host]
osnr has joined #ocaml
sivoais has quit [Changing host]
sivoais has joined #ocaml
asmanur_ has quit [*.net *.split]
hcarty has quit [*.net *.split]
lopex has quit [*.net *.split]
gustav has quit [*.net *.split]
dezzy has quit [*.net *.split]
milosn has quit [*.net *.split]
othiym23 has quit [*.net *.split]
smango_ has quit [*.net *.split]
kaste has quit [*.net *.split]
dezzy_ is now known as dezzy
kaste has joined #ocaml
lopex_ is now known as lopex
lopex is now known as Guest99224
othiym23 has joined #ocaml
Guest99224 has quit []
Guest99224 has joined #ocaml
Guest99224 has quit [Client Quit]
balouis has quit [Ping timeout: 264 seconds]
osnr has quit [Quit: Leaving.]
balouis has joined #ocaml
lopexx has joined #ocaml
lopexx is now known as lopex
Fnar has quit [*.net *.split]
osnr has joined #ocaml
osnr has quit [Changing host]
osnr has joined #ocaml
ivan\ has quit [Ping timeout: 256 seconds]
patronus_ has joined #ocaml
brendan has quit [Ping timeout: 256 seconds]
mehdid has quit [Ping timeout: 256 seconds]
mehdid_ has joined #ocaml
rednovae has quit [Ping timeout: 256 seconds]
lusory has quit [Ping timeout: 256 seconds]
patronus has quit [Ping timeout: 256 seconds]
NaCl has quit [Ping timeout: 256 seconds]
lusory has joined #ocaml
Leonidas_ has joined #ocaml
Leonidas has quit [Ping timeout: 256 seconds]
ccasin has quit [Ping timeout: 245 seconds]
rednovae has joined #ocaml
NaCl has joined #ocaml
NaCl has quit [Changing host]
NaCl has joined #ocaml
ivan\ has joined #ocaml
maufred has joined #ocaml
ccasin has joined #ocaml
bernardofpc has joined #ocaml
Fnar has joined #ocaml
yroeht has quit [Ping timeout: 256 seconds]
alxbl_ has joined #ocaml
habnabit has joined #ocaml
habnabit has quit [Changing host]
habnabit has joined #ocaml
brendan_ has joined #ocaml
malo_ has quit [Quit: Leaving]
jcao219 has joined #ocaml
alxbl has quit [Ping timeout: 256 seconds]
maufred_ has quit [Ping timeout: 256 seconds]
jave has quit [Ping timeout: 256 seconds]
_habnabit has quit [Ping timeout: 256 seconds]
bernardo1pc has quit [Ping timeout: 256 seconds]
stephe- has quit [Ping timeout: 256 seconds]
hto has quit [Ping timeout: 256 seconds]
deavid has quit [Read error: Connection reset by peer]
tane has quit [Ping timeout: 256 seconds]
weie_ has quit [Ping timeout: 256 seconds]
hto has joined #ocaml
tane has joined #ocaml
stephe has joined #ocaml
jave has joined #ocaml
weie has joined #ocaml
habnabit is now known as _habnabit
bernardo1pc has joined #ocaml
dwcook has quit [Changing host]
dwcook has joined #ocaml
ivan\_ has joined #ocaml
bernardofpc has quit [*.net *.split]
ivan\ has quit [*.net *.split]
ivan\_ is now known as ivan\
deavid has joined #ocaml
eikke has joined #ocaml
troydm has quit [Ping timeout: 256 seconds]
tizoc` has joined #ocaml
rks has joined #ocaml
fasta has joined #ocaml
adrien_ has joined #ocaml
alang- has joined #ocaml
fayden has joined #ocaml
lopex has quit [*.net *.split]
kaste has quit [*.net *.split]
alang_ has quit [*.net *.split]
bitbckt has quit [*.net *.split]
fasta_ has quit [*.net *.split]
companion_cube has quit [*.net *.split]
tizoc has quit [*.net *.split]
adrien has quit [*.net *.split]
dwmw2_gone has quit [*.net *.split]
j0sh_ has quit [*.net *.split]
ttm has quit [*.net *.split]
rks_ has quit [*.net *.split]
cross_ has quit [*.net *.split]
companion_cube has joined #ocaml
cross has joined #ocaml
bitbckt has joined #ocaml
kaste has joined #ocaml
dwmw2_gone has joined #ocaml
j0sh_ has joined #ocaml
osnr1 has joined #ocaml
The_third_man has joined #ocaml
osnr has quit [Ping timeout: 256 seconds]
kaktus__ has joined #ocaml
ewanas_ has joined #ocaml
dtg_ has quit [*.net *.split]
SuperNoeMan has quit [*.net *.split]
xaimus has quit [*.net *.split]
snarkyboojum has quit [*.net *.split]
yacks has quit [*.net *.split]
AdmWiggin has quit [*.net *.split]
vbmithr_ has quit [*.net *.split]
bacam has quit [*.net *.split]
Cypi has quit [*.net *.split]
rks_ has joined #ocaml
alang_ has joined #ocaml
tizoc has joined #ocaml
Derander has quit [Ping timeout: 256 seconds]
rks has quit [Ping timeout: 256 seconds]
bitbckt_ has joined #ocaml
Derander has joined #ocaml
olasd_ has joined #ocaml
tianon has joined #ocaml
Cypi has joined #ocaml
bacam has joined #ocaml
xaimus has joined #ocaml
studybot_ has joined #ocaml
bitbckt has quit [*.net *.split]
alang- has quit [*.net *.split]
tizoc` has quit [*.net *.split]
talzeus has quit [*.net *.split]
fraggle_ has quit [*.net *.split]
kaktus has quit [*.net *.split]
ewanas has quit [*.net *.split]
olasd has quit [*.net *.split]
bitbckt_ is now known as bitbckt
bitbckt has quit [Changing host]
bitbckt has joined #ocaml
alang__ has quit [Write error: Connection reset by peer]
vbmithr has joined #ocaml
fraggle_ has joined #ocaml
dtg_ has joined #ocaml
SuperNoeMan has joined #ocaml
snarkyboojum has joined #ocaml
yacks has joined #ocaml
yacks has quit [Max SendQ exceeded]
yacks has joined #ocaml
ollehar has joined #ocaml