--- Log opened Mon Mar 05 00:00:32 2018 |
01:10 | | Degi [Degi@Nightstar-i3ch00.dyn.telefonica.de] has quit [Connection closed] |
01:19 | | himi [sjjf@Nightstar-1drtbs.anu.edu.au] has joined #code |
01:19 | | mode/#code [+o himi] by ChanServ |
01:29 | | McMartin [mcmartin@Nightstar-rpcdbf.sntcca.sbcglobal.net] has quit [[NS] Quit: system update] |
01:31 | | McMartin [mcmartin@Nightstar-rpcdbf.sntcca.sbcglobal.net] has joined #code |
01:31 | | mode/#code [+ao McMartin McMartin] by ChanServ |
01:54 | | gnolam_ [lenin@Nightstar-ghphrt.cust.bahnhof.se] has joined #code |
01:57 | | gnolam [lenin@Nightstar-ego6cb.cust.bahnhof.se] has quit [Ping timeout: 121 seconds] |
01:59 | | gnolam_ [lenin@Nightstar-ghphrt.cust.bahnhof.se] has quit [Ping timeout: 121 seconds] |
02:00 | | gnolam [lenin@Nightstar-ego6cb.cust.bahnhof.se] has joined #code |
02:00 | | mode/#code [+o gnolam] by ChanServ |
02:09 | | macdjord|slep is now known as macdjord |
02:24 | | Reiv [NSkiwiirc@Nightstar-ih0uis.global-gateway.net.nz] has quit [[NS] Quit: http://www.kiwiirc.com/ - A hand crafted IRC client] |
02:26 | | Reiv [NSkiwiirc@Nightstar-ih0uis.global-gateway.net.nz] has joined #code |
02:26 | | mode/#code [+o Reiv] by ChanServ |
02:26 | | Reiv [NSkiwiirc@Nightstar-ih0uis.global-gateway.net.nz] has quit [[NS] Quit: http://www.kiwiirc.com/ - A hand crafted IRC client] |
02:28 | | Reiv [NSkiwiirc@Nightstar-ih0uis.global-gateway.net.nz] has joined #code |
02:28 | | mode/#code [+o Reiv] by ChanServ |
02:32 | | Pinkhair [user1@Nightstar-g7hdo5.dyn.optonline.net] has quit [Ping timeout: 121 seconds] |
02:33 | | Reiv [NSkiwiirc@Nightstar-ih0uis.global-gateway.net.nz] has quit [[NS] Quit: http://www.kiwiirc.com/ - A hand crafted IRC client] |
02:34 | | Reiv [NSkiwiirc@Nightstar-ih0uis.global-gateway.net.nz] has joined #code |
02:34 | | mode/#code [+o Reiv] by ChanServ |
02:34 | | Pink [user1@Nightstar-g7hdo5.dyn.optonline.net] has joined #code |
03:12 | | * McMartin does the unthinkable |
03:12 | | * McMartin creates a set of asm routines that actually are compatible with the chip's dominant ABI |
03:12 | <&McMartin> | shock, horror. |
03:15 | <@Reiv> | I would be more impressed, but you are at this point a Silicon Wizard |
03:15 | <&McMartin> | Oh, I'm being sarcastic here |
03:15 | <@Reiv> | I can never tell |
03:15 | <&McMartin> | Sorry, let me rephrase that |
03:15 | | * McMartin manages to not be gratuitously incompatible with all software in the entire universe |
03:16 | <@Reiv> | But if you managed to make a Tesla levitate by hacking the vibrational frequency of its cooling software, at this point, I'd be "Huh, cool, McMartin is at it again"~ |
03:17 | <&McMartin> | Basically, one of the things one does as a Responsible Chip Manufacturer is come up with a set of rules that mean that people who write compilers can all call into each other's libraries without excruciating pain and agony. |
03:17 | <&McMartin> | Intel notably didn't really do this which is why there are like twelve different ways to do this, but AMD mostly did and I think there are only two there. |
03:18 | <&McMartin> | Motorola and ARM actually expounded standards that are universally adhered to, and here I am writing Motorola code, and deciding to Not Be An Asshole About It. |
03:18 | <&McMartin> | (Not that it does me any *good* in this case because none of the tools I might want to use to talk to this code can do so unless I get more clever with obscure Unix tools I don't think anyone actually understands.) |
03:19 | <&McMartin> | And computing as a whole has gotten to a point where linking, in general, is Deep Magic |
03:19 | <&McMartin> | I've learned that it always was, but you usually knew it was part of what was happening. |
03:25 | < Mahal> | Honestly, 99.99999% of what you do is Deep Magic to me |
03:25 | < Mahal> | I'm a sysadmin, not a coder. I ain't got no clue what y'all are doing |
03:25 | <@Reiv> | I am marginally closer |
03:26 | <@Reiv> | but only a tiny bit |
03:33 | <&McMartin> | Mahal: Right, so, I mean, some of this is actually closer to your world, in terms of Making Shit Work |
03:33 | <&McMartin> | In that you've had to contend with worlds where DLLs are a thing that exist |
03:33 | < Mahal> | well, yes |
03:33 | < Mahal> | but I have to know a) that they exist b) they do things |
03:33 | <&McMartin> | And in, say, Java, or Python, or JavaScript, they really don't |
03:33 | < Mahal> | I don't usually need to care *how* |
03:34 | <&McMartin> | Yeah, and neither did the people writing in earlier languages. |
03:34 | <&McMartin> | It just worked |
03:34 | <&McMartin> | So it they didn't look at it except when it didn't |
03:34 | <&McMartin> | And it's an endless vortex of darkness, it turns out, but some people have gotten good results out~ |
03:35 | <&McMartin> | But it also ends up being a lot of why these things are called "compilers" in the first place |
03:35 | <&McMartin> | Because you were taking a bunch of separate files and producing one file that actually does the thing you wanted. |
04:13 | | Kindamoody is now known as Kindamoody[zZz] |
05:05 | | Vorntastic [Vorn@Nightstar-lv1bnu.sub-97-46-131.myvzw.com] has joined #code |
05:07 | | Pandevornium [Vorn@Nightstar-l5us1b.sub-174-211-9.myvzw.com] has joined #code |
05:08 | | Vornlicious [Vorn@Nightstar-3o301e.sub-174-210-3.myvzw.com] has quit [Ping timeout: 121 seconds] |
05:09 | | Vorntastic [Vorn@Nightstar-lv1bnu.sub-97-46-131.myvzw.com] has quit [Ping timeout: 121 seconds] |
05:11 | | Derakon is now known as Derakon[AFK] |
05:12 | | Vornicus [Vorn@Nightstar-1l3nul.res.rr.com] has quit [Ping timeout: 121 seconds] |
05:25 | | Vornicus [Vorn@Nightstar-1l3nul.res.rr.com] has joined #code |
05:25 | | mode/#code [+qo Vornicus Vornicus] by ChanServ |
06:18 | | * McMartin gets controller reads working. |
06:23 | <&McMartin> | It's kind of galling that the only system I've ever programmed where polling d-pad/joystick status actually completely works the way you'd expect is the Atari 2600. |
06:23 | <&McMartin> | The C64 almost gets there, but there's the complication where Joystick Port 1 shares space with the keyboard scanner and no software at any level can distinguish joystick actions in Port 1 from keyboard inputs. |
06:24 | <&McMartin> | (All the other ones that are digital-input use a bunch of weird strobing protocols and send data out through a smaller number of pins.) |
06:27 | <&McMartin> | Although I guess that's not too much of a surprise. There aren't actually enough pins to do full-parallel on a Genesis controller. |
06:27 | <&McMartin> | (four directions, three buttons, start button is 8; the standard D-sub-9 ports of the day needed a Vcc and GND input so there's only 7 pins left.) |
06:31 | | himi [sjjf@Nightstar-1drtbs.anu.edu.au] has quit [Ping timeout: 121 seconds] |
07:03 | | macdjord [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has quit [[NS] Quit: Live Long and Prosper.] |
07:20 | | celticminstrel [celticminst@Nightstar-gil1m1.dsl.bell.ca] has quit [[NS] Quit: And lo! The computer falls into a deep sleep, to awake again some other day!] |
07:20 | | gnolam [lenin@Nightstar-ego6cb.cust.bahnhof.se] has quit [[NS] Quit: Gone] |
07:43 | | macdjord [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has joined #code |
07:43 | | mode/#code [+o macdjord] by ChanServ |
09:00 | | mac [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has joined #code |
09:00 | | mode/#code [+o mac] by ChanServ |
09:03 | | macdjord [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has quit [Ping timeout: 121 seconds] |
09:09 | | Kindamoody[zZz] is now known as Kindamoody |
09:35 | | Degi [Degi@Nightstar-i3ch00.dyn.telefonica.de] has joined #code |
09:50 | | gnolam [quassel@Nightstar-f22.ckv.119.62.IP] has joined #code |
09:50 | | mode/#code [+o gnolam] by ChanServ |
09:53 | | Kindamoody is now known as Kindamoody|afk |
10:17 | | Degi [Degi@Nightstar-i3ch00.dyn.telefonica.de] has quit [Connection closed] |
11:25 | | gnolam [quassel@Nightstar-f22.ckv.119.62.IP] has quit [[NS] Quit: Gotemburgo] |
11:33 | | macdjord [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has joined #code |
11:33 | | mode/#code [+o macdjord] by ChanServ |
11:35 | | mac [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has quit [Ping timeout: 121 seconds] |
12:01 | | mac [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has joined #code |
12:01 | | mode/#code [+o mac] by ChanServ |
12:03 | | macdjord [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has quit [Ping timeout: 121 seconds] |
12:27 | | * TheWatcher O.Os |
12:28 | <@TheWatcher> | Egads, one of the students just told another than their commit message wasn't good enough, and pointed them at https://chris.beams.io/posts/git-commit/ |
12:28 | <@TheWatcher> | What is this strange world I'm in?! |
12:33 | < Pandevornium> | Isn't that yours |
12:34 | < Pandevornium> | And if not why did I think it was yours |
12:35 | <@TheWatcher> | It is not mine, no. |
12:36 | <@TheWatcher> | Although I have referred to it several times. |
12:37 | < Pandevornium> | I need like a course in git |
12:40 | <&ToxicFrog> | git \o/ |
12:41 | | * [R] tries to follow that |
12:41 | <&[R]> | ATM only does summaries for the commits |
12:41 | <&[R]> | Don't really want to write an essay for every commit :/ |
12:50 | < Pandevornium> | Like I maybe sort of kind of get the very basics but I keep running into trouble in ways I didn't think I should |
12:52 | <&[R]> | Such as? |
12:56 | < Pandevornium> | Like my only attempt to file a PR failed with a message about needing approval to even do that, which I told the maintainer and they were quite surprised by and couldn't figure out how to fix. Also whatever the fuck the fast forward thing means. Also submodule problems. |
12:57 | <&[R]> | RE: fast forward, are you pushing to a non-bare repository? |
12:57 | <&[R]> | IE one not made with 'git init --bare' |
13:02 | < Pandevornium> | Probably, but from a place I pulled from in the first place. |
13:03 | < Pandevornium> | And which I know no changes have been made otherwise |
13:03 | <&[R]> | Right, but it's still not a bare repository |
13:03 | < Pandevornium> | Sure |
13:03 | <&[R]> | Which means it's not going to update the working files |
13:04 | <&[R]> | Which is what it's warning you about |
13:04 | < Pandevornium> | But then... |
13:04 | < Pandevornium> | Huh? |
13:04 | <&[R]> | Which can lead to some weird behavior |
13:07 | < Pandevornium> | I am more confused than when I started I think |
13:08 | <&[R]> | Okay, so a git repo that you can actually code in has all of the files available for editing and viewing right? |
13:08 | <&[R]> | AFAIK that's called the "working set" |
13:09 | < Pandevornium> | Right okay |
13:09 | <&[R]> | When you do 'git add' 'git rm' 'git mv' and a few other commands, it stages those changes against HEAD. |
13:10 | <&[R]> | Now, when an external repository pushes new changes to that repo, HEAD changes, and thus the staged changes are no longer properly synced. |
13:10 | < Pandevornium> | Uh huh |
13:10 | <&[R]> | So basically you're changing a database that's not expecting to be changed that way |
13:11 | <&[R]> | Now a bare repo has no working set, and thus no staging, so it's perfectly fine to push to it. |
13:12 | < Pandevornium> | Aha. |
13:13 | <&[R]> | The PR thing is a github thing, not git. |
13:13 | <&[R]> | As for submodules, I've never really played with that, so can't help you there. |
14:20 | | VirusJTG [VirusJTG@Nightstar-42s.jso.104.208.IP] has quit [[NS] Quit: Leaving] |
14:27 | <&ToxicFrog> | I have! They are occasionally useful. |
14:29 | <&ToxicFrog> | Pandevornium: also, "fast forward" means "no merge necessary" -- like, if you start with commit A and make commits B and C, and someone else makes and pushes commits D and E, you can't push B and C until you resolve that, either by creating a merge commit (that combines the changes from both lines of development) or by rebasing (changing the history of your commits so that it looks like they were |
14:29 | <&ToxicFrog> | always based on E) |
14:29 | <&ToxicFrog> | If no-one else has made changes, though, you can "fast forward" the branch to point at C; no merge commit needs to be created because there's no divergent line of development that needs to be incorporated. |
14:35 | | Jessikat [Jessikat@Nightstar-sg7.equ.132.82.IP] has joined #code |
14:37 | <@Pi> | Git: Making simple things complicated since 2005. |
14:38 | | * Pi ducks. |
14:38 | <&ToxicFrog> | Pi: you're not wrong, but also, p4 and svn do the same thing while being slow as balls and sometimes randomly throwing away your work, sooooo |
14:39 | <@Pi> | ToxicFrog: I'm just a bitter that Mercurial didn't win the DVCS wars. :) |
14:39 | <&ToxicFrog> | Fair. :) I've liked what I've used of hg, with one massive caveat (no index). |
14:39 | <@TheWatcher> | TF: slow as balls, randomly throwing away your work, and made entirely of madness spiders |
14:41 | <@Pi> | ToxicFrog: I find the check-in interface of e.g. thg more useful than Git's index for selective work. |
14:41 | <@Pi> | And then hg has mq, which is basically a much better and more powerful multi-revision Git index. |
14:48 | <&ToxicFrog> | I'm not familiar with mq, I've just been using hg commit --interactive |
14:49 | <&ToxicFrog> | Which is great for "reviewing the changes before I commit them" and ok for "staging a subset of changes" but unuseful for "picking out a subset of changes and then testing them and committing them if tests pass" |
14:51 | <@Pi> | Ah, thg basically gives you a better hg commit --interactive |
14:52 | <@Pi> | And its interactive shelving gives you a good interface for the latter (temporarily moving stuff out of the actual working copy). |
14:52 | <@Pi> | The interactive shelving also integrates with mq, which is really convenient for movig hunks between changesets-in-progress. |
14:52 | <&ToxicFrog> | Like, my usual workflow in git is to open up git-cola, review and stage changes, and if they're trivial just commit them; if they're not, I stage them, stash what's left, test that, then commit and unstash and keep going. |
14:53 | <&ToxicFrog> | I know nothing of mq. |
14:53 | <&ToxicFrog> | (all of my hg usage is at work) |
14:53 | <@Pi> | Yeap. That's my git workflow too. Poor person's thg, though. :) |
14:54 | <@Pi> | (Really; I wish git had a UI with thg's utility.) |
14:54 | <@Pi> | mq is basically editable changesets you can switch between. |
14:55 | <@Pi> | Ever want the git staging area, but for a series of more than one in-progress changesets at once? That's basically mq. |
14:56 | <@Pi> | I use thg a lot more than the command line, and features like mq really shine there. |
14:57 | | * TheWatcher eyes git cola |
14:57 | <@TheWatcher> | I'll have to give that a go |
15:00 | <@Pi> | git cola is the least worst git commit tool I've found so far. |
15:00 | <@Pi> | Can recommend. |
15:00 | <@TheWatcher> | I usually just use the command line, but then I'm insane |
15:00 | | VirusJTG [VirusJTG@Nightstar-42s.jso.104.208.IP] has joined #code |
15:00 | | mode/#code [+ao VirusJTG VirusJTG] by ChanServ |
15:01 | <&ToxicFrog> | Pi: I'll have to check out thg, that sounds handy |
15:01 | <@Pi> | Can highly recommend. |
15:03 | <&ToxicFrog> | Ok, what should I be searching for? All I can find is tetrahydrogestrinone and TortoiseHg |
15:04 | <@Pi> | TortoiseHg, yeah. |
15:05 | <@Pi> | Give me a shout if you want to chat about using mq with it. :) |
15:05 | <&ToxicFrog> | Isn't Tortoise Windows-specific? |
15:05 | <@Pi> | TortoiseHg is cross-platform. |
15:06 | <&ToxicFrog> | Huh. Ok, website says it supports windows and...Nautilus, which I don't use. |
15:06 | <@Pi> | You don't need that shell extensions. |
15:06 | <@Pi> | (I never use it.) |
15:16 | < Jessikat> | I've not used anything other thackeray svn and cvs, briefly |
15:16 | < Jessikat> | Other than * |
15:17 | <&ToxicFrog> | I used perforce a lot at work and svn a lot at school and quickly grew to despise both. |
15:17 | <&ToxicFrog> | I've been quite happy with git and I think I could become as happy with hg if I used it as much. |
15:17 | < Jessikat> | SVN took me a while to learn how to branch without scratching my own face off |
15:18 | < Jessikat> | using p4merge helps |
15:26 | <@Pi> | Jessikat: I can recommend Mercurial, for sanity. |
15:29 | | * TheWatcher hates all over html and css |
15:33 | | * Vornicus helps, then offers help |
15:35 | | Jessikat` [Jessikat@Nightstar-l5nrdb.dab.02.net] has joined #code |
15:38 | | Vorntastic [Vorn@Nightstar-q8lg79.sub-97-33-192.myvzw.com] has joined #code |
15:38 | | Vorntastic [Vorn@Nightstar-q8lg79.sub-97-33-192.myvzw.com] has quit [[NS] Quit: Bye] |
15:38 | | Vorntastic [Vorn@Nightstar-1l3nul.res.rr.com] has joined #code |
15:39 | | Jessikat [Jessikat@Nightstar-sg7.equ.132.82.IP] has quit [Ping timeout: 121 seconds] |
15:40 | | Pandevornium [Vorn@Nightstar-l5us1b.sub-174-211-9.myvzw.com] has quit [Ping timeout: 121 seconds] |
15:50 | <&ToxicFrog> | I thnink svn branches would be a lot less awful if they were fully reified rather than being a bunch of gruesome UI hacks on top of "just copy the entire thing to another directory". |
15:53 | < Jessikat`> | Maybe I already went insane |
15:54 | <~Vornicus> | Is there a common term for when you don't fully update your main canvas while rendering - like Windows Solitaire's victory screen or FF7's battle transition |
15:57 | | macdjord [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has joined #code |
15:57 | | mode/#code [+o macdjord] by ChanServ |
15:59 | | mac [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has quit [Ping timeout: 121 seconds] |
16:00 | <@Pi> | Overdraw, maybe? |
16:02 | | * Vornicus gets lips, archery, banking... |
16:02 | <~Vornicus> | ...the other direction entirely, where parts of the canvas get rendered onto multiple times before final presentation... |
16:08 | | mac [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has joined #code |
16:08 | | mode/#code [+o mac] by ChanServ |
16:10 | | macdjord [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has quit [Ping timeout: 121 seconds] |
16:16 | | macdjord|slep [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has joined #code |
16:16 | | mode/#code [+o macdjord|slep] by ChanServ |
16:18 | <&[R]> | ToxicFrog: Given that SVN is supposed CVS hacked to be less worse... |
16:19 | <&[R]> | Vornicus: dirty rectangles |
16:19 | | mac [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has quit [Ping timeout: 121 seconds] |
16:49 | <&McMartin> | https://github.com/sferik/active_emoji |
16:50 | <&McMartin> | Vornicus: Almost nothing is actually single-buffered these days so that trick has to be carefully faked with full redraws. :( |
16:50 | <~Vornicus> | I remember seeing something try it with double buffered stuff and it was seizure-inducing |
16:51 | <~Vornicus> | Also: wat |
16:55 | < Jessikat`> | Vornicus: dirty rectangles |
16:55 | < Jessikat`> | Perhaps? |
16:55 | <&McMartin> | Dirty rectangles is when you're using it as an optimization |
16:56 | <&McMartin> | Vorn is asking about an animation technique where you deliberately "fail" to update previous frames to produce contrails as objects move |
16:56 | < Jessikat`> | Ah |
16:56 | < Jessikat`> | Hall of mirrors style |
16:56 | | Jessikat` is now known as Jessikat |
16:56 | < Jessikat> | ? |
16:57 | <~Vornicus> | cf Windows Solitaire and FF7 |
16:57 | <&McMartin> | https://www.youtube.com/watch?v=_hNwHdzRKXE |
17:03 | <&McMartin> | (the solitaire anim) |
17:42 | | Reiv [NSkiwiirc@Nightstar-ih0uis.global-gateway.net.nz] has quit [[NS] Quit: http://www.kiwiirc.com/ - A hand crafted IRC client] |
17:45 | | Reiv [NSkiwiirc@Nightstar-ih0uis.global-gateway.net.nz] has joined #code |
17:45 | | mode/#code [+o Reiv] by ChanServ |
17:59 | | Emmy [Emmy@Nightstar-9p7hb1.direct-adsl.nl] has joined #code |
18:14 | <&jeroud> | So, I've been bouncing between Elixir and Go for various things recently. |
18:16 | <&jeroud> | Both are renowned for their concurrency support. |
18:17 | <&jeroud> | I find one of them very welcoming and the other extremely hostile. |
18:17 | <&McMartin> | I can't find the quote any more, but I remember Clojure (also renowned for its concurrency support) putting Erlang and Elixir on a level above mere concurrency. |
18:18 | <&jeroud> | Erlang and Elixir consider concurrency more or less a solved problem. |
18:20 | <&jeroud> | Because they do away with (local) mutable state entirely and have built-in implementations of high level generic abstractions that satisfy most common use cases and can trivially be composed into large and complex systems. |
18:21 | <&McMartin> | Yep. Sounds right. |
18:22 | <&McMartin> | Aha, found the quote, now that I'm being more systematic about hunting for it |
18:22 | <&McMartin> | https://clojure.org/about/state#actors |
18:23 | <&McMartin> | It sounds like you're in a position where you can actually evaluate this aspect of Clojure's rationale. |
18:25 | <&jeroud> | My answer is "look at GenServer" (or the Erlang equivalent "gen_server", but Elixir has better docs). |
18:27 | <&jeroud> | GenServer.call(message)is easy to treat as if it were a method call, and easy to implement as if it were a method. |
18:29 | <&jeroud> | Where message is usually a tuple of the form {:some_kind_of_name, arg, arg2}. |
18:30 | <&jeroud> | The GenServer machinery handles the receive loop and dispatch and all that. |
18:31 | <&jeroud> | The callback you implement is def handle_call({:thing, arg}, from, state) and you must return a tuple of {:reply, response, new_state}. |
18:32 | | mac [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has joined #code |
18:32 | | mode/#code [+o mac] by ChanServ |
18:32 | <&jeroud> | So no, you don't need to muck about in the low-level blocking receive loop or whatever. |
18:33 | <&McMartin> | I am actually genuinely unsure which of these I would find an easier abstraction to work with. |
18:35 | | macdjord|slep [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has quit [Ping timeout: 121 seconds] |
18:36 | <&jeroud> | If you have an afternoon, run through the Elixir getting started guide (for syntax and general language stuff), then the otp/application/whatever guide that runs through Babby's First KV Store with a couple of the concurrency abstractions. |
18:36 | <&McMartin> | The next afternoon like that I have is actually reserved for doing that with Vulkan >_> |
18:37 | <&jeroud> | FWIW, I completely agree with Clojure's rationale *given the JVM*. |
18:38 | <&jeroud> | Erlang/Elixir can make it work because the whole runtime system is designed from the ground up around cheap processes and immutable state. |
18:39 | <&jeroud> | The JVM with expensive OS threads and mutable shared memory everywhere is a really poor fit for this. |
18:40 | <&jeroud> | You can do it, but you're fighting the runtime the whole way and you lose clean interop with other JVM stuff. |
18:42 | <&jeroud> | Anyway, it's worth noting that Erlang got superb concurrency as a happy consequence of designing a language for fault tolerance. |
18:43 | <&McMartin> | The legend I was told was that Erlang was designed after an entire phone network went down because some programmer thought break; let you leave if statments. |
18:43 | <&jeroud> | Or rather, this sort of concurrency model is the best way they found to achieve the kind of failure isolation they needed. |
18:43 | <&jeroud> | I can believe the general thrust of that. |
18:44 | <&jeroud> | Which is "a failure here should not, by default, affect a working part of the system over there". |
18:46 | | * McMartin also looks at the history of the language, adds another item to the list of suddenly relevant technologies introduced in the mid-1980s |
18:46 | <&jeroud> | The processes are there so you can have independent things crash and be restarted by supervisors and not touch unrelated execution flows. |
18:47 | <&jeroud> | Ericsson's nine nines SLA is Not A Joke. |
18:47 | <&jeroud> | I think Erlang would have been significantly more mainstream if not for the syntax. |
18:48 | <&jeroud> | The fact that it looks a lot like Prolog is due to the first implementation being essentially a Prolog DSL. |
18:49 | | * McMartin looks at some sample implementations of low-level processes |
18:49 | <&McMartin> | ... a lot of that Go code I wrote looks a lot like this, actually. |
18:49 | <&McMartin> | I have a whole bunch of coroutines that are nothing but switches on channel receives or selects. |
18:51 | <&jeroud> | The major difference is that in Go all your code looks like that. In Erlang/Elixir you abstract all that away into GenServers and Supervisors and such. |
18:52 | <&jeroud> | I think the Elixir codebase I've spent the past month or so building has maybe two or three receive calls in it. |
18:53 | <&McMartin> | "Most of the metrics reaffirm things we have learned in prior years. Go programmers still overwhelmingly prefer Go. As more time passes Go users are deepening their experience in Go. While Go has increased its lead among Go developers, the order of language rankings remains quite consistent with last year." |
18:54 | <&McMartin> | Buildin' a bubble |
18:54 | <&jeroud> | And those are only necessary because I want to block things that are usually non-blocking so that I can avoid annoying asynchrony in tests. |
18:56 | <&jeroud> | The really frustrating thing about Go is that with a couple of fairly minor conceptual changes it could be orders of magnitude better. |
18:56 | <&jeroud> | Proper generics and some kind of hygienic macro system would get rid of vast swathes of buggy boilerplate. |
18:57 | <&jeroud> | You can even keep the mutable state if you want! |
18:59 | <&jeroud> | I watched a conference talk about "advanced concurrency" linked from the Go blog this morning. |
19:01 | <&jeroud> | The whole thing was basically "here's the naïve implementation, now let's find and handle all the subtle bugs in it". |
19:01 | <&ToxicFrog> | jeroud: belatedly, there is (and has been for a while now) a clojure library for "Erlang-style" actors-and-messages concurrency, core.async, which I quite like. |
19:01 | <&ToxicFrog> | (there is even some support for distributed actors using it, e.g. there's a library that lets you run a core.async channel over a websocket) |
19:02 | <&ToxicFrog> | (when I finally get around to working on wspellcast again it's probably going to use that) |
19:02 | <&jeroud> | The de facto concurrency mechanism in Scala is Akka, which is also an actor system. |
19:03 | <&jeroud> | I found Akka *way* too heavyweight, but Erlang was my baseline. |
19:03 | <&ToxicFrog> | I've used Akka but remember nothing about it. |
19:04 | <&jeroud> | Akka is very... Javaland. |
19:05 | <&jeroud> | I have no doubt that it needs to be that way because JVM, but it makes me feel like I'm building cathedrals everywhere. |
19:06 | <&ToxicFrog> | (clojure also has Agents, which I have never used and know almost nothing about) |
19:06 | <&jeroud> | Whereas Elixir makes me feel like I'm building little lightweight components that when I put them all together have magically turned into an aircraft carrier. |
19:06 | <&McMartin> | (My vague understanding is that they aren't related to the stuff we describe here) |
19:08 | <&jeroud> | Anyway, I was originally comparing Elixir and Go. My conclusion is that the fundamental productivity-limiting difference between them is the ability to build abstractions. |
19:09 | <&jeroud> | Elixir makes that easy, and whole classes of problems go away as a result. |
19:09 | <&McMartin> | That comports in broad strokes with my critique of Go, albeit from a different direction |
19:10 | <&jeroud> | Go makes it difficult (and sometimes impossible), so all your meaningful code is buried under boilerplate and repetitive patterns. |
19:11 | <&jeroud> | Which direction do you come from? :-) |
19:13 | <&McMartin> | Program Analysis/Language design |
19:14 | <@Pi> | Go: For when you want your intermediate language to be your source language too. |
19:14 | | * Pi ducks. |
19:14 | <&McMartin> | Pi: I do that all the time~ |
19:14 | <&McMartin> | So my critique comes in as "this is Rob Pike throwing away all the bits of language design innovation of the past 40 years and then realizing that some of them actually bought something" |
19:14 | <&McMartin> | "And then reinventing them poorly" |
19:15 | <&jeroud> | I have very little experience with program analysis, but my language design critique comes to basically the same conclusion. |
19:16 | | * McMartin also thinks to check the TIOBE index for language buzz, snickers |
19:16 | <&jeroud> | My philosophical objections remains relevant, and have been reinforced with experience. |
19:16 | <&McMartin> | Assembly language outranks Go, Swift, and ObjC -_- |
19:19 | <&jeroud> | (Don't talk about how important docs are and then put most of the useful documentation in blog posts.) |
19:31 | | Degi [Degi@Nightstar-i3ch00.dyn.telefonica.de] has joined #code |
19:34 | <@iospace> | same |
19:34 | <@iospace> | oops |
19:57 | | Kindamoody|afk is now known as Kindamoody |
20:22 | <~Vornicus> | http://www.emojicode.org/ furthermore |
20:36 | | macdjord|slep [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has joined #code |
20:36 | | mode/#code [+o macdjord|slep] by ChanServ |
20:38 | | mac [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has quit [Ping timeout: 121 seconds] |
21:20 | <&[R]> | "Like ZeroMQ, RAET is based on the concept of queues, which it calls stacks." |
21:20 | <&McMartin> | haet |
21:27 | <&jeroud> | When I search for that, I get cloud HR software and Scandinavian geography before the thing you're referring to. |
21:27 | <&[R]> | Heh |
21:29 | | Vash [Vash@Nightstar-1l3nul.res.rr.com] has joined #code |
21:31 | | himi [sjjf@Nightstar-v37cpe.internode.on.net] has joined #code |
21:31 | | mode/#code [+o himi] by ChanServ |
21:32 | | mac [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has joined #code |
21:32 | | mode/#code [+o mac] by ChanServ |
21:33 | <&[R]> | What's interesting, is a cursory glance at the RAET documentation shows they do NOT use "stack" for that terminology, instead they use "roads, estates and yards" |
21:33 | <&[R]> | So whoever originally wrote that has zero clue about what they're talking about |
21:34 | <&jerith> | It is a saltstack thing. |
21:34 | <&[R]> | Joeseph Hall |
21:35 | | macdjord|slep [macdjord@Nightstar-a1fj2k.mc.videotron.ca] has quit [Ping timeout: 121 seconds] |
22:00 | | Vash [Vash@Nightstar-1l3nul.res.rr.com] has quit [[NS] Quit: Quit] |
22:05 | | Jessikat` [Jessikat@Nightstar-ec6m6j.dab.02.net] has joined #code |
22:08 | | Jessikat [Jessikat@Nightstar-l5nrdb.dab.02.net] has quit [Ping timeout: 121 seconds] |
22:10 | | Vornicus [Vorn@Nightstar-1l3nul.res.rr.com] has quit [Ping timeout: 121 seconds] |
22:28 | | Emmy [Emmy@Nightstar-9p7hb1.direct-adsl.nl] has quit [Connection closed] |
22:58 | | Degi [Degi@Nightstar-i3ch00.dyn.telefonica.de] has quit [Connection closed] |
--- Log closed Tue Mar 06 00:00:33 2018 |