2026/05/30

2026-05-30 00:01:32 +0000vetkat(~vetkat@user/vetkat) vetkat
2026-05-30 00:07:49 +0000Sgeo(~Sgeo@user/sgeo) Sgeo
2026-05-30 00:07:55 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-30 00:12:16 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 247 seconds)
2026-05-30 00:12:28 +0000nisstyre(wes@user/nisstyre) (Ping timeout: 244 seconds)
2026-05-30 00:23:17 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 00:26:16 +0000nisstyre(wes@user/nisstyre) nisstyre
2026-05-30 00:28:19 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 241 seconds)
2026-05-30 00:33:55 +0000acidjnk(~acidjnk@p200300d6e700e591e8cc5974c995d080.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2026-05-30 00:33:55 +0000acidjnk_new3(~acidjnk@p200300d6e700e591e8cc5974c995d080.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2026-05-30 00:39:03 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 00:43:39 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-05-30 00:47:57 +0000pavonia(~user@user/siracusa) siracusa
2026-05-30 00:54:28 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 00:57:26 +0000peterbecich(~Thunderbi@71.84.33.135) peterbecich
2026-05-30 01:01:08 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-30 01:12:08 +0000Inline(~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) (Ping timeout: 244 seconds)
2026-05-30 01:12:31 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 01:17:30 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2026-05-30 01:20:31 +0000peterbecich(~Thunderbi@71.84.33.135) (Ping timeout: 265 seconds)
2026-05-30 01:28:17 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 01:32:13 +0000confusedalex(~confuseda@user/confusedalex) (Ping timeout: 272 seconds)
2026-05-30 01:33:06 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-30 01:43:54 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-30 01:48:36 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 252 seconds)
2026-05-30 01:54:47 +0000Androsis(~danirojas@47-197-106-200.fdr01.brnd.fl.ip.frontiernet.net)
2026-05-30 01:55:59 +0000Androsis(~danirojas@47-197-106-200.fdr01.brnd.fl.ip.frontiernet.net) (Client Quit)
2026-05-30 01:59:42 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 02:00:01 +0000Flow(~none@gentoo/developer/flow) (Quit: WeeChat 4.7.2)
2026-05-30 02:02:06 +0000Flow(~none@gentoo/developer/flow) flow
2026-05-30 02:04:17 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 243 seconds)
2026-05-30 02:04:48 +0000yin(~zero@user/zero) (Ping timeout: 256 seconds)
2026-05-30 02:05:14 +0000yin(~zero@user/zero) zero
2026-05-30 02:13:55 +0000Googulator(~Googulato@193-226-241-87.pool.digikabel.hu) (Quit: Client closed)
2026-05-30 02:14:11 +0000Googulator(~Googulato@193-226-241-87.pool.digikabel.hu)
2026-05-30 02:15:30 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 02:19:54 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-05-30 02:30:53 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 02:37:29 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-30 02:48:56 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 02:53:25 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2026-05-30 03:06:44 +0000peterbecich(~Thunderbi@71.84.33.135) peterbecich
2026-05-30 03:19:45 +0000peterbecich(~Thunderbi@71.84.33.135) (Ping timeout: 266 seconds)
2026-05-30 03:20:56 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2026-05-30 03:21:25 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) bitdex
2026-05-30 03:29:16 +0000rekahsoft(~rekahsoft@70.51.99.119) (Remote host closed the connection)
2026-05-30 03:29:35 +0000wickedjargon(~user@2605:8d80:5431:9139:707e:7730:414e:3c7c) wickedjargon
2026-05-30 03:36:19 +0000Inline(~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) Inline
2026-05-30 03:37:40 +0000sabino(~sabino@user/sabino) (Quit: Lambda _ -> x)
2026-05-30 03:43:09 +0000dutchie(~dutchie@user/dutchie) (Remote host closed the connection)
2026-05-30 03:44:15 +0000dutchie(~dutchie@user/dutchie) dutchie
2026-05-30 03:58:03 +0000takuan(~takuan@d8D86B9E9.access.telenet.be)
2026-05-30 04:10:30 +0000troydm(~troydm@user/troydm) (Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset)
2026-05-30 04:14:26 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 04:19:46 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 266 seconds)
2026-05-30 04:27:40 +0000haritz(~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in)
2026-05-30 04:30:10 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-30 04:34:42 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 252 seconds)
2026-05-30 04:45:32 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 04:50:29 +0000euphores(~SASL_euph@user/euphores) (Quit: Leaving.)
2026-05-30 04:51:01 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 269 seconds)
2026-05-30 04:57:18 +0000euphores(~SASL_euph@user/euphores) euphores
2026-05-30 05:01:22 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 05:07:28 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-30 05:17:36 +0000machinedgod(~machinedg@d172-219-48-230.abhsia.telus.net) (Ping timeout: 252 seconds)
2026-05-30 05:18:20 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 05:25:18 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-30 05:36:24 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 05:37:40 +0000peterbecich(~Thunderbi@71.84.33.135) peterbecich
2026-05-30 05:38:37 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 252 seconds)
2026-05-30 05:41:38 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 253 seconds)
2026-05-30 05:52:11 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 05:56:34 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-05-30 05:58:27 +0000vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2026-05-30 06:07:33 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 06:12:06 +0000wickedjargon(~user@2605:8d80:5431:9139:707e:7730:414e:3c7c) (Ping timeout: 246 seconds)
2026-05-30 06:12:25 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-30 06:16:45 +0000peterbecich(~Thunderbi@71.84.33.135) (Remote host closed the connection)
2026-05-30 06:17:04 +0000peterbecich(~Thunderbi@71.84.33.135) peterbecich
2026-05-30 06:23:20 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 06:28:05 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-05-30 06:30:42 +0000acidjnk_new3(~acidjnk@p200300d6e700e5914d7cf9d6201a8b9f.dip0.t-ipconnect.de)
2026-05-30 06:30:44 +0000acidjnk(~acidjnk@p200300d6e700e5914d7cf9d6201a8b9f.dip0.t-ipconnect.de) acidjnk
2026-05-30 06:39:04 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 06:43:55 +0000tt1231607019780(~tt1231@2603:6010:8700:4a81:a4f6:acff:fe95:3803) (Ping timeout: 245 seconds)
2026-05-30 06:44:11 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
2026-05-30 06:45:46 +0000tt1231607019780(~tt1231@2603:6010:8700:4a81:a4f6:acff:fe95:3803) tt1231
2026-05-30 06:52:00 +0000tt1231607019780(~tt1231@2603:6010:8700:4a81:a4f6:acff:fe95:3803) (Ping timeout: 246 seconds)
2026-05-30 06:52:16 +0000tt1231607019780(~tt1231@2603:6010:8700:4a81:a4f6:acff:fe95:3803) tt1231
2026-05-30 06:54:53 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 06:57:13 +0000vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 248 seconds)
2026-05-30 06:57:59 +0000tt12316070197800(~tt1231@2603:6010:8700:4a81:a4f6:acff:fe95:3803) tt1231
2026-05-30 06:58:22 +0000 <mesaoptimizer> "For a large project like pandoc (including all of its dependencies) we measure a 10% (std.dev. 0.6pp) reduction in wall clock time for a 16-way parallel build with --semaphore. No user changes are needed to take advantage of this improvement." https://www.well-typed.com/blog/2026/05/faster-haskell-builds/
2026-05-30 06:58:39 +0000tt1231607019780(~tt1231@2603:6010:8700:4a81:a4f6:acff:fe95:3803) (Ping timeout: 246 seconds)
2026-05-30 06:58:39 +0000tt12316070197800tt1231607019780
2026-05-30 07:01:35 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-30 07:02:39 +0000xff0x(~xff0x@2405:6580:b080:900:43a1:dfae:d3d:489e) (Ping timeout: 252 seconds)
2026-05-30 07:12:07 +0000dolio(~dolio@130.44.140.168) (Quit: ZNC 1.10.1 - https://znc.in)
2026-05-30 07:13:01 +0000vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2026-05-30 07:15:23 +0000xff0x(~xff0x@2405:6580:b080:900:43a1:dfae:d3d:489e)
2026-05-30 07:19:31 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 07:24:46 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
2026-05-30 07:26:19 +0000dolio(~dolio@130.44.140.168) dolio
2026-05-30 07:28:45 +0000itaipu(~itaipu@168.121.98.126) (Ping timeout: 246 seconds)
2026-05-30 07:28:50 +0000tremon(~tremon@83-80-159-219.cable.dynamic.v4.ziggo.nl) tremon
2026-05-30 07:35:18 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 07:40:25 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-30 07:43:18 +0000itaipu(~itaipu@168.121.98.27) itaipu
2026-05-30 07:48:55 +0000Square2(~Square@user/square) (Ping timeout: 264 seconds)
2026-05-30 07:51:06 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 07:52:01 +0000Square2(~Square@user/square) Square
2026-05-30 07:52:30 +0000poscat0x04(~poscat@user/poscat) (Remote host closed the connection)
2026-05-30 07:55:29 +0000poscat(~poscat@user/poscat) poscat
2026-05-30 07:56:02 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-30 08:00:24 +0000peterbecich(~Thunderbi@71.84.33.135) (Ping timeout: 252 seconds)
2026-05-30 08:05:09 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-30 08:10:18 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 252 seconds)
2026-05-30 08:20:58 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 08:25:38 +0000 <Rembane> Excellent!
2026-05-30 08:26:06 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 263 seconds)
2026-05-30 08:29:24 +0000tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
2026-05-30 08:29:42 +0000Googulator(~Googulato@193-226-241-87.pool.digikabel.hu) (Quit: Client closed)
2026-05-30 08:29:55 +0000Googulator(~Googulato@193-226-241-87.pool.digikabel.hu)
2026-05-30 08:32:33 +0000 <tomsmeding> seems like it will only be properly supported with soon-to-be-released GHCs though https://www.mail-archive.com/ghc-devs@haskell.org/msg21844.html
2026-05-30 08:36:41 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 08:44:09 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
2026-05-30 08:44:41 +0000divlamir(~divlamir@user/divlamir) (Read error: Connection reset by peer)
2026-05-30 08:45:04 +0000divlamir(~divlamir@user/divlamir) divlamir
2026-05-30 08:49:43 +0000acidjnk_new(~acidjnk@p200300d6e700e5548c17d531dbcfc9e6.dip0.t-ipconnect.de)
2026-05-30 08:52:46 +0000acidjnk_new3(~acidjnk@p200300d6e700e5914d7cf9d6201a8b9f.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2026-05-30 08:53:01 +0000acidjnk(~acidjnk@p200300d6e700e5914d7cf9d6201a8b9f.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
2026-05-30 08:53:36 +0000acidjnk(~acidjnk@p200300d6e700e5548c17d531dbcfc9e6.dip0.t-ipconnect.de) acidjnk
2026-05-30 08:54:43 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 08:59:55 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-30 09:06:09 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 09:07:11 +0000Square2(~Square@user/square) (Ping timeout: 253 seconds)
2026-05-30 09:11:14 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-30 09:11:23 +0000Guest43(~Guest43@p200300dcb74099005424e44ccbbb78bd.dip0.t-ipconnect.de)
2026-05-30 09:15:39 +0000 <mesaoptimizer> ghci feels like it takes a second to read the ghci.conf when all it does is set `prompt` and `prompt-cont`
2026-05-30 09:16:07 +0000 <mesaoptimizer> overall it just feels very slow to start ghci up, and I'm unsure why
2026-05-30 09:19:00 +0000 <Rembane> mesaoptimizer: Is it much faster if you don't have a ghci.conf?
2026-05-30 09:20:57 +0000vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 265 seconds)
2026-05-30 09:21:46 +0000 <mesaoptimizer> `ghci -ignore-dot-ghci` takes about 50% less time, and that seems like the same amount of time that `ghci` takes to print `GHCi, version 9.6.7: https://www.haskell.org/ghc/ :? for help` before it then pauses and then prints `Loaded GHCi configuration from /Users/user/.config/ghc/ghci.conf`
2026-05-30 09:22:43 +0000 <mesaoptimizer> I don't know how to benchmark the difference unfortunately, and I guess this isn't very important in the big picture, but I still find it a bit annoying. Perhaps the solution is to constantly have a GHCi process running, Common Lisp style
2026-05-30 09:28:49 +0000 <mauke> strace -tt
2026-05-30 09:29:01 +0000__monty__(~toonn@user/toonn) toonn
2026-05-30 09:35:10 +0000emilym(~Thunderbi@user/emilym) emilym
2026-05-30 09:35:45 +0000 <tomsmeding> mesaoptimizer: ghci starts and exits in 111 ms for me, including a .ghci with a bunch of stuff in it
2026-05-30 09:36:10 +0000 <tomsmeding> though indeed, passing -ignore-dot-ghci brings that down to 59 ms...
2026-05-30 09:37:23 +0000 <tomsmeding> mauke: isn't strace -r much more useful here?
2026-05-30 09:37:45 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 09:37:45 +0000 <tomsmeding> oh no, that does relative to the previous syscall, what
2026-05-30 09:38:12 +0000 <tomsmeding> I want time since process start
2026-05-30 09:38:29 +0000Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2026-05-30 09:39:21 +0000emilym(~Thunderbi@user/emilym) (Ping timeout: 248 seconds)
2026-05-30 09:42:19 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 269 seconds)
2026-05-30 09:42:42 +0000Guest43(~Guest43@p200300dcb74099005424e44ccbbb78bd.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2026-05-30 09:47:37 +0000 <tomsmeding> there's a bunch of additional madvise() calls that take some time?
2026-05-30 09:50:48 +0000 <tomsmeding> https://tomsmeding.com/vang/aLaXMk/ghci.png one point for each syscall executed, time since start of process
2026-05-30 09:51:47 +0000 <tomsmeding> apart from the shenanigans at process startup, the interesting difference is the additional work around x=1100 for with-.ghci
2026-05-30 09:52:45 +0000 <tomsmeding> and that's a sequence of mmap()/madvise() calls where the mmap() calls take around 1ms
2026-05-30 09:53:07 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 09:54:46 +0000 <tomsmeding> mesaoptimizer: `echo :q | strace -r -o log ghci`; awk 'BEGIN {t=0} {t+=$1; print t $0}' log >logp; gnuplot -e "set terminal png size 1300,900; set output 'ghci.png'; plot 'logp' u 0:1 w lp"
2026-05-30 09:58:00 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 263 seconds)
2026-05-30 09:59:37 +0000pandeyan(~pandeyan@135-180-52-128.fiber.dynamic.sonic.net)
2026-05-30 10:00:42 +0000anpad(~pandeyan@user/anpad) (Ping timeout: 257 seconds)
2026-05-30 10:07:00 +0000 <int-e> tomsmeding: https://int-e.eu/~bf3/tmp/ghci-hmm.png is it possible that those just happen a bit later without -ignore-dot-ghci?
2026-05-30 10:07:09 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 10:11:24 +0000 <tomsmeding> int-e: I'm talking about this part https://tomsmeding.com/vang/ExpeNa/ghci.png
2026-05-30 10:12:04 +0000 <tomsmeding> it may well be that that is just work that gets postponed until first expression evaluation with ghci -ignore-dot-ghci, or something, but it's the part that makes the difference between the two executions
2026-05-30 10:12:46 +0000 <int-e> oh
2026-05-30 10:14:01 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-30 10:15:03 +0000 <int-e> hmm. printf 'pure ()\n:q\n' | ...
2026-05-30 10:19:59 +0000 <tomsmeding> https://tomsmeding.com/vang/SJ6gx5/ghci2.png
2026-05-30 10:20:13 +0000 <tomsmeding> version without .ghci is still faster, but the difference is not quite as large
2026-05-30 10:20:55 +0000 <int-e> neat!
2026-05-30 10:21:11 +0000 <tomsmeding> you do see that about 70% or so of the spike that differentiated with-.ghci from without-.ghci is now also mirrored in the without-.ghci execution
2026-05-30 10:21:14 +0000 <tomsmeding> but not all of it
2026-05-30 10:22:06 +0000 <int-e> it makes sense that there'd be a bunch of allocations the first time the compiler (to bytecode) is run, loading a bunch of shared objects and interfaces along the way (for base)
2026-05-30 10:22:42 +0000 <int-e> And right, the dynamic linker would do a bunch of mmap and madvise calls; it's not just the RTS.
2026-05-30 10:24:39 +0000 <tomsmeding> if I make .ghci empty, the time difference is gone
2026-05-30 10:25:12 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 10:25:59 +0000 <tomsmeding> or actually, then the no-.ghci version is faster
2026-05-30 10:26:11 +0000 <tomsmeding> er
2026-05-30 10:26:20 +0000 <tomsmeding> the with-.ghci is faster if .ghci is empty
2026-05-30 10:26:26 +0000 <tomsmeding> which... makes little sense?
2026-05-30 10:27:25 +0000 <int-e> time to consult the list of excuses... is it because of solar flares?
2026-05-30 10:27:29 +0000 <tomsmeding> in any case mesaoptimizer I do observe that a .ghci influences performance, but 1. it seems that that's just early loading of something that would happen later on first command execution anyway, and 2. it's like <50ms here, not a second
2026-05-30 10:27:47 +0000 <int-e> (on the serious I'd first ask whether this could be pure noise)
2026-05-30 10:27:52 +0000 <int-e> +side
2026-05-30 10:30:04 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 253 seconds)
2026-05-30 10:30:49 +0000 <int-e> maybe it gets worse if your .ghci imports all of hackage ;)
2026-05-30 10:31:19 +0000Guest43(~Guest43@p200300dcb74099005424e44ccbbb78bd.dip0.t-ipconnect.de)
2026-05-30 10:32:33 +0000 <tomsmeding> :p
2026-05-30 10:32:38 +0000 <tomsmeding> the situation is reproducible though
2026-05-30 10:33:33 +0000 <tomsmeding> if I run `printf 'pure()\n:q\n' | ghci` 10x with -ignore-dot-ghci, without the flag but with an empty .ghci, and with my "full" .ghci, I get 670ms, 543ms, 749ms
2026-05-30 10:33:59 +0000 <tomsmeding> (my "full" .ghci is not that big, it's a few :def and a few :seti)
2026-05-30 10:34:36 +0000 <tomsmeding> mesaoptimizer: are you on windows by any chance?
2026-05-30 10:36:30 +0000 <mesaoptimizer> tomsmeding: interesting, I'm glad that I noticed a valid unexpected behavior
2026-05-30 10:36:58 +0000 <mesaoptimizer> no, I'm on an M1 8G (macbook air)
2026-05-30 10:37:04 +0000Inline(~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) (Quit: KVIrc 5.2.8 Quasar http://www.kvirc.net/)
2026-05-30 10:38:11 +0000 <mesaoptimizer> ... by that I mean macOS
2026-05-30 10:38:17 +0000 <tomsmeding> I figured :)
2026-05-30 10:40:34 +0000 <int-e> mesaoptimizer: surprising mayby, but the conclusion so far is that the extra time comes from compiling to bytecode, which triggers loading and dynamic linking of a bunch of files.
2026-05-30 10:41:00 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 10:41:52 +0000 <int-e> And IIUC on Windows it would be worse because it would link normal object files using ghc's own linker code.
2026-05-30 10:42:20 +0000 <int-e> Which works but hasn't seen anywhere near the amount of optimizations that dynamic linkers have.
2026-05-30 10:42:54 +0000 <int-e> and I imagine it'll have to do more relacations too
2026-05-30 10:43:27 +0000 <tomsmeding> ok I did more measurements https://tomsmeding.com/vang/s8G1ds/ghci3.png blue is -ignore-dot-ghci, red is plain `ghci` but with an empty .ghci, green is plain `ghci` with my full-ish .ghci
2026-05-30 10:43:51 +0000 <tomsmeding> ignore the "0" at the end, that's shell script laziness
2026-05-30 10:44:30 +0000 <tomsmeding> this is all `printf "pure()\n:q\n" | strace -r -o log ghci [-ignore-dot-ghci]`
2026-05-30 10:44:46 +0000 <tomsmeding> actual times are a bit different without strace, but relative differences are simialr
2026-05-30 10:45:16 +0000 <tomsmeding> 1-10 are just "do the same measurement 10x to see noise"
2026-05-30 10:46:03 +0000 <tomsmeding> ok this is much clearer without points https://tomsmeding.com/vang/gQUn2y/ghci3.png
2026-05-30 10:46:04 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 258 seconds)
2026-05-30 10:47:17 +0000 <tomsmeding> the number of syscalls is commensurate with what one would expect, but blue (no .ghci) and red (empty .ghci) are the other way round in runtime
2026-05-30 10:49:07 +0000dtman34(~dtman34@c-73-242-68-179.hsd1.mn.comcast.net) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in)
2026-05-30 10:49:28 +0000dtman34(~dtman34@c-73-242-68-179.hsd1.mn.comcast.net) dtman34
2026-05-30 10:55:37 +0000Guest43(~Guest43@p200300dcb74099005424e44ccbbb78bd.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2026-05-30 10:56:45 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 10:57:05 +0000 <int-e> tomsmeding: hmm, for me -ignore-dot-ghci comes out ahead (ghc-9.12.2): https://int-e.eu/~bf3/tmp/ghci1.png
2026-05-30 10:57:45 +0000 <int-e> hmmmm
2026-05-30 10:57:55 +0000 <int-e> I think my 'empty' case is flawed
2026-05-30 10:57:58 +0000 <tomsmeding> I'm testing with 9.8.4 here, I can try 9.12
2026-05-30 10:58:01 +0000Inline(~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) Inline
2026-05-30 11:00:21 +0000 <int-e> yup, empty was flawed, I didn't hide my main .ghci from ghci: https://int-e.eu/~bf3/tmp/ghci2.png puts the empty .ghci between ignore-dot-ghci and the tiny full one
2026-05-30 11:00:42 +0000 <int-e> (but the full one *does* compile byte code because it defined a function)
2026-05-30 11:01:28 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-30 11:02:48 +0000tremon(~tremon@83-80-159-219.cable.dynamic.v4.ziggo.nl) (Remote host closed the connection)
2026-05-30 11:08:10 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 11:08:50 +0000 <tomsmeding> https://paste.tomsmeding.com/vuwPAm3U https://tomsmeding.com/vang/z6j2PO/ghci4.png
2026-05-30 11:09:22 +0000 <tomsmeding> observation: none and ignore are not equivalent
2026-05-30 11:13:21 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 267 seconds)
2026-05-30 11:17:08 +0000 <tomsmeding> ok that was still 9.8; with 9.12 the graphs are much different
2026-05-30 11:17:42 +0000 <tomsmeding> and 9.14 is like 9.12
2026-05-30 11:18:18 +0000 <tomsmeding> https://tomsmeding.com/vang/4hqRvJ/ghci9.14.png
2026-05-30 11:23:55 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 11:25:30 +0000Lord_of_Life_(~Lord@user/lord-of-life/x-2819915) Lord_of_Life
2026-05-30 11:25:53 +0000Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 269 seconds)
2026-05-30 11:28:22 +0000Lord_of_Life_Lord_of_Life
2026-05-30 11:29:04 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
2026-05-30 11:33:49 +0000 <int-e> tomsmeding: I think I'm wrong and we're really looking at GC times: https://int-e.eu/~bf3/tmp/ghci3.png (this is with 9.12.2 again, using https://paste.tomsmeding.com/ForwLizz )
2026-05-30 11:35:21 +0000 <int-e> (obviously don't run that script blindly; it needs its own clean directory)
2026-05-30 11:36:11 +0000 <int-e> and no, I can't explain why an empty .ghci triggers one less major GC here
2026-05-30 11:36:11 +0000califax_(~califax@user/califx) califx
2026-05-30 11:37:47 +0000califax(~califax@user/califx) (Ping timeout: 252 seconds)
2026-05-30 11:37:47 +0000califax_califax
2026-05-30 11:39:07 +0000 <int-e> my whole glorious .ghci file has two lines: ":set -Wno-x-partial" and "let c n 0 = 1; c n k = c (n-1) (k-1) * n `div` k".
2026-05-30 11:39:42 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 11:42:25 +0000vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2026-05-30 11:42:31 +0000 <int-e> but let me dig myself out of this rabbit hole
2026-05-30 11:42:40 +0000Icy-Thought(~user@user/icy-thought) icy-thought
2026-05-30 11:44:56 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 261 seconds)
2026-05-30 11:45:33 +0000 <int-e> tomsmeding: well, one final thing: if you look at that script, you'll see that I have a function for producing the input. it's interesting to look at the graphs when uncommenting those two `sleep` commands... that separates the system calls nicely by the commands that trigger them.
2026-05-30 11:46:34 +0000 <int-e> and you'll see, for example, that the :q triggers a final GC (presumably), and that the time that takes varies
2026-05-30 11:52:09 +0000tjbc(~tjbc@user/fliife) (Ping timeout: 248 seconds)
2026-05-30 11:55:32 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 12:02:43 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-05-30 12:09:10 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-30 12:10:52 +0000 <tomsmeding> int-e: interesting, I guess "GC" explains all the random noise that we're seeing?
2026-05-30 12:11:02 +0000 <tomsmeding> I have a friend over though so this is the end of investigation from my side :p
2026-05-30 12:11:49 +0000 <int-e> tomsmeding: it's so annoyingly deterministic noise though ;)
2026-05-30 12:12:04 +0000 <tomsmeding> :D
2026-05-30 12:12:07 +0000 <int-e> (but yeah I think it's best to treat it as pseudo-random)
2026-05-30 12:13:38 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 248 seconds)
2026-05-30 12:20:07 +0000tjbc(~tjbc@user/fliife) fliife
2026-05-30 12:24:32 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 12:28:43 +0000m(~travltux@user/travltux) (Quit: WeeChat 4.7.2)
2026-05-30 12:30:19 +0000m(~travltux@user/travltux) travltux
2026-05-30 12:31:40 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-30 12:38:53 +0000humasect(~humasect@dyn-192-249-132-90.nexicom.net) humasect
2026-05-30 12:42:41 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 12:45:13 +0000 <mesaoptimizer> https://typeclasses.com/timeline
2026-05-30 12:45:36 +0000 <mesaoptimizer> "This timeline is a chronological collection of events relevant to the topics we discuss here on Type Classes. It includes publications of the language specification, versions of the compiler that have introduced notable features, and research papers that described or contributed to these changes."
2026-05-30 12:47:30 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-30 12:58:28 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 12:58:28 +0000refactus(refactus@user/refactus) (Quit: WeeChat 3.0)
2026-05-30 13:02:54 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 258 seconds)
2026-05-30 13:10:10 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 13:15:22 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-30 13:25:57 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-30 13:28:59 +0000vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 262 seconds)
2026-05-30 13:30:57 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 252 seconds)
2026-05-30 13:39:20 +0000CiaoSen(~Jura@2a02:3037:6e6:d82f:4e50:ddff:fe9b:8922) CiaoSen
2026-05-30 13:41:41 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 13:46:44 +0000machinedgod(~machinedg@d172-219-48-230.abhsia.telus.net) machinedgod
2026-05-30 13:46:49 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-30 13:52:04 +0000infinity0(~infinity0@pwned.gg) (Ping timeout: 276 seconds)
2026-05-30 13:57:29 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 13:57:36 +0000CiaoSen(~Jura@2a02:3037:6e6:d82f:4e50:ddff:fe9b:8922) (Ping timeout: 246 seconds)
2026-05-30 13:58:30 +0000target_i(~target_i@user/target-i/x-6023099) target_i
2026-05-30 14:04:02 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-30 14:11:10 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 14:11:38 +0000infinity0(~infinity0@pwned.gg) infinity0
2026-05-30 14:13:38 +0000vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2026-05-30 14:15:52 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-05-30 14:22:01 +0000Googulator48(~Googulato@193-226-241-87.pool.digikabel.hu)
2026-05-30 14:25:37 +0000Googulator(~Googulato@193-226-241-87.pool.digikabel.hu) (Ping timeout: 245 seconds)
2026-05-30 14:27:07 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 14:32:13 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-30 14:35:17 +0000humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
2026-05-30 14:42:55 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 14:47:33 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 250 seconds)
2026-05-30 14:58:27 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 15:03:55 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-05-30 15:12:12 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 15:17:27 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
2026-05-30 15:22:37 +0000phm(~peter@fsf/member/phm) (Remote host closed the connection)
2026-05-30 15:25:00 +0000phm(~peter@fsf/member/phm) phm
2026-05-30 15:27:41 +0000pavonia(~user@user/siracusa) (Quit: Bye!)
2026-05-30 15:27:42 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 15:31:37 +0000mvk(~mvk@2607:fea8:5c9d:ee00::19a0) mvk
2026-05-30 15:32:23 +0000mvk(~mvk@2607:fea8:5c9d:ee00::19a0) (Client Quit)
2026-05-30 15:34:03 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 275 seconds)
2026-05-30 15:43:13 +0000weary-traveler(~user@user/user363627) (Remote host closed the connection)
2026-05-30 15:45:03 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 15:45:10 +0000vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 276 seconds)
2026-05-30 15:49:47 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 253 seconds)
2026-05-30 15:55:19 +0000Guest53(~Guest43@p200300dcb74099005424e44ccbbb78bd.dip0.t-ipconnect.de)
2026-05-30 16:00:50 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 16:03:34 +0000 <Guest53> What library would you recommend to parse environment variables into a data type?
2026-05-30 16:05:39 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 249 seconds)
2026-05-30 16:09:50 +0000 <monochrom> I don't know of one. I think I would use no library.
2026-05-30 16:13:13 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-30 16:15:08 +0000 <Guest53> I've found https://hackage.haskell.org/package/envparse and https://hackage.haskell.org/package/envy but maybe there are better ones.
2026-05-30 16:17:49 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 245 seconds)
2026-05-30 16:29:24 +0000wickedjargon(~user@207.194.39.242) wickedjargon
2026-05-30 16:31:10 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 16:31:27 +0000humasect(~humasect@dyn-192-249-132-90.nexicom.net) humasect
2026-05-30 16:35:00 +0000barthandelous01(barth@triton.blinkenshell.org) (Remote host closed the connection)
2026-05-30 16:37:48 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 251 seconds)
2026-05-30 16:40:15 +0000tremon(~tremon@83-80-159-219.cable.dynamic.v4.ziggo.nl) tremon
2026-05-30 16:49:13 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 16:50:43 +0000bedbedbde(~bedbedbde@user/bedbedbde) bedbedbde
2026-05-30 16:54:21 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
2026-05-30 16:54:37 +0000humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
2026-05-30 16:55:32 +0000humasect(~humasect@dyn-192-249-132-90.nexicom.net) humasect
2026-05-30 16:55:43 +0000vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2026-05-30 17:00:15 +0000humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 256 seconds)
2026-05-30 17:03:27 +0000machinedgod(~machinedg@d172-219-48-230.abhsia.telus.net) (Ping timeout: 276 seconds)
2026-05-30 17:04:43 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 17:04:56 +0000Square2(~Square@user/square) Square
2026-05-30 17:06:27 +0000wickedjargon(~user@207.194.39.242) (Remote host closed the connection)
2026-05-30 17:09:40 +0000arkeet`(~arkeet@moriya.ca)
2026-05-30 17:09:45 +0000arkeet(arkeet@moriya.ca) (Ping timeout: 246 seconds)
2026-05-30 17:09:45 +0000arkeet`arkeet
2026-05-30 17:09:51 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-30 17:12:09 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) bitdex
2026-05-30 17:12:54 +0000 <tomsmeding> :t System.Environment.getEnvironment
2026-05-30 17:12:55 +0000 <lambdabot> IO [(String, String)]
2026-05-30 17:12:57 +0000 <tomsmeding> Guest53: ^?
2026-05-30 17:14:13 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 17:18:35 +0000 <monochrom> and lookupEnv so you don't even have to search that list yourself
2026-05-30 17:19:10 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 267 seconds)
2026-05-30 17:28:19 +0000machinedgod(~machinedg@d172-219-48-230.abhsia.telus.net) machinedgod
2026-05-30 17:29:57 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 17:31:35 +0000 <Guest53> tomsmeding monochrom `getEnvironment`, `lookupEnv`, `getEnv` etc. are a little bit too low-level for my needs as they return `String`. I think the first paragraph of https://github.com/dmjio/envy#envy provides a good example of why this approach doesn't scale (or at least isn't pleasant to use).
2026-05-30 17:34:54 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-05-30 17:35:03 +0000 <Guest53> Basically, I would like to make sure that a certain set of environment variables is present and conforms to a certain format (e.g. SOME_IP should be a valid IP, SOME_EMAIL should be a valid email, SOME_PORT should be a valid port number etc.)
2026-05-30 17:35:49 +0000az-181(~az-181@2a04:4a43:94bf:f166:33c0:fe4e:a468:67a4)
2026-05-30 17:36:29 +0000 <monochrom> That example unconvinces me. A whole pile of over-engineering, tracing all its way back to ignoring/dismissing getEnv which throws an IO exception (which sounds bad under some people's religious ideologies but I don't buy it) which solves the "motivating" problem already.
2026-05-30 17:36:46 +0000 <monochrom> "motivating" "problem".
2026-05-30 17:39:01 +0000phos(~az-181@2a04:4a43:94bf:f166:33c0:fe4e:a468:67a4)
2026-05-30 17:39:19 +0000 <monochrom> For formats, just use any parser library. Even just regex library --- it is not like someone stores a whole Perl program in an environment variable such that you need a whole Perl interpreter to parse it, no?
2026-05-30 17:39:50 +0000az-181(~az-181@2a04:4a43:94bf:f166:33c0:fe4e:a468:67a4) ()
2026-05-30 17:40:11 +0000 <monochrom> For port numbers you just need Text.Read.readMaybe.
2026-05-30 17:40:36 +0000 <monochrom> even readIO while we're scaremongering against Maybe.
2026-05-30 17:42:08 +0000vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 251 seconds)
2026-05-30 17:42:08 +0000 <monochrom> This is why I began with recommending using no library. This domain is exactly where the risk of over-engineering larger-infrastructure-than-content is high. And you have just found a data point that proves it.
2026-05-30 17:45:53 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 17:46:39 +0000peterbecich(~Thunderbi@71.84.33.135) peterbecich
2026-05-30 17:51:21 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
2026-05-30 17:59:36 +0000 <Guest53> I'm not convinced. Manually parsing everything might be okay for two variables but not for 20 (at least in my opinion). If you add default values, redacting sensitive variables etc. you will just reimplement those libraries.
2026-05-30 18:01:06 +0000 <mauke> at that point I'd question the use of the environment
2026-05-30 18:01:42 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 18:01:53 +0000 <geekosaur> if they're sensitive they don't belong in the environment: ps can dump envars
2026-05-30 18:03:22 +0000bggd(~bgg@user/bggd) (Remote host closed the connection)
2026-05-30 18:03:25 +0000vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2026-05-30 18:05:17 +0000 <monochrom> I could agree if we s/those libraries/my own library/ .
2026-05-30 18:06:10 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-30 18:06:10 +0000 <monochrom> But then my own library would be like 5 lines. This is because IO is an Applicative so there is very little I have to add.
2026-05-30 18:09:44 +0000olivial(~benjaminl@user/benjaminl) (Read error: Connection reset by peer)
2026-05-30 18:10:01 +0000olivial(~benjaminl@user/benjaminl) benjaminl
2026-05-30 18:10:28 +0000 <monochrom> Just yesterday a student asked what are the use cases of environment variables. (I'm teaching a Unix course.)
2026-05-30 18:11:17 +0000 <mauke> environment variables are a conspiracy
2026-05-30 18:11:38 +0000 <mauke> there are only command-line arguments (and the other command-line arguments)
2026-05-30 18:11:59 +0000 <monochrom> I answered that if you're writing a program you would like to let user override defaults and/or enable extra features. There are 3 ways you can support this, and if you want to be nice you support all 3. Config file, cmdline options, envvars.
2026-05-30 18:12:07 +0000 <int-e> monochrom: so of course you told them that there's no place like $HOME
2026-05-30 18:13:19 +0000 <monochrom> At which point you realize that you don't want a dedicated envvar library. What you want is take one of those cmdline parsers and extend it to cover envvars. To a large extent cmdline parsers have already 99% of the code you need. They're just missing one single line of code that calls lookupEnv.
2026-05-30 18:15:09 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 18:15:57 +0000 <monochrom> Another way to say it is if you are dead set to over-engineer anyway, go big or go home. Don't even just do env vars.
2026-05-30 18:16:35 +0000 <mauke> W=all o=prog O=2 gcc prog.c
2026-05-30 18:17:01 +0000 <int-e> monochrom: if you're not inspecting the kernel command line (or UEFI variables?), are you even cooking?
2026-05-30 18:17:10 +0000gmg(~user@user/gehmehgeh) (Quit: Leaving)
2026-05-30 18:17:10 +0000 <monochrom> heh
2026-05-30 18:17:39 +0000 <monochrom> Oh by the time I teach select(), I'll bring up cooking literally. :)
2026-05-30 18:17:54 +0000 <mauke> tcsetattr
2026-05-30 18:19:26 +0000 <monochrom> "You have two FDs you are waiting data from. What can you do? 1. Blocking read --- you're missing out on the other one. 2. Busying polling --- are you coding or are you frying eggs?!"
2026-05-30 18:19:38 +0000driib3180(~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat)
2026-05-30 18:21:54 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-30 18:27:05 +0000driib3180(~driib@vmi931078.contaboserver.net) driib
2026-05-30 18:27:48 +0000 <mauke> monochrom: 3. O_ASYNC
2026-05-30 18:29:23 +0000 <monochrom> Right, but my sentence is after students have seen both blocking and unblocked read, but not select() or async I/O yet. It's to motivate either.
2026-05-30 18:29:52 +0000 <mauke> 4. pipe
2026-05-30 18:30:01 +0000 <mauke> and two subprocesses
2026-05-30 18:30:51 +0000tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net)
2026-05-30 18:31:01 +0000 <monochrom> That's a Haskell solution. >:)
2026-05-30 18:31:28 +0000 <mauke> :-)
2026-05-30 18:33:13 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 18:38:14 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-30 18:48:57 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 18:53:44 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 253 seconds)
2026-05-30 18:57:17 +0000Guest53(~Guest43@p200300dcb74099005424e44ccbbb78bd.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2026-05-30 18:58:17 +0000Sgeo(~Sgeo@user/sgeo) Sgeo
2026-05-30 19:04:28 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 19:06:00 +0000poscat(~poscat@user/poscat) (Remote host closed the connection)
2026-05-30 19:09:12 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-30 19:11:01 +0000poscat(~poscat@user/poscat) poscat
2026-05-30 19:11:21 +0000poscat(~poscat@user/poscat) (Read error: Connection reset by peer)
2026-05-30 19:11:34 +0000poscat(~poscat@user/poscat) poscat
2026-05-30 19:15:30 +0000vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 248 seconds)
2026-05-30 19:16:09 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 19:19:29 +0000 <yin> 5. argv[0] :)
2026-05-30 19:20:54 +0000skum(~skum@user/skum) (Quit: WeeChat 4.9.0)
2026-05-30 19:21:01 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-05-30 19:28:03 +0000Guest43(~Guest43@p200300dcb74099005424e44ccbbb78bd.dip0.t-ipconnect.de)
2026-05-30 19:30:15 +0000emilym(~Thunderbi@user/emilym) emilym
2026-05-30 19:33:42 +0000peterbecich(~Thunderbi@71.84.33.135) (Ping timeout: 256 seconds)
2026-05-30 19:34:29 +0000emilym(~Thunderbi@user/emilym) (Ping timeout: 245 seconds)
2026-05-30 19:41:46 +0000vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2026-05-30 19:47:43 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-30 19:52:18 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 248 seconds)
2026-05-30 20:03:30 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-30 20:08:29 +0000michalz(~michalz@185.246.207.218)
2026-05-30 20:10:33 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 265 seconds)
2026-05-30 20:10:50 +0000td_(~td@i53870907.versanet.de)