dnh has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
azimut has quit [Ping timeout: 246 seconds]
<discocaml>
<Et7f3 (@me on reply)> Tweag (a nix lab) seems to have enough clients that use bazel to dedicate some r&d. Bazel choose to be good enough for many lang and excellent for Java/C/C++ dune focus on really high quality for Ocaml we can't compete (and I hope I won't use a java build system)
<discocaml>
<Et7f3 (@me on reply)> I have seen repos(cosmopolitan and nix) where the makefile code is pretty well organised and for a new project you can just include submodule. If you want to avoid copying code from other repo you have automake: makefile has really the core of something really strong and has decade of filling needs: the ocaml compiler can't be fully bootstrapped with dune
<discocaml>
<darrenldl> sure, but those makefiles are also written by experts of the project
<companion_cube>
I'd rather we use buck2 than bazel
<companion_cube>
If these were the only choices
<discocaml>
<anurag_soni> Did anyone catch the buck2 talk from ICFP? I missed the stream and don’t think the talk is uploaded on their YouTube channel yet.
<companion_cube>
I haven't but I read stuff about buck2 a while ago, in rust circles
<companion_cube>
Iirc it doesn't have anything built-in, unlike bazel which cheats for java and C? +
<companion_cube>
C++
<discocaml>
<anurag_soni> That aspect of it is something I did like. All languages are on a similar support tier with respect to the API accessible to the build rules.
<companion_cube>
And it's in rust, which means it's most likely 10x leaner in nemory than bazel
<discocaml>
<anurag_soni> Indeed!
jusensei2 has quit [Read error: Connection reset by peer]
ansiwen has quit [Ping timeout: 246 seconds]
emp_ has quit [Ping timeout: 246 seconds]
jusensei2 has joined #ocaml
ansiwen has joined #ocaml
emp has joined #ocaml
TrillionEuroNote has quit [Ping timeout: 258 seconds]
TrillionEuroNote has joined #ocaml
<discocaml>
<anurag_soni> Oh its nice that they started publishing binaries for `buck2`. The compilation time for it is quite large.
<companion_cube>
Ah makes sense
<companion_cube>
Maybe a dune mode for buck2 could be a thing, heh
<companion_cube>
For people who want the additional multi language capabilities
myrkraverk has quit [Quit: Leaving]
oriba has quit [Ping timeout: 245 seconds]
dh2` is now known as dh`
copy has quit [Server closed connection]
copy has joined #ocaml
<discocaml>
<jumpnbrownweasel> i can't believe that dune's implicit_transitive_deps is true by default
<discocaml>
<jumpnbrownweasel> no doubt it's historical. but what a huge hazard
wagle has quit [Server closed connection]
wagle has joined #ocaml
<companion_cube>
meh, is it really?
Hammdist has joined #ocaml
<discocaml>
<jumpnbrownweasel> yeah, it means your library's .mli interface is not the only thing you're exposing.
<discocaml>
<jumpnbrownweasel> if you changed a dependency, it could break your user's build
waleee has quit [Ping timeout: 255 seconds]
<companion_cube>
but that's also in opam _anyway_
<discocaml>
<jumpnbrownweasel> sure but the user of your library may have to add the dependency to build
<companion_cube>
no?
<companion_cube>
unless _they_ have `implicit_transitive_deps false` of
<companion_cube>
ofc
<discocaml>
<jumpnbrownweasel> that's true, it is the user's setting, so not as big a hazard as i was imagining.
<discocaml>
<jumpnbrownweasel> but still, the default means you don't have to add the lib to (libraries..),...
<discocaml>
<jumpnbrownweasel> until your dependent no longer uses it, and then you do.
<companion_cube>
indeed, then you have to concretize that dependency
<companion_cube>
I used to hate `implicit_transitive_deps true` after some bad experiences with it, but after learning of `re_export` I guess I can see how it may work
<discocaml>
<jumpnbrownweasel> re_export is used for the case when implicit_transitive_deps is false. it explicitly gives access.
<discocaml>
<jumpnbrownweasel> the re-exported lib then becomes part of your library's interface. explicit is fine.
<companion_cube>
err I meant `true`, yes, sorry
<companion_cube>
without it it's a massive pain if you have lots of little libraries
chrisz has quit [Ping timeout: 245 seconds]
chrisz has joined #ocaml
bibi_ has quit [Ping timeout: 252 seconds]
<discocaml>
<darrenldl> for new projects, should we just use drom?
tomku has quit [Server closed connection]
tomku has joined #ocaml
bartholin has joined #ocaml
mysl has joined #ocaml
vsiles has quit [Server closed connection]
vsiles has joined #ocaml
<discocaml>
<lyhokia> A bit off topic, but will ocaml have dependent type one day?
<discocaml>
<lyhokia> I mean we have parametrized type but it's of a pretty restrictive form
<discocaml>
<._null._> Why would OCaml get dependent types?
<discocaml>
<lyhokia> Allows you to write simpler code
<discocaml>
<._null._> With types that depend on terms? With mutation in such terms?
rgrinberg has joined #ocaml
<discocaml>
<lyhokia> yeah probably
bartholin has quit [Quit: Leaving]
<discocaml>
<darrenldl> will it really allow writing simpler code?
<discocaml>
<darrenldl> dont think proofs in interactive theorem provers are famous for being readable
<hannes>
depends whom you talk to
ursa-major has joined #ocaml
xmachina has quit [Ping timeout: 252 seconds]
xmachina has joined #ocaml
Hammdist has quit [Quit: Client closed]
anpad has quit [Ping timeout: 248 seconds]
anpad has joined #ocaml
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
Fardale has quit [Server closed connection]
Fardale has joined #ocaml
<discocaml>
<JM> I guess they can always change in a new dune language version, but setting it to true introduces breakages newbie won't be able to deal with. (and the public examples of various lib are sometimes wrong because they rely on the implicit dep)
<discocaml>
<JM> I vaguely know my way around dune, but I already lost hours to my stubbornness of setting it to false in every build.
<discocaml>
<octachron> I feel that it is unlikely that OCaml will ever get dependent type at the value level. Design compromises for a dependently typed language are too different from the ones for a type-inferred-functional language.
troydm has joined #ocaml
mysl has quit [Ping timeout: 252 seconds]
bibi_ has quit [Quit: Konversation terminated!]
bibi_ has joined #ocaml
azimut has joined #ocaml
<discocaml>
<lyhokia> I know inference for dependent type is undecidable but what is preventing inferencer for infering a subset?
Serpent7776 has joined #ocaml
dnh has joined #ocaml
rgrinberg has joined #ocaml
dnh has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
bibi_ has quit [Ping timeout: 240 seconds]
Putonlalla has quit [Server closed connection]
Putonlalla has joined #ocaml
dnh has joined #ocaml
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
<discocaml>
<Kali> it already has a subset of dependent types, GADTs, and those are already not inferrable
<discocaml>
<Kali> in many cases
rgrinberg has joined #ocaml
rgrinberg has quit [Client Quit]
myrkraverk has joined #ocaml
bibi_ has joined #ocaml
reynir has quit [Remote host closed the connection]
reynir has joined #ocaml
mro has joined #ocaml
rgrinberg has joined #ocaml
<discocaml>
<contextfreebeer> I like how F* handles it, it uses an external SMT solver to attempt to automatically complete the proof, though you might need to give the SMT solver enough information by writing lemmas, an induction proof of some property for example would just be a recursive function. you don't need to actually prove the lemma it just needs to have the right shape. this kind of smt interop tends to work beautifully in simple to relatively non-trivia
<discocaml>
<octachron> At the same time, having seen few talks from the Everest team, I had the impression that managing F* proof complexity and proof compilation time ended up taking a major part of the software architecture effort for the project.
<discocaml>
<contextfreebeer> I think that's definitely true, but to be fair though, I would say Everest is fairly non-trivial and any kind of large verification project is going to run into those issues regardless, formal methods are sadly still not very scalable
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
<discocaml>
<jumpnbrownweasel> Yes, I will also continue to set it to false.
rgrinberg has joined #ocaml
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
dnh has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
rgrinberg has joined #ocaml
bibi_ has quit [Ping timeout: 255 seconds]
dnh has joined #ocaml
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
rgrinberg has joined #ocaml
dnh has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
rak has quit [Server closed connection]
rak has joined #ocaml
lisq has quit [Server closed connection]
lisq has joined #ocaml
Tuplanolla has joined #ocaml
mstevens has quit [Read error: Connection reset by peer]
delyan_ has quit [Ping timeout: 246 seconds]
pgiarrusso has quit [Read error: Connection reset by peer]
JSharp has quit [Read error: Connection reset by peer]
jyc has quit [Read error: Connection reset by peer]
cbarrett has quit [Read error: Connection reset by peer]
Duns_Scrotus___ has quit [Read error: Connection reset by peer]
buoy49_ has quit [Read error: Connection reset by peer]
conjunctive has quit [Read error: Connection reset by peer]
Boarders___ has quit [Read error: Connection reset by peer]
mstevens has joined #ocaml
pgiarrusso has joined #ocaml
cbarrett has joined #ocaml
conjunctive has joined #ocaml
Duns_Scrotus___ has joined #ocaml
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
JSharp has joined #ocaml
buoy49_ has joined #ocaml
delyan_ has joined #ocaml
jyc has joined #ocaml
Boarders___ has joined #ocaml
rgrinberg has joined #ocaml
dhil has joined #ocaml
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
Serpent7776 has quit [Ping timeout: 255 seconds]
dnh has joined #ocaml
rgrinberg has joined #ocaml
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
mro has quit [Remote host closed the connection]
bibi_ has joined #ocaml
<Ankhers>
I am just getting (re)started with ocaml. Is dune still the suggested tool to use for new projects?
<companion_cube>
yep
<Ankhers>
In that case, I have a newly initialized dune project. I wrote a very simple foo.ml file in the lib directory. How can I start utop such that I have access to this (and other modules) in my project?
<discocaml>
<lecondorduplateau> dune utop
<Ankhers>
Maybe because I am using NixOS, but I am getting an error saying that the library utop is not found. I have utop available in my $PATH.
bartholin has joined #ocaml
<companion_cube>
you probably need to install utop in the switch created by nixos?
<Ankhers>
There is no switch being created here. It is just installing ocaml, dune, utop, etc directly.
<companion_cube>
hmmm I can't help you then, sorry :s
<Ankhers>
No worries. Thanks.
<octachron>
It sounds like you don't have the utop library in path.
<octachron>
You can launch utop and load your libraries with `#use_output "dune ocaml top";;`
<Ankhers>
When I say I have utop in my path, I mean the utop binary. Meaning I can run utop from my shell and it works. Do I also need to install a utop library?
<companion_cube>
what octachron said is that you can run the utop binary, then in it run `#use_output "…"`
<Ankhers>
Is there an environment variable I can change that would allow me to point dune to my utop? It would be easier to set something like that than use_output. But I can do that if needed.
dnh has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
<discocaml>
<._null._> utop works fine for you without opam ? That's the first time I hear it happen
rgrinberg has joined #ocaml
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
yziquel has joined #ocaml
Anarchos has joined #ocaml
Anarchos has quit [Quit: Vision[]: i've been blurred!]
<discocaml>
<ironside2396> hello ✋
<discocaml>
<ironside2396> is there an example of an OOP library in OCaml where methods mutate the properties of the class
<discocaml>
<ironside2396> in general can you detect if a library contains functions that mutate ?
<discocaml>
<ironside2396> does ref appear in the signature ?
<companion_cube>
no
<companion_cube>
ref does, yes
<companion_cube>
but you can't detect mutation in general
bibi_ has quit [Ping timeout: 255 seconds]
<discocaml>
<octachron> Also references are not a primitive type.