| 2026-05-23 00:00:49 +0000 | vetkat | (~vetkat@user/vetkat) (Quit: So long, and thanks for all the fish) |
| 2026-05-23 00:01:51 +0000 | vetkat | (~vetkat@user/vetkat) vetkat |
| 2026-05-23 00:03:26 +0000 | merijn | (~merijn@62.45.136.136) merijn |
| 2026-05-23 00:08:33 +0000 | merijn | (~merijn@62.45.136.136) (Ping timeout: 250 seconds) |
| 2026-05-23 00:19:13 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 00:23:40 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-05-23 00:33:29 +0000 | DetourNe- | (~DetourNet@user/DetourNetworkUK) DetourNetworkUK |
| 2026-05-23 00:33:43 +0000 | DetourNetworkUK | (~DetourNet@user/DetourNetworkUK) (Read error: Connection reset by peer) |
| 2026-05-23 00:34:51 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 00:35:43 +0000 | DetourNe- | DetourNetworkUK |
| 2026-05-23 00:40:09 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 2026-05-23 00:41:43 +0000 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2026-05-23 00:45:06 +0000 | myxos | (~myxos@67-1-178-42.tcso.qwest.net) (Ping timeout: 248 seconds) |
| 2026-05-23 00:50:21 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 00:55:28 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-05-23 01:05:32 +0000 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 240 seconds) |
| 2026-05-23 01:06:08 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 01:06:17 +0000 | myxos | (~myxos@67-1-178-42.tcso.qwest.net) myxokephale |
| 2026-05-23 01:08:36 +0000 | troojg | (~troojg@user/troojg) troojg |
| 2026-05-23 01:10:32 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-05-23 01:16:53 +0000 | foul_owl | (~kerry@94.156.149.96) (Ping timeout: 272 seconds) |
| 2026-05-23 01:17:47 +0000 | ncf | (~ncf@monade.li) (Remote host closed the connection) |
| 2026-05-23 01:21:32 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 01:27:03 +0000 | ncf | (~ncf@monade.li) ncf |
| 2026-05-23 01:28:09 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-05-23 01:39:36 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 01:44:46 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-05-23 01:52:24 +0000 | acidjnk_new3 | (~acidjnk@p200300d6e700e508282254f1e55c94a7.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 2026-05-23 01:53:00 +0000 | ncf | (~ncf@monade.li) (Remote host closed the connection) |
| 2026-05-23 01:54:13 +0000 | ncf | (~ncf@monade.li) ncf |
| 2026-05-23 01:55:23 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 02:00:17 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-05-23 02:11:09 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 02:12:57 +0000 | tremon | (~tremon@83.80.159.219) tremon |
| 2026-05-23 02:16:09 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-05-23 02:26:57 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 02:27:35 +0000 | puke | (~puke@014136001187.ctinets.com) (*.net *.split) |
| 2026-05-23 02:27:58 +0000 | puke | (~puke@014136001187.ctinets.com) |
| 2026-05-23 02:32:16 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 251 seconds) |
| 2026-05-23 02:35:15 +0000 | ricardomaps | (~ricardoma@2804:14d:a040:81ea:a057:893f:21d0:8f42) |
| 2026-05-23 02:36:39 +0000 | Eoco | (~ian@128.101.131.218) Eoco |
| 2026-05-23 02:38:02 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 02:42:55 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-05-23 02:48:34 +0000 | xff0x | (~xff0x@ai070051.d.east.v6connect.net) (Ping timeout: 265 seconds) |
| 2026-05-23 02:51:19 +0000 | Inline | (~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) (Ping timeout: 264 seconds) |
| 2026-05-23 02:53:36 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 02:54:20 +0000 | rainbyte | (~rainbyte@181.47.219.3) (Quit: rainbyte) |
| 2026-05-23 02:55:15 +0000 | ricardomaps | (~ricardoma@2804:14d:a040:81ea:a057:893f:21d0:8f42) (Quit: ricardomaps) |
| 2026-05-23 02:55:37 +0000 | xff0x | (~xff0x@2405:6580:b080:900:31a:40c3:3c58:e32) |
| 2026-05-23 02:58:03 +0000 | rainbyte | (~rainbyte@181.47.219.3) rainbyte |
| 2026-05-23 02:58:48 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 263 seconds) |
| 2026-05-23 03:02:21 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-05-23 03:04:14 +0000 | fgarcia | (~lei@user/fgarcia) fgarcia |
| 2026-05-23 03:06:34 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 245 seconds) |
| 2026-05-23 03:09:22 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 03:10:06 +0000 | myxos | (~myxos@67-1-178-42.tcso.qwest.net) (Ping timeout: 256 seconds) |
| 2026-05-23 03:16:31 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-05-23 03:19:37 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 252 seconds) |
| 2026-05-23 03:24:42 +0000 | m | (~travltux@user/travltux) (Quit: WeeChat 4.7.2) |
| 2026-05-23 03:27:08 +0000 | m | (~travltux@user/travltux) travltux |
| 2026-05-23 03:27:32 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 03:32:15 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-05-23 03:51:43 +0000 | myxos | (~myxos@67-1-178-42.tcso.qwest.net) myxokephale |
| 2026-05-23 04:03:25 +0000 | machinedgod | (~machinedg@d172-219-48-230.abhsia.telus.net) (Remote host closed the connection) |
| 2026-05-23 04:04:34 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2026-05-23 04:04:45 +0000 | machinedgod | (~machinedg@172.219.48.230) machinedgod |
| 2026-05-23 04:04:51 +0000 | machinedgod | (~machinedg@172.219.48.230) (Client Quit) |
| 2026-05-23 04:06:33 +0000 | troojg | (~troojg@user/troojg) (Ping timeout: 248 seconds) |
| 2026-05-23 04:15:22 +0000 | spew | (~spew@user/spew) (Quit: nyaa~) |
| 2026-05-23 04:25:32 +0000 | Jacqueline__ | (uid751191@id-751191.helmsley.irccloud.com) |
| 2026-05-23 04:38:53 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 04:43:47 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-05-23 04:54:37 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 04:59:43 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-05-23 05:02:43 +0000 | takuan | (~takuan@d8D86B9E9.access.telenet.be) |
| 2026-05-23 05:10:26 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 05:15:30 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-05-23 05:24:56 +0000 | euphores | (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 2026-05-23 05:26:13 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 05:29:25 +0000 | dibblego | (~dibblego@haskell/developer/dibblego) (Ping timeout: 276 seconds) |
| 2026-05-23 05:31:12 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-05-23 05:38:54 +0000 | euphores | (~SASL_euph@user/euphores) euphores |
| 2026-05-23 05:38:59 +0000 | dibblego | (~dibblego@116.255.1.119) |
| 2026-05-23 05:38:59 +0000 | dibblego | (~dibblego@116.255.1.119) (Changing host) |
| 2026-05-23 05:38:59 +0000 | dibblego | (~dibblego@haskell/developer/dibblego) dibblego |
| 2026-05-23 05:39:54 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 05:43:48 +0000 | dibblego | (~dibblego@haskell/developer/dibblego) (Ping timeout: 253 seconds) |
| 2026-05-23 05:44:54 +0000 | tnt1 | (~Thunderbi@user/tnt1) tnt1 |
| 2026-05-23 05:46:49 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-05-23 05:47:40 +0000 | dibblego | (~dibblego@116.255.1.119) |
| 2026-05-23 05:47:40 +0000 | dibblego | (~dibblego@116.255.1.119) (Changing host) |
| 2026-05-23 05:47:40 +0000 | dibblego | (~dibblego@haskell/developer/dibblego) dibblego |
| 2026-05-23 05:49:04 +0000 | tnt1 | (~Thunderbi@user/tnt1) (Ping timeout: 245 seconds) |
| 2026-05-23 05:51:35 +0000 | tnt1 | (~Thunderbi@user/tnt1) tnt1 |
| 2026-05-23 05:53:25 +0000 | haritz | (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in) |
| 2026-05-23 05:57:57 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 06:03:19 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-05-23 06:13:24 +0000 | dibblego | (~dibblego@haskell/developer/dibblego) (Ping timeout: 263 seconds) |
| 2026-05-23 06:13:45 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 06:15:20 +0000 | dibblego | (~dibblego@116-255-1-119.ip4.superloop.au) |
| 2026-05-23 06:15:21 +0000 | dibblego | (~dibblego@116-255-1-119.ip4.superloop.au) (Changing host) |
| 2026-05-23 06:15:21 +0000 | dibblego | (~dibblego@haskell/developer/dibblego) dibblego |
| 2026-05-23 06:18:09 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-05-23 06:29:07 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 06:34:11 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 2026-05-23 06:40:53 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 06:44:36 +0000 | metabulation | (~wootehfoo@user/wootehfoot) (Quit: Leaving) |
| 2026-05-23 06:45:18 +0000 | Jacqueline__ | (uid751191@id-751191.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
| 2026-05-23 06:46:00 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 253 seconds) |
| 2026-05-23 06:55:07 +0000 | ss4 | (~wootehfoo@user/wootehfoot) wootehfoot |
| 2026-05-23 06:56:43 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 07:01:27 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-05-23 07:12:29 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 07:12:58 +0000 | Inline | (~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) Inline |
| 2026-05-23 07:17:17 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 253 seconds) |
| 2026-05-23 07:20:07 +0000 | tnt1 | (~Thunderbi@user/tnt1) (Ping timeout: 264 seconds) |
| 2026-05-23 07:22:56 +0000 | Googulator | (~Googulato@84-236-52-41.pool.digikabel.hu) (Quit: Client closed) |
| 2026-05-23 07:23:09 +0000 | Googulator | (~Googulato@84-236-52-41.pool.digikabel.hu) |
| 2026-05-23 07:27:44 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...) |
| 2026-05-23 07:28:22 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 07:30:08 +0000 | poscat0x04 | (~poscat@user/poscat) (Remote host closed the connection) |
| 2026-05-23 07:33:04 +0000 | poscat | (~poscat@user/poscat) poscat |
| 2026-05-23 07:35:14 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-05-23 07:40:22 +0000 | enoq | (~enoq@2a05:1141:1fd:3b00:5934:e936:8f0a:3520) enoq |
| 2026-05-23 07:41:57 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 07:42:08 +0000 | <enoq> | been looking at kotlin conf talks and came across a value semantics talk; basically instead of lenses or deeply nested copies, the compiler takes care of that and is faster than writing mutating code by hand |
| 2026-05-23 07:42:15 +0000 | tnt1 | (~Thunderbi@user/tnt1) tnt1 |
| 2026-05-23 07:42:35 +0000 | <enoq> | applied optimizations include flattening pointers |
| 2026-05-23 07:43:03 +0000 | <enoq> | made me think: what if lenses were actually built into the compiler |
| 2026-05-23 07:47:00 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-05-23 07:56:55 +0000 | tusko | (~uwu@user/tusko) (Quit: Lost terminal) |
| 2026-05-23 07:57:44 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 07:58:34 +0000 | tnt1 | (~Thunderbi@user/tnt1) (Quit: tnt1) |
| 2026-05-23 07:59:27 +0000 | tnt1 | (~Thunderbi@user/tnt1) tnt1 |
| 2026-05-23 08:02:44 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-05-23 08:07:11 +0000 | ss4 | wootehfoot |
| 2026-05-23 08:14:15 +0000 | xff0x | (~xff0x@2405:6580:b080:900:31a:40c3:3c58:e32) (Ping timeout: 272 seconds) |
| 2026-05-23 08:14:31 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 08:14:51 +0000 | xff0x | (~xff0x@2405:6580:b080:900:dc8c:f72a:135a:db02) |
| 2026-05-23 08:19:25 +0000 | tusko | (~uwu@user/tusko) tusko |
| 2026-05-23 08:19:31 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-05-23 08:21:57 +0000 | enoq | (~enoq@2a05:1141:1fd:3b00:5934:e936:8f0a:3520) (Remote host closed the connection) |
| 2026-05-23 08:29:54 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 08:34:47 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-05-23 08:42:57 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 08:44:41 +0000 | divlamir | (~divlamir@user/divlamir) (Read error: Connection reset by peer) |
| 2026-05-23 08:47:54 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-05-23 08:55:29 +0000 | Googulator | (~Googulato@84-236-52-41.pool.digikabel.hu) (Quit: Client closed) |
| 2026-05-23 08:55:44 +0000 | Googulator | (~Googulato@84-236-52-41.pool.digikabel.hu) |
| 2026-05-23 08:55:45 +0000 | divlamir | (~divlamir@user/divlamir) divlamir |
| 2026-05-23 08:58:03 +0000 | acidjnk_new3 | (~acidjnk@p200300d6e700e5081bf32954ce73307a.dip0.t-ipconnect.de) |
| 2026-05-23 08:58:44 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 09:00:33 +0000 | acidjnk_new | (~acidjnk@p200300d6e700e570753f3d38cea48d7a.dip0.t-ipconnect.de) |
| 2026-05-23 09:00:44 +0000 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 2026-05-23 09:02:56 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-05-23 09:03:14 +0000 | acidjnk_new3 | (~acidjnk@p200300d6e700e5081bf32954ce73307a.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 2026-05-23 09:04:36 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-05-23 09:04:52 +0000 | jle` | (~jle`@2603:8001:3b00:11::1fae) (Quit: WeeChat 4.8.1) |
| 2026-05-23 09:06:59 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 245 seconds) |
| 2026-05-23 09:08:21 +0000 | jle` | (~jle`@23.240.67.73) jle` |
| 2026-05-23 09:26:05 +0000 | marinelli | (~weechat@gateway/tor-sasl/marinelli) (Quit: marinelli) |
| 2026-05-23 09:39:29 +0000 | marinelli | (~weechat@gateway/tor-sasl/marinelli) marinelli |
| 2026-05-23 09:42:28 +0000 | target_i | (~target_i@user/target-i/x-6023099) target_i |
| 2026-05-23 09:43:58 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 09:44:11 +0000 | karenw | (~karenw@user/karenw) karenw |
| 2026-05-23 09:48:39 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-05-23 09:55:31 +0000 | <Rembane> | Are the performance properties inherent to the lenses or could it also work to make the building blocks the lenses are made of that are already parts of the compiler have those optimizations? |
| 2026-05-23 09:56:47 +0000 | <jaror> | I don't think it is specific to lenses. It is just in general in Haskell if you only update a small part of a large datastructure you still have to pay for reallocating the "spine" |
| 2026-05-23 09:58:40 +0000 | <jaror> | Value semantics avoids this by giving each function a fresh copy of the whole value, so each function gets ownership of all its arguments and can freely mutate them. |
| 2026-05-23 09:59:46 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 10:00:05 +0000 | <jaror> | This copying has generally been considered too expensive in FP languages. Languages like Koka and Roc did experiment with a form of opportunistic mutation through reference counting. |
| 2026-05-23 10:01:43 +0000 | DetourNetworkUK | (~DetourNet@user/DetourNetworkUK) (Read error: Software caused connection abort) |
| 2026-05-23 10:02:30 +0000 | DetourNetworkUK | (~DetourNet@user/DetourNetworkUK) DetourNetworkUK |
| 2026-05-23 10:04:24 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-05-23 10:04:52 +0000 | <Rembane> | Got it, this all seems very reasonable. |
| 2026-05-23 10:05:21 +0000 | <Rembane> | It would be interesting to do some work on opportunistic mutation in Haskell. |
| 2026-05-23 10:07:04 +0000 | <Rembane> | And since it is an intersting idea people have already done some work on it: https://www.microsoft.com/en-us/research/wp-content/uploads/2023/05/fbip.pdf |
| 2026-05-23 10:09:51 +0000 | <jaror> | Yeah that seems like a promising approach |
| 2026-05-23 10:15:33 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 10:22:33 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-05-23 10:23:13 +0000 | <jaror> | I think laziness does make it quite a bit harder though |
| 2026-05-23 10:26:07 +0000 | <jaror> | Also quite a restriction: |
| 2026-05-23 10:26:08 +0000 | <jaror> | We enforce this in our calculus by only |
| 2026-05-23 10:26:08 +0000 | <jaror> | allowing top-level functions (rather than arbitrary closures) as arguments in our fully in-place |
| 2026-05-23 10:26:08 +0000 | <jaror> | calculus, effectively making it second-order. |
| 2026-05-23 10:27:34 +0000 | karenw | (~karenw@user/karenw) (Quit: Deep into that darkness peering...) |
| 2026-05-23 10:32:57 +0000 | puke | (~puke@014136001187.ctinets.com) (*.net *.split) |
| 2026-05-23 10:33:21 +0000 | puke | (~puke@014136001187.ctinets.com) |
| 2026-05-23 10:33:37 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 10:38:51 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-05-23 10:44:59 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 10:50:04 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 270 seconds) |
| 2026-05-23 10:50:08 +0000 | <[exa]> | jaror: does the vector-simple have any portability implications/improvements? |
| 2026-05-23 10:50:27 +0000 | <jaror> | I'm not sure what portability problems there are with vector |
| 2026-05-23 10:51:04 +0000 | <jaror> | vector-simple does use GHC's primops extensively |
| 2026-05-23 10:51:04 +0000 | <[exa]> | I mean, not directly (you depend on GHC :D ) but would it be easier to implement the necessary compiler tooling for this in a hypothetical new compiler or so? |
| 2026-05-23 10:51:59 +0000 | <jaror> | Yes I think it would be easier to adapt to other compilers |
| 2026-05-23 10:52:07 +0000 | <[exa]> | anyway the package looks Ok to me, I'd recommend switching to completely 3rd-person narrative in the readme ("theirs" and "ours" vs "vector" and "vector-simple") |
| 2026-05-23 10:52:36 +0000 | <jaror> | vector relies a lot of GHC's optimizations in addition to just the primops they use |
| 2026-05-23 10:52:55 +0000 | <jaror> | s/a lot of/a lot on/ |
| 2026-05-23 10:53:49 +0000 | <[exa]> | also would be great if you could provide exact numbers on overhead (there's like 2+n words estimate written down now, would be great to have exact numbers in hand together with what actual `vector` overhead looks like) |
| 2026-05-23 10:54:19 +0000 | <jaror> | 2+n should be exact |
| 2026-05-23 10:54:36 +0000 | <[exa]> | "much faster to build from scratch" -- you mean rewrite by hand, or build with ghc? |
| 2026-05-23 10:55:11 +0000 | <[exa]> | (btw apologies for a bit of reviewer mood here ^ :D it's good, there's just always so many tiny things to clarify) |
| 2026-05-23 10:55:13 +0000 | <jaror> | build with ghc, perhaps "compile if not cached" is a better description |
| 2026-05-23 10:55:35 +0000 | <jaror> | Yeah, I appreciate the feedback |
| 2026-05-23 10:55:37 +0000 | <[exa]> | ah yes then write "compile" and perhaps point to lack of dependencies |
| 2026-05-23 10:56:39 +0000 | <[exa]> | btw as far as I get it the main use-case for users is for programs that have lots of tiny vectors, right? I'd throw that into the main description. |
| 2026-05-23 10:58:26 +0000 | <jaror> | I don't think that's specifically the main use case. I think this will be my go-to package for anything but the case where I need large mutable arrays. |
| 2026-05-23 10:59:07 +0000 | <[exa]> | Rembane: re "performance properties of lenses" -- I somehow got the feeling that prolens exploited stuff inherent to compilers in a weird way ( (->) is a profunctor that is used there instead of Identity, thus it saves a level of wrapery over the plain (->) that ghc is very good at handling of). Thought it might be relevant to have a look there. |
| 2026-05-23 10:59:09 +0000 | <jaror> | I now often use lists where I think I really should use vectors/arrays instead, but there is no lightweight simple array/vector package. |
| 2026-05-23 10:59:45 +0000 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 2026-05-23 10:59:45 +0000 | <int-e> | Vector has, let me think, a tag, two indices, a length, a size, n indices, ceil(n/1024) extra words (assuming 8 byte words) |
| 2026-05-23 11:00:31 +0000 | <jaror> | a length and a size? |
| 2026-05-23 11:00:48 +0000 | <[exa]> | afaik as with reserve() from C |
| 2026-05-23 11:00:56 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 11:01:11 +0000 | <int-e> | wait, it's worse, isn't it? (Mutable)Array# can't be unpacked, so there's a pointer and another tag? |
| 2026-05-23 11:01:43 +0000 | <jaror> | It's just: |
| 2026-05-23 11:01:43 +0000 | <jaror> | data Vector a = Vector {-# UNPACK #-} !Int |
| 2026-05-23 11:01:43 +0000 | <jaror> | {-# UNPACK #-} !Int |
| 2026-05-23 11:01:43 +0000 | <jaror> | {-# UNPACK #-} !(Array a) |
| 2026-05-23 11:02:16 +0000 | <[exa]> | that's the simple vector or the vector vector? |
| 2026-05-23 11:02:34 +0000 | <jaror> | So two ints for the slicing and an unpacked `Array` which is just the length and the total size for the card table (indeed) and then n + ceil(n/1024) |
| 2026-05-23 11:02:40 +0000 | <jaror> | that's the normal vector |
| 2026-05-23 11:02:44 +0000 | <int-e> | Array is data Array a = Array { array#: Array# a } and Array# a has that size and length and elements and a card table |
| 2026-05-23 11:03:03 +0000 | <jaror> | Oh, won't that be unpacked twice? |
| 2026-05-23 11:03:38 +0000 | <jaror> | Yeah, I guess |
| 2026-05-23 11:03:47 +0000 | <int-e> | No, for that it would have to be unpacked into the Array type. And that wouldn't work with the GC which treats Array# (= a frozen mutable array) specially. |
| 2026-05-23 11:04:14 +0000 | <jaror> | You can unpack Array#, I believe |
| 2026-05-23 11:04:24 +0000 | <jaror> | GHC is not warning me about it at least |
| 2026-05-23 11:05:08 +0000 | <int-e> | That just means it doesn't explicitly hate the pragma. I don't think it *can* actually unpack it. |
| 2026-05-23 11:05:17 +0000 | <jaror> | Oh annoying |
| 2026-05-23 11:05:34 +0000 | <jaror> | I saw this old note and thought something must have happened by now: https://gitlab.haskell.org/ghc/ghc/-/wikis/unpacking-arrays |
| 2026-05-23 11:05:43 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-05-23 11:08:53 +0000 | <jaror> | I'm also now realizing that perhaps vector is not the best name since it seems to be more associated with dynamically resizable or at least slice-able arrays |
| 2026-05-23 11:13:37 +0000 | Square | (~Square@user/square) Square |
| 2026-05-23 11:16:33 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-05-23 11:17:52 +0000 | weary-traveler | (~user@user/user363627) user363627 |