Logs on 2024-04-15 (liberachat/#haskell)
| 00:01:10 | × | bitdex_ quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 00:02:01 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 00:06:22 | → | delyan_ joins (sid523379@id-523379.hampstead.irccloud.com) |
| 00:06:43 | → | califax joins (~califax@user/califx) |
| 00:11:12 | → | peterbecich joins (~Thunderbi@47.229.123.186) |
| 00:15:10 | → | raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) |
| 00:29:23 | × | peterbecich quits (~Thunderbi@47.229.123.186) (Ping timeout: 264 seconds) |
| 00:36:35 | × | waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 264 seconds) |
| 00:48:09 | × | euphores quits (~SASL_euph@user/euphores) (Ping timeout: 255 seconds) |
| 01:10:53 | × | mei quits (~mei@user/mei) (Ping timeout: 240 seconds) |
| 01:17:55 | <haskellbridge> | <sm> which conversation Inst ? |
| 01:18:21 | <Inst> | the time i was annoyed at hackage, you suggested i just try to pr it |
| 01:18:44 | <Inst> | so of course i'm testing the pr, and nope, doesn't seem to work :( |
| 01:19:23 | <haskellbridge> | <sm> really, if so I'm sure I wasn't to rash as to use the word simple ;) |
| 01:19:40 | <haskellbridge> | <sm> I thought I suggested flora |
| 01:20:01 | <Inst> | i mean that i was talking about how the browse page doesn't show the packages by last upload |
| 01:21:10 | <haskellbridge> | <sm> oh right, I remember |
| 01:21:42 | <haskellbridge> | <sm> nothing is as simple as it seems.. but relatively, hopefully |
| 01:21:44 | <haskellbridge> | <sm> (afk) |
| 01:31:28 | × | mjs2600 quits (~mjs2600@c-174-169-225-239.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in) |
| 01:42:39 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 01:48:11 | × | otto_s quits (~user@p4ff27ad3.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 01:48:31 | × | rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer) |
| 01:49:02 | → | rvalue joins (~rvalue@user/rvalue) |
| 01:49:50 | → | otto_s joins (~user@p4ff27773.dip0.t-ipconnect.de) |
| 01:52:17 | → | madeleine-sydney joins (~madeleine@c-76-155-235-153.hsd1.co.comcast.net) |
| 01:53:43 | → | werneta joins (~werneta@71.83.160.242) |
| 01:57:01 | → | sroso joins (~sroso@user/SrOso) |
| 02:02:11 | → | mei joins (~mei@user/mei) |
| 02:11:39 | × | She quits (haveident@libera/staff/she/her) (Quit: Either upgrades, or the world's ending.) |
| 02:12:17 | × | raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 252 seconds) |
| 02:19:50 | <Axman6> | It's been a while since I've wrapped a C library, are there any tools which help automate the job? |
| 02:20:00 | <Axman6> | any new tools I guess |
| 02:25:44 | <probie> | Not exactly a tool, but if a while is longer than 12 years, capi is a "cool new thing" (https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/ffi.html#the-capi-calling-convention) |
| 02:26:25 | <geekosaur> | of course, if it's been long enough, it's a cool old thing |
| 02:30:07 | → | ezzieyguywuf joins (~Unknown@user/ezzieyguywuf) |
| 02:32:09 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 02:33:36 | <Axman6> | Mostly I'm looking for any assistance for working with/parsing structs I think |
| 02:33:57 | <geekosaur> | I think c2hs is still the last word there |
| 02:40:59 | × | bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 02:42:39 | × | terrorjack quits (~terrorjac@2a01:4f8:c17:87f8::) (Quit: The Lounge - https://thelounge.chat) |
| 02:45:27 | → | terrorjack joins (~terrorjac@2a01:4f8:c17:87f8::) |
| 02:46:47 | × | td_ quits (~td@i53870917.versanet.de) (Ping timeout: 264 seconds) |
| 02:48:09 | → | td_ joins (~td@i53870931.versanet.de) |
| 02:50:51 | <jackdk> | Last time I wrapped a C lib (many years ago) I struggled to make c2hs do what I want and wrote raw hsc2hs. But libtelnet was small |
| 02:59:04 | → | igemnace joins (~ian@user/igemnace) |
| 03:02:20 | × | rosco quits (~rosco@aq027043.dynamic.ppp.asahi-net.or.jp) (Ping timeout: 252 seconds) |
| 03:05:46 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 03:10:17 | × | bcksl quits (~bcksl@user/bcksl) (Quit: \) |
| 03:10:17 | × | end quits (~end@user/end/x-0094621) (Quit: end) |
| 03:11:21 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 03:11:53 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 03:12:18 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 260 seconds) |
| 03:19:19 | → | rosco joins (~rosco@2001:240:2479:ed58:69a0:efe8:3c3a:6c48) |
| 03:23:21 | → | bcksl joins (~bcksl@user/bcksl) |
| 03:28:32 | → | end joins (~end@user/end/x-0094621) |
| 03:29:06 | × | JimL quits (~quassel@89.162.16.26) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 03:30:04 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 03:31:58 | → | JimL joins (~quassel@89.162.16.26) |
| 03:34:26 | → | steew_ joins (~steew@user/steew) |
| 03:35:16 | → | raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) |
| 03:35:16 | × | steew quits (~steew@user/steew) (Ping timeout: 260 seconds) |
| 03:35:16 | steew_ | is now known as steew |
| 03:42:16 | → | oneeyedalien joins (~oneeyedal@user/oneeyedalien) |
| 03:51:07 | → | reki joins (~halloy490@broadband-5-228-80-43.ip.moscow.rt.ru) |
| 03:54:42 | × | xigua quits (~xigua@user/xigua) (Read error: Connection reset by peer) |
| 03:54:56 | → | xigua joins (~xigua@user/xigua) |
| 03:56:03 | × | oneeyedalien quits (~oneeyedal@user/oneeyedalien) (Quit: Leaving) |
| 03:56:42 | → | xdminsy joins (~xdminsy@117.147.70.203) |
| 04:00:00 | → | aforemny_ joins (~aforemny@2001:9e8:6cdd:b100:9200:9bf0:8eb2:3efb) |
| 04:00:09 | × | xal quits (~xal@mx1.xal.systems) () |
| 04:00:31 | × | aforemny quits (~aforemny@2001:9e8:6cf7:a400:800f:dec:5362:bd8) (Ping timeout: 256 seconds) |
| 04:00:33 | × | actioninja quits (~actioninj@user/actioninja) (Quit: see ya mane) |
| 04:00:37 | → | xal joins (~xal@mx1.xal.systems) |
| 04:00:57 | × | raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 272 seconds) |
| 04:00:59 | → | actioninja joins (~actioninj@user/actioninja) |
| 04:04:03 | × | hippoid quits (~hippoid@c-98-213-162-40.hsd1.il.comcast.net) (Changing host) |
| 04:04:03 | → | hippoid joins (~hippoid@user/hippoid) |
| 04:07:51 | × | igemnace quits (~ian@user/igemnace) (Quit: WeeChat 4.2.2) |
| 04:11:38 | × | haskellbridge quits (~haskellbr@069-135-003-034.biz.spectrum.com) (Ping timeout: 252 seconds) |
| 04:26:33 | → | michalz joins (~michalz@185.246.207.215) |
| 04:28:25 | × | euleritian quits (~euleritia@dynamic-176-004-201-124.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
| 04:28:43 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 04:32:32 | → | igemnace joins (~ian@user/igemnace) |
| 04:33:41 | <geekosaur> | The bridge is down because my Internet connection is out |
| 04:34:07 | <geekosaur> | Sending this from my phone |
| 04:41:19 | × | Square quits (~Square@user/square) (Ping timeout: 256 seconds) |
| 04:50:59 | × | mei quits (~mei@user/mei) (Ping timeout: 264 seconds) |
| 04:51:32 | → | mei joins (~mei@user/mei) |
| 04:58:34 | <Inst> | thanks for having it up at all :) |
| 05:01:46 | → | euphores joins (~SASL_euph@user/euphores) |
| 05:02:15 | × | machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 252 seconds) |
| 05:04:07 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 05:16:30 | → | greenflower joins (~greenflow@2401:4900:1cb9:42b6:23bf:816c:a5c5:7803) |
| 05:18:03 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 05:30:07 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 05:34:32 | → | zetef joins (~quassel@5.2.182.99) |
| 05:37:47 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds) |
| 05:41:40 | → | euleritian joins (~euleritia@dynamic-176-004-201-124.176.4.pool.telefonica.de) |
| 05:48:04 | × | greenflower quits (~greenflow@2401:4900:1cb9:42b6:23bf:816c:a5c5:7803) (Ping timeout: 250 seconds) |
| 05:50:14 | → | Guest79 joins (~Guest79@89.185.25.131) |
| 05:53:02 | × | Guest79 quits (~Guest79@89.185.25.131) (Client Quit) |
| 06:17:03 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 06:20:49 | → | mima joins (~mmh@aftr-62-216-211-38.dynamic.mnet-online.de) |
| 06:21:09 | → | califax joins (~califax@user/califx) |
| 06:26:43 | × | philopsos quits (~caecilius@user/philopsos) (Ping timeout: 256 seconds) |
| 06:28:57 | × | gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer) |
| 06:29:32 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 06:29:54 | × | igemnace quits (~ian@user/igemnace) (Read error: Connection reset by peer) |
| 06:30:33 | → | yeitrafferin joins (~user@2a04:4540:720f:f000:1c8b:86e5:bfad:3ed4) |
| 06:32:26 | × | euleritian quits (~euleritia@dynamic-176-004-201-124.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
| 06:33:53 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 06:34:43 | → | gentauro joins (~gentauro@user/gentauro) |
| 06:37:00 | × | madeleine-sydney quits (~madeleine@c-76-155-235-153.hsd1.co.comcast.net) (Quit: Konversation terminated!) |
| 06:45:29 | → | rekahsoft joins (~rekahsoft@184.148.6.204) |
| 06:47:32 | → | igemnace joins (~ian@user/igemnace) |
| 06:52:22 | → | Miroboru joins (~myrvoll@178-164-114.82.3p.ntebredband.no) |
| 06:54:34 | × | reki quits (~halloy490@broadband-5-228-80-43.ip.moscow.rt.ru) (Remote host closed the connection) |
| 06:54:58 | × | rekahsoft quits (~rekahsoft@184.148.6.204) (Ping timeout: 256 seconds) |
| 06:59:12 | <tomsmeding> | does a Coercible constraint have a runtime representation? If I put a 'Coercible a b =>' constraint on a GADT constructor, will there be an actual dictionary at runtime? |
| 06:59:21 | × | werneta quits (~werneta@71.83.160.242) (Quit: leaving) |
| 07:01:19 | × | zetef quits (~quassel@5.2.182.99) (Ping timeout: 260 seconds) |
| 07:04:20 | → | rvalue- joins (~rvalue@user/rvalue) |
| 07:05:16 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 260 seconds) |
| 07:08:20 | rvalue- | is now known as rvalue |
| 07:12:02 | <probie> | tomsmeding: It looks like it to me. See the generated core for `foo` in https://play.haskell.org/saved/bpferROD |
| 07:13:01 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 07:21:44 | × | mei quits (~mei@user/mei) (Quit: mei) |
| 07:23:15 | → | mei joins (~mei@user/mei) |
| 07:25:06 | × | stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
| 07:25:54 | → | stiell_ joins (~stiell@gateway/tor-sasl/stiell) |
| 07:27:59 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 07:28:32 | <[Leary]> | Core contains types (including coersions) and calls to `cast` which presumably are all erased. I wouldn't presume the `Coercible` dictionary is represented at runtime based on its presence in Core. The STG might be more illuminating. Or just ask #ghc. |
| 07:29:11 | → | danza joins (~francesco@151.37.246.125) |
| 07:29:50 | → | zetef joins (~quassel@5.2.182.99) |
| 07:31:30 | <lyxia> | the dictionary takes a spot in the constructor arguments even in the cmm |
| 07:31:54 | → | acidjnk joins (~acidjnk@p200300d6e714dc36e896bc542a6281cf.dip0.t-ipconnect.de) |
| 07:34:04 | <probie> | [Leary]: You're right, relying on core is not actually indicative. However, looking at the generated assembly, the Coercible dictionary definitely gets passed to the constructor, as to what it contains, I'm not sure |
| 07:37:25 | <[Leary]> | I imagine it's entirely vestigial. |
| 07:38:34 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 256 seconds) |
| 07:38:39 | × | econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
| 07:39:47 | <probie> | A pointer to whatever `GHC.Types.MkCoercible_con_info` is |
| 07:43:00 | × | danza quits (~francesco@151.37.246.125) (Ping timeout: 268 seconds) |
| 07:45:03 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 07:48:52 | × | dcoutts quits (~duncan@cpc69400-oxfd27-2-0-cust750.4-3.cable.virginm.net) (Ping timeout: 246 seconds) |
| 07:49:04 | → | __monty__ joins (~toonn@user/toonn) |
| 07:52:42 | → | chele joins (~chele@user/chele) |
| 08:00:50 | → | Core2410 joins (~rosco@2001:240:242c:d62d:b170:9c25:b014:c1d3) |
| 08:02:26 | × | rosco quits (~rosco@2001:240:2479:ed58:69a0:efe8:3c3a:6c48) (Ping timeout: 268 seconds) |
| 08:04:45 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 08:05:02 | <mesaoptimizer> | how do I get auto-import in emacs in haskell? I'm using eglot and HLS |
| 08:06:07 | → | machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net) |
| 08:12:41 | <tomsmeding> | thanks all! I can't imagine there to be actual interesting data in the MkCoercible object though; I guess (from grepping ghc) it ought to be a ~R# object inside, which perhaps has no runtime representation? |
| 08:13:06 | × | Rodney_ quits (~Rodney@176.254.244.83) (Ping timeout: 252 seconds) |
| 08:21:42 | × | tzh quits (~tzh@c-73-164-206-160.hsd1.or.comcast.net) (Quit: zzz) |
| 08:21:57 | → | rosco joins (~rosco@2001:240:242c:d62d:de59:f92f:5995:ec84) |
| 08:22:08 | → | danse-nr3 joins (~danse-nr3@151.37.246.125) |
| 08:22:08 | × | mei quits (~mei@user/mei) (Killed (calcium.libera.chat (Nickname regained by services))) |
| 08:22:13 | → | mei joins (~mei@user/mei) |
| 08:22:16 | × | Miroboru quits (~myrvoll@178-164-114.82.3p.ntebredband.no) (Ping timeout: 260 seconds) |
| 08:22:38 | × | danse-nr3 quits (~danse-nr3@151.37.246.125) (Read error: Connection reset by peer) |
| 08:24:08 | × | Core2410 quits (~rosco@2001:240:242c:d62d:b170:9c25:b014:c1d3) (Ping timeout: 260 seconds) |
| 08:25:03 | → | danse-nr3 joins (~danse-nr3@151.37.246.125) |
| 08:29:18 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 08:29:35 | gehmehgeh | is now known as gmg |
| 08:29:45 | → | bitdex_ joins (~bitdex@gateway/tor-sasl/bitdex) |
| 08:31:30 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 260 seconds) |
| 08:37:10 | → | qqq joins (~qqq@92.43.167.61) |
| 08:42:44 | → | Etabeta13 joins (~Etabeta1@151.30.10.212) |
| 08:43:51 | × | Etabeta1 quits (~Etabeta1@user/meow/Etabeta1) (Ping timeout: 256 seconds) |
| 08:43:51 | Etabeta13 | is now known as Etabeta1 |
| 08:43:55 | × | danse-nr3 quits (~danse-nr3@151.37.246.125) (Remote host closed the connection) |
| 08:44:17 | → | danse-nr3 joins (~danse-nr3@151.37.246.125) |
| 08:48:10 | → | Miroboru joins (~myrvoll@178-164-114.82.3p.ntebredband.no) |
| 08:55:07 | × | ft quits (~ft@p4fc2a20e.dip0.t-ipconnect.de) (Quit: leaving) |
| 08:55:36 | → | lisbeths joins (uid135845@id-135845.lymington.irccloud.com) |
| 08:55:42 | → | dcoutts joins (~duncan@cpc69400-oxfd27-2-0-cust750.4-3.cable.virginm.net) |
| 09:11:17 | × | zetef quits (~quassel@5.2.182.99) (Ping timeout: 272 seconds) |
| 09:11:30 | × | img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
| 09:12:24 | → | img joins (~img@user/img) |
| 09:18:24 | → | Pixi` joins (~Pixi@user/pixi) |
| 09:21:35 | × | Pixi quits (~Pixi@user/pixi) (Ping timeout: 264 seconds) |
| 09:25:45 | → | zetef joins (~quassel@5.2.182.99) |
| 09:29:35 | → | sawilagar joins (~sawilagar@user/sawilagar) |
| 09:38:41 | × | raoul quits (~raoul@95.179.203.88) (Remote host closed the connection) |
| 09:49:34 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 09:50:05 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 09:51:26 | × | danse-nr3 quits (~danse-nr3@151.37.246.125) (Read error: Connection reset by peer) |
| 09:52:21 | → | danse-nr3 joins (~danse-nr3@151.37.246.125) |
| 10:03:59 | → | Core5214 joins (~rosco@2001:240:242c:d62d:8006:d50:9606:4eb4) |
| 10:06:20 | × | danse-nr3 quits (~danse-nr3@151.37.246.125) (Ping timeout: 260 seconds) |
| 10:06:53 | × | rosco quits (~rosco@2001:240:242c:d62d:de59:f92f:5995:ec84) (Ping timeout: 240 seconds) |
| 10:08:38 | × | zfnmxt quits (~zfnmxt@user/zfnmxt) (Remote host closed the connection) |
| 10:11:16 | → | zfnmxt joins (~zfnmxt@user/zfnmxt) |
| 10:18:18 | × | acidjnk quits (~acidjnk@p200300d6e714dc36e896bc542a6281cf.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 10:20:39 | <lyxia> | yes |
| 10:30:38 | × | SteelBlueSilk quits (~SteelBlue@user/SteelBlueSilk) (Read error: Connection reset by peer) |
| 10:33:01 | → | SteelBlueSilk joins (~SteelBlue@c-98-42-249-36.hsd1.ca.comcast.net) |
| 10:33:02 | × | SteelBlueSilk quits (~SteelBlue@c-98-42-249-36.hsd1.ca.comcast.net) (Changing host) |
| 10:33:02 | → | SteelBlueSilk joins (~SteelBlue@user/SteelBlueSilk) |
| 10:40:04 | → | cfricke joins (~cfricke@user/cfricke) |
| 10:40:30 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds) |
| 10:41:04 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 11:00:20 | × | zetef quits (~quassel@5.2.182.99) (Ping timeout: 268 seconds) |
| 11:00:40 | → | danse-nr3 joins (~danse-nr3@151.43.234.51) |
| 11:01:51 | × | Core5214 quits (~rosco@2001:240:242c:d62d:8006:d50:9606:4eb4) (Read error: Connection reset by peer) |
| 11:02:05 | → | rosco joins (~rosco@aq052236.dynamic.ppp.asahi-net.or.jp) |
| 11:02:23 | × | haocrcmt^ quits (~cd@c-98-242-74-66.hsd1.ga.comcast.net) (Ping timeout: 264 seconds) |
| 11:02:34 | × | danse-nr3 quits (~danse-nr3@151.43.234.51) (Remote host closed the connection) |
| 11:02:59 | → | danse-nr3 joins (~danse-nr3@151.43.234.51) |
| 11:03:05 | → | haocrcmt^ joins (~cd@c-98-242-74-66.hsd1.ga.comcast.net) |
| 11:03:52 | → | Core6846 joins (~rosco@aq052236.dynamic.ppp.asahi-net.or.jp) |
| 11:04:01 | × | rosco quits (~rosco@aq052236.dynamic.ppp.asahi-net.or.jp) (Read error: Connection reset by peer) |
| 11:14:42 | × | causal quits (~eric@50.35.88.207) (Quit: WeeChat 4.1.1) |
| 11:36:38 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 11:37:00 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 11:42:05 | × | igemnace quits (~ian@user/igemnace) (Quit: WeeChat 4.2.2) |
| 11:49:44 | × | sroso quits (~sroso@user/SrOso) (Quit: Leaving :)) |
| 11:52:16 | × | euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 12:03:43 | → | euphores joins (~SASL_euph@user/euphores) |
| 12:08:02 | → | igemnace joins (~ian@user/igemnace) |
| 12:09:49 | × | anon8697 quits (~anon1123@catv-176-63-0-119.catv.fixed.vodafone.hu) (Quit: ZNC 1.8.2 - https://znc.in) |
| 12:10:45 | → | anon1123 joins (~anon1123@2a02:ab88:282:b00:da3a:ddff:fe3a:947c) |
| 12:10:53 | × | ddellacosta quits (~ddellacos@ool-44c73d29.dyn.optonline.net) (Ping timeout: 240 seconds) |
| 12:13:32 | × | qqq quits (~qqq@92.43.167.61) (Remote host closed the connection) |
| 12:15:47 | × | random-jellyfish quits (~developer@user/random-jellyfish) (Ping timeout: 256 seconds) |
| 12:19:46 | × | Maeda quits (~Maeda@91-161-10-149.subs.proxad.net) (Ping timeout: 246 seconds) |
| 12:20:29 | → | qqq joins (~qqq@92.43.167.61) |
| 12:20:56 | → | random-jellyfish joins (~developer@user/random-jellyfish) |
| 12:23:24 | → | chele_ joins (~chele@user/chele) |
| 12:24:14 | × | chele quits (~chele@user/chele) (Read error: Connection reset by peer) |
| 12:25:00 | × | Nixkernal quits (~Nixkernal@240.17.194.178.dynamic.wline.res.cust.swisscom.ch) (Ping timeout: 252 seconds) |
| 12:26:10 | × | ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 12:26:40 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 12:27:41 | × | tv quits (~tv@user/tv) (Quit: derp) |
| 12:28:14 | → | tv joins (~tv@user/tv) |
| 12:31:04 | → | r5c4571lh01987 joins (rscastilho@179.221.142.8) |
| 12:31:51 | × | r5c4571lh01987 quits (rscastilho@179.221.142.8) (Remote host closed the connection) |
| 12:32:09 | → | Nixkernal joins (~Nixkernal@240.17.194.178.dynamic.wline.res.cust.swisscom.ch) |
| 12:41:24 | × | qqq quits (~qqq@92.43.167.61) (Remote host closed the connection) |
| 12:41:24 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 255 seconds) |
| 12:48:29 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 12:48:36 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 12:50:47 | → | Maeda joins (~Maeda@91-161-10-149.subs.proxad.net) |
| 12:54:27 | → | qqq joins (~qqq@92.43.167.61) |
| 12:55:17 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 12:56:00 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 12:59:04 | → | PiDelport joins (uid25146@id-25146.lymington.irccloud.com) |
| 13:04:32 | → | n8n joins (n8n@user/n8n) |
| 13:16:42 | → | tri joins (~tri@ool-18bbef1a.static.optonline.net) |
| 13:17:54 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 4.2.2) |
| 13:18:36 | × | picnoir quits (~picnoir@about/aquilenet/vodoo/NinjaTrappeur) (Quit: WeeChat 4.2.1) |
| 13:20:00 | → | picnoir joins (~picnoir@about/aquilenet/vodoo/NinjaTrappeur) |
| 13:20:53 | × | tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 240 seconds) |
| 13:27:44 | → | She joins (haveident@libera/staff/she/her) |
| 13:28:26 | → | waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
| 13:30:02 | <Inst> | EvanR: Haskell is essentially a scripting language, isn't it? :) |
| 13:30:05 | <Inst> | That's what purity amounts to |
| 13:30:27 | <Inst> | The pure part of your program is essentially a high-performance library that's called by the impure part of your program |
| 13:30:36 | <Inst> | for data calculation |
| 13:30:42 | <Inst> | and the impure part is essentially a Python ;) |
| 13:35:09 | <EvanR> | a useful difference from other languages is your whole program is pure |
| 13:35:29 | → | tri joins (~tri@ool-18bbef1a.static.optonline.net) |
| 13:36:35 | <Inst> | "technically" |
| 13:37:10 | <Inst> | since all the statements are essentially quoted |
| 13:37:35 | <Inst> | but yeah, massive state reduction is actually good for scripting |
| 13:38:03 | × | tri quits (~tri@ool-18bbef1a.static.optonline.net) (Remote host closed the connection) |
| 13:39:07 | × | qqq quits (~qqq@92.43.167.61) (Remote host closed the connection) |
| 13:39:42 | × | masaeedu quits (~masaeedu@user/masaeedu) (Read error: Connection reset by peer) |
| 13:40:30 | × | bitdex_ quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 13:42:21 | × | rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer) |
| 13:42:51 | → | rvalue joins (~rvalue@user/rvalue) |
| 13:45:51 | → | masaeedu joins (~masaeedu@user/masaeedu) |
| 13:45:51 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 13:46:15 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 13:50:33 | → | qqq joins (~qqq@92.43.167.61) |
| 13:53:28 | <EvanR> | quotation is a thing when you do template haskell |
| 13:54:03 | <EvanR> | speaking of code instead of using code |
| 13:58:15 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 268 seconds) |
| 14:00:19 | → | euleritian joins (~euleritia@dynamic-176-004-212-165.176.4.pool.telefonica.de) |
| 14:00:49 | → | JeremyB99 joins (~JeremyB99@2607:fb90:d3e2:41ab:d1ec:83b3:f5ca:bc85) |
| 14:01:04 | × | dcoutts quits (~duncan@cpc69400-oxfd27-2-0-cust750.4-3.cable.virginm.net) (Ping timeout: 260 seconds) |
| 14:01:20 | → | Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
| 14:04:21 | <Inst> | I mean in the sense that the IO type functions analogously to quotation in Lisps |
| 14:04:55 | <Inst> | I'm still stunned by the fact that if you, in an impure language, call a function with statements as arguments, the statements run first |
| 14:05:09 | <Inst> | and I've heard the effectfulness of the statements is actually UB when more than one statement is used |
| 14:05:37 | <EvanR> | no |
| 14:06:11 | <Inst> | at least in C |
| 14:06:18 | <Inst> | order of statement execution isn't specified |
| 14:06:19 | Inst | giggles |
| 14:07:00 | <EvanR> | IO isn't like quotation, since you don't have access to syntax at any point |
| 14:07:59 | <Inst> | i mean IO wraps primitives that trigger effects, and the design of it with a 0 bit RealWorld# token controls the sequencing of effects |
| 14:08:06 | <EvanR> | in C do the statements "run first?" If it contains subexpressions they need to be evaluated which could cause side effects |
| 14:09:02 | × | JeremyB99 quits (~JeremyB99@2607:fb90:d3e2:41ab:d1ec:83b3:f5ca:bc85) (Read error: Connection reset by peer) |
| 14:09:02 | <Inst> | contain 0 or more, technically, since, well, pure :) |
| 14:12:58 | <Inst> | btw sm: I have the sort working, but it's ugly, it's based on corrupting a template file somewhere with two sort('lastUpload')s ;_; |
| 14:14:24 | → | JeremyB99 joins (~JeremyB99@2607:fb90:d3e2:41ab:d1ec:83b3:f5ca:bc85) |
| 14:15:33 | × | JeremyB99 quits (~JeremyB99@2607:fb90:d3e2:41ab:d1ec:83b3:f5ca:bc85) (Read error: Connection reset by peer) |
| 14:18:18 | × | erisco quits (~erisco@d24-141-66-165.home.cgocable.net) (Ping timeout: 252 seconds) |
| 14:19:29 | → | tri joins (~tri@ool-18bbef1a.static.optonline.net) |
| 14:22:09 | × | Arsen quits (arsen@gentoo/developer/managarm.dev.Arsen) (Quit: Quit.) |
| 14:23:54 | → | JeremyB99 joins (~JeremyB99@2607:fb90:d3e2:41ab:d1ec:83b3:f5ca:bc85) |
| 14:24:00 | × | tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 255 seconds) |
| 14:27:28 | × | igemnace quits (~ian@user/igemnace) (Read error: Connection reset by peer) |
| 14:28:00 | → | erisco joins (~erisco@d24-141-66-165.home.cgocable.net) |
| 14:28:02 | × | JeremyB99 quits (~JeremyB99@2607:fb90:d3e2:41ab:d1ec:83b3:f5ca:bc85) (Read error: Connection reset by peer) |
| 14:30:34 | → | JeremyB99 joins (~JeremyB99@2607:fb90:d3e2:41ab:d1ec:83b3:f5ca:bc85) |
| 14:36:06 | AlexNoo_ | is now known as AlexNoo |
| 14:36:07 | <glguy> | Order of execution in C is partially defined. All the function arguments evaluate before the function is called, for example. But it's perhaps less defined than you'd guess https://en.cppreference.com/w/c/language/eval_order |
| 14:37:23 | × | JeremyB99 quits (~JeremyB99@2607:fb90:d3e2:41ab:d1ec:83b3:f5ca:bc85) (Read error: Connection reset by peer) |
| 14:39:44 | → | JeremyB99 joins (~JeremyB99@2607:fb90:d3e2:41ab:d1ec:83b3:f5ca:bc85) |
| 14:40:17 | × | CrunchyFlakes_ quits (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) (Quit: ZNC 1.8.2 - https://znc.in) |
| 14:44:16 | → | billchenchina joins (~billchenc@2a0d:2580:ff0c:1:e3c9:c52b:a429:5bfe) |
| 14:45:06 | → | igemnace joins (~ian@user/igemnace) |
| 14:45:52 | × | random-jellyfish quits (~developer@user/random-jellyfish) (Ping timeout: 260 seconds) |
| 14:48:04 | × | JeremyB99 quits (~JeremyB99@2607:fb90:d3e2:41ab:d1ec:83b3:f5ca:bc85) (Read error: Connection reset by peer) |
| 14:49:08 | → | JeremyB99 joins (~JeremyB99@2607:fb90:d3e2:41ab:d1ec:83b3:f5ca:bc85) |
| 14:50:28 | → | dcompoze joins (~dcompoze@dcsoftware.org) |
| 14:52:10 | × | dcompoze quits (~dcompoze@dcsoftware.org) (Client Quit) |
| 14:55:50 | → | raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) |
| 14:56:26 | → | Arsen joins (~arsen@gentoo/developer/managarm.dev.Arsen) |
| 14:58:26 | → | dcompoze joins (~dcompoze@dcsoftware.org) |
| 14:58:36 | × | dcompoze quits (~dcompoze@dcsoftware.org) (Client Quit) |
| 15:00:39 | × | danse-nr3 quits (~danse-nr3@151.43.234.51) (Ping timeout: 252 seconds) |
| 15:00:42 | → | CrunchyFlakes joins (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) |
| 15:00:52 | → | danse-nr3 joins (~danse-nr3@151.57.231.212) |
| 15:01:42 | × | igemnace quits (~ian@user/igemnace) (Quit: WeeChat 4.2.2) |
| 15:05:15 | × | JeremyB99 quits (~JeremyB99@2607:fb90:d3e2:41ab:d1ec:83b3:f5ca:bc85) (Ping timeout: 260 seconds) |
| 15:08:07 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 15:12:20 | × | mei quits (~mei@user/mei) (Remote host closed the connection) |
| 15:14:44 | → | mei joins (~mei@user/mei) |
| 15:17:13 | → | tri joins (~tri@ool-18bbef1a.static.optonline.net) |
| 15:18:12 | → | zetef joins (~quassel@5.2.182.99) |
| 15:18:17 | × | Arsen quits (~arsen@gentoo/developer/managarm.dev.Arsen) (Quit: Quit.) |
| 15:18:29 | → | Arsen joins (~arsen@gentoo/developer/managarm.dev.Arsen) |
| 15:18:42 | → | random-jellyfish joins (~developer@user/random-jellyfish) |
| 15:19:05 | × | euleritian quits (~euleritia@dynamic-176-004-212-165.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
| 15:19:25 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 15:22:07 | × | tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 268 seconds) |
| 15:23:12 | → | JeremyB99 joins (~JeremyB99@2607:fb90:2c60:c178:6804:dd74:ec24:3be4) |
| 15:27:39 | × | waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 260 seconds) |
| 15:30:13 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 15:32:12 | <Lycurgus> | order of execution is always well defined |
| 15:32:32 | × | random-jellyfish quits (~developer@user/random-jellyfish) (Remote host closed the connection) |
| 15:32:43 | <Lycurgus> | in ordinary programming languages like c |
| 15:32:48 | <Lycurgus> | and haskell |
| 15:32:50 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 15:32:50 | → | random-jellyfish joins (~developer@user/random-jellyfish) |
| 15:33:04 | <Lycurgus> | ordinary generic |
| 15:33:24 | <Lycurgus> | a purpose built lang or dsl could decide ofc |
| 15:33:41 | <Lycurgus> | otherwise the programmer does |
| 15:34:26 | <Lycurgus> | in the non generic case the order is irrelevant |
| 15:34:29 | × | JeremyB99 quits (~JeremyB99@2607:fb90:2c60:c178:6804:dd74:ec24:3be4) (Ping timeout: 240 seconds) |
| 15:35:03 | × | lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 15:36:49 | <c_wraith> | I'm not sure what you mean by "well-defined" there. |
| 15:36:54 | <Lycurgus> | would apply locally in cases like the procedure division of cobol, or calcs in rpg |
| 15:37:24 | <Lycurgus> | unless ofc the lang itself isn |
| 15:37:32 | <c_wraith> | are you including "unspecified" as part of defined? |
| 15:37:34 | <Lycurgus> | which would be odd |
| 15:38:11 | → | JeremyB99 joins (~JeremyB99@2607:fb91:7c5:4d04:6cf3:f0f9:5199:7b3) |
| 15:38:17 | × | JeremyB99 quits (~JeremyB99@2607:fb91:7c5:4d04:6cf3:f0f9:5199:7b3) (Read error: Connection reset by peer) |
| 15:38:25 | <Lycurgus> | c_wraith, no, why would i do that? have you observed me to talk like that wo explanation? |
| 15:38:58 | <Lycurgus> | in statement oriented langs |
| 15:39:09 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds) |
| 15:39:17 | <c_wraith> | well, because I'm trying to match what you're saying to how C works. foo(bar(), baz()) does not specify whether bar() or baz() is called first in C. either order is valid. |
| 15:39:41 | <Lycurgus> | the order is implicitly the programmers specified serial execution plus any task constructs |
| 15:40:02 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 15:40:24 | <Lycurgus> | ofc it does |
| 15:40:49 | <Lycurgus> | in whatever constructs spec it occurs |
| 15:41:00 | <Lycurgus> | per whatever level C11, etc |
| 15:41:12 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 15:41:25 | <Lycurgus> | back to K&R |
| 15:43:18 | <Lycurgus> | saw this on the log and felt compelled to public service. You're Welcome! |
| 15:43:21 | <c_wraith> | check glguy's link above. |
| 15:43:23 | <jle`> | it looks like according to the C spec, the compiler is allowed to decide which one gets called first, and so if the programmer wants control, they have to explicitly sequence it |
| 15:43:34 | <jle`> | https://en.cppreference.com/w/c/language/eval_order |
| 15:43:38 | × | Lycurgus quits (~juan@user/Lycurgus) (Quit: Lycurgus) |
| 15:43:45 | <jle`> | oh they quit |
| 15:43:59 | <c_wraith> | and that's the same link glguy provided above |
| 15:44:26 | <jle`> | ah yeah i saw they joined after the think was posted, but then i realized that they read it through the logs |
| 15:44:30 | <jle`> | quite a mystery |
| 15:45:22 | <jle`> | also reading through the link it just occurred to me that it's kind of wierd that version 99 came out before version 11 |
| 15:45:27 | × | random-jellyfish quits (~developer@user/random-jellyfish) (Ping timeout: 256 seconds) |
| 15:45:46 | <c_wraith> | I always found that lack of ordering in C to be really inconvenient for things like recursive-descent parsers. |
| 15:46:11 | <c_wraith> | Lots of mandatory naming of subexpressions to control order of evaluation. |
| 15:49:15 | → | JeremyB99 joins (~JeremyB99@2607:fb91:7c5:4d04:6cf3:f0f9:5199:7b3) |
| 15:49:24 | × | JeremyB99 quits (~JeremyB99@2607:fb91:7c5:4d04:6cf3:f0f9:5199:7b3) (Read error: Connection reset by peer) |
| 15:49:47 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 15:49:53 | <Lycurgus> | so |
| 15:50:20 | <Lycurgus> | the fact the spec allows the compiler to decide when the programmer doesn ... ? |
| 15:50:29 | <Lycurgus> | ??? |
| 15:52:11 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 272 seconds) |
| 15:52:32 | → | euleritian joins (~euleritia@dynamic-176-004-212-165.176.4.pool.telefonica.de) |
| 15:53:16 | <Lycurgus> | take ur time, i'll respond if it's called for; this is kinda an important point |
| 15:53:39 | × | Lycurgus quits (~juan@user/Lycurgus) (Client Quit) |
| 15:57:40 | → | alexherbo2 joins (~alexherbo@2a02-8440-3140-0274-8942-7e1a-ff10-b141.rev.sfr.net) |
| 15:58:16 | <jle`> | that's pretty much the definition of "undefined behavior" in the context of progamming languages, though. the compiler is allowed to decide instead of the spec. in ie multithreaded situations it could very well be nondeterministic |
| 15:58:27 | × | remedan quits (~remedan@ip-78-102-118-253.bb.vodafone.cz) (Quit: Bye!) |
| 15:58:29 | → | dcompoze joins (~dcompoze@dcsoftware.org) |
| 15:59:34 | <jle`> | although i don't mean to conflate undefined behavior with nondeterministic behavior |
| 16:00:09 | → | noumenon joins (~noumenon@113.51-175-156.customer.lyse.net) |
| 16:01:21 | <jle`> | but my main point is that order of evaluation in this situation is classified as "undefined" within the standard terminology when talking about programming languages |
| 16:01:44 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 16:01:45 | → | acidjnk joins (~acidjnk@p200300d6e714dc36e896bc542a6281cf.dip0.t-ipconnect.de) |
| 16:02:03 | → | tzh joins (~tzh@c-73-164-206-160.hsd1.or.comcast.net) |
| 16:02:49 | <Lycurgus> | ok, this thread had an origin I don't want to be associated with or seem to have encouraged but I do think my point is clear and well made and ofc public |
| 16:03:40 | <Lycurgus> | the last comment is in the class of those I won't respond to but I will continue to see if one is warranted |
| 16:04:27 | <Lycurgus> | bbl |
| 16:04:51 | × | Lycurgus quits (~juan@user/Lycurgus) (Client Quit) |
| 16:05:32 | → | JeremyB99 joins (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) |
| 16:05:44 | <janus> | what's with this bloated language... urgh |
| 16:06:08 | × | danse-nr3 quits (~danse-nr3@151.57.231.212) (Ping timeout: 260 seconds) |
| 16:06:26 | <janus> | jle`: i applaud you for trying, i would have given up already |
| 16:07:49 | → | Square2 joins (~Square4@user/square) |
| 16:07:56 | → | segfaultfizzbuzz joins (~segfaultf@12.172.217.142) |
| 16:08:21 | × | JeremyB99 quits (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) (Read error: Connection reset by peer) |
| 16:08:34 | <segfaultfizzbuzz> | says someone on the internet: "people coming from a functional programming background mention higher kinded types as a better alternative to macros in some cases" -- ?? |
| 16:10:38 | → | ft joins (~ft@p4fc2a20e.dip0.t-ipconnect.de) |
| 16:11:18 | → | remedan joins (~remedan@ip-78-102-118-253.bb.vodafone.cz) |
| 16:13:02 | × | foul_owl quits (~kerry@185.219.141.162) (Read error: Connection reset by peer) |
| 16:14:41 | <nitrix> | Macros usually are in the form of a preprocessing step that operates on lexical tokens. |
| 16:15:27 | → | JeremyB99 joins (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) |
| 16:15:48 | <nitrix> | It's mediocre at best when you need a separate language in your language just to do meta things that, well, most of the time are just to express very general things that the existing type system cannot make generic enough. |
| 16:16:29 | × | swistak quits (~swistak@185.21.216.141) (Ping timeout: 240 seconds) |
| 16:17:10 | → | tri joins (~tri@ool-18bbef1a.static.optonline.net) |
| 16:17:24 | <nitrix> | Haskell isn't completely absolved from the issue, it still has Template Haskell as its own DSL for meta programming, but you don't use it nearly as much as, say, C macros, because the type system is already quite competent. |
| 16:18:04 | → | swistak joins (~swistak@185.21.216.141) |
| 16:19:35 | <nitrix> | Kinds lets you have specific type signatures be manipulated at the type level. Just like you can have higher-order functions on values, you can have higher-order functions on types. |
| 16:20:31 | <Inst> | about the only thing macros can do that functions can't is codewalk, which makes me cry every day :( |
| 16:20:39 | <Inst> | then again, even in languages with good codewalking, the macros can be ugly :( |
| 16:21:17 | × | tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 240 seconds) |
| 16:21:46 | <Inst> | I went to Julia to get a taste of macros, since Julia seems to be alive and reasonably vibrant (everyone's fighting to be Rust's little sister) compared to CLisp, but apparently codewalking with Julia macros is painful |
| 16:23:29 | <EvanR> | I feel like Lycurgus could be vindicated maybe by saying regardless of specs, every implementation of C any of us ever used has some well defined but perhaps unknown ordering |
| 16:23:29 | <nitrix> | Even the ultimate macro language, Lisp, it's miserable having to quote/quasiquote. It's like programming inside of a string and having to escape all the sensitive characters constantly. |
| 16:24:16 | <segfaultfizzbuzz> | i am playing with rust macros for the first time right now |
| 16:24:31 | <segfaultfizzbuzz> | and am debating about whether i should be writing repetitious boilerplate or writing mostly in macros |
| 16:24:37 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 16:24:46 | <nitrix> | Rust macros are interesting because they've given types to the lexical tokens so the errors are less. Still annoying though. |
| 16:24:56 | <Lycurgus> | a vindicator! I am so charmed. |
| 16:25:05 | <segfaultfizzbuzz> | writing quote! {} with no compiler help is kinda scary tho |
| 16:25:14 | <EvanR> | are you logging out and lurking logs only? lol |
| 16:25:46 | <ski> | type synonyms are kinda macros, at the type level. from this perspective, `LiberalTypeSynonyms' allow higher-order type macros |
| 16:26:12 | × | machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 260 seconds) |
| 16:26:26 | <nitrix> | I think it'd only be higher-order if it's at least the form * -> * |
| 16:26:33 | <ski> | (also CLisp is a particular implementation of Common Lisp) |
| 16:26:45 | <Lycurgus> | EvanR, after this if there's a comment to be made in this thread i'll do it tommorow |
| 16:27:37 | <ski> | well, `ApInt Id', given `type Id a = a; type ApInt f = f Int', would be an example. here `ApInt' has kind `(* -> *) -> *', yea |
| 16:27:37 | <Lycurgus> | at one level 'the programmers specified order' is simplicity itself but there's a lot to unpack in this actual thread and the matter of C and its specs |
| 16:27:54 | <masaeedu> | EvanR: unfortunately if the cppreference page is to be believed, not even this is true |
| 16:27:56 | <Lycurgus> | i apologize if articulate english is a problem |
| 16:29:16 | <Lycurgus> | so i take it that when a spec says that behaviour is undefined that is informing you in natural language abouit the definition of the language |
| 16:29:31 | <Lycurgus> | *about |
| 16:30:16 | <Lycurgus> | also the class of langs is important and i've delimited them |
| 16:31:30 | × | mei quits (~mei@user/mei) (Remote host closed the connection) |
| 16:31:35 | → | foul_owl joins (~kerry@185.219.141.164) |
| 16:31:37 | <Lycurgus> | in some general purpose langs, prolog being the main one that comes to mind, the actual order specified by the programmer is not ofc like in C |
| 16:33:53 | → | mei joins (~mei@user/mei) |
| 16:34:09 | <Lycurgus> | 'well defined' and 'perhaps unkown' for an ordering are antithetical opposites and so ofc i'm not saying that for any correct C implementation |
| 16:34:41 | → | econo_ joins (uid147250@id-147250.tinside.irccloud.com) |
| 16:35:51 | <Lycurgus> | *unknown |
| 16:36:19 | × | Square2 quits (~Square4@user/square) (Ping timeout: 246 seconds) |
| 16:38:02 | <Lycurgus> | in pl u got ur socalled flow of satisfaction which serves the same purpose, seeya tommorrow |
| 16:38:10 | × | dcompoze quits (~dcompoze@dcsoftware.org) (Quit: Weechat 4.2.2) |
| 16:38:20 | → | dcompoze joins (~dcompoze@dcsoftware.org) |
| 16:38:29 | × | Lycurgus quits (~juan@user/Lycurgus) (Quit: Lycurgus) |
| 16:38:46 | <nitrix> | This isn't quite the place for that but C has sequence points. Not everything is guaranteed to happen in the specified order. |
| 16:40:15 | × | alexherbo2 quits (~alexherbo@2a02-8440-3140-0274-8942-7e1a-ff10-b141.rev.sfr.net) (Remote host closed the connection) |
| 16:40:36 | → | alexherbo2 joins (~alexherbo@2a02-8440-3140-0274-8942-7e1a-ff10-b141.rev.sfr.net) |
| 16:40:55 | <nitrix> | Instructions can be re-ordered as long as it's semantically not observable, similar to Haskell's purity + lazy evaluation combo, but as a general rule for optimizations. |
| 16:43:22 | <nitrix> | Excluding optimizations and sequence points, the leftover has undefined behavior. e.g. i++ + ++i. |
| 16:49:51 | → | tri joins (~tri@ool-18bbef1a.static.optonline.net) |
| 16:51:15 | × | billchenchina quits (~billchenc@2a0d:2580:ff0c:1:e3c9:c52b:a429:5bfe) (Quit: Leaving) |
| 16:51:53 | × | JeremyB99 quits (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) (Read error: Connection reset by peer) |
| 16:54:53 | × | tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 272 seconds) |
| 16:55:11 | → | JeremyB99 joins (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) |
| 16:55:21 | × | ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 16:55:25 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 16:55:48 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 16:56:39 | × | rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer) |
| 16:57:30 | → | rvalue joins (~rvalue@user/rvalue) |
| 16:58:47 | × | JeremyB99 quits (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) (Read error: Connection reset by peer) |
| 17:02:08 | → | lisbeths joins (uid135845@id-135845.lymington.irccloud.com) |
| 17:04:04 | × | alexherbo2 quits (~alexherbo@2a02-8440-3140-0274-8942-7e1a-ff10-b141.rev.sfr.net) (Remote host closed the connection) |
| 17:04:22 | → | JeremyB99 joins (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) |
| 17:05:44 | × | dcompoze quits (~dcompoze@dcsoftware.org) (Quit: Weechat 4.2.2) |
| 17:05:45 | × | JeremyB99 quits (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) (Read error: Connection reset by peer) |
| 17:06:38 | × | zetef quits (~quassel@5.2.182.99) (Ping timeout: 268 seconds) |
| 17:11:09 | → | dcoutts joins (~duncan@cpc69400-oxfd27-2-0-cust750.4-3.cable.virginm.net) |
| 17:13:32 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 17:15:24 | → | JeremyB99 joins (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) |
| 17:16:08 | × | JeremyB99 quits (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) (Read error: Connection reset by peer) |
| 17:22:11 | × | raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 264 seconds) |
| 17:23:06 | → | Square joins (~Square@user/square) |
| 17:23:58 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 17:28:06 | → | JeremyB99 joins (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) |
| 17:33:28 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 17:34:33 | → | raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) |
| 17:44:07 | → | tri joins (~tri@ool-18bbef1a.static.optonline.net) |
| 17:45:51 | → | philopsos joins (~caecilius@user/philopsos) |
| 17:45:57 | × | JeremyB99 quits (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) (Read error: Connection reset by peer) |
| 17:51:02 | → | zetef joins (~quassel@5.2.182.99) |
| 17:51:13 | → | JeremyB99 joins (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) |
| 17:53:12 | × | JeremyB99 quits (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) (Read error: Connection reset by peer) |
| 17:55:08 | × | mei quits (~mei@user/mei) (Remote host closed the connection) |
| 17:57:33 | → | mei joins (~mei@user/mei) |
| 18:03:24 | → | JeremyB99 joins (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) |
| 18:05:27 | <monochrom> | Although, I am not sure why evaluation order ruins recursive descent parsing, even in C. In Haskell, recursive descent parsing is done monadically or at least applicatively, >>= and <*> become the equivalent of programmer-specified sequence points; this is no better than in C. |
| 18:08:17 | <dolio> | I suppose depending on exactly how it looks, certain C expressions do not have a defined sequencing. So you can write an ill-defined parser in that respect. |
| 18:08:29 | × | raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 240 seconds) |
| 18:08:30 | <monochrom> | So I guess s/I am not sure why evaluation order ruins recursive descent parsing, even in C/I am not sure why you would expect evaluation order to not ruin recursive descent parsing, even in Haskell/ |
| 18:08:31 | × | JeremyB99 quits (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) (Read error: Connection reset by peer) |
| 18:09:52 | <dolio> | When you nest all the monad combinators, it all has a well-defined sequence according the parser. |
| 18:11:05 | <dolio> | The C case would be like using algebraic effects to write things direct style, but then the algebraic effects stuff telling you that `f (g x) (h y)` has no defined sequencing between the effects of `g` and `h`. |
| 18:11:23 | <monochrom> | Yeah but exactly what I was addressing. In Haskell, such a parser goes like "do { e1 <- subexpr; op <- operator; e2 <- subexpr; pure f(e1, op, e2) }". Even in Haskell you would not write it as "f(subexpr(), operator(), subexpr())". So I would not expect anyone to write like that in C. |
| 18:11:41 | × | segfaultfizzbuzz quits (~segfaultf@12.172.217.142) (Ping timeout: 240 seconds) |
| 18:13:44 | <dolio> | Algebraic effect systems generally don't do that, from what I've seen. |
| 18:13:46 | → | segfaultfizzbuzz joins (~segfaultf@12.172.217.142) |
| 18:13:50 | <dolio> | I.E. C sucks. :) |
| 18:14:57 | <monochrom> | Ugh I didn't expect algebraic effects and C to appear together in the same sentence like that haha. |
| 18:16:19 | <monochrom> | And perhaps s/evaluation order/effect order/g for much better diction. |
| 18:16:47 | <dolio> | I mean, there are other examples, too. |
| 18:16:59 | <dolio> | Racket tells you what order arguments are evaluated. |
| 18:17:41 | <dolio> | C is probably the odd one at this point. |
| 18:21:11 | <mauke> | what was that article that described C as being based on a formal mathematical concept, the monoid? |
| 18:21:32 | <dolio> | Because the syntax is text? |
| 18:21:35 | <mauke> | yeah |
| 18:21:43 | <c_wraith> | monochrom: usually I write parsers in an applicative style. Sure, the operators count as sequence points, but they do it without me being required to invent names for their results. |
| 18:21:44 | <monochrom> | I bet the original undocumented intention had just two orders in mind and the committee couldn't agree to ban either one. |
| 18:22:14 | <dolio> | Yeah, should be right-to-left, right? :) |
| 18:22:16 | <mauke> | it had something like, "C refers to strings as char * using a notation borrowed from Kleene" |
| 18:22:30 | → | JeremyB99 joins (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) |
| 18:22:51 | <c_wraith> | I told my friend about this, and she dug up her (paper!) copy of the C99 spec, and was like "yep, it says 'shall'". Which is the C99 way of saying "any program that doesn't do this is out of spec". |
| 18:23:12 | × | yeitrafferin quits (~user@2a04:4540:720f:f000:1c8b:86e5:bfad:3ed4) (Remote host closed the connection) |
| 18:24:29 | <c_wraith> | The C99 spec is remarkably circuitous about undefined behavior. It rarely says anything is. It just describes what valid programs do, and leaves it up to you to infer what it thinks of programs that do otherwise. |
| 18:24:30 | × | JeremyB99 quits (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) (Read error: Connection reset by peer) |
| 18:24:48 | <mauke> | most C programs have undefined behavior :-) |
| 18:24:56 | <c_wraith> | I'm pretty sure that's "all" |
| 18:25:00 | <mauke> | the standard just characterizes the exceptional cases that don't |
| 18:25:23 | <monochrom> | And then perhaps languages after C saw the annoyance and decided to not follow, leaving C as the oddity in hindsight. |
| 18:25:47 | <dolio> | Is `f(g(x), h(x))` undefined? Or is only the sequencing undefined? |
| 18:25:55 | <Franciman> | mauke: most haskell programs too |
| 18:25:59 | <mauke> | sequencing is unspecified* |
| 18:26:01 | <Franciman> | since there is no formal semantics |
| 18:26:10 | <c_wraith> | dolio: it's undefined if g(x) and h(x) mutate the same object. |
| 18:26:17 | <dolio> | Okay. |
| 18:26:18 | <mauke> | c_wraith: no |
| 18:26:25 | <mauke> | function calls don't overlap |
| 18:26:45 | <mauke> | either g executes first, or h |
| 18:26:51 | <c_wraith> | mauke: "If a side effect on a scalar object is unsequenced relative to either a different side effect on the |
| 18:26:51 | <c_wraith> | same scalar object or a value computation using the value of the same scalar object, the behavior |
| 18:26:51 | <c_wraith> | is undefined." |
| 18:26:56 | <c_wraith> | whoops. newlines made it in. |
| 18:27:19 | <mauke> | yes, but function bodies/calls are sequenced to each other |
| 18:27:57 | <mauke> | actually, I should check whether there is a sequence point between different arguments |
| 18:28:12 | <c_wraith> | I mean, the lack of sequence points there was the whole point of my complaint.... |
| 18:28:39 | <mauke> | IIRC there is a sequence point before each function call |
| 18:28:49 | <mauke> | or maybe in each function call, before the body is entered |
| 18:29:27 | × | anon1123 quits (~anon1123@2a02:ab88:282:b00:da3a:ddff:fe3a:947c) (Quit: ZNC 1.8.2 - https://znc.in) |
| 18:30:45 | → | anon1123 joins (~anon1123@catv-176-63-0-119.catv.fixed.vodafone.hu) |
| 18:30:55 | <monochrom> | I give students assignments like that too. I just write like "the input is a positive odd number n, the output is 3*n". I am not going to bother to add explicitly "unspecified behaviour for other inputs", eh. At most I add, just for FAQ purposes, "I only test with positive odd numbers". |
| 18:31:51 | <c_wraith> | She then dug up the same portion of the C2x draft, and was like "hey, this actually explicitly lists when it's undefined behavior, instead of just describing defined behavior" |
| 18:32:14 | → | haskellbridge joins (~haskellbr@69.135.3.34) |
| 18:32:14 | ChanServ | sets mode +v haskellbridge |
| 18:32:38 | <geekosaur> | aaaand we're back |
| 18:32:39 | <mauke> | ok, there is no sequence point between arguments, but "There is a sequence point after the evaluations of the function designator and the actual arguments but before the actual call." |
| 18:33:04 | <mauke> | (C17, 6.5.2.2/10) |
| 18:33:42 | × | sammelweis quits (~quassel@96.76.243.253) (Read error: Connection reset by peer) |
| 18:33:52 | → | sammelweis joins (~quassel@96.76.243.253) |
| 18:34:28 | <mauke> | so: int x; void f(int x, int y) {} int main(void) { f(x = 1, x = 2); } // undefined behavior |
| 18:34:40 | <c_wraith> | man, it's a lot to wrap my head around sequence points being both syntactic and temporal. |
| 18:35:08 | <mauke> | but: int x; void g(void) { x = 1; } void h(void) { x = 2; } void f(int x, int y) {} int main(void) { f(g(), h()); } // fine |
| 18:37:30 | × | Core6846 quits (~rosco@aq052236.dynamic.ppp.asahi-net.or.jp) (Remote host closed the connection) |
| 18:37:35 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 18:37:46 | → | rosco joins (~rosco@aq052236.dynamic.ppp.asahi-net.or.jp) |
| 18:37:55 | → | JeremyB99 joins (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) |
| 18:38:38 | × | JeremyB99 quits (~JeremyB99@2607:fb91:1062:10b3:b1f8:d4ff:4235:d3a9) (Read error: Connection reset by peer) |
| 18:38:45 | <c_wraith> | oddly, that quote leaves it possible for there to be UB if the function designator might be changed by evaluating arguments. And I guess you could make that happen with function pointers. I hope no one has ever encountered that specific UB. |
| 18:39:11 | <monochrom> | hahaha how did I not think of that |
| 18:39:30 | <mauke> | yes, also a[i](i++); and similar |
| 18:39:38 | <dolio> | You'd have to be doing some really evil stuff. |
| 18:39:53 | <c_wraith> | mauke: thanks for the clarification. |
| 18:41:02 | <mauke> | also, { int i = 0; return i; } technically has undefined behavior because there is no sequence point between the write and read of i :-) |
| 18:41:19 | <monochrom> | "implementing algebraic effects in C: monads for free in C" https://www.microsoft.com/en-us/research/wp-content/uploads/2017/06/algeff-in-c-tr-v2.pdf |
| 18:41:21 | <c_wraith> | ... yikes. |
| 18:41:34 | <glguy> | Also C++ and C have different evaluation orders |
| 18:41:43 | <mauke> | which I'm pretty sure is a either bug in the standard or me reading it wrong |
| 18:42:02 | <glguy> | In C++17: In a function-call expression, the expression that names the function is sequenced before every argument expression and every default argument. |
| 18:42:18 | <c_wraith> | I was under the impression a semicolon was always intended to be a sequence point. But possibly the spec misseed a case. |
| 18:42:29 | <mauke> | intended, yes |
| 18:42:47 | <glguy> | 4) There is a sequence point after the evaluation of a full expression (an expression that is not a subexpression: typically something that ends with a semicolon |
| 18:43:00 | <mauke> | right. "full expression" is the crucial thing |
| 18:43:11 | <mauke> | because normally = is an operator and thus part of the expression |
| 18:43:32 | <mauke> | but with initializers = is part of the initialization syntax and not part of the expression |
| 18:43:40 | <glguy> | 5) There is a sequence point at the end of a full declarator. |
| 18:43:49 | <mauke> | the declarator is 0 |
| 18:44:09 | <glguy> | the initializer is 0, the declarator is int i |
| 18:44:15 | <mauke> | oops |
| 18:44:25 | <mauke> | ah, not quite |
| 18:44:28 | <mauke> | the declarator is i |
| 18:44:42 | <mauke> | "declarator" is the name of the pseudo-expression that follows the typey names in declarations |
| 18:45:10 | <mauke> | the idea being that with VLAs you could have something like int a[f()]; IIRC |
| 18:46:04 | <c_wraith> | ... too much astronomy. VL is variable-length, not very large. |
| 18:46:04 | <mauke> | so: we have a sequence point after `i` (which is pointless) and a sequence point after `0` (also pointless), but nothing after the implied write that happens during initialization |
| 18:47:59 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 18:48:11 | → | JeremyB99 joins (~JeremyB99@208.64.173.20) |
| 18:49:13 | <glguy> | mauke: the standard does have a paragraph: A statement specifies an action to be performed. Except as indicated, statements are executed in sequence. |
| 18:49:34 | <mauke> | declarations aren't statements (at least not in C99) |
| 18:52:46 | × | zetef quits (~quassel@5.2.182.99) (Remote host closed the connection) |
| 18:54:01 | → | raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) |
| 18:59:40 | × | euleritian quits (~euleritia@dynamic-176-004-212-165.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
| 19:00:28 | <glguy> | mauke: how about this: https://en.cppreference.com/w/c/language/statements#Compound_statements The initializers of the variables with automatic storage duration declared inside a block and the VLA declarators are executed when flow of control passes over these declarations in order, as if they were statements: |
| 19:00:52 | <glguy> | I still need to tie that back to the standard document, but I think we're closer |
| 19:01:06 | × | tessier quits (~treed@ec2-184-72-149-67.compute-1.amazonaws.com) (Remote host closed the connection) |
| 19:02:10 | <mauke> | yes, that's part of the problem |
| 19:02:29 | <mauke> | variable initializers are executed like statements, but without the sequence point at the end that comes with normal statements |
| 19:02:53 | <glguy> | If they were executed "as if they were statements" then that gets us back to statements being sequenced |
| 19:03:30 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 19:06:04 | <glguy> | mauke: The following are full expressions: an initializer that is not part of a compound literal (6.7.9); ... |
| 19:06:32 | → | tessier joins (~treed@ec2-184-72-149-67.compute-1.amazonaws.com) |
| 19:07:00 | <mauke> | that's the 0 |
| 19:07:44 | <glguy> | OK, so you're saying that the assignment of that expression's value to i is not sufficiently sequenced |
| 19:08:11 | <mauke> | yes |
| 19:08:24 | → | peterbecich joins (~Thunderbi@47.229.123.186) |
| 19:08:56 | <glguy> | I don't think initializers are considered assignment in the same way that actual assignment statements are |
| 19:09:06 | <glguy> | it's not being assigned to i, it's the initial value of it |
| 19:09:38 | <mauke> | that part is weird, too |
| 19:10:04 | <mauke> | because for automatic variables, storage is reserved when their block is entered |
| 19:10:24 | <mauke> | but IIRC their value stays indeterminate until execution reaches the initialization |
| 19:14:11 | × | mechap quits (~mechap@user/mechap) (Quit: WeeChat 4.2.2) |
| 19:15:03 | × | lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 19:18:27 | <EvanR> | masaeedu, yeah I figured |
| 19:18:41 | <EvanR> | modulo "implementations that any of us have used" |
| 19:19:09 | <EvanR> | holy crap so much C rabbit holing |
| 19:20:20 | → | qhong joins (~qhong@DN160vrd000d6kpg009l6c0000fj.stanford.edu) |
| 19:20:31 | <c_wraith> | this is how I know anyone who says "C is simple" doesn't know C |
| 19:22:19 | ← | woffs parts (3cd46299b2@woffs.de) () |
| 19:22:37 | → | target_i joins (~target_i@user/target-i/x-6023099) |
| 19:24:23 | <EvanR> | moral, more or less self consistent C as gradually dreamed up while taking university courses "is simple" xD |
| 19:25:05 | × | segfaultfizzbuzz quits (~segfaultf@12.172.217.142) (Ping timeout: 268 seconds) |
| 19:26:04 | <mauke> | fun C fact: all keywords at the start of a declaration can be permuted arbitrarily; their order doesn't matter |
| 19:26:58 | × | ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 19:27:23 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 19:27:40 | <mauke> | so why declare a `const unsigned long int` when you can also declare an `int unsigned const long`? |
| 19:31:47 | × | peterbecich quits (~Thunderbi@47.229.123.186) (Ping timeout: 264 seconds) |
| 19:31:57 | × | xdminsy quits (~xdminsy@117.147.70.203) (Ping timeout: 272 seconds) |
| 19:35:26 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 19:36:45 | <EvanR> | what in the world |
| 19:37:15 | <EvanR> | int long unsigned const |
| 19:38:25 | <geekosaur> | a C of keywords |
| 19:39:07 | <janus> | but that can't be since 'const int*' is not the same as 'int const *' |
| 19:39:58 | <ncf> | it is; but that's not the same as int * const |
| 19:40:00 | <EvanR> | * being technically not a keyword |
| 19:40:01 | <masaeedu> | the closest i've come to having a systematic way of parsing c declarations is the spiral rule |
| 19:40:25 | <masaeedu> | but apparently even that only works in happy circumstances |
| 19:41:02 | <janus> | ok so i can only swap keywords if i don't go past a *? |
| 19:41:54 | <EvanR> | this one weird trick your coworkers will hate |
| 19:42:30 | <meejah> | const int * is a different type than int * const |
| 19:42:48 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds) |
| 19:42:56 | <meejah> | IIRC ... been a while ;) |
| 19:42:57 | <masaeedu> | however happy a circumstance one might consider `void (*signal(int, void (*fp)(int)))(int);` to be |
| 19:43:24 | → | euleritian joins (~euleritia@dynamic-176-004-212-165.176.4.pool.telefonica.de) |
| 19:43:41 | → | waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
| 19:49:12 | <dolio> | Is `int * const` the one where the pointer is constant? |
| 19:50:14 | <tomsmeding> | dolio: correct |
| 19:54:06 | <dolio> | I guess it probably wouldn't be surprising if people who say, "C is simple," have never actually written a C program. :) |
| 19:54:12 | <dolio> | Like, a well defined one. |
| 19:55:03 | × | euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 19:56:23 | <janus> | if you consider that almost every other language boils down to C its RTS or such, isn't C simpler then? i mean, to understand the GHC RTS you need to know both haskell and C |
| 19:56:56 | → | segfaultfizzbuzz joins (~segfaultf@12.172.217.142) |
| 19:57:20 | <geekosaur> | only if you need to understand the details of its implementation. if it provides a well defined API and hides the C RTS API, you need only understand the exported API |
| 19:57:26 | <geekosaur> | (at least until you start doing FFI) |
| 19:58:18 | <sprout> | janus: you don't need to understand C, you need to understand a Von Neumann architecture |
| 19:58:44 | <sprout> | and the most popular manner of programming against a Von Neumann architecture is C |
| 19:58:51 | <dolio> | It wouldn't be surprising if every RTS is not a C program. :) |
| 19:58:56 | <janus> | sprout: i need the VonNeumann understanding to understand the K&R book? or do debug a PDP-11? or to debug the GHC RTS? |
| 19:59:10 | <janus> | i can see why someone who read the K&R book would say C is simple |
| 19:59:19 | <meejah> | dolio: yeah, one is "the pointer is const" and the other is "the thing pointed at is const" |
| 19:59:28 | <janus> | if they are confronted with Visual Studio.NET and a commercial codebase right after :P |
| 19:59:38 | <janus> | and that probably happened to a lot of colleague graduates :P |
| 19:59:43 | <sprout> | you need to understand the essentials of the machine your working on |
| 19:59:47 | <dolio> | meejah: Yeah, I knew that. The trick is remembering which is which. |
| 19:59:51 | <sprout> | well, some people do |
| 19:59:53 | <janus> | microcode, that seems pretty essential |
| 20:00:00 | <janus> | good thing everybody understands that |
| 20:00:00 | <meejah> | dolio: indeed, many such "tricks" in C/C++ ;) |
| 20:00:02 | <janus> | NOT :D |
| 20:00:30 | <meejah> | you can also like "const int * const" approximately. |
| 20:00:59 | <sprout> | I don't think you can understand C without having some grasp of the machine your programming |
| 20:01:16 | <dolio> | mauke: Actually, are C programs a monoid? Probably not. You can't just concatenate two C programs and get a C program. |
| 20:01:24 | <janus> | it all boils down to the fact that C can mean a billion things |
| 20:01:49 | <janus> | and it changes every few decades, new standards come out |
| 20:02:13 | <meejah> | yeah .. and most "C" now is really like "C, but built by a C++ compiler" so certainly C++-isms sneak in |
| 20:03:16 | × | infinity0 quits (~infinity0@pwned.gg) (Remote host closed the connection) |
| 20:04:28 | × | systemfault quits (sid267009@about/typescript/member/systemfault) (Remote host closed the connection) |
| 20:04:40 | → | systemfault joins (sid267009@about/typescript/member/systemfault) |
| 20:05:20 | → | euphores joins (~SASL_euph@user/euphores) |
| 20:06:56 | × | waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 260 seconds) |
| 20:10:20 | × | stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
| 20:10:20 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 20:10:51 | → | stiell_ joins (~stiell@gateway/tor-sasl/stiell) |
| 20:11:02 | → | infinity0 joins (~infinity0@pwned.gg) |
| 20:11:10 | → | gmg joins (~user@user/gehmehgeh) |
| 20:12:57 | × | infinity0 quits (~infinity0@pwned.gg) (Remote host closed the connection) |
| 20:14:03 | → | waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
| 20:14:22 | → | Shires joins (~Shires@user/shires) |
| 20:15:03 | → | infinity0 joins (~infinity0@pwned.gg) |
| 20:15:22 | ← | Shires parts (~Shires@user/shires) () |
| 20:21:28 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection) |
| 20:28:54 | × | segfaultfizzbuzz quits (~segfaultf@12.172.217.142) (Ping timeout: 268 seconds) |
| 20:29:14 | × | noumenon quits (~noumenon@113.51-175-156.customer.lyse.net) (Read error: Connection reset by peer) |
| 20:39:47 | → | roboguy_ joins (~roboguy_@2605:a601:ac42:2600:fc17:bce5:59ef:6c46) |
| 20:42:42 | → | segfaultfizzbuzz joins (~segfaultf@12.172.217.142) |
| 20:47:32 | → | Vajb joins (~Vajb@85-76-14-24-nat.elisa-mobile.fi) |
| 20:54:51 | × | segfaultfizzbuzz quits (~segfaultf@12.172.217.142) (Ping timeout: 256 seconds) |
| 20:55:48 | × | roboguy_ quits (~roboguy_@2605:a601:ac42:2600:fc17:bce5:59ef:6c46) (Quit: Leaving...) |
| 20:56:10 | → | alexherbo2 joins (~alexherbo@2a02-8440-3141-2665-793a-5dc9-a564-c4a6.rev.sfr.net) |
| 20:56:46 | → | machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net) |
| 20:56:48 | <monochrom> | The von Neumann model is pretty easy to understand, and most people already understand it, even presume it, without knowing the name. |
| 20:57:28 | <monochrom> | The same way successful merchants deeply understand "higher demand = higher price" without knowing that it has an academic name too. |
| 20:58:56 | <monochrom> | To read K&R (for example) you do need to not presume the lambda calculus, for example. |
| 20:59:20 | <sprout> | the point is that you don't really need to understand C except for as a device to instruct a Von Neumann machine |
| 20:59:26 | <sprout> | it's isn't about C |
| 20:59:39 | <sprout> | could've been Ada just as well |
| 21:01:50 | <sprout> | janus made the point that for understanding GHC you'ld need to understand C |
| 21:01:53 | <sprout> | not really |
| 21:02:06 | <sprout> | you need to be aware of what the machine roughly does |
| 21:02:10 | <monochrom> | I think that was already addressed. |
| 21:02:20 | sprout | shuts up |
| 21:05:50 | × | qqq quits (~qqq@92.43.167.61) (Quit: Lost terminal) |
| 21:06:11 | × | tri quits (~tri@ool-18bbef1a.static.optonline.net) (Remote host closed the connection) |
| 21:13:17 | → | madeleine-sydney joins (~madeleine@c-76-155-235-153.hsd1.co.comcast.net) |
| 21:14:32 | → | qqq joins (~qqq@92.43.167.61) |
| 21:15:18 | × | JeremyB99 quits (~JeremyB99@208.64.173.20) (Ping timeout: 255 seconds) |
| 21:16:17 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 21:19:35 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 21:21:37 | × | raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 255 seconds) |
| 21:29:18 | × | michalz quits (~michalz@185.246.207.215) (Quit: ZNC 1.8.2 - https://znc.in) |
| 21:31:40 | → | pavonia joins (~user@user/siracusa) |
| 21:34:00 | × | target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving) |
| 21:38:17 | → | JeremyB99 joins (~JeremyB99@208.64.173.20) |
| 21:46:00 | → | lainon joins (~lainon@2607:fb90:af24:4a15:91e7:ba33:e025:e099) |
| 21:52:47 | × | machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 264 seconds) |
| 21:59:49 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 22:04:05 | × | lainon quits (~lainon@2607:fb90:af24:4a15:91e7:ba33:e025:e099) (Quit: lainon) |
| 22:05:01 | × | chele_ quits (~chele@user/chele) (Remote host closed the connection) |
| 22:06:50 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 22:08:22 | → | Square2 joins (~Square4@user/square) |
| 22:11:23 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 264 seconds) |
| 22:11:23 | × | Square quits (~Square@user/square) (Ping timeout: 264 seconds) |
| 22:12:04 | × | madeleine-sydney quits (~madeleine@c-76-155-235-153.hsd1.co.comcast.net) (Quit: Konversation terminated!) |
| 22:30:12 | × | CATS quits (apic@brezn3.muc.ccc.de) (Ping timeout: 260 seconds) |
| 22:42:31 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 22:42:43 | → | CATS joins (apic@brezn3.muc.ccc.de) |
| 22:43:03 | × | acidjnk quits (~acidjnk@p200300d6e714dc36e896bc542a6281cf.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 22:51:31 | × | mima quits (~mmh@aftr-62-216-211-38.dynamic.mnet-online.de) (Ping timeout: 246 seconds) |
| 22:54:20 | ← | janus parts (~janus@user/janus) () |
| 23:05:30 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 23:09:49 | × | Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Ping timeout: 272 seconds) |
| 23:11:19 | → | segfaultfizzbuzz joins (~segfaultf@12.172.217.142) |
| 23:14:08 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 23:22:45 | × | YuutaW quits (~YuutaW@mail.yuuta.moe) (Ping timeout: 256 seconds) |
| 23:23:59 | → | YuutaW joins (~YuutaW@2404:f4c0:f9c3:502::100:17b7) |
| 23:26:57 | → | son0p joins (~ff@186.115.73.190) |
| 23:29:33 | × | segfaultfizzbuzz quits (~segfaultf@12.172.217.142) (Ping timeout: 256 seconds) |
| 23:31:45 | × | son0p quits (~ff@186.115.73.190) (Ping timeout: 268 seconds) |
| 23:34:59 | → | random-jellyfish joins (~developer@user/random-jellyfish) |
| 23:36:13 | × | sawilagar quits (~sawilagar@user/sawilagar) (Ping timeout: 256 seconds) |
| 23:38:45 | × | qqq quits (~qqq@92.43.167.61) (Ping timeout: 252 seconds) |
| 23:40:38 | → | qqq joins (~qqq@92.43.167.73) |
| 23:41:55 | × | alexherbo2 quits (~alexherbo@2a02-8440-3141-2665-793a-5dc9-a564-c4a6.rev.sfr.net) (Remote host closed the connection) |
| 23:45:20 | × | YuutaW quits (~YuutaW@2404:f4c0:f9c3:502::100:17b7) (Ping timeout: 260 seconds) |
| 23:46:19 | → | YuutaW joins (~YuutaW@mail.yuuta.moe) |
| 23:46:32 | → | segfaultfizzbuzz joins (~segfaultf@12.172.217.142) |
| 23:47:23 | × | motherfsck quits (~motherfsc@user/motherfsck) (Quit: quit) |
| 23:47:59 | × | qqq quits (~qqq@92.43.167.73) (Ping timeout: 264 seconds) |
| 23:48:39 | → | qqq joins (~qqq@92.43.167.61) |
| 23:55:03 | → | tri joins (~tri@2600:8805:da0e:9d00:6593:a12b:f5e0:81d0) |
| 23:59:48 | × | tri quits (~tri@2600:8805:da0e:9d00:6593:a12b:f5e0:81d0) (Ping timeout: 268 seconds) |
All times are in UTC on 2024-04-15.