Logs: liberachat/#haskell
| 2025-12-18 18:59:27 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 252 seconds) |
| 2025-12-18 18:59:27 | ljdarj1 | is now known as ljdarj |
| 2025-12-18 19:02:37 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2025-12-18 19:04:15 | × | tromp quits (~textual@2001:1c00:3487:1b00:388e:400a:f906:df4a) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2025-12-18 19:07:19 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-18 19:14:50 | → | acidjnk joins (~acidjnk@p200300d6e7171981f0c6dc9689540cc0.dip0.t-ipconnect.de) |
| 2025-12-18 19:18:24 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2025-12-18 19:19:06 | → | talismanick joins (~user@2601:644:8502:d340::cd3d) |
| 2025-12-18 19:20:21 | → | Tuplanolla joins (~Tuplanoll@88-114-88-95.elisa-laajakaista.fi) |
| 2025-12-18 19:20:55 | → | weary-traveler joins (~user@user/user363627) |
| 2025-12-18 19:22:55 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-18 19:26:50 | × | shaeto quits (~Shaeto@94.25.234.244) (Quit: WeeChat 4.1.1) |
| 2025-12-18 19:27:37 | → | shaeto joins (~Shaeto@94.25.234.244) |
| 2025-12-18 19:28:19 | × | shaeto quits (~Shaeto@94.25.234.244) (Client Quit) |
| 2025-12-18 19:28:52 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 244 seconds) |
| 2025-12-18 19:29:51 | → | CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) |
| 2025-12-18 19:32:20 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 2025-12-18 19:32:56 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds) |
| 2025-12-18 19:33:40 | Lord_of_Life_ | is now known as Lord_of_Life |
| 2025-12-18 19:34:11 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2025-12-18 19:39:08 | → | pavonia joins (~user@user/siracusa) |
| 2025-12-18 19:39:19 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2025-12-18 19:49:55 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2025-12-18 19:51:21 | → | lockna joins (~obr@2001:4bb8:103:9f41:2b3f:110b:6da3:4d72) |
| 2025-12-18 19:51:55 | × | lockna quits (~obr@2001:4bb8:103:9f41:2b3f:110b:6da3:4d72) (Remote host closed the connection) |
| 2025-12-18 19:52:10 | → | lockna joins (~obr@2001:4bb8:103:9f41:2b3f:110b:6da3:4d72) |
| 2025-12-18 19:52:12 | → | l0ckna joins (~obr@2001:4bb8:103:9f41:2b3f:110b:6da3:4d72) |
| 2025-12-18 19:52:45 | × | lockna quits (~obr@2001:4bb8:103:9f41:2b3f:110b:6da3:4d72) (Remote host closed the connection) |
| 2025-12-18 19:55:13 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2025-12-18 20:03:39 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2025-12-18 20:08:39 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2025-12-18 20:12:58 | × | humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 2025-12-18 20:14:10 | <haskellbridge> | <Liamzee> is the real reason people don't want to use Haskell as an orchestrator that Haskell concurrency + FFI is cursed? |
| 2025-12-18 20:15:39 | <monochrom> | Is Haskell concurrency + FFI cursed? |
| 2025-12-18 20:15:51 | <haskellbridge> | <Liamzee> I mean you can always blame C etc for it |
| 2025-12-18 20:16:03 | <haskellbridge> | <Liamzee> From experienced production devs: is it cursed? |
| 2025-12-18 20:16:33 | <haskellbridge> | <Liamzee> I've been trying to build a wrapper around the tinyfiledialogs library, and it turns out that traverse_ forkIO, on Macos, at least, will cause the script runner to jam buffers |
| 2025-12-18 20:16:47 | <monochrom> | I am not interested in blaming C, or blaming anything, at least for now. |
| 2025-12-18 20:17:36 | <monochrom> | Have you heard of forkOS? |
| 2025-12-18 20:17:36 | <haskellbridge> | <Liamzee> So, now I'm thinking no-inline unsafePerformIO global locks. ??? |
| 2025-12-18 20:17:42 | <haskellbridge> | <Liamzee> yes, I've used it. |
| 2025-12-18 20:18:17 | <haskellbridge> | <Liamzee> Still, if I'm trying to build a library wrapper, I can't control whether the end user is using forkIO or forkOS |
| 2025-12-18 20:18:23 | → | qqe joins (~qqq@185.54.20.98) |
| 2025-12-18 20:19:17 | <monochrom> | You can assume that the end user has made the correct choice between forkIO and forkOS. |
| 2025-12-18 20:19:27 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2025-12-18 20:19:28 | <int-e> | C libraries don't control from which threads they're called either |
| 2025-12-18 20:20:41 | → | Googulator75 joins (~Googulato@2a01-036d-0106-48e4-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-18 20:21:06 | <monochrom> | If you want tight control on which thread does what, the technique of "worker thread pool" has been well known for decades. |
| 2025-12-18 20:21:38 | × | Googulator72 quits (~Googulato@2a01-036d-0106-48e4-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-18 20:21:47 | × | omidmash quits (~omidmash@user/omidmash) (Quit: Ping timeout (120 seconds)) |
| 2025-12-18 20:21:53 | <monochrom> | And is particularly sweet in Haskell because Haskell has a much better API for sending messages to worker threads and/or pools. |
| 2025-12-18 20:22:00 | → | omidmash joins (~omidmash@user/omidmash) |
| 2025-12-18 20:22:35 | <monochrom> | (How better? You can send a f**king IO action as a message too. It doesn't even need to be data!) |
| 2025-12-18 20:22:55 | <monochrom> | (It's what gtk2hs does.) |
| 2025-12-18 20:23:31 | <int-e> | And fwiw, as FFIs go Haskell's is actually pretty nice, especially considering how old it is. |
| 2025-12-18 20:24:07 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-18 20:24:08 | <int-e> | Other languages had you write dozens of lines of marshalling code by hand for the most trivial functions. |
| 2025-12-18 20:26:53 | <haskellbridge> | <Liamzee> Honestly, I just had AI tell me that FFI + Haskell green threads / concurrency model is seriously difficult, especially if the wrapped library has global state |
| 2025-12-18 20:27:03 | <haskellbridge> | <Liamzee> I mean, I can leave it unsafe, but I guess I put a premium on child safety |
| 2025-12-18 20:27:15 | <monochrom> | "AI" |
| 2025-12-18 20:27:18 | <haskellbridge> | <Liamzee> I'm asking here beceause AI hallucinates and is a bullshit machine, so I'd rather ask real humans |
| 2025-12-18 20:27:34 | <monochrom> | Public LLMs are only as good as Internet trash. |
| 2025-12-18 20:28:45 | <monochrom> | Hutton already explained why Haskell anything is seriously difficult. |
| 2025-12-18 20:29:02 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 2025-12-18 20:29:27 | <monochrom> | Programming is seriously difficult. Haskell is just being honest about it. Other languages try to sugar-coat it. |
| 2025-12-18 20:31:11 | <haskellbridge> | <Liamzee> I mean the explanation is that other languages with their concurrency / FFI model is intended to be childsafe, i.e, it deliberately brain damages the concurrency + FFI model to avoid the overhead of childsafe-ing on the library designer side, but locks every user into the childsafe model, even when it's unnecessary |
| 2025-12-18 20:31:15 | <monochrom> | But Haskell solutions have been well-known for decades for concurrently FFI-ing to C libs with global states and/or thread-local states. |
| 2025-12-18 20:32:28 | <haskellbridge> | <Liamzee> the objective remark seems to be: Haskell concurrency + FFI is not childsafe (defined as, being brain-dead robust). It's the responsibility of the library builder to make it such. Or would you contest that? |
| 2025-12-18 20:34:51 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 2025-12-18 20:35:13 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2025-12-18 20:35:40 | <monochrom> | Which languages are childsafe? |
| 2025-12-18 20:36:01 | <int-e> | brainfuck |
| 2025-12-18 20:36:46 | × | l0ckna quits (~obr@2001:4bb8:103:9f41:2b3f:110b:6da3:4d72) (Quit: Leaving) |
| 2025-12-18 20:36:57 | <haskellbridge> | <Liamzee> The AI comment was: "every language with worse concurrency", i.e, Py is an example because of how hard concurrency is, and Go is apparently another example. |
| 2025-12-18 20:38:22 | <sprout> | Liamzee: that wasn't what the AI stated. and FFI-ing into something that isn't threadsafe of course is going to give you problems, no matter the language |
| 2025-12-18 20:38:23 | <monochrom> | As a first-order approximation: Mutex is not childsafe unless used under Haskell's bracket idiom or Python's recent "with" idiom or C++'s RAII idiom. That immediately cuts down the candidates to just 4: Haskell, Python, C++, maybe Rust. |
| 2025-12-18 20:39:08 | <monochrom> | However, none of those 4 force you to use those safe idioms. That further cuts down the candidates to 0. |
| 2025-12-18 20:40:13 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2025-12-18 20:41:03 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 2025-12-18 20:41:03 | <haskellbridge> | <Liamzee> Does Py etc use blocking FFI? |
| 2025-12-18 20:41:11 | <haskellbridge> | <Liamzee> Go? |
| 2025-12-18 20:43:13 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 264 seconds) |
| 2025-12-18 20:43:13 | ljdarj1 | is now known as ljdarj |
| 2025-12-18 20:43:20 | <sprout> | Liamzee: your AI gave you a statement of fact that is true for any language |
| 2025-12-18 20:43:44 | <sprout> | whether it's exceptionally difficult for Haskell is debatable |
| 2025-12-18 20:46:11 | × | michalz quits (~michalz@185.246.207.193) (Remote host closed the connection) |
| 2025-12-18 20:47:53 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 2025-12-18 20:48:52 | → | lambda_gibbon joins (~lambda_gi@208.83.175.39) |
| 2025-12-18 20:50:43 | × | Googulator75 quits (~Googulato@2a01-036d-0106-48e4-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-18 20:50:51 | → | Googulator73 joins (~Googulato@2a01-036d-0106-48e4-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-18 20:51:00 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2025-12-18 20:54:01 | × | lambda_gibbon quits (~lambda_gi@208.83.175.39) (Ping timeout: 244 seconds) |
| 2025-12-18 20:55:46 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2025-12-18 21:04:40 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2025-12-18 21:11:15 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-18 21:14:49 | × | dolio quits (~dolio@130.44.140.168) (Quit: ZNC 1.10.1 - https://znc.in) |
| 2025-12-18 21:16:48 | → | Pozyomka joins (~pyon@user/pyon) |
| 2025-12-18 21:22:13 | → | dolio joins (~dolio@130.44.140.168) |
| 2025-12-18 21:22:43 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2025-12-18 21:27:42 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
All times are in UTC.