companion_cube changed the topic of #ocaml to: Discussion about the OCaml programming language | http://www.ocaml.org | OCaml 4.14.0 released: https://ocaml.org/releases/4.14.0.html | Try OCaml in your browser: https://try.ocamlpro.com | Public channel logs at https://libera.irclog.whitequark.org/ocaml/
wingsorc has joined #ocaml
Soni has quit [Ping timeout: 248 seconds]
Soni has joined #ocaml
GreaseMonkey has quit [Remote host closed the connection]
greaser|q has joined #ocaml
vicfred has quit [Quit: Leaving]
waleee has quit [Ping timeout: 240 seconds]
<drakonis> did ocaml 5.0.0 suddenly release or something? opam just attempted to upgrade my switch to 5.0.0
<companion_cube> hu, it's indeed visible
<companion_cube> that's weird
<drakonis> did someone accidentally flip a switch on a package and made it require 5.0.0 instead?
<companion_cube> I wonder :)
<companion_cube> there's no announce email, so, it seems likely
<drakonis> looks like the virtual package got bumped
<drakonis> i had updated my packages yesterday and this hadn't happened
<companion_cube> hmm, also, we haven't even had any release candidate
<companion_cube> octachron: ocaml 5.0 on opam, mistake, correct?
<drakonis> the opam repository hasnt had any changes relevant to ocaml the virtual package
<drakonis> seems like a mistake
<drakonis> there's no packages that have been recently updated or added that have an explicit requirement for 5.x
<companion_cube> hmm really weird
darwin has joined #ocaml
darwin has left #ocaml [Leaving]
<drakonis> there have been a bunch of packages that have received patches to restrict them to versions below 5.0
kaph has joined #ocaml
Sankalp has quit [Ping timeout: 272 seconds]
zebrag has quit [Quit: Konversation terminated!]
kaph has quit [Read error: Connection reset by peer]
kaph has joined #ocaml
mbuf has joined #ocaml
Haudegen has joined #ocaml
ralu1 has quit [Ping timeout: 272 seconds]
hsw has joined #ocaml
Serpent7776 has quit [Read error: Connection reset by peer]
gravicappa has joined #ocaml
motherfsck has quit [Quit: quit]
kaph has quit [Ping timeout: 276 seconds]
ralu1 has joined #ocaml
Sankalp has joined #ocaml
<d_bot> <mseri> which version of opam are you using? Maybe something is off with the switch constraints
Serpent7776 has joined #ocaml
dextaa4 has joined #ocaml
<d_bot> <Patate> Writing a program that parses C headers and generates the corresponding ctypes bindings for ocaml
cedric has joined #ocaml
pukkamustard has joined #ocaml
mro has joined #ocaml
Sankalp has quit [Quit: ZNC 1.7.2+deb3 - https://znc.in]
<d_bot> <Bluddy> That sounds pretty sweet. Is it generic enough to use for many different libraries?
dextaa4 has quit [Remote host closed the connection]
jpds has quit [Remote host closed the connection]
jpds has joined #ocaml
<Fardale> I don't see ocaml-base-compiler.5.0.0
<Fardale> There is ocaml-variants.5.0.0+trunk
<Fardale> If that was a bug, it has been already fixed
olle has joined #ocaml
<d_bot> <tjltjl> v3.ocaml.org seems down
<d_bot> <tjltjl> https://v3.ocaml.org/p/core/v0.15.0 gives http 500 error
Sankalp has joined #ocaml
Sankalp has quit [Client Quit]
Sankalp has joined #ocaml
dextaa4 has joined #ocaml
bobo has quit [Ping timeout: 250 seconds]
spip has joined #ocaml
mro has quit [Remote host closed the connection]
cedric has quit [Quit: Konversation terminated!]
mro has joined #ocaml
mro has quit [Remote host closed the connection]
pukkamustard has left #ocaml [#ocaml]
mro has joined #ocaml
pukkamustard has joined #ocaml
<d_bot> <ostera> could I get some of your preliminary thoughts on this? https://github.com/ocaml/ocaml/pull/11064
<d_bot> <ostera>
<d_bot> <ostera> (a per @Bluddy's recommendation, crossposting this from #compilers)
pukkamustard has left #ocaml [#ocaml]
<d_bot> <Bluddy> Hey everyone - if you have a project that could use some help, please help me update this page https://ocamlverse.github.io/content/help_wanted.html
<d_bot> <NULL> Meta Help Wanted
mro has quit [Remote host closed the connection]
ncl has left #ocaml [#ocaml]
dhil has joined #ocaml
bartholin has joined #ocaml
mro has joined #ocaml
mro has quit [Remote host closed the connection]
mro has joined #ocaml
<olle> yo dawg
<olle> I heared to liked help
mro has quit [Remote host closed the connection]
Haudegen has quit [Quit: Bin weg.]
mro has joined #ocaml
mro has quit [Remote host closed the connection]
mro has joined #ocaml
mro has quit [Remote host closed the connection]
mro has joined #ocaml
mro has quit [Remote host closed the connection]
mro has joined #ocaml
mro has quit [Remote host closed the connection]
mro has joined #ocaml
mro has quit [Remote host closed the connection]
cedric has joined #ocaml
cedric has quit [Client Quit]
Haudegen has joined #ocaml
cedric has joined #ocaml
nd__ has joined #ocaml
nd__ has quit [Client Quit]
<d_bot> <Patate> It should be. It's just a simple ml/ocamllex/menhir program that parses from an `in_channel`.
<d_bot> <Patate> It then writes the corresponding `ctypes` bindings in three `out_channel`, that correspond to three files, for example `constant.ml`, `type.ml` and `function.ml`.
<d_bot> <Patate> These files describe what has to be bound in the C library, and dune then does some magic to transform them into modules that you can use.
<d_bot> <Patate> These modules expose the constants, data structures and functions that you need to use the C library.
<d_bot> <Patate> I will use it on the vulkan library's header to learn Vulkan without having to write my programs in C.
<d_bot> <Bluddy> very cool
<d_bot> <Bluddy> I think some hacks have been made for libraries so far, but it'd be really nice to have a methodical tool that does it
<d_bot> <Patate> It makes low-level bindings though.
mro has joined #ocaml
<d_bot> <octachron> Part of the issue is that the C type system is not expressive even for the need of the C programmers.
<d_bot> <Patate> Does not extract information such as an int field followed by a pointer field, the int field being the size of the array
<d_bot> <octachron> Typically, the vulkan api has some functions that take an option type encoded as "if this bool argument is false, the following argument is nonsensical"
rgrinberg has joined #ocaml
mro has quit [Remote host closed the connection]
<d_bot> <Patate> Yes, the cool thing about the language being so limited is that there is not much to learn in order to use it ^^
mro has joined #ocaml
<d_bot> <NULL> You mean you don't have to learn much for C ?
rgrinberg has quit [Read error: Connection reset by peer]
rgrinberg has joined #ocaml
mro has quit [Remote host closed the connection]
mro has joined #ocaml
mro has quit [Remote host closed the connection]
mro has joined #ocaml
<d_bot> <Patate> Yes
mro has quit [Remote host closed the connection]
<qwr> not entirely true, the amount of footgun traps C programmer needs to learn is impressive
mro has joined #ocaml
mro has quit [Remote host closed the connection]
<qwr> of course C++ brings this to another level, for example https://pvs-studio.com/en/blog/posts/cpp/0644/
<qwr> but the C's undefined behaviour related traps are also quite impressive
zebrag has joined #ocaml
<d_bot> <octachron> The catch-fire-on-undefined-behaviour optmisations of modern C compilers are also fun from afar.
mro has joined #ocaml
<d_bot> <Patate> I was meaning that the tool is simple. Using it is not. It's like an axe, dead simple and efficient, but easy to cut yourself with.
<companion_cube> an axe where the handle is also sharp, yes
<d_bot> <Patate> You are exaggerating ^^
<companion_cube> absolutely not :D
<olle> lulz, "C is simple" trope :D
<olle> ASM is simple too?
<companion_cube> for sure
<companion_cube> well I guess asm doesn't have UB, does it?
<olle> No idea
<olle> Ask the CPU?
waleee has joined #ocaml
<olle> If all behaviour is even documented
<companion_cube> I think it's supposed to be all documented, even the memory model
mro has quit [Remote host closed the connection]
mro has joined #ocaml
<companion_cube> certainly, what happens if you divide by 0, access memory outside an existing page, etc. is documented
<olle> Hm
<octachron> weak memory models don't document everything that can happen on races, but only which behaviors(ordering) are guaranteed
<companion_cube> mostly it's going to raise some trap and go back to the kernel ;)
<companion_cube> octachron: sure, that's already a lot more than what C guarantees :D
<companion_cube> there's a precise model, it's just not always deterministic.
<Corbin> Depends on the chip vendor, too. Some chips (e.g. most x86 chips) are fully-documented due to explicit reverse-engineering effort which was not vendor-supported. Is it UB if it's not in Intel's manual, but it is on https://www.sandpile.org/ ?
<d_bot> <Patate> it helps to turn on all warnings. I usually compile with -Wall -Wextra -Werror
<octachron> C does have a specification, it is just that modern C compilers have decided that the specification means that worthy programmers shall not commit undefined behaviors. And that the unworthy are doomed to suffer.
motherfsck has joined #ocaml
mro has quit [Remote host closed the connection]
mro has joined #ocaml
<d_bot> <Patate> It seems reasonable to me. Nice to know how to code before even thinking about perf
<companion_cube> ugh, I don't have the patience for that today
mro has quit [Remote host closed the connection]
<olle> Just don't write any bugs, duh
<d_bot> <Patate> Patience for what?
<companion_cube> patience for arguing about C
<d_bot> <Patate> simpler said than done
mro has joined #ocaml
<d_bot> <NULL> And that's why C is painful
<olle> "If you made a mistake, you didn't try hard enough" <--- Some middle-manager ;)
<olle> AKA hindsight bias
<d_bot> <Patate> Ouch ok I see your point, that's not what I meant
<d_bot> <cod1r> no pain no gain 🤣
<d_bot> <Patate> C is not simple to learn/use, it is just simple as a language
<d_bot> <Patate> And VERY error prone
bartholin has quit [Quit: Leaving]
rgrinberg has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
<d_bot> <octachron> @Patate some people tend to somewhat disagree that `int n; while (n) {}; return n` is a simple and valid way to return `0`.
<companion_cube> :DDDDD
<companion_cube> only with -O1
<d_bot> <Patate> you can write uselessly complicated code to do simple things indeed. But that is not on the language...
<d_bot> <Patate> And it rises a warning
<d_bot> <Patate> always listen to warnings ^^
<d_bot> <Patate> If you want to survive using C
dextaa4 has quit [Remote host closed the connection]
<Corbin> It's not uselessly complicated, as in `unsigned n = 1; while (n++) {}; return n`; octachron is pointing out that the infinite loop could be legally removed by the compiler and replaced with a terminating expression.
<Corbin> (Whereas my example is merely implementation-defined, which is also extremely dangerous~)
<companion_cube> yeah it's a fun example
<companion_cube> it's legal to assume that n==0 because otherwise infinite loop :D
<zozozo> funnily, it reminds me of some of chemistry classes which went like this: let's assume this quantity stays small, do some calculus, and we conclude that this quantity inded stays small, so we must have made the correct assumption at the beginning, :p
mro has quit [Quit: Leaving...]
<companion_cube> riiiight?
<companion_cube> always bugged me
<d_bot> <Patate> if code can be stripped, it should... I guess... you think it should do the loop until it comes back to 0?
<Corbin> zozozo: Funnily enough, you can make that work. You just have to show that if the quantity is big, then it gets small; and also that "big" and "small" are the only two regimes. The last part is the part that doesn't work for Turing-complete languages.
<d_bot> <KW78> I think co-induction is like that - mind-blowing
dhil has quit [Ping timeout: 256 seconds]
<companion_cube> @Patate a normal interpretation of the loop is that it's infinite; it doesn't change n
<companion_cube> but infinite loops are UB, so the compiler just assumes you meant that n=0
<zozozo> Corbin: yeah, it can be made to work (also, you can argue that chemistry at that scale is deterministic, and thus there exists exactly one coherent solution, so if you find one, then you have found the only solution)
<Corbin> zozozo: A risky argument, given this infamous lemma from QM: https://en.wikipedia.org/wiki/Kochen%E2%80%93Specker_theorem
<d_bot> <Patate> You are talking about the one where n is uninitialised, right?$
<companion_cube> yeah
szkl has joined #ocaml
<d_bot> <Patate> as it's undefined, yeah, you can choose the value of n
<companion_cube> no
<companion_cube> that's not what happens
<companion_cube> the _compiler_ might pick 0 (and most likely will if optimizations are enabled) because it's the only way to avoid UB
<companion_cube> with that exact same code, unchanged
<d_bot> <Patate> if you have int n; while(n-5){}; return n; what happens?
<olle> I should be able to run Bucklescript in the browser, right? The compiler, I mean. Or is it too big?
<companion_cube> I guess it assumes n==5
<companion_cube> olle: it might depend on node.js APIs, idk
<olle> Hm hm
<olle> ReactJS has this nice feature that they can compile babel stuff in the browser
<olle> Neat for prototyping
<d_bot> <Patate> If it assumes n=5, it is not faulty behaviour as it is undefined
<companion_cube> https://godbolt.org/z/91YY4oE4n enjoy
<companion_cube> lol actually it assumes argc>2
rgrinberg has joined #ocaml
<d_bot> <RegularSpatula> Well it doesn’t bother with the check at all right, since it knows f1() is 0 ?
<d_bot> <Patate> except if I am missing something, it does not
domq has joined #ocaml
domq has quit [Client Quit]
<d_bot> <Patate> it just strips the loop as n = 0
<d_bot> <NULL> `f1()` either loops or returns 0
<d_bot> <NULL> `main` returns 42
<d_bot> <Patate> if you replace the loop with while(n-5) it just runs forever
<d_bot> <NULL> `f1()` should* loop or return 0; in practice it just returns 0
<d_bot> <Patate> yes
<d_bot> <NULL> But the question is why does `main` always return 42 (without checking `argc`)
<d_bot> <Patate> Oh ok see it now
<companion_cube> so simple!
<d_bot> <Patate> Confusing... I print argc, it is > 2 but it just does not care for the test
<d_bot> <Patate> Think I got it. as n is uninitialised, it chooses it's value whenever it wants. in the loop, it's 0, and as it has not been changed, it is still uninitialized, after the loop it is magically 42
<d_bot> <Patate> Does not make any sense, but relying on an uninitialised value neither
<d_bot> <Patate> so why not
<d_bot> <NULL> How about using an uninitialised value is an immediate compiler error, instead of all of this nonsense ?
<Fardale> Hum, if you replace the condition with argc you get the same result
<Fardale> But puting 1 you get 0
<Fardale> So f1 return 0 according to the compiler. Which makes sense, value on -01 are zero out
<Fardale> but why does it consider argc = 0, this I don't know
<d_bot> <RegularSpatula> (I think…) Compiler sets n to 0 to avoid undefined behavior of infinite loop. Then it can statically known that f1() is zero so it can slide the conditional …it is always false so it is always 42 at the optimization level on the godbolt snippet ccube posted
<d_bot> <RegularSpatula> (Sorry for phone induced typos)
<d_bot> <Patate> -Wall -Wextra -Werror
<olle> Too much C in this channel...
<d_bot> <Patate> C is full of undefined behaviour that are unfortunately NOT errors
<d_bot> <Patate> sorry for that, I started it ^^ don't ban me
<Fardale> If you remove the while(n){} it is still returning 0
<Fardale> Just -01 zero the variable, I think you need -02 or -03 to not
<d_bot> <RegularSpatula> Ohh snap I was looking at it wrong 😑 nvm
<d_bot> <RegularSpatula> I thought the f1 was part of the check for some reason
<Fardale> Oh, OK, because of the undifined behavoir the value return by f1() can be whatever, and then it decide to be 42.
<Fardale> But for the compilation of f1() it chooses 0 by default
<Fardale> That's my guess on this
<companion_cube> yeah I think so too
<companion_cube> the UB propagated to the main
<d_bot> <Patate> For short, C is full of undefined behaviours. It is not simple to reason about (as 4 lines can make people talk for 15mins), and very easy to do errors. But it's syntax is simple (for parsing for example)
<companion_cube> not even that
<companion_cube> the syntax could be a lot easier to parse, and there's the preprocessor
<companion_cube> if you want a simple language to parse, I hear pascal is one :p
<d_bot> <Patate> maybe
<d_bot> <octachron> The syntax is horrible too: it is not even a context-free grammar.
<d_bot> <Patate> Oh?
<olle> Patate, I once was in your shoes
<companion_cube> you need type info to disambiguate, iirc; at least in C++, but ofc C++ is much worse
<olle> This channel shot me down hard
<d_bot> <NULL> To me the only thing C has going for it is that it's *very* close to assembly
<d_bot> <Patate> ?
<d_bot> <Patate> yes
<d_bot> <darrenldl> (irc doesnt show whom you are replying to btw, i think
<d_bot> <Patate> seems like there are some on the net
<d_bot> <Patate> What do you mean olle by "Patate, I once was in your shoes"?
<olle> Patate, I once said "C is simple" in here xD
Haudegen has quit [Quit: Bin weg.]
<d_bot> <Patate> C is not simple in every aspect
<d_bot> <Patate> that is not what I said
<d_bot> <NULL> True but you can go further : C is not simple in any aspect
<olle> Doesn't matter, P, you're screwed anyway
<companion_cube> we're not going to do anything :p
<d_bot> <Patate> maybe simple is not the good word. Maybe rudimentary is better?
kaph has joined #ocaml
<olle> :)
<d_bot> <Patate> there are no complex concepts, parameterised types, objects, guarantees, exceptions, operator redefinition, modules, ...
<d_bot> <Patate> Only int, char, pointers, structs and enums
<olle> Also see /r/programmingcirclejerk
<d_bot> <NULL> Bare-bones low-level probably
<d_bot> <Patate> while, for, ...
<olle> Macros...
<d_bot> <Patate> Just a little more than that, but not much.
kaph has quit [Remote host closed the connection]
<olle> Generics
<olle> Parallelism
<olle> Conditional compiling
kaph has joined #ocaml
kaph has quit [Max SendQ exceeded]
azimut_ has quit [Ping timeout: 240 seconds]
kaph has joined #ocaml
<olle> Scheme tho
<d_bot> <Patate> Anyway, did not mean to bother any of you, hop I did not
kaph has quit [Remote host closed the connection]
<olle> We need one of those bots
<olle> For standard answers
<companion_cube> !help
<ocabot> help: commands are [help; hello; history; reload; save; search; search_all; see; see_all; random; tell; tell_at; seen; last; ignore; unignore; ignore_list; factoids]
<companion_cube> !manual > ocabot
<olle> !help C is simple
<ocabot> error: unknown command C is simple
<olle> Pah
<olle> !help factoids
<ocabot> factoids: factoids, triggered by the following commands:
<ocabot> - `!foo` will retrieve one of the factoids associated with `foo`, if any
<ocabot> - `!foo = bar` maps `foo` to `bar`, unless `foo` is mapped yet
<ocabot> (in which case it fails)
<ocabot> - `!foo += bar` adds `bar` to the mappings of `foo`, or adds integer value bar to the integer value foo
<ocabot> - `!foo -= bar` removes `bar` from the mappings of `foo`, or subtracts bar to the integer value foo
<ocabot> - `!foo++` adds 1 to the integer value foo
kaph has joined #ocaml
<olle> stahp
<ocabot> - `!foo--` subtracts 1 to the integer value foo
<ocabot> - `!foo := bar` maps `foo` to `bar` even if `foo` is already mapped
<ocabot> - `!search term` looks up `term` in the database
<ocabot> - `!search_all` looks up all terms in the database
<ocabot> (prio 80)
<olle> -.-
<companion_cube> ah oops
<d_bot> <cod1r> -.-
<companion_cube> why isn't the help in pv…
<companion_cube> juste query the bot
<d_bot> <Patate> ocaml is nice in my opinion
kaph has quit [Read error: Connection reset by peer]
<d_bot> <Patate> C has the advantage of being widely used, but ocaml is my favorite by far now
kaph has joined #ocaml
azimut has joined #ocaml
<d_bot> <orbitz> I really enjoy writing ocaml
rgrinberg has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
dextaa4 has joined #ocaml
<d_bot> <Patate> that's exactly why I want to bind C code, but write the rest in ocaml
<d_bot> <Patate> use what's already done, ease your life for the rest
<d_bot> <cod1r> 💯
rgrinberg has joined #ocaml
<olle> There are some good docs for that
<d_bot> <Patate> for what exactly olle?
<olle> For OCaml C bindings
<drakonis> there's a tracker for 5.0
<d_bot> <Patate> did not see one olle... if you have a link please send! (maybe in PM)
vicfred has joined #ocaml
dextaa4 has quit [Read error: Connection reset by peer]
dextaa4 has joined #ocaml
<d_bot> <Lupus> how to force latest atd to emit 64-bit integer as integer in resulting json? starting from https://github.com/ahrefs/atd/pull/231 64 bit integers are encoded as strings by default...
<d_bot> <Patate> olle, I will lok that up later, thanks 🙂
<d_bot> <Patate> Oof no that is old way of binding
<d_bot> <Patate> using ctypes is easier
<d_bot> <Patate> but not as well documented :/
szkl has quit [Quit: Connection closed for inactivity]
MaterazziSan has joined #ocaml
MaterazziSan has left #ocaml [ERC (IRC client for Emacs 27.1)]
<d_bot> <darrenldl> json does not support 64bit integer iirc
<d_bot> <darrenldl> oh nvm
<d_bot> <darrenldl> it is a merged pr
<d_bot> <darrenldl> wait ono
<d_bot> <darrenldl> im silly
<d_bot> <Lupus> JSON accepts arbitrary precision numbers, most implementations support 64-bit integers as integers
<d_bot> <Lupus> interoperability choice should be on someone writing atd spec, it should not be enforced by atd, which is happening right now as it seems...
<d_bot> <darrenldl> you usually only get meaningfully 53 bit though
<d_bot> <darrenldl> due to it being a floating point
<d_bot> <darrenldl> ohh
<d_bot> <darrenldl> sorry i misread
<d_bot> <Lupus> 53 bits is recommended for interoperability in RFC, but not enforced as a hard limit
Haudegen has joined #ocaml
<d_bot> <darrenldl> which implementations use 64bit for json natively? i only had experience with it in js_of_ocaml i think
<d_bot> <darrenldl> okay i see
troydm has quit [Ping timeout: 256 seconds]
dextaa4 has quit [Read error: Connection reset by peer]
dextaa4 has joined #ocaml
kaph has quit [Remote host closed the connection]
kaph has joined #ocaml
mbuf has quit [Quit: Leaving]
troydm has joined #ocaml
<drakonis> looks like opam is still attempting to update ocaml to 5.0
<octachron> What is your version of opam?
<drakonis> the most recent one
<drakonis> currently not on my computer, but i tried it before leaving
<drakonis> companion_cube can attest that it is happening to him as well
gravicappa has quit [Ping timeout: 240 seconds]
<companion_cube> let me try on my work machine
<d_bot> <cod1r> octachron is on discord and IRC
<d_bot> <cod1r> 🤣
<d_bot> <cod1r> manz is too good
rgrinberg has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
xgqt has quit [Ping timeout: 256 seconds]
xgqt has joined #ocaml
dhil has joined #ocaml
Sankalp has quit [Ping timeout: 276 seconds]
Sankalp has joined #ocaml
kaph has quit [Read error: Connection reset by peer]
kaph has joined #ocaml
troydm has quit [Ping timeout: 246 seconds]
<d_bot> <Ambika E.> hi
<d_bot> <cod1r> hi
olle has quit [Ping timeout: 276 seconds]
spip has quit [Ping timeout: 246 seconds]
bobo has joined #ocaml
vicfred has quit [Quit: Leaving]
troydm has joined #ocaml
dextaa4 has quit [Read error: Connection reset by peer]
dextaa4 has joined #ocaml
dextaa4 has quit [Read error: Connection reset by peer]
dextaa4 has joined #ocaml
greaser|q has quit [Changing host]
greaser|q has joined #ocaml
greaser|q is now known as GreaseMonkey
dextaa4 has quit [Remote host closed the connection]
troydm has quit [Ping timeout: 256 seconds]
vicfred has joined #ocaml
cedric has quit [Quit: Konversation terminated!]
Haudegen has quit [Ping timeout: 256 seconds]
immutable has joined #ocaml
xenu has quit [Quit: Lost terminal]
lisq has quit [Quit: lisq]
lis has joined #ocaml
lis is now known as lisq
dhil has quit [Ping timeout: 256 seconds]
xenu has joined #ocaml
<d_bot> <idnes> could some maintainer of docs-data.ocaml.org renew the certificate? thanks
<d_bot> <idnes> its expired and breaks v3 packages site
xenu has quit [Remote host closed the connection]
xenu has joined #ocaml