flux changed the topic of #ocaml to: Discussions about the OCaml programming language | http://www.ocaml.org | OCaml MOOC http://1149.fr/ocaml-mooc | OCaml 4.03.0 announced http://ocaml.org/releases/4.03.html | Try OCaml in your browser: http://try.ocamlpro.com | Public channel logs at http://irclog.whitequark.org/ocaml
Denommus has quit [Quit: ERC Version 5.3 (IRC client for Emacs)]
dsheets has joined #ocaml
mistermetaphor has joined #ocaml
dsheets has quit [Ping timeout: 246 seconds]
<gasche> companion_cube: it's the amortized "pair of lists" implementation
Reshi has joined #ocaml
<gasche> (which can have bad worst case when you share persistent values just before a rebalancing, but is very simple and performs well in general)
yunxing has quit [Remote host closed the connection]
dsheets has joined #ocaml
dsheets has quit [Ping timeout: 260 seconds]
yunxing has joined #ocaml
mistermetaphor has quit [Read error: Connection reset by peer]
govg has quit [Ping timeout: 260 seconds]
govg has joined #ocaml
The_Mad_Pirate has joined #ocaml
wagle has quit [Remote host closed the connection]
wagle has joined #ocaml
dsheets has joined #ocaml
destrius has joined #ocaml
dsheets has quit [Ping timeout: 240 seconds]
sh0t has quit [Quit: Leaving]
dsheets has joined #ocaml
The_Mad_Pirate has quit [Quit: Konversation terminated!]
yunxing has quit [Remote host closed the connection]
walter|r has quit [Remote host closed the connection]
dsheets has quit [Ping timeout: 260 seconds]
tennix has joined #ocaml
govg has quit [Ping timeout: 252 seconds]
govg has joined #ocaml
govg has quit [Ping timeout: 244 seconds]
govg has joined #ocaml
dsheets has joined #ocaml
doecnt has joined #ocaml
dsheets has quit [Ping timeout: 260 seconds]
dsheets has joined #ocaml
Nahra has quit [Ping timeout: 244 seconds]
amnn has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
amnn has joined #ocaml
ril has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
amnn has quit [Client Quit]
dsheets has quit [Ping timeout: 276 seconds]
hay207 has joined #ocaml
tennix has quit [Ping timeout: 276 seconds]
hay207__ has quit [Ping timeout: 260 seconds]
doecnt has quit [Ping timeout: 276 seconds]
Algebr`` has quit [Ping timeout: 246 seconds]
butts_butts has joined #ocaml
sh0t has joined #ocaml
hay207_ has joined #ocaml
hay207 has quit [Ping timeout: 252 seconds]
dsheets has joined #ocaml
aphprentice has quit [Quit: Connection closed for inactivity]
dsheets has quit [Ping timeout: 250 seconds]
gpietro_ has joined #ocaml
FreeBirdLjj has joined #ocaml
sh0t has quit [Ping timeout: 250 seconds]
darkf has joined #ocaml
FreeBirdLjj has quit [Remote host closed the connection]
FreeBirdLjj has joined #ocaml
toomuchtvrotsurb has joined #ocaml
dsheets has joined #ocaml
dsheets has quit [Ping timeout: 260 seconds]
butts_butts has quit [Ping timeout: 244 seconds]
tennix has joined #ocaml
dsheets has joined #ocaml
toomuchtvrotsurb has quit [Remote host closed the connection]
walter|r has joined #ocaml
tmtwd has joined #ocaml
dsheets has quit [Ping timeout: 246 seconds]
theblatte has joined #ocaml
mistermetaphor has joined #ocaml
tmtwd has quit [Quit: Leaving]
mistermetaphor has quit [Remote host closed the connection]
mistermetaphor has joined #ocaml
jeffmo has quit [Quit: jeffmo]
dsheets has joined #ocaml
toomuchtvrotsurb has joined #ocaml
mistermetaphor has quit [Ping timeout: 252 seconds]
dsheets has quit [Ping timeout: 240 seconds]
mistermetaphor has joined #ocaml
Algebr`` has joined #ocaml
yunxing has joined #ocaml
toomuchtvrotsurb has quit [Remote host closed the connection]
idegen has quit [Quit: Leaving.]
walter|r has quit [Remote host closed the connection]
govg has quit [Quit: leaving]
govg has joined #ocaml
Bahman has joined #ocaml
dsheets has joined #ocaml
dsheets has quit [Ping timeout: 240 seconds]
dsheets has joined #ocaml
dsheets has quit [Ping timeout: 250 seconds]
dsheets has joined #ocaml
jeffmo has joined #ocaml
FreeBirdLjj has quit [Remote host closed the connection]
dsheets has quit [Ping timeout: 276 seconds]
FreeBirdLjj has joined #ocaml
sh0t has joined #ocaml
gpietro_ has quit [Read error: Connection reset by peer]
MercurialAlchemi has joined #ocaml
mistermetaphor has quit [Remote host closed the connection]
dsheets has joined #ocaml
toomuchtvrotsurb has joined #ocaml
dsheets has quit [Ping timeout: 276 seconds]
dsheets has joined #ocaml
dsheets has quit [Ping timeout: 240 seconds]
toomuchtvrotsurb has quit [Remote host closed the connection]
toomuchtvrotsurb has joined #ocaml
struktured has quit [Ping timeout: 260 seconds]
rgrinberg has quit [Ping timeout: 260 seconds]
dsheets has joined #ocaml
dsheets has quit [Ping timeout: 240 seconds]
MercurialAlchemi has quit [Ping timeout: 252 seconds]
dsheets has joined #ocaml
dsheets has quit [Ping timeout: 260 seconds]
dsheets has joined #ocaml
sh0t has quit [Remote host closed the connection]
sh0t has joined #ocaml
sh0t has quit [Remote host closed the connection]
dsheets has quit [Ping timeout: 260 seconds]
unbalancedparen has quit [Quit: WeeChat 1.5]
butts_butts has joined #ocaml
dsheets has joined #ocaml
mistermetaphor has joined #ocaml
dsheets has quit [Ping timeout: 246 seconds]
A1977494 has joined #ocaml
MercurialAlchemi has joined #ocaml
butts_butts has quit [Ping timeout: 246 seconds]
ygrek has joined #ocaml
intTree123_ has joined #ocaml
Simn has joined #ocaml
intTree123 has quit [Ping timeout: 260 seconds]
d0nn1e has quit [Ping timeout: 265 seconds]
d0nn1e has joined #ocaml
FreeBirdLjj has quit [Remote host closed the connection]
FreeBirdLjj has joined #ocaml
yegods_ has joined #ocaml
yegods has quit [Read error: Connection reset by peer]
govg has quit [Ping timeout: 260 seconds]
tennix has quit [Ping timeout: 276 seconds]
tennix has joined #ocaml
yunxing has quit [Remote host closed the connection]
mistermetaphor has quit [Remote host closed the connection]
tennix has quit [Ping timeout: 260 seconds]
nicholasf has quit [Ping timeout: 240 seconds]
tennix has joined #ocaml
troydm has quit [Ping timeout: 244 seconds]
lindig has joined #ocaml
nicholasf has joined #ocaml
nicholasf has quit []
rand__ has joined #ocaml
AlexRussia has quit [Ping timeout: 246 seconds]
toboggan has joined #ocaml
Bahman_ has joined #ocaml
Bahman has quit [Ping timeout: 276 seconds]
butts_butts has joined #ocaml
yegods_ has quit [Remote host closed the connection]
butts_butts has quit [Remote host closed the connection]
butts_butts has joined #ocaml
djellemah has quit [Remote host closed the connection]
djellemah has joined #ocaml
<Algebr``> Trying out Lwt_pool, should I expect to see any actual improvements?
tennix has quit [Quit: WeeChat 1.5]
tennix has joined #ocaml
<def`> Over?!
dsheets has joined #ocaml
dsheets has quit [Remote host closed the connection]
toboggan has quit [Ping timeout: 260 seconds]
dsheets has joined #ocaml
dsheets has quit [Remote host closed the connection]
dsheets has joined #ocaml
mengu has joined #ocaml
mengu has quit [Changing host]
mengu has joined #ocaml
nopf has quit [Ping timeout: 265 seconds]
toomuchtvrotsurb has quit [Remote host closed the connection]
larhat has joined #ocaml
jwatzman|work has joined #ocaml
jwatzman|work has quit [Client Quit]
scarygelatin has quit [Ping timeout: 246 seconds]
Bahman_ has quit [Quit: ave atque vale]
sternenseemann has joined #ocaml
manjaro-kde5 has quit [Remote host closed the connection]
toboggan has joined #ocaml
toomuchtvrotsurb has joined #ocaml
<companion_cube> gasche: ah, nice
<companion_cube> mine is an amortized recursive tree from Okasaki
toomuchtvrotsurb has quit [Ping timeout: 260 seconds]
mengu has quit [Remote host closed the connection]
kushal has joined #ocaml
tane has joined #ocaml
amnn has joined #ocaml
FreeBirdLjj has quit [Remote host closed the connection]
FreeBirdLjj has joined #ocaml
ygrek has quit [Ping timeout: 240 seconds]
mal`` has quit [Quit: Leaving]
yegods has joined #ocaml
yegods has quit [Remote host closed the connection]
FreeBirdLjj has quit [Remote host closed the connection]
FreeBirdLjj has joined #ocaml
pierpa has joined #ocaml
Simn has quit [Ping timeout: 260 seconds]
mengu has joined #ocaml
amnn has quit [Read error: Connection reset by peer]
amnn has joined #ocaml
lindig has quit [Read error: Connection reset by peer]
amnn has quit [Read error: Connection reset by peer]
amnn has joined #ocaml
yegods has joined #ocaml
mengu has quit [Ping timeout: 250 seconds]
bba has joined #ocaml
mal`` has joined #ocaml
mj12` has joined #ocaml
dsheets has quit [Remote host closed the connection]
dsheets has joined #ocaml
mengu has joined #ocaml
kakadu has joined #ocaml
yegods has quit [Remote host closed the connection]
yegods has joined #ocaml
Reshi has quit [Ping timeout: 244 seconds]
mal`` has quit [Quit: Leaving]
yegods has quit [Ping timeout: 250 seconds]
butts_butts has quit [Read error: Connection reset by peer]
butts_butts_ has joined #ocaml
nore has quit [Ping timeout: 244 seconds]
nore has joined #ocaml
butts_butts_ has quit [Ping timeout: 260 seconds]
amnn has quit [Read error: Connection reset by peer]
amnn has joined #ocaml
bba has quit [Quit: Textual IRC Client: www.textualapp.com]
mal`` has joined #ocaml
bba has joined #ocaml
dsheets has quit [Remote host closed the connection]
Reshi has joined #ocaml
yegods has joined #ocaml
kushal has quit [Quit: Leaving]
butts_butts has joined #ocaml
jwatzman|work has joined #ocaml
dsheets has joined #ocaml
yegods has quit [Remote host closed the connection]
toomuchtvrotsurb has joined #ocaml
yunxing has joined #ocaml
yegods has joined #ocaml
dsheets has quit [Ping timeout: 260 seconds]
toomuchtvrotsurb has quit [Ping timeout: 276 seconds]
mengu has quit [Remote host closed the connection]
g4143 has joined #ocaml
Simn has joined #ocaml
g4143 has quit [Quit: Ex-Chat]
yegods has quit [Read error: Connection reset by peer]
yegods has joined #ocaml
FreeBird_ has joined #ocaml
butts_butts has quit [Read error: Connection reset by peer]
butts_butts has joined #ocaml
FreeBirdLjj has quit [Ping timeout: 260 seconds]
FreeBird_ has quit [Ping timeout: 276 seconds]
mengu has joined #ocaml
companion_cube has quit [Ping timeout: 260 seconds]
sepp2k has joined #ocaml
dsheets has joined #ocaml
FreeBirdLjj has joined #ocaml
dsheets has quit [Ping timeout: 260 seconds]
nicoo has quit [Ping timeout: 246 seconds]
FreeBird_ has joined #ocaml
FreeBirdLjj has quit [Ping timeout: 260 seconds]
nicoo has joined #ocaml
rgrinberg has joined #ocaml
yunxing has quit [Remote host closed the connection]
companion_square has joined #ocaml
FreeBird_ has quit []
companio1_square has joined #ocaml
companio1_square is now known as companion_cube
companion_square has quit [Client Quit]
ygrek has joined #ocaml
idegen has joined #ocaml
amnn has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
amnn has joined #ocaml
amnn has quit [Read error: Connection reset by peer]
amnn has joined #ocaml
jeffmo has quit [Quit: jeffmo]
dsheets has joined #ocaml
dsheets has quit [Ping timeout: 276 seconds]
dsheets has joined #ocaml
ygrek has quit [Ping timeout: 260 seconds]
njmurphy has joined #ocaml
yunxing has joined #ocaml
yegods has quit [Remote host closed the connection]
mengu has quit [Remote host closed the connection]
amnn has quit [Read error: Connection reset by peer]
yunxing has quit [Ping timeout: 276 seconds]
amnn has joined #ocaml
pierpa has quit [Read error: Connection reset by peer]
pierpa has joined #ocaml
sh0t has joined #ocaml
pierpa has quit [Read error: Connection reset by peer]
<companion_cube> rgrinberg: opium's readme should really be updated, it still refers to Deferred.t ^^
mj12` has quit [Quit: ERC Version 5.3 (IRC client for Emacs)]
pierpa has joined #ocaml
mj12` has joined #ocaml
tennix has quit [Ping timeout: 276 seconds]
<rgrinberg> companion_cube: i'll find some time to do it today
<companion_cube> sure
<companion_cube> o/ btw
<rgrinberg> I thought the examples are supposed to compile. Maybe there's still some snipepts in there that aren't part of the build
<companion_cube> probably so, yeah
<companion_cube> (the readme.cpp system is neat, btw)
<rgrinberg> outdated documentation is something I really hate. But it looks like it help me prevent this
toboggan has quit [Ping timeout: 250 seconds]
<companion_cube> checkable documentation is great
MercurialAlchemi has quit [Ping timeout: 260 seconds]
pierpa has quit [Read error: Connection reset by peer]
amnn has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
xyproto has quit [Quit: so long and thanks for all the fish]
pierpa has joined #ocaml
toomuchtvrotsurb has joined #ocaml
mengu has joined #ocaml
struktured has joined #ocaml
struktured has quit [Quit: Konversation terminated!]
aantron has joined #ocaml
kushal has joined #ocaml
kushal has quit [Changing host]
kushal has joined #ocaml
njmurphy has quit [Quit: Leaving]
jeffmo has joined #ocaml
jasiek has joined #ocaml
<jasiek> has anyone tried to run opam on macosx
pierpa has quit [Read error: Connection reset by peer]
<jasiek> i'm having an issue where it fails to install core - https://gist.github.com/jasiek/6932d8541853ed7fe4663fc534bb6c12
yegods has joined #ocaml
rand__ has quit [Quit: leaving]
yegods has quit [Ping timeout: 276 seconds]
bigs has joined #ocaml
tennix has joined #ocaml
cat5e has quit [Ping timeout: 260 seconds]
A1977494 has quit [Ping timeout: 244 seconds]
Reshi has quit [Ping timeout: 252 seconds]
cat5e has joined #ocaml
A1977494 has joined #ocaml
MercurialAlchemi has joined #ocaml
Mercuria1Alchemi has joined #ocaml
kushal has quit [Ping timeout: 252 seconds]
<dsheets> jasiek: you're build a quite old version of core. how did you install ocaml? you are missing camlp4.
kushal has joined #ocaml
rgrinberg has quit [Ping timeout: 244 seconds]
<jasiek> from macports: ocaml @4.02.2_1 (active)
<dsheets> jasiek: need ocaml-camlp4, too
Reshi has joined #ocaml
kushal has quit [Excess Flood]
kushal has joined #ocaml
rgrinberg has joined #ocaml
rgrinberg has quit [Client Quit]
<jasiek> ok, let's have a look
rgrinberg has joined #ocaml
mistermetaphor has joined #ocaml
mengu has quit [Remote host closed the connection]
yegods has joined #ocaml
rgrinberg has quit [Quit: WeeChat 1.5]
rgrinberg has joined #ocaml
Reshi has quit [Quit: WeeChat 1.4]
tane has quit [Ping timeout: 260 seconds]
struk|work has quit [Ping timeout: 250 seconds]
struk|work has joined #ocaml
kushal has quit [Ping timeout: 260 seconds]
<Algebr``> Asking again, how much of a benefit is Lwt_pool?
tane has joined #ocaml
slash^ has joined #ocaml
<flux> as in compared against what?
<Algebr``> as to not using a thread pool and always using fresh Lwt threads, they are basically worker threads
<Algebr``> not sure it will be a big improvement in performance since lwt threads are supposedly so cheap anyway
<flux> I quite doubt there's a performance benefit to be had.. I think its point is to limit usage of some other resource than threads.
<flux> for example, its documentation mentions "for example pools of connections to a database"
<Algebr``> yea
<def`> Algebr``: it's more expensive
<def`> but that's really not the point of the pool as pointed by flux :)
<def`> (You cannot reuse lwt threads, they are "pure")
Orion3k has quit [Read error: Connection reset by peer]
<Algebr``> def`: what's more expensive?
<def`> A pool is more expensive than an Lwt.t
<Algebr``> but the pool is a onetime cost at startup
<def`> Absolutely not.
<Algebr``> okay go on
<jasiek> what do you guys use ocaml for?
<Algebr``> everything possible, its a general purpose language.
octachron has joined #ocaml
<def`> Algebr``: the pool is a way to limit concurrency
<jasiek> right, i know that
jwatzman|work has quit [Quit: jwatzman|work]
<Algebr``> def`: here's a usecase say you make a Lwt based server and you know the max number of connections it will ever have to make, why do Lwt_pool.use p (fun _ -> ) in the callback for the Lwt server
<jasiek> i know jane street uses it extensibely
<def`> (in other languages, the fact that a pool is faster is an implementation detail, the purpose of pool is to ensure than no more tasks than a given maximum is executed)
<pecan> I like writing one-off domain-specific compilers with it
<Algebr``> jasiek: compiling to JS, systems software, mirageos
<reynir> Is Lwt_pool new or have I just missed it when I needed it? :-)
Simn has quit [Quit: Leaving]
<def`> Algebr``: there is no point, it can only make things slower
<Algebr``> Okay, so the pool is really like a sempahore
<Algebr``> semaphore
<aantron> Lwt_pool i think is not very new
<def`> Algebr``: wait no, knowing the "max number of connections
<companion_cube> no, it's old
<companion_cube> and pretty useful
<def`> " doesn't matter
<def`> it's the number of concurrent connections that matter
<Algebr``> I have this Lwt based server and I know upfront the max number of connections it will ever be made to do
sh0t has quit [Ping timeout: 260 seconds]
<Algebr``> I think benchmarking will answer this
<flux> algebr``, is your goal to protect your service against DoS attacks? if not, then I think Lwt_pool is of no use..
<def`> Algebr``: a pool can only be more expensive than plain threads since the pool is built over threads >_<
<mrvn> def`: but you pay it forward and reuse them
<def`> *PAN*
<Algebr``> def`: yes but my line of thinking was that when the server handles a response it has to make a new Lwt.t rather than just use one from the pool
<def`> Algebr``: Lwt.t are pure
<def`> you cannot reuse them
<Algebr``> No, goal is to increase throughput of services that use the server
<def`> the garbage collector reuse them
<Algebr``> But isn't that what the pool is?
<def`> NO
<Algebr``> and I'm trying to lessen as much friction as possible on the OCaml side
<Algebr``> ah
<def`> A pool is a way to limit concurrency, not reuse anything.
<flux> in my mind using an Lwt_pool for reusing lwt threads is as much useful as having a cache for integers :)
<def`> If in java a pool is reusing something, then again, that's an implementation detail.
<mrvn> def`: that doesn't sound like a pool
<def`> mrvn: LALALLALALALALALALALALALALALALALALALALALALLA
<aantron> hmm, the Lwt_pool docs may be misleadingly-written
kushal has joined #ocaml
<mrvn> def`: normaly you take a resource out of a pool, use it and *put it back*
<Algebr``> uh everyone else's usage of pool is like what mrvn is saying
<mrvn> The point being that you safe on creating and destroying the resource over and over.
<Algebr``> I mean outside of lwt, then Lwt docs should be clear about this
<def`> s/pool/Lwt_pool/
<aantron> Algebr``, if you find the docs are confusing, could you please open an issue on GH? PR is also welcome
<mrvn> If Lwt_pool does something else it should be named something else.
<Algebr``> I would do a PR of course, but I'm not sure if I'm correct, really going off of def`'s wisedom and saying
<aantron> then an issue is fine. i am reading the docs and i dont get what Lwt_pool does exactly
<aantron> going to improve the docs a bunch at some point
<def`> Lwt threads are monotonic, they can be set only once, which make them pure from the point of view of the monad.
<def`> In this context, what could it mean to reuse an Lwt.t ?
<def`> Oups, I was wrong in one sense...
<def`> Argh
<def`> So Lwt_pool actually allows to reuse resources, but not threads.
tane has quit [Ping timeout: 276 seconds]
* def` digging a hole
<Algebr``> ....
<def`> Algebr: ok, fresh explanation... An 'a Lwt_pool.t allows to reuse ressources of type 'a.
<edwin> I actually looked at using Lwt_throttle once, before I realized that Lwt_pool does what I wanted
<def`> Not threads, but ressources, say connection to a database.
<Algebr``> Right, okay, now that is clearer
<def`> The number of ressources existing at a given time is limited by the pool size. They are created lazily.
sh0t has joined #ocaml
<def`> When you thread finishes, ressource is put back to the pool.
<Algebr``> resource being whatever the 'a was right
<def`> When you grab a ressource, it is created if the pool is not full or if previous ressource didn't pass validation predicate.
<def`> Yes.
<def`> So again: there is no point in pooling "threads", they are pure things.
<Algebr``> ah, damnit, so I don't have any useful 'a to give
<Algebr``> right, much clearer, than you
<def`> Pooling is useful as a cache but not, like you intended, to increase performance. They can only decrease performance, unless you want to arbiter access to some scarce external ressource.
rgrinberg has quit [Quit: WeeChat 1.5]
<edwin> or if establishing the connection to the external resource is expensive
<edwin> might be faster to send a query on an already established SSL connection than to perform a new SSL handshake
<def`> Yes, scarce was a bit vague. Scarce or expensive to get :)
<Algebr``> Okay, so now I'm wondering how much of a performance improvement I can get from using Lwt_preemtpive
<def`> Ok it seems you have a performance problem :). Can you tell more about it?
hcarty has joined #ocaml
<Algebr``> 10 servers on 10 different ports providing a service to forward data from one tcp endpoint to another.
tane has joined #ocaml
<flux> so your performance is lacking? not enough MB/s?
<hcarty> Algebr``: Would it be better if the doc comment for 'a Lwt_pool.t read more like: "Type of a pool containing values of 'a"
<Algebr``> yea, much better. flux yea, not enough MB/s. Probably because I'm using Lwt_io also instead of directly going for file descriptors
<Algebr``> hassle to refactor that
<hcarty> I'll submit a PR
<flux> algebr``, so does it consume a lot of CPU?
<Algebr``> also where's Lwt's monad join, unit Lwt.t Lwt.t -> unit Lwt.t
<edwin> I used this in one case to improve throughput: Lwt_io.set_default_buffer_size (128*1024); Lwt_unix.set_pool_size 64;
<Algebr``> flux: I Don't think it does
<edwin> I think it maxed out the ethernet link in my case
<aantron> hcarty: "Creating pools" is also a bit useless in the module brief. perhaps "resource pools" ?
<Algebr``> edwin: okay, this is a new pool!
<flux> algebr``, hmm, doesn't that suggest your problem is network-bound?
<companion_cube> anyone knows how to output a blockquote with Cow?
<Algebr``> flux not network, local sockets
<flux> hmm
<edwin> there's of course a tradeoff, larger buffer size means more memory usage
<flux> algebr``, so what does perf top say? or other profiling tools?
<Algebr``> don't care about the memory
kushal has quit [Read error: Connection reset by peer]
<Algebr``> haven't put in serious perf checking, was putting out fires and now have look at stuff like this
<Algebr``> can
<edwin> how big are the replies that you send, and whats your current MB/s?
<flux> I guess if the network isn't saturated and the CPU isn't either, doesn't that mean the program is blocking?
kushal has joined #ocaml
<Algebr``> The total amount moved across a session could be as small as 10mb or as big as 3gb
<Algebr``> It does get sluggish because when under high load I get a laggy response from other parts of the program
<Algebr``> current MB/s is up to 30 at beast
<Algebr``> best
<flux> well, that's not very high indeed
<Algebr``> not high at all
<Algebr``> edwin: sure about Lwt_unix.set_pool_size 64?
<edwin> the default is 1000, it used a bit too much memory for me, but if thats not your concern leave it at the default
<edwin> increasing the Lwt_io buffer size helped a lot in my case, but YMMV
<hcarty> aantron: Agreed. I'll make edits as I have time and submit PRs
<Algebr``> edwin: I'm not seeing Lwt_unix.set_pool_size at all
<aantron> hcarty: np, i would appreciate it if you amend the existing commit in the current PR, though. and let me know when you are done making edits to it, then i will merge :)
<aantron> and thanks
Mercuria1Alchemi has quit [Ping timeout: 276 seconds]
<edwin> Algebr``: http://ocsigen.org/lwt/2.5.1/api/Lwt_unix "Systeam threads pool"
<hcarty> aantron: I'm happy to help where I can. Thanks for your recent Lwt curation :-)
<Algebr``> ah, there is is
tennix has quit [Ping timeout: 244 seconds]
<edwin> do you perform any processing on those tcp streams, or just send from one endpoint to another?
tane has quit [Ping timeout: 276 seconds]
<Algebr``> no processing
yunxing has joined #ocaml
<edwin> also how often do you flush the streams? if those streams are meant to be part of some request-reply sequence then it coudl be useful to flush when your source stops sending data. otherwise Lwt_io will only actually send the data when: its buffer is full, your application is otherwise idle (i.e. Lwt.pause resumes) and it auto-flushes
kushal has quit [Ping timeout: 240 seconds]
<edwin> either buffer is full or application is idle*
<aantron> perhaps this doesnt belong in the main lwt docs, but maybe there should be an article on how to do io with lwt efficiently, under various circumstances?
copy` has joined #ocaml
<edwin> like a collection of tips? if you want lower latency do this, if you want higher throughput do that?
<flux> algebr``, are you certain more data would be processed if only this piece of code performed better?
<Algebr``> and of course no special build instructions mentioned for lwt.preemptive, added lwt.preemptive to builddepends but build breaks with ocamlfind: Error from package `threads': Missing -thread or -vmthread switch, guess I need to add something to _tags
butts_butts has quit [Ping timeout: 260 seconds]
<Algebr``> edwin: no request-reply, just streaming binary data, think scp
yegods has quit [Remote host closed the connection]
<aantron> edwin: yes, perhaps something like that
<Algebr``> flux: its an intuition, I have squeezed other places already
<edwin> ok, was gonna suggest tcp_nodelay, but for throughput that doesn't help, only for latency
<aantron> Algebr``: issue/PR will be welcome again when you have resolved this :)
<edwin> have you tried to optimize a single stream for max throughput? have a look with strace -f -ttt -T to see if you spot any obvious places where your application sleeps when it shouldn't
<Algebr``> ahh, how does one turn on -thread via oasis, why doesn't lwt.premptive do it for me....
<hcarty> aantron: "How to do IO with Lwt" would be a very nice article to have
<Algebr``> hcarty: also a blog post I've been meaning to write
<Algebr``> edwin: no, need to do a dedicated profiling day
<hcarty> Algebr``: That's a common annoyance... and I don't know why ocamlfind doesn't/can't do the -thread stuff on its own
<aantron> i thought it can.. checking
yegods has joined #ocaml
mengu has joined #ocaml
<Algebr``> hcarty: so how to fix?
<hcarty> Algebr``: I've been lucky so far - "just" using Lwt_io or zeromq has been fast enough
<aantron> but it should also be added to docs if its a problem, since not everyone will necessarily be building with ocamlfind
tane has joined #ocaml
<hcarty> Algebr``: tag(threads) -- or maybe tag(thread), I can't ever remember which
<hcarty> aantron: agreed re: docs
Mercuria1Alchemi has joined #ocaml
<Algebr``> hcarty: found it
<Algebr``> just need to add threads to buildDepends
<hcarty> aantron: ocamlfind may be able to, but I always see "threads" listed explicitly, when, say, code uses "core" which requires threads. I suspect it has to do with the vmthreads/system threads split, but I don't know if that's actually the case.
<aantron> anyway at least ocamlfind allows to pass linker options, not sure if this is sufficient. will look into it later, issue will help to remember :)
<aantron> ah, perhaps
<Algebr``> so maybe lwt.premeptive shoudl just have it in its META file, or maybe threads is a fake buildDepends for oasis
dsheets has quit [Remote host closed the connection]
<hcarty> aantron: https://github.com/ocsigen/lwt/issues/245 - reminder added :-)
dsheets has joined #ocaml
<Drup> Algebr` "threads" in BuildDepends works
<Drup> (I'm surprised that's not the first thing you tried, it's the most obvious one, and it works)
kolko has joined #ocaml
<aantron> hcarty: thanks!
<hcarty> Drup: Why is that necessary? Is it because it's possible to pick between threading implementations?
<Algebr``> obvious is only obvious when its obvious to you
<Drup> or because someone forgot to specify the dependency in the META file ?
<Algebr``> I forgot if threads is a package, or a ocamlfind flag
rgrinberg has joined #ocaml
<hcarty> Drup: Is that all it is? A forgotten META dependency?
<Drup> I guess ?
<Algebr``> it seems so
<edwin> Algebr``: also up to how many bytes do you read from an Lwt_io at once? try to make that match the Lwt_io's underlying buffer size
<Algebr``> I read whenever there is data, so basically all the time
<hcarty> It seems to be a common thing - anything that requires threads seems to also require the user to pass the appropriate threads tag/package/etc
<Drup> really ?
<edwin> Algebr``: yes, but how much data do you ask from it at once when you call Lwt_io.read*?
rand__ has joined #ocaml
amnn has joined #ocaml
<edwin> if you don't give it a count Lwt_io.read will try to read the whole stream
<hcarty> Drup: I've seen it with Lwt_preemptive and when I've had to work with code using Core
<Drup> I though it was ocamlfind magic but maybe it's oasis magic instead
relrod has quit [Ping timeout: 244 seconds]
kushal has joined #ocaml
<aantron> hcarty: ignore the appveyor failure, thats still a work in progress
rand__ has quit [Ping timeout: 246 seconds]
rand__ has joined #ocaml
relrod_ has joined #ocaml
relrod_ has joined #ocaml
amnn has quit [Ping timeout: 276 seconds]
shinnya has joined #ocaml
amnn has joined #ocaml
<hcarty> aantron: Thanks
mengu has quit []
<NingaLeaf> can anyone recommend a current compiler tutorial implementing a DSL? I know others have asked this, but i can't find the suggestions looking back as the irclogs.
Mercuria1Alchemi has quit [Ping timeout: 276 seconds]
sh0t has quit [Ping timeout: 250 seconds]
lokien_ has joined #ocaml
<hcarty> Is it ok to "eval $(opam config env --switch=MY_SWITCH)" to use MY_SWITCH just in the current terminal session?
<Drup> yes
<Drup> I do it all the time
<Drup> (with several switches at the same time)
<Drup> NingaLeaf: as a library or as a ppx ?
<NingaLeaf> Drup: not sure - i'm looking to write a static analyzer for python
<Drup> Ah.
<Drup> Do you have a parser already ? :)
<NingaLeaf> No, lol
<Drup> then you might want to start by that ..
<Algebr``> ah, the Lwt_pool.use gives you a 'a, but that's assuming each is equavillaly useable, but mine are unique
<Algebr``> I guess I could add indirection of a hashtable?
<Drup> Algebr``: what are you pooling ?
<Algebr``> that's hacky
<Algebr``> socket connections
<NingaLeaf> Drup: I have one started but its only maybe 30% finished.
<Drup> does it matter which connection you are using ?
<Algebr``> but one cannot another replace another, they are unique
<Algebr``> yes, matters
<Algebr``> I just want to make them once.
<Drup> then don't use a pool
<Algebr``> I guess I can just skip the pool
<Algebr``> yea
<Drup> (or use a 1-pool)
<Algebr``> plain hashtable should be fine
kushal has quit [Ping timeout: 260 seconds]
<hcarty> Algebr``: That's what I was going to suggest :-) And if you end up needing duplicates of one or more the values in the table could be Lwt_pool.t
<hcarty> Drup: Thanks - I've recent started having to switch between several switches regularly. Now I want a bash function to automatically do this when I change into a directory...
<hcarty> On the todo list
<Drup> hcarty: probably going to be there in next opam
<hcarty> Drup: That would be quite nice
sh0t has joined #ocaml
<hcarty> Avoid the frustration of a stale setup.data
sh0t has quit [Read error: Connection reset by peer]
sh0t has joined #ocaml
lokien_ has quit []
scarygelatin has joined #ocaml
unbalancedparen has joined #ocaml
yunxing has quit [Remote host closed the connection]
<Algebr``> crappy setup.data blew an interview for me.
yunxing has joined #ocaml
<hcarty> Algebr``: Ouch
<NingaLeaf> Drup: do you any suggestions on current compiler tutorials?
<Drup> 1) not really 2) you are not building a compiler
<NingaLeaf> ok thansk!
<Drup> what kind of static anlysis do you wish to do ?
<NingaLeaf> Its really a proof of concept looking for type issues applying dependent type [theory]
<NingaLeaf> there alot more to it but thats the high level
<Drup> I see
<Drup> you never built anything like it ? (since you are asking for tutorials ...)
<Drup> that's not really entry-level static analysis ^^'
<NingaLeaf> i've done a lot of work in C and some to a little work in ocaml
<NingaLeaf> I've found ocaml to work for me and wanted to branch out
<aantron> hcarty: companion_cube: channel: you are invited to submit proposed Lwt_result modules (or other approaches to Lwt and result) to resolve https://github.com/ocsigen/lwt/issues/226. i will eventually focus on this. i still have things in the queue first, but it would be nice to give interested people some more time to discuss. thanks in advance for any PRs :)
<hcarty> aantron: I can submit something now/soon
<aantron> no rush, but would be appreciated :)
dsheets has quit [Remote host closed the connection]
<j0sh> i'm trying to send a signal to some subprocesses with Lwt_process.process_none#kill, but they don't seem to take effect until after I've Ctrl-C'd my program?
NingaLeaf has quit [Quit: Leaving]
<j0sh> Lwt_process.process_none#terminate works, but I'm not looking for sigkill
yunxing has quit [Remote host closed the connection]
dsheets has joined #ocaml
yunxing has joined #ocaml
<hcarty> aantron, Drup: Do you have a preference on ('a, 'b) result vs ('ok, 'error) result when naming labeling type parameters?
dsheets has quit [Ping timeout: 276 seconds]
<hcarty> And if ('ok, 'error) what name would you use for a transformed 'ok or 'error?
<j0sh> scrub that, Lwt_process.process_none#kill does not seem to be having an effect at all
NingaLeaf has joined #ocaml
NingaLea_ has joined #ocaml
NingaLea_ has quit [Client Quit]
<Drup> hcarty: doesn't matter, do as you feel
<Drup> 'ok/'error is good for the type declaration
<aantron> hcarty: i prefer 'ok/'error at least in the declaration. long function signatures with multiple mentions of the type variables should probably use 'a/'e
<aantron> but otherwise 'ok/'error wherever it doesnt harm legibility
<NingaLeaf> Drup: i've never built a static analyzer that why i'm exploring using ocaml for my proof of concept
<aantron> (i actually dont like 'ok :p but i do like 'error)
<Drup> NingaLeaf: ocaml is a good choice, but it's going to diminish the baseline theoretical difficulties of the task :)
<Drup> good luck ^^'
<Drup> it's *NOT* going to ..
sh0t has quit [Ping timeout: 276 seconds]
<hcarty> Drup: aantron: Thanks
<aantron> mostly because 'ok somehow sounds like it carries unit to me, instead of a non-trivial value, but its not a big deal
<aantron> (i.e. the corresponding variand would be Ok, not Ok of 'ok)
dsheets has joined #ocaml
butts_butts has joined #ocaml
dsheets has quit [Ping timeout: 250 seconds]
sgnb has quit [Remote host closed the connection]
<companion_cube> (ah, hcarty too)
sh0t has joined #ocaml
rgrinberg has quit [Ping timeout: 260 seconds]
<hcarty> companion_cube: Beat me to it!
<hcarty> My interface is slightly different
<companion_cube> there's not much though
<companion_cube> oh
<companion_cube> please expand ^^
<hcarty> aantron: WOuld you prefer two PRs or discussion in one?
<hcarty> companion_cube: Different names mainly...
<hcarty> Along with Lwt.return_ok and Lwt.return_error
<companion_cube> let the bikeshedding begin!!! *drums*
<companion_cube> I see
<companion_cube> so you consider many things as map, that I classify as bind :D
<hcarty> companion_cube: :-)
<hcarty> I was following pvem's naming IIRC
<companion_cube> overall it looks a lot like what I have
<aantron> companion_cube: thanks!
<aantron> hcarty: two PRs are welcome for review, but you can put something like "discussion in 247" in the description to link to the first
<aantron> just to keep it comprehensible :)
pecan has quit [Ping timeout: 250 seconds]
<Drup> companion_cube: drums ? you said drums ? https://www.youtube.com/watch?v=88SOwK7Ocsk :D
<aantron> and if there is a bunch of discussion in IRC, it probably ought to be summarized in the PR so others can see later. for more bikeshedding, bickering, and nit-picking of course :)
<aantron> a bunch of +useful* discussion :)
<companion_cube> well feel free to discuss on the PR
<companion_cube> and downvote with :-1: every single line :p
<companion_cube> Drup: I've always known you were a subtle person, this url confirms it
<hcarty> I think I'm ok with keeping the discussion in companion_cube's PR
<aantron> yes, please object to #247 :p
<hcarty> s/I think//
<hcarty> As companion_cube said, there isn't much difference and 247 is more complete than what I would have proposed
<Drup> companion_cube: I'm very subtle, especially in my music tastes
<companion_cube> is there a @since policiy for lwt right now?
<companion_cube> -i
<aantron> no existing policy i know of, but add it
<aantron> well
<aantron> or don't.. since we don't know what version the next one will be
<Drup> aantron: you make the policies now :D
<companion_cube> heh
<aantron> yes, i know. i guess my policy is i should take care of it? or, what would be reasonable?
<companion_cube> @since NEXT_RELEASE
<Drup> ^
<companion_cube> + a simple sed script before release
<companion_cube> works well for containers
<aantron> fair enough
<companion_cube> I added a few things
<hcarty> companion_cube: If you want to add return_ok/return_error with (possibly?) less typing - http://vpaste.net/9lP7W
<companion_cube> too late :)
sh0t has quit [Quit: Leaving]
<hcarty> companion_cube: So fast!
<Drup> companion_cube: you didn't changed Lwt.result ?
<companion_cube> oh
<Drup> I even talked about it in your thread ... =')
<companion_cube> but how to deal with the 2 other cases?
<Drup> You don't
<companion_cube> meh
<Drup> I mean
<Drup> 'a lwt = 'a | exn | actual_thread
<Drup> (roughly)
<Drup> if it's an actual_thread, you wait it out, if it's 'a, it's Ok 'a, if it's exn, It's Error exn
<Drup> tada.
<companion_cube> ah, ok, it works because result_of_state is actually useless
<Drup> yes
<companion_cube> wasn't obvious...
<Drup> well, not useless, the identity
<Drup> :D
<companion_cube> well it's not translatable
<Drup> nope
<companion_cube> but it looks like it's not useful
<Drup> doesn't matter
<Drup> yes
<Drup> I mean, not very useful
<Drup> lwt already contains a result type, so it would be nice to have smooth interaction with that
<companion_cube> done
relrod_ is now known as relrod
<Drup> it's not exposed ?
butts_butts has quit [Ping timeout: 252 seconds]
<Drup> also, you have 'a result -> 'a lwt, but you don't have 'a lwt -> ('a, exn) result Lwt.t
<Drup> oh, you do
<companion_cube> not in Lwt
<Drup> nevermind
<Drup> (it's "catch")
<companion_cube> the only missing piece, I think, is `('a,exn) Lwt_result.t -> 'a Lwt.t`
<Drup> (it's probably more efficient with Lwt.state, but that's details)
kakadu has quit [Quit: Page closed]
<Drup> you probably want to deprecate make_value/_error
<companion_cube> propose it on the PR and hl the maintainer ;)
<companion_cube> (this should be discussed)
<Drup> effort :(
<Drup> aantron: I'm HLing the maintaner x)
<companion_cube> 'k
<hcarty> How were make_value and make_error used previously? What would their replacement if they're deprecated?
<hcarty> I ask because I've never used either
d0nn1e has quit [Ping timeout: 244 seconds]
<Drup> Result.ok
d0nn1e has joined #ocaml
<companion_cube> I suppose they are not used a lot
<Drup> yeah
<hcarty> Drup: I guess it would be Lwt.return_ok ok/Lwt.return_error exn
<hcarty> companion_cube: aantron: I back companion_cube's PR, I'm not making a separate one. And I look forward to dropping my internal version of this :-)
<Drup> hcarty: no, it's really Result.ok
<hcarty> Drup: Oh right, those functions don't return threads
<Drup> yeah
<companion_cube> doesn't cost much to keep them though
rgrinberg has joined #ocaml
kolko has quit [Quit: ZNC - http://znc.in]
slash^ has quit [Read error: Connection reset by peer]
octachron has quit [Quit: Page closed]
Denommus has joined #ocaml
yunxing has quit [Remote host closed the connection]
yunxing has joined #ocaml
Icefoz has joined #ocaml
<Icefoz> So I have a weird issue, where compiling something with ocamlc is not finding a necessary .so when I run the resulting program, but compiling with ocamlopt has no problems.
<hannes> is there something (maybe in ocamlfind) which returns for a given package/subpackage the list of packages in the requires line (of the META file)?
<Icefoz> I'm using a fresh 4.03 toolchain installed from opkg...
<Icefoz> Any ideas on where to start?
<copy`> Is it possible to install multiple opam switches with the same ocaml version?
<hannes> copy`: yes, opam switch --alias-of 4.03.0 my-other-4.03
<copy`> Cool, thanks
<hannes> (maybe --alias-of=4.03.0...)
<Icefoz> Hm, setting LD_LIBRARY_PATH to point to the dir containing the .so works, but I'd think ocaml should know where to find it already...
<copy`> hannes: The first one did it
shinnya has quit [Ping timeout: 276 seconds]
<Drup> hannes: one of the option of ocamlfind query, I guess
<hannes> Drup: ah, -r does something in that direction...
amnn_ has joined #ocaml
amnn_ has quit [Read error: Connection reset by peer]
amnn_ has joined #ocaml
MercurialAlchemi has quit [Ping timeout: 246 seconds]
amnn has quit [Ping timeout: 250 seconds]
pierpa has joined #ocaml
chris2 has quit [Ping timeout: 260 seconds]
<aantron> Drup: hcarty: companion_cube: thanks!
Icefoz has left #ocaml ["bah"]
amnn_ has quit [Read error: Connection reset by peer]
amnn has joined #ocaml
<aantron> once i drain the queue enough and look at this properly, i will likely have some minor comments, but it basically looks good. you are welcome to keep messing with it as you come up with ideas
<companion_cube> sure :)
<companion_cube> https://news.ycombinator.com/item?id=11716975 for people who missed it
amnn_ has joined #ocaml
amnn has quit [Ping timeout: 260 seconds]
<hcarty> companion_cube: Thanks for the link
larhat has quit [Quit: Leaving.]
icicled has joined #ocaml
sh0t has joined #ocaml
<icicled> is it a known problem that ppx_deriving_yojson does not compile with ocaml 4.03.0?
<Leonidas> oh, Reason
<companion_cube> I'm a bit worried by the page being unreadable on firefox though
<Leonidas> it is infinitely slow
<Algebr``> chrome and safari are fine
<Leonidas> well, facebook is one of those compiler-companies, they don't know much about web.
<companion_cube> :3
<Algebr``> ha
<Leonidas> I don't know how I feel about this yet.
dsheets has joined #ocaml
<companion_cube> I'm just a bit worried by the perspective of new libraries using jenga
<Leonidas> what's wrong with jenga?
<Leonidas> I don't like the fact that they use {}, despite solving the terrible nesting matching precedence ;)
<companion_cube> only its set of dependencies ;)
<Leonidas> Guess I'll see how this develops.
<companion_cube> but I can survive without those libraries anyway
<Leonidas> companion_cube: come on, just schedule a day to build all 250 jane street packages and you're done ;-)
<reynir> $ rtop, and then it says "Type #utop_help for help about using utop"
<companion_cube> heh
<companion_cube> is reynir the Reason version of oynir?
<Leonidas> Will there be Reasonable React now?
dsheets has quit [Ping timeout: 250 seconds]
<reynir> what's oynir
<Leonidas> companion_cube: I think it's the reason version of lablynir.
<reynir> heh
<Algebr``> Leonidas: an idea indeed.
<companion_cube> :D
<companion_cube> I don't think any Bünzli™ lib will convert to reason
<Leonidas> So if I understand correctly, it is basically just a compiler frontend, so I can just as well link to Reason code from OCaml?
<companion_cube> but they will be available from reason, of course
<Leonidas> Kinda like Elixir/Erlang?
<Algebr``> its ppx
<Algebr``> basically an option to -pp of compilers
<Leonidas> it is a ppx plugin? O.o
<Algebr``> No, sorry, I meant to say -pp of compilers
mistermetaphor has quit [Remote host closed the connection]
<Leonidas> Will revisit the site once they fix it in Firefox :-)
<reynir> hah, they added === to ocaml
mistermetaphor has joined #ocaml
<Leonidas> they also made <> go away
<Algebr``> it seems like its a gif, should be good now
<hcarty> icicled: You need to pin ppx_deriving and ppx_deriving_yojson to their dev repos under 4.03.0 for now
octachron has joined #ocaml
<icicled> hcarty: gotcha thanks
<reynir> ah too bad, they use fun x => x but not 'a -> 'a instead of 'a => 'a
Denommus has quit [Ping timeout: 252 seconds]
<companion_cube> I don't get the reason behind this particular change
enquora has joined #ocaml
tane has quit [Quit: Verlassend]
<Algebr``> what change
<companion_cube> from -> to =>
Algebr`` has quit [Remote host closed the connection]
<reynir> javascript (ES6?) has x => x as fun x -> x, IIRC
Algebr`` has joined #ocaml
<reynir> whoa, type account = Facebook of string int
<companion_cube> the `of` looks weird
<companion_cube> :D
sh0t has quit [Remote host closed the connection]
hcarty has quit [Ping timeout: 246 seconds]
<reynir> How do you make a varian constructor with an int list? I don't understand
<companion_cube> in reason? probably | Foo of (list int)
<reynir> Oh
pecan has joined #ocaml
octachron has quit [Ping timeout: 252 seconds]
codmajik has joined #ocaml
codmajik has quit [Quit: Page closed]
dsheets has joined #ocaml
sepp2k has quit [Quit: Leaving.]
yunxing has quit [Remote host closed the connection]
dsheets has quit [Ping timeout: 260 seconds]
yunxing has joined #ocaml
orbifx has joined #ocaml
<orbifx> elo
<orbifx> are there any thread safe containers?
<orbifx> In particular something along the lines of queue?
dsheets has joined #ocaml
A1977494 has quit [Quit: Leaving.]
dsheets has quit [Ping timeout: 244 seconds]
pierpa` has joined #ocaml
maker has quit [Ping timeout: 260 seconds]
pierpa has quit [Ping timeout: 276 seconds]
maker has joined #ocaml
pierpa` is now known as pierpa
dsheets has joined #ocaml
dsheets has quit [Ping timeout: 250 seconds]
<Algebr``> Can I fork and setup two separate Lwt event loops?
<Algebr``> Seems like it could if I just pass off work to Lwt_preemptive.detach? wouldn't it be in effect having its own event loop?
mistermetaphor has quit [Read error: Connection reset by peer]
mistermetaphor has joined #ocaml
yunxing has quit [Remote host closed the connection]
Nahra has joined #ocaml
<orbifx> Algebr``: what if you used the system fork function?
mistermetaphor has quit [Read error: Connection reset by peer]
ygrek has joined #ocaml
mistermetaphor has joined #ocaml
<Algebr``> yea, plain Lwt_unix.fork?
ygrek has quit [Ping timeout: 260 seconds]
yunxing has joined #ocaml
bba has quit [Quit: Textual IRC Client: www.textualapp.com]
enquora has quit [Quit: enquora]
bba has joined #ocaml
bba has quit [Client Quit]
<orbifx> Algebr``: possibly
<orbifx> I've not tried mixing those
<orbifx> I've only used fork from Unix
<orbifx> But recently started reconsidering about using Lwt :P
<orbifx> anyway, gtg
<orbifx> cya
orbifx has quit [Quit: WeeChat 1.5]
bba has joined #ocaml
madroach has quit [Ping timeout: 244 seconds]
cdidd has quit [Ping timeout: 260 seconds]
madroach has joined #ocaml
cdidd has joined #ocaml
dsheets has joined #ocaml
chris2 has joined #ocaml
dsheets has quit [Ping timeout: 240 seconds]
rand__ has quit [Quit: leaving]