code logs -> 2012 -> Fri, 23 Mar 2012< code.20120322.log - code.20120324.log >
--- Log opened Fri Mar 23 00:00:02 2012
--- Day changed Fri Mar 23 2012
00:00
<@himi>
You poor boy
00:00 Vash [Vash@Nightstar-cdeba41f.wlfrct.sbcglobal.net] has joined #code
00:00 mode/#code [+o Vash] by ChanServ
00:00
< Atreus>
Arch!
00:02
< maoranma>
Arch linux?
00:02
< Atreus>
I wanted to play too.
00:03
<@himi>
I've never looked at Arch, but I haven't heard anything /bad/ about them
00:03
< Atreus>
Basically it's slackware with package management.
00:03
< Atreus>
Or Gentoo with binary packages.
00:03
<@himi>
Ah
00:04
<@himi>
I always thought it was a RedHat derivative, but I guess someone out there cares enough about Slack to make it a little more likely to survive the modern world
00:04
< Atreus>
Actually Arch isn't derived from Slack.
00:04
< maoranma>
Or Hoopy with cool froods?
00:04
< Atreus>
They share a common ancestor though.
00:05
< Atreus>
Arch started as a package manager for Crux.
00:08
<@himi>
Funny how many people seem to want to run BSD without running BSD
00:08
< maoranma>
Let's see, the only things I can think off are Apophysis 7X, which allegedly should run under Wine
00:09
< maoranma>
And the Action Replay Code Manager and drivers
00:09
< maoranma>
I'm fairly certain that would require a VM
00:09
< ShellNinja>
Install Debian Unstable, and tell me how it functions with extended usage. I want to know. :P
00:09
< Atreus>
Linux has better support than BSD.
00:10
< maoranma>
Hell no, you run unstable and tell me what a bad idea it was
00:10
<@himi>
My experience has always been that Unstable is perfectly usable, aside from the occasional case where a major packaging change goes through and can cause large holdups in the update queue
00:10
<@himi>
Sid's not /dangerous/ to use as an everyday desktop OS
00:11
< Atreus>
Arch Linux testing: "Does it compile? Put it in testing." "Did anyone complain about testing breaking their system in the last month? Stick it in Core/Extra"
00:11
<@himi>
In fact, it's more usable than some of the alternatives out there
00:11
< ShellNinja>
himi: Oh, cool. Imma install that when I get a new computer, or I manage to break this installation beyond recovery.
00:12
< Atreus>
Arch Linux bug reporting: "The bug exists in upstream code. Not our problem. Make them fix it."
00:12
< maoranma>
Okay, so I have two votes Debian, one vote Arch
00:12
< Atreus>
My vote for Arch wasn't serious :
00:12
< Atreus>
I thought we were just shouting out the names of our choice distros :p
00:12
< maoranma>
Neither was my vote for Obama
00:12
< ShellNinja>
Zing.
00:13
<@himi>
Hey, at least your vote was constitutionally valid - I voted for the guy and I'm not even a US citizen
00:13 * himi shiftyeyes
00:13
< Atreus>
I voted for Gordon Brown.
00:13
< Atreus>
How do you think I feel?
00:13
<@himi>
Just don't tell the Florida election commission
00:14
< Atreus>
(Well, New Labour...)
00:14
<@himi>
Atreus: I'm assuming you're French, since you seem to Hate England(tm)?
00:14
< Atreus>
I am ENglish.
00:14
< Atreus>
We are also allowed to hate England.
00:14
<@himi>
True
00:14
< maoranma>
Heh, plain Debian is 5th and Arch is 6th
00:14
< maoranma>
According to distrowatch
00:15
< Atreus>
I used Arch Linux before it was popular~
00:15
< maoranma>
If he's french, he's rude to everyone, if he's english, he's required by law to be cross at everything
00:16
< maoranma>
Atreus: gtfo hipster
00:16
< Atreus>
By Jove will I write a mean letter about this to my local MP!
00:16
< Atreus>
"But I thought you were an anarchist and didn't believe in representative government."
00:16
<@Tamber>
"Yes, but then I grew up."
00:16
< maoranma>
Tamber: Vote plz.
00:16
< Atreus>
It's a quote from a sit com
00:16
< Atreus>
A very famous sit come.
00:16 * Atreus youtubes it >.>
00:17
< Namegduf>
I don't believe in representative government. It's like a perfectly frictionless surface.
00:17
< Namegduf>
:P
00:17
<@Tamber>
Atreus, that's why I've probably never heard it. I don't watch TV.
00:17
<@Tamber>
maoranma, on?
00:17
< maoranma>
Namegduf: You too, vote
00:17
< Namegduf>
maoranma: I do
00:17
< maoranma>
Which linux distro I install
00:17
<@Tamber>
LFS.
00:18
< Namegduf>
LFS: Because delegation just isn't your thing.
00:18
< maoranma>
That's 92nd at distrowatch XD
00:18
<@himi>
Oh, hey
00:18
<@himi>
Tom's rootn'boot
00:18 * Tamber wouldn't use it. It's possibly amusing/interesting to do once, but seems damn near impossible to actually manage as a usable setup. ??
00:19
<@himi>
LFS as anything other than an exercise in learning will devolve into gentoo or similar
00:19
<@himi>
With all the associated crap
00:19
<@himi>
I think the LFS people realise that, so they don't try
00:19
<@Tamber>
I would think it'd more devolve into a bad copy of Gentoo that stagnates after the first week or so because maintaining a system like that is Hard.
00:20
< maoranma>
Wow, with a capital H and everything?
00:20
<@Tamber>
Indeed.
00:21
<@Tamber>
Probably fine for the people who roll their own package managers in an afternoon's exercise, before going to hack on something in assembler for their day job, though.
00:21
< Namegduf>
It's not so much hard as all that
00:21
< maoranma>
haha
00:21
< Namegduf>
As irritatingly time consuming
00:21
< Namegduf>
Like I said, it's failing to delegate work out, primarily out to a package manager
00:21
< Namegduf>
I consider a distro as a thing which is there to do work for me
00:22
<@Tamber>
Well, yes; this is what the computer is for, is it not? :)
00:22
< Namegduf>
Right.
00:22
<@himi>
I think it qualifies as capital-h-Hard - you just have to look at the difficulties that Debian have had over the years, and the insane amount of quality control they've had to implement
00:22
< Namegduf>
True; the other thing the distro does is resolve all those kind of interoperability issues.
00:22
< Namegduf>
Ship compatible versions of all software and libraries.
00:22
< Namegduf>
Well.
00:22
<@himi>
Unless you cut the problem down to something manageable it's really difficult
00:22
< Namegduf>
A *competent* distro.
00:23
< Namegduf>
(This is why I don't use Gentoo or Arch, whose philosophies don't seem to revolve around doing work for me, and in the case of Gentoo whose capability to resolve issues for me is seriously in question.
00:23
< Namegduf>
They're not providing the service I'm looking for.
00:24
<@himi>
I think you can have something like Gentoo if you cut the problem down to a basic distro with basic apps (for some values of 'basic')
00:24
< Namegduf>
You can have a source-based distro with a ports-like system
00:24
<@himi>
If you want to provide the kitchen sink as well, you have an insanely difficult problem which needs to be solved on the kind of scale that Debian has implemented over the years
00:25
< Namegduf>
I do not want the featureset cutting down any more than I want my calculator to have multiplication removed so I have to build it out of additions.
00:25 * Tamber mostly uses Gentoo because source for everything (and, implicitly, development tools + headers, etc for everything.) ...which made sense back when I had time to actually tinker and write my own code. Less so when my day consists of "drag self out of bed at 6, drag self back into the house at 1800 and pass out by 2100" Feh.
00:25
< maoranma>
I should ask too, /usr; own partition or no?
00:25
<@Tamber>
maoranma, not.
00:25
< Namegduf>
Not.
00:25
<@himi>
Namegduf: if you don't guarantee that the stuff in ports will work properly, it's fairly easy
00:25
< Namegduf>
We live in a day and age where you use rescue media or a rescue partition.
00:26
< Namegduf>
himi: Yeah. I could setup something to match Gentoo in a day. :P
00:26
<@Tamber>
Namegduf, or as it's been put recently "The need for the minimal system in /bin has gone; that's what the initrd is for."
00:26
<@himi>
If you want to guarantee that it all works at some basic level you do a whole lot more work
00:26
< maoranma>
So you believe it's just entirely unnecessary?
00:26
<@Tamber>
(Or something like that.)
00:26 * Namegduf used Gentoo for a year before dumping it because it would develop a system-breaking bug once a week.
00:26
< Namegduf>
maoranma: Yes.
00:26
<@Tamber>
It's not doing that for me!
00:26
<@Tamber>
...but then, I don't have the time to update every week. :p
00:26
< maoranma>
Does it cause issues doing it on it's own partition?
00:26
<@Tamber>
So more "once an update/upgrade", than week.
00:26
<@himi>
maoranma: /home, /var and /tmp, posible /usr/local though that's not generally worth it
00:27
< Namegduf>
maoranma: No. I suggest if you're going to do that you put every other directory on its own partition, though, too.
00:27
<@himi>
/var and /tmp because they can fill up unpleasantly
00:27
<@Tamber>
maoranma, only if that partition isn't mounted automagically on boot by the initrd.
00:27
< Namegduf>
I mean if you're starting from the premise that more partitions == better
00:27
< Namegduf>
Then may as well go the whole hock
00:27
<@himi>
But /tmp is often just a tmpfs mount these days
00:27
< Namegduf>
The /var thing is a good reason. /usr/local won't do anything you don't expressly do to it; I wouldn't.
00:28
< Namegduf>
(On package managed distros it is expressly reserved for the user to install things)
00:28
< maoranma>
Hmm
00:28
< Atreus>
Personally I'd just go with ~ and /
00:28
< Namegduf>
/tmp, as they say, is tmpfs nowadays. It'd make sense if it wasn't.
00:28
<@himi>
Yeah, I normally just go with /var if I'm building a server, otherwise whatever
00:28
<@Tamber>
(Since a lot seems to rely on things in /usr now. Hence why there's a merge being discussed to bring Linux more in line with other UNIX; with everything being in /usr/, and compatibility simlinks at /bin, /sbin, /lib, etc.)
00:28
< Atreus>
There doesn't, really, seem to be a big point to putting everything on seperate partitions.
00:29
< Namegduf>
There isn't nowadays.
00:29
< Namegduf>
There used to be some, but those technical reasons don't apply to you. You would know if they did.
00:29
<@himi>
Atreus: the only reason right now is if you have something that might fill the partition
00:29
< Atreus>
If you want to mess around with different distros putting ~ and /var on different partitions can be handy.
00:29
<@himi>
Unexpectedly
00:29
< maoranma>
hmm
00:29
< Atreus>
Although /var less so.
00:29
<@himi>
Atreus: naah - too much stuff goes under /var/lib
00:30
< Namegduf>
Mixing /var across distros will break horribly
00:30
< Namegduf>
Mixing ~ *might* but will probably not.
00:30
<@himi>
Each distro really needs its own /var
00:30
< maoranma>
We'll assume I'll stick with whatever distro I have
00:30
< Namegduf>
(Different versions of applications, same settings directories)
00:30
< Atreus>
If that's really a problem, use different user names.
00:30
<@himi>
/home /should/ never be a problem - the only thing that might be problematic is setting conflicts, and apps that you install yourself
00:31
< Namegduf>
Atreus: That loses the whole reason for putting it on another partition, doesn't it?
00:31
< maoranma>
And also, assuming that I'm not going to exceed 4GB of ram, but my CPU is 64bit, should I do a 64 bit distro or just stick to a 32bit one?
00:31
< Namegduf>
It's not shared anymore.
00:31
< Namegduf>
I mean, if you want to transfer files they can mount each other.
00:31
<@himi>
maoranma: go x86_64
00:31
< Atreus>
Namegduf: Actually, the reason I suggestd it was because a lot of distros format ALL THE THINGS! automagically.
00:31
<@himi>
Always
00:31
< Namegduf>
Atreus: Name one
00:31
< Namegduf>
Preferrably a common one
00:31
< Namegduf>
Debian doesn't
00:31
< Atreus>
Ubuntu's default.
00:31
< Namegduf>
Gentoo doesn't do anything automagically
00:32
< Namegduf>
Default doesn't sound very automagic
00:32
< Atreus>
*default behavior.
00:32
<@himi>
Ubuntu by default will never overwrite a partition scheme
00:32
< Atreus>
I don't distro hop much so I don't know what the kids are into these days.
00:32
< maoranma>
himi: For deb, is that amd64?
00:32
<@himi>
It'll resize an existing one, but it doesn't overwrite it
00:32
<@Tamber>
Mint can have that effect, with their confusing layout of the partition editor. (Think you've selected manual, you've actually selected "go on, have the whole disk!" kinda thing.)
00:32
<@himi>
maoranma: yes
00:33
< maoranma>
Wow, 8 DVDs
00:33
<@Tamber>
(At least, IIRC. Bob's screwup saved me from doing that to myself. ??)
00:33
<@himi>
In the x86 world you /always/ come out ahead going 64 bit (barring an occasional weirdness here and there)
00:33
< maoranma>
Apparently they wanted to include the internet
00:33
<@Tamber>
maoranma, you only need the first one. (If that.)
00:33
<@himi>
maoranma: grab the first, do the install from the network
00:33
<@Tamber>
netinst disks!
00:33
<@himi>
You can generally get by with just the netinst image
00:34
<@himi>
And if you feel like futzing around with a tftp server and so forth, you can do it without downloading /anything/
00:34
< maoranma>
Yea, I only have DVDs though, but I suppose wasting space on a single disk is better than burning 8
00:34
<@himi>
Debian is designed with network installation in mind
00:35
< Namegduf>
For Debian, get the netinstall disk
00:35
<@himi>
Network /everything/, really
00:35
< Namegduf>
Install minimal
00:35
< Atreus>
I know in the archlinux world it's quite popular to make /var/cache/pacman a network filesystem.
00:35
< Namegduf>
And then install what you want via apt once you're running.
00:35
< Atreus>
But that's a work around a particular problem.
00:35
<@himi>
The nice thing about the netinst images is that you won't then have to go in and remove references to the install DVDs when you're done
00:35
< maoranma>
Namegduf: I think that's what I'll do
00:36
< maoranma>
I don't use most of the default software anyway, hehe
00:36
<@himi>
Debian doesn't have defaults - the base install is /really/ base
00:36
< maoranma>
Like... "here is lynx and a shell, enjoy."?
00:37
<@himi>
It doesn't even have /rsync/, possession of which is one person I know's definition of a 'real' computer
00:37
< Namegduf>
It ships with enough to boot and networking tools, a shell, a package manager, and I think an SSH server.
00:37
< Namegduf>
i.e. enough to comfortably install what you need.
00:37 * himi nods
00:37
< maoranma>
I'm assuming Deb defaults to using Gnome though?
00:37
< Namegduf>
It has no defaults.
00:37
< Atreus>
Inevitably netinstall distros always end up missing that -one- wireless driver/firmware that you need
00:37
<@himi>
You then basically say "I need to install a web server, DNS server and windows file server - apt-get install apache bind9 samba'
00:37
< Namegduf>
It does not ship with a desktop installed.
00:38
< Namegduf>
apt-get install aptitute
00:38
< Namegduf>
*aptitude
00:38
< Namegduf>
Then run aptitude
00:38
<@himi>
heh
00:38
<@Tamber>
Atreus, "netinstall the firmware you need to get that wireless card that's your only connection to the net, so you can connect to the net to netinstall the... oh"? :p
00:38
< Namegduf>
You have a psuedographical CLI package manager you can browse through and search with /whatever
00:38 * Tamber had that fairly recently.
00:38
< Atreus>
I've had worse.
00:39
< Namegduf>
Yeah, that's why Debian's netinstall is not totally minimal.
00:39
< maoranma>
Oh, so I'll need to install Gnome manually?
00:39
< Namegduf>
Yes.
00:39
<@Tamber>
(Solved now with a copy of the firmware on the pendrive that's attached to the wireless USB adapter. :)
00:39
< maoranma>
That sounds fun
00:39
< Namegduf>
Google will tell you a metapackage for the full GNOME desktop
00:39 * himi hit that with a laptop just the other month - with a bloody Intel chipset, curse you all
00:39
< Namegduf>
I remember there being one
00:39
<@himi>
gnome-desktop, I believe
00:39
< Atreus>
I've had "Boot the kernel so you can load the firmware you need to connect to the net so you can download and build a working kernel.
00:39
< Namegduf>
That sounds likely.
00:39
<@Tamber>
himi, My issue was with Ralink chipsets. ;)
00:40
< Namegduf>
Yeah, Linux tries not to be Windows
00:40
<@himi>
maoranma: you do /one/ command, and it installs everything you need
00:40
< Namegduf>
i.e. useless until drivers are installed via pendrive
00:40
<@Tamber>
[Two different ones; the latter one actually *does* work, though!]
00:40
< Namegduf>
But sometimes it can't help it
00:40
<@himi>
apt-get install gnome-desktop pulls in /everything/ the gnome-desktop needs, and sets it all up
00:40
< maoranma>
himi: Right, fun
00:40
<@himi>
You're not doing a manual install of anything
00:40
< maoranma>
As in, don't have to fiddle with for 12 hours
00:40
< Namegduf>
Yeah.
00:40
<@himi>
Magically, it will all Just Work(tm)
00:40
< Namegduf>
Debian is not a big fan of making people fiddle with shit
00:40
<@himi>
This is why Debian is The Best Distro
00:41
< Namegduf>
It is there to work for you
00:41
<@Tamber>
RT3070 will scan for, and find, wireless networks; but damned if I can get it to connect to one. RT73 scans, finds and connects just fine. (Which is good, because that's what my wireless adapter uses :)
00:41
< Atreus>
A party trick I used to pull is installing modern Arch Linux from an iso image from 2006.
00:41
< Atreus>
Despite the package manager on the iso being incompatible/unusable.
00:41
< Namegduf>
Hmm.
00:41
<@himi>
Tamber: yeah, that was my problem with one of it igwlan ones
00:41
<@Tamber>
Blech
00:41
< maoranma>
Atreus: Did that get you lots of chicks?
00:41
<@himi>
I ended up just plugging it into a wired connection
00:41
< Atreus>
s/chicks/dicks/
00:41
< Atreus>
And no.
00:41
< Namegduf>
That's usually the best thing.
00:41
<@Tamber>
Atreus, sounds like the Fun I had trying to netboot Gentoo on the Octane.
00:42
< Namegduf>
Install with wired
00:42
< Namegduf>
To get yourself firmware
00:42
< maoranma>
This netinst disk is small, is it safe to make it a USB installer?
00:42
< Namegduf>
That's a nicer thing than the pendrive approach.
00:42
<@himi>
maoranma: yes
00:42
< Atreus>
My next door neighbour back home is a Windows man. Watching him use a linux recovery CD to fix Windows is painful.
00:42
< Namegduf>
Yes, but it has been a LONG time since I did it.
00:42
< Atreus>
Because it's full of overly complicated shell scripts.
00:42
< Namegduf>
So I can't advise on the methodology needed.
00:42
<@Tamber>
Could download the stage 3, but it was so different you couldn't actually run the executables because of glibc+kernel changes.
00:42
<@himi>
unetbootin worked for me
00:42
< Atreus>
And I just want to type the thing that does exactly what needs doing >.>
00:42
< maoranma>
that's what I usually use
00:42
< maoranma>
save me a DVD anyway
00:43
< Atreus>
JUST GIVE ME A BOOTABLE KERNEL AND THE NETWORK DRIVERS TO USE IT!
00:43
<@himi>
. . . and something to pretend it's init
00:43
< Atreus>
(bash, lynx and wget would be nice too)
00:43
<@himi>
busybox!
00:43
< Namegduf>
Atreus: I think Debian lacks lynx
00:43
< Namegduf>
But probably ships with wget
00:43
< Namegduf>
apt-get install lynx
00:43
< Namegduf>
And there you go
00:43
<@himi>
Screw lynx
00:43
< Atreus>
You can use bash instead of init iirc.
00:43
<@Tamber>
lynx? You need that? You don't just parse the HTML in your head?!
00:43
<@himi>
Use links
00:43 * Tamber ducks
00:44 * maoranma tosses Tamber out a window
00:44
<@himi>
Atreus: yeah, but if you use busybox you get a whole lot more than just the shell
00:44 * Tamber is defenestrated. Deserved that.
00:44
< Atreus>
Your poor fenestrals.
00:44 * Atreus forms the society for the protest of mistreatment of fenestrata.
00:44 * Tamber likes the word 'defenestrate'
00:45
<@Tamber>
It sounds very pointy.
00:45
< maoranma>
I like fenestrata, it's good with alfredo sauce.
00:45 * himi runs lynx and it loads up the lynx.isc.org site, the first line of which says "Lynx is the text web browser."
00:45
< Atreus>
Fenestrum, iirc, is latin for window.
00:45
< maoranma>
Yea
00:45
< maoranma>
Not A
00:45
< maoranma>
THE.
00:45
< Atreus>
Defenestration was a bad 18th century pun in a European political cartoon (Prague I think).
00:45
<@himi>
No qualification, no equivocation, just "the" text web browser
00:45
< Atreus>
>.>
00:46
<@Tamber>
transfenerate!
00:46
< Atreus>
English, being English, got Prague drunk and beat them up for their lunch money and syntax.
00:47 You're now known as TheWatcher[T-2]
00:47
<@himi>
Holy crap, Lynx 2.8.1 was under development in 1998, and they're now up to 2.8.7
00:47
< Atreus>
If English as a programming language it'd be C++.
00:48
< maoranma>
I figured it's be perl.
00:48
< maoranma>
perl, I figured it'd be.
00:48
< Atreus>
Or rather, it'd be C++ with support for dynamically loading Pascal at run-time.
00:48
<@Tamber>
himi, uses the Hurd development schedule, then?
00:48
<@himi>
Atreus: I prefer to think of it more like one of the lisp variants
00:48
< maoranma>
It'd be perl, I figured.
00:48
< Atreus>
himi: Not enough parans.
00:48
<@himi>
Not all lisp variants need parentheses
00:48
<@himi>
Some of them make them up as they go along!
00:49
<@himi>
It might actually be brainfuck
00:49
<@Tamber>
Ooh, mixing all the worst bits of lisp and python? :p
00:49
< Atreus>
English can't be perl.
00:49
<@Tamber>
Atreus, too many vowels?
00:49
< Atreus>
I've never seen anyone confuse English for line noise!
00:49
<@Tamber>
hee
00:49
< maoranma>
No, it's makes too much sense.
00:49
<@TheWatcher[T-2]>
Perl makes sense
00:49
< Namegduf>
Man, English-like programming languages.
00:49
< Namegduf>
Annoy me so much.
00:49
<@Tamber>
"I before E, except after C; and wherever else we decide it doesn't go, this week"
00:50
<@himi>
No, perl probably maps to some kind of creole
00:50
< maoranma>
Namegduf: Inform 7?
00:50
< Namegduf>
maoranma: I was thinking the Ruby tricks
00:50
< maoranma>
Or that
00:50
< Namegduf>
It's like that exercise where you have the word "blue" written in red.
00:50
< Atreus>
Tamber: A bit like a badly designed and documented API?
00:50
<@himi>
Atreus: so C++?
00:50
< maoranma>
Oh hay! I get to go back to using Inform 7 in Linux!
00:50
< Namegduf>
It's hard to say what colour it is because your brain parses it as English.
00:50
<@Tamber>
Namegduf, IDENTIFICATION DIVISION. ...
00:50 * Tamber runs!
00:50
< Atreus>
rmFoo except when it's removeFoo except when it's remove_foo...
00:50
< Atreus>
himi: Full circle we have come!
00:50
< maoranma>
hurry up bittorrent!
00:51
<@himi>
But I have more respect for English than I do for C++
00:51
< Namegduf>
Similarly, when reading English-like code my English parser and language parser cross over each other.
00:51
<@Tamber>
Atreus, except when it's rmv_Foo, or delFoo, del_foo, ...
00:51
<@himi>
Namegduf: YES
00:51
< Namegduf>
It tries to read it as English when I'm trying to parse out the constructs.
00:51
< Atreus>
English built up over a long and colourful history ending with the Roman receding from Britania...
00:51
< Atreus>
C++ has no such excuse.
00:51
<@himi>
Programming languages are /not/ human languages
00:51
< Namegduf>
Yes.
00:52
< Namegduf>
The other thing like that is "foo if x else bar"
00:52
< Namegduf>
Because I parse top to bottom, left to right
00:52
< Namegduf>
And it turns out my brain's language parser is really shitty at backtracking
00:52
< Namegduf>
And has no readahead
00:52
< Atreus>
foo if x else bar is okay in a list comprehension though.
00:52
<@himi>
heh
00:52
< Atreus>
Dunno why.
00:53
<@himi>
Human languages love context
00:53
< Atreus>
Or rather foo for x in y
00:53
< Namegduf>
Atreus: I would not be able to parse it as flow control, BUT in a list comprehension it is nicely contained and I can treat the whole thing as a block in the outer flow control.
00:53
< Namegduf>
for x in y is fine.
00:53
< Namegduf>
"for" is introducing a loop ahead of time.
00:53
< Atreus>
Well, foo if else isn't flow control...
00:53
< maoranma>
cake for desserts in menu
00:53
< Atreus>
I've always thought of foo if else as being C/C++'s ? operator.
00:53
<@himi>
I have to admit, I tend to write most languages as if they're C, so I avoid that sort of crap
00:54
<&McMartin>
Atreus: It is, which is why Python was so slow to add it
00:54
< maoranma>
If I stop responding shortly, it's because my cat has lacerated me trying to get a male mosquito
00:54
< Atreus>
I've always thought of foo if else as being an operator rather than flow control.
00:54 * Atreus shrugs.
00:55
<@himi>
Distinction?
00:56
< Atreus>
This may not be an accurate model of what goes on in hardware land.
00:56
< Atreus>
But it does mean I don't have problem building a model of it in my mind.
00:56 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has quit [Connection reset by peer]
00:56
< celticminstrel>
I call it the ?: operator.
00:57
< Namegduf>
Atreus: It'd be an operator which decided which statement to run.
00:58 You're now known as TheWatcher[zZzZ]
00:58
< Atreus>
Particularly since the kind of stuff you're use foo if-else for is in an expression like "a // b + (1 if a % b>=b//2 else 0)"
00:59
<@himi>
Any flow control is just chained operators - some languages provide constructs that emulate a complex single operation with a single 'operator', but the distinction is all in the language definition not in the logic
00:59
< maoranma>
mIRC has an identifier for that, $iif
01:04 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code
01:04
< Namegduf>
himi: No.
01:05
< Namegduf>
himi: In most imperative languages, flow control is done with statements.
01:05
< Namegduf>
The "if statement", for example.
01:05
< Namegduf>
Not the "if operator".
01:05
< Atreus>
I am not sure this is a useful distinction in this case.
01:06 * gnolam waits for someone to Erlang everyone.
01:06
< Atreus>
Just because it is correct does not mean it is -useful- :p
01:06
<@himi>
But an if statement is made up of an operator and its arguments
01:06
< Namegduf>
No, it isn't.
01:06
< Namegduf>
it's made of a KEYWORD, followed by those things.
01:06
<@himi>
um
01:06
< celticminstrel>
Meh.
01:06
<@himi>
When you get down to it, you're talking about something that the machine will execute
01:06
< Namegduf>
And yeah, I guess it's like distinguishing between an operator and a constant.
01:06
< celticminstrel>
The distinction is pretty much just of terminology and convention/
01:06
< Namegduf>
No, it isn't.
01:07
< Namegduf>
They ARE terminology.
01:07
< Atreus>
I am far too hungry to pay attention to this argument.
01:07
< celticminstrel>
Thinking of flow control statements as operators doesn't seem at all inconsistent to me.
01:08
<@himi>
My point was that you get exactly the same end result whether you talk about if statements or branch operations at the machine level
01:08
< Namegduf>
I guess your emotional response completely trumps any discussion, celticminstrel.,
01:08
< celticminstrel>
...?
01:08
< Atreus>
Don't functional languages implement/present if as a function?
01:08
< Namegduf>
Some might. In THOSE, they might be operators.
01:08
<@himi>
The language is providing a construct that maps to the operators the machine uses - the distinction is a construct of the language, not a function of the logic
01:09
< Namegduf>
The machine doesn't have operators.
01:09
< Namegduf>
It has instructions.
01:09
<@himi>
They're /useful/ distinctions, because they make the language easier to work with
01:09
< celticminstrel>
I don't really think it makes sense to say something is or isn't an operator based on which language you're speaking.
01:09
< Namegduf>
They make it possible to work with.
01:10 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
01:10
<@himi>
Namegduf: define operator?
01:10
< Atreus>
Flow control doesn't exist in assembly either.
01:10
< Namegduf>
Yes it does.
01:10
< Atreus>
You just have Jump statements.
01:10
< Namegduf>
Conditional jumps are flow control.
01:10
< Atreus>
Err, not assembly.
01:10
<@himi>
I'm pretty sure we're talking at cross purposes
01:10
< Namegduf>
They're basically the most classical form of it.
01:10
< Namegduf>
We're talking about language syntax.
01:10
< Namegduf>
Language syntax is as defined by the language spec.
01:11
<@himi>
You can't have a turing-complete language without flow control
01:11
< Atreus>
Flow control is just a model of a conditional jump.
01:11
< Namegduf>
In the imperative languages being discussed, the syntax has as much a distinction between an operator and a statement as English has between a full stop and a sentence.
01:11
< Atreus>
It's a very -useful- and can't think the word model of it.
01:11
< Atreus>
But it's a model none the less.
01:12
<@himi>
Namegduf: what exactly do you mean by operator?
01:12
< Namegduf>
himi: As defined by the specification of, say, C.
01:12
< Namegduf>
Since it is one of the languages you are making your assertions about.
01:12
< Atreus>
This does not mean, however, that it's the -only- model for a conditional jump.
01:12
< Atreus>
Intuitive!
01:12
< Atreus>
That's the word I was trying to think of.
01:13
<@himi>
What's the distinction between a keyword and an operator?
01:13
< Namegduf>
Uh
01:14
< Namegduf>
"n many languages, such as C and similar environments like C++, a keyword is a reserved word which identifies a syntactic form."
01:14
< Namegduf>
That works.
01:14
< Namegduf>
A keyword is a thing which defines the syntax of the following code.
01:15
< Namegduf>
At least, the relevant keyboards are, and it is a thing they can do that operators cannot.
01:15
< Namegduf>
*keywords
01:15
< celticminstrel>
Keywords can be operators. See sizeof.
01:16
< Namegduf>
Contradicts nothing I just said.
01:16
< Namegduf>
Please don't work by rough associations, it makes reasoning hard.
01:16
< Namegduf>
Keywords and operators are overlapping sets. Keywords can do things operators can't.
01:16
<@himi>
Like what?
01:17
< Namegduf>
Like *define the syntax of the following code.
01:17
<@himi>
Why can't an operator do that?
01:17
< Namegduf>
Because the definition of an operator relevant to this conversation, the C one, as I said we were using when we asked above
01:17
< Namegduf>
Says they can't
01:18
< Namegduf>
Also because reading halfway into a syntactic form before the form is defined is stupid and painful for both the machine and a human, so it'd be silly to make it possible
01:18 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code
01:19
<@himi>
I think you'll find that my point wasn't restricted to C, it was a general point about programming languages
01:19 Attilla [Obsolete@Nightstar-76beb3a3.as43234.net] has quit [Ping timeout: 121 seconds]
01:19
< Namegduf>
There's no general definition of an operator.
01:19
< Namegduf>
So that's not possible.
01:19
<@himi>
C defines things one way, other languages ................
01:19
<@himi>
That's my /point/
01:19 Attilla [Obsolete@Nightstar-eb2a44e1.threembb.co.uk] has joined #code
01:19
< Atreus>
Operator = one that operates.
01:20
< Namegduf>
No.
01:20
< Atreus>
I haz general definition!
01:20 * Atreus ducks,
01:20
<&McMartin>
Everything is a lambda.
01:20
< Namegduf>
himi: I somehow doubt that, given you didn't say anything even vaguely on those lines above, but maybe you just failed to communicate.
01:20
<@himi>
It's up to the language definers to come up with a useful model for mapping program logic to the machine level
01:20
< Namegduf>
himi: At the machine level, it's all data interpreted as instructions.
01:20
< Namegduf>
An operator is a statement like an operator is a constant.
01:21
< Namegduf>
In that they're all just data.
01:21
<&McMartin>
The question is, "what instructions *are* those"
01:21
< Namegduf>
But it's irrelevant anyway.
01:21
<@himi>
An operator is part of a statement the same way that a keyword is part of a statement, and the only distinction to be made between them is up to the whim of the language designer
01:21
<&McMartin>
This is assuming your language bothers with statements at all, which, for example, C does not.
01:22
< Namegduf>
An operator is a part of an expression the same way that a constant is part of an expression, and the only distinction to be made between them is to the whim of the language designer.
01:22
< Namegduf>
Bo, sorry, but
01:22
< Namegduf>
Being different parts of a thing does not make two things the same
01:22
<&McMartin>
himi's statement is true and yours is not.
01:22
< Namegduf>
That doesn't make any sense at all
01:22
<&McMartin>
Here's how.
01:22
<&McMartin>
increment x 3 <-- statement
01:23
<&McMartin>
x + 3 <-- expression
01:23
<&McMartin>
add (x, 3) <-- also expression
01:23
<&McMartin>
(possibly statement, depending on language semantics)
01:23 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
01:23
<&McMartin>
A "good" compiler will notice all of these and use a single instruction if possible to do it, but it doesn't *have* to; it can turn it into load-operate-store or pure-operate-with-no-register-spilling if it wants.
01:24
< Namegduf>
His statement is only true for a very very liberal reading of "the same way".
01:24
<&McMartin>
But then you've got, say, (+3) x where (+3) is a partially applied function. Still semantically identical, and might even compile to the same thing sometimes, but when it *doesn't* it's going to look *loads* different.
01:24
< Atreus>
Come on pizza. Cook, I am hungry.
01:24
<&McMartin>
Well
01:24
< Namegduf>
Which loses any actual implication that they're the same thing.
01:25
<~Vornicus>
wait wait
01:25
<&McMartin>
The assumption here is that this *isn't* Python or Haskell.
01:25
< Namegduf>
Which was the point.
01:25
<~Vornicus>
C doesn't bother with statements?
01:25 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code
01:25
<&McMartin>
Vorn: Everything in C is either a block construct or an expression.
01:25
<~Vornicus>
Ah ah
01:25
<~Vornicus>
I thought a block construct was considered a statement
01:25
<@himi>
I'll note I was using a relatively generic notion of statement, which was coloured by being a C programmer
01:26
<&McMartin>
That's a little dodgy, when you compare it to Python's or Pascal's notions of statements.
01:26
<~Vornicus>
where Python2 has forinstance "print" being a statement?
01:26
<&McMartin>
Yes.
01:26
<@himi>
I'm /trying/ to make an argument that isn't constrained to C and C-alikes, but I'm not making it very well
01:26
<&McMartin>
The thing is, the only reason that in "x + y" you can maybe treat x and + as the same is because that + is actually a function invocation.
01:26
<&McMartin>
In, say, C, it is not.
01:27
<&McMartin>
In C++, whether it is or not requires analyzing the entire program. -_-
01:27
<&McMartin>
In Python or Haskell it *always* is.
01:27
<&McMartin>
In java whether it is or not depends on whether or not x and y are strings.
01:28
< Namegduf>
The C89 spec is unavailable
01:28
< Namegduf>
THe GNU C Manual for GCC describes them as statements
01:28
< Namegduf>
http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Statements
01:28
<@himi>
If I was at home I'd use my copy of K&R, but I'm not
01:28
< Namegduf>
But I am unsure whether that is strictly correct or not.
01:28
< Namegduf>
Oh, yeah, I have one of those.
01:29
< Namegduf>
Appendix A9: Statements
01:29
<@himi>
And this is why I was referring to statements - its coloured by the language I'm most familiar with
01:29
< Namegduf>
Anyways.
01:29
<&McMartin>
The C++ book calls things like for and switch statements
01:29
<&McMartin>
Which I guess is OK
01:29
< maoranma>
But in the event someone has a gun to our heads and we need to say if it's a statement or not, we need to know
01:30
<&McMartin>
Anyway, yes, not all languages treat arithmetic as a special form
01:30
< Namegduf>
Anyways, I am realising that this argument is silly and off the original point.
01:30
<@himi>
But in any case, I think I'm insufficiently coherent at the moment to make this argument
01:30
< Namegduf>
Yes, but we were talking about C.
01:30
< Namegduf>
I was specifically asked what I was defining as "operator" and I said "C's definition".
01:30
<&McMartin>
In C, arithmetic's a special form, more or less; no operator overloads means that there's no difference between those and keywords.
01:30
<@himi>
Namegduf: we started talking about C and '?:', but we expanded
01:30
< Namegduf>
himi: And I rejected that expansion on the grounds that there's crap all you can say generally
01:31
< Namegduf>
The languages all use their own ideas of what these things are defined as
01:31
<@himi>
. . . yes
01:32 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
01:32
<@himi>
If and ?: are the same thing, but one's a flow control keyword and one's an operator as far as C is concerned
01:32
< Namegduf>
Define "same thing".
01:32
< Namegduf>
Because I think that is a problem.
01:32
< maoranma>
c lets you shoot yourself in the foot. perl lets you die+qq%@{[++($;=(j)x+length),${+chr}=~m~([^]/[^]+)$~,o.++($a=y=1-4=dwim=r)]}s$/% for~~24
01:33
< Namegduf>
I don't understand exactly what your claim is.
01:33
<~Vornicus>
"if" and ?: are not at all the same thing
01:33
<@himi>
An if else block is functionally equivalent to ?:
01:33 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code
01:33
<~Vornicus>
Nowhere near it
01:34
< Namegduf>
No; you can put a loop in an if, not in a ?:
01:34
<&McMartin>
You can't use them in the same places, no.
01:34
< Namegduf>
Also that, yeah.
01:34
<&McMartin>
If everything really were an expression in C, they'd be the same, since ?: does short-circuit.
01:34
< Namegduf>
if in C and ?: in C are simply not the same thing.
01:34
<&McMartin>
Eh
01:35
<&McMartin>
They're different syntaxes for the same code path, at different points in evaluation.
01:35
< Namegduf>
Not in terms of functional equivalence, I mean.
01:35
<&McMartin>
Oh?
01:35
<&McMartin>
What can you do in one that you can't do in the other?
01:35
<&McMartin>
Not "what can you *express directly*", mind.
01:35
<~Vornicus>
Assuming inlining?
01:35
<&McMartin>
Not assuming inlining, that's an implementation detail.
01:35
< Namegduf>
Assuming inlining is kind of a cheat
01:35
< Namegduf>
You can include a loop inside an if.
01:35
<&McMartin>
You can do a function call in a ?: that takes relevant pointers and does a loop.
01:36
< Namegduf>
A function call is not functionally equivalnet.
01:36
< Namegduf>
*functionally equivalent
01:36
<&McMartin>
Sure it is.
01:36
<@himi>
Inside the block, but not inside the if selection
01:36
< Namegduf>
But really now you're distorting the definition of "functionally equivalent".
01:36
<&McMartin>
"Evaluates to the same thing"
01:36
<@himi>
No
01:36
< Namegduf>
McMartin: if does not evaluate to anything
01:36
< Namegduf>
McMartin: You will need to be more precise
01:36
<&McMartin>
"Performs the same computation"
01:36 eckse [eckse@Nightstar-4300ba27.dsl.sentex.ca] has joined #code
01:36 mode/#code [+o eckse] by ChanServ
01:36
<&McMartin>
As noted, the only difference is *where* in the execution it happens.
01:37
<&McMartin>
?: is legal exactly when you're in the middle of computing a value, if is legal in exactly all other cases.
01:37
< Namegduf>
Okay, in THAT sense they are functionally equivalent, yes.
01:37
< Namegduf>
And I don't really care to argue definition of "the same thing".
01:37
<&McMartin>
(See, for instance, LISP, where there is only one if form and it does double-duty)
01:38
< Namegduf>
So if you want to say they're the same thing, sure
01:39
< Namegduf>
But in terms of readability, on the original topic, syntactic forms introduced by a keyword are distinct from syntactic forms defined by an operator somewhere into the form.
01:39 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
01:39
< Namegduf>
They have different requirements for parsing- both for a machine and a human.
01:40
<&McMartin>
Human, maybe; machine, I dispute this. Both fit cleanly into the standard parser-generator templates.
01:40 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code
01:40
< Namegduf>
You need lookahead for the latter, at the least.
01:41
<&McMartin>
Depends on the rest of the grammar, but standard algebraic stuff can be done in LL(1)
01:41
< maoranma>
http://paste.pocoo.org/show/94512/
01:41
< maoranma>
Why would anyone write something like that? It's apparently some kind of chat server
01:41
<&McMartin>
Python aside, everything that's no more difficult than LALR(1) - which is enough for all of C - is roughly equivalent since that's the stock mechanic.
01:41
<&McMartin>
(Python has "whole language should be LL(1)" as a design requirement)
01:42
<&McMartin>
And in LALR(1) parser generators, ignoring ambiguity cleanup for now, that's...
01:43
<&McMartin>
expr <- expr '?' expr ':' expr
01:43
<&McMartin>
vs
01:43
<&McMartin>
expr <- 'if' expr 'then' expr 'else' expr
01:43
<&McMartin>
Or, I guess
01:43
<&McMartin>
stmt <- 'if' expr 'then' stmt 'else' stmt
01:43
<&McMartin>
if stmt and expr are different
01:44
<&McMartin>
The lookahead in a standard parser isn't to see if you're at the *beginning* of a construct, but rather if you are at the *end* of one.
01:44
<&McMartin>
(That's strictly LR, not LALR, but LALR is "LR plus stupid hacks that make it easier to do and don't disrupt anything anyone cares about, usually)
01:45
<&McMartin>
LL is for the beginning, where start-of-expression keywords make the job much easier, but that's not a *strict* requirement because as noted standard algebraic expressions can be done with LL(1)
01:45 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
01:45
<&McMartin>
That won't work with Pascal if expressions and statements have be kept separated, but fuck Pascal.
01:46
< Namegduf>
To be fair, I think if statements could be LL(0) while ?: cannot, right?
01:46
< maoranma>
Atreus: Your line noise comment made a perl programmer angry, kudos.
01:46
< Namegduf>
I'll admit both can be parsed without difficulty by any parser which can handle a decent language.
01:46
<&McMartin>
Nothing can be LL(0)
01:46
<&McMartin>
Well, almost nothing
01:46
< Namegduf>
Or a language, even.
01:47
<&McMartin>
LL(1) is "You know what the next statement will be based on one token of lookahead"
01:47
< Namegduf>
Yeah
01:47
<&McMartin>
LL(0) would be "you know what the next statement is going to be without looking at it."
01:47
< maoranma>
Which I'm rapidly discovering isn't hard to do, or this particular perl programmer is just highly abrasive.
01:47
< Namegduf>
That's true for if.
01:47
< Namegduf>
Unless you need to know in advance for else, I guess.
01:47
<&McMartin>
No, because at LL(0) you'd have to decide this before you saw the if.
01:47
< Namegduf>
So, wait.
01:47
<&McMartin>
LL(0) isn't a meaningful class.
01:47
< Namegduf>
How can expr ? expr : expr do it in one token?
01:47
< Namegduf>
It eats the ? in the token?
01:47
<&McMartin>
At the beginning, it knows it's making an expression of some kind.
01:48
< Namegduf>
Oh, I see.
01:48
<&McMartin>
Once it reaches what would be the end of an expression, it looks a token ahead, sees the "?", realizes (a) that it isn't done yet and (b) that this is therefore a conditional.
01:48
<&McMartin>
Since the usual precedence trick is to make expr + expr and expr * expr produce different nonterminals, it folds right into that framework.
01:49
< Namegduf>
Machine parsers don't give a shit about retroactively realising that things they have already parsed actually are conditional, right.
01:49
<&McMartin>
expr <- term + term; term <- primary * primary; primary <- id | constant, basically.
01:49
<~Vornicus>
My first project of 1000 lines was a programming language.
01:49
<~Vornicus>
It took ?: and ran with it.
01:49
<&McMartin>
That's also how you handle the dangling else problem
01:50
<&McMartin>
But this is also why I was deliberately ignoring it in this example, because it's all more heat than light and the proper solution is generally to use metadata in your parser generator to "cheat"
01:50
<&McMartin>
(That is, write a deliberately ambiguous grammar and hand it ambiguity resolution rules that do the right thing)
01:51 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code
01:51
<~Vornicus>
You got proper if statements by using ??
01:52
<&McMartin>
Note also that if you're not merely parsing but also doing something like turning it into a syntax tree representation, machine parsers *do* care about retroactively realizing that things they have already parsed are actually conditionals, etc, and this is one of several reasons LALR(1) is preferred for machine-generated parsers.
01:52
<&McMartin>
However, they're also total shit at error checking since you don't realize until pretty late in the game that stuff is messed up.
01:52
< Atreus>
maoranma: The things that annoy you most are the things with truth to them.
01:52
< Atreus>
In seriousness... who the fuck gets angry or upset about a joke about a programming language.
01:52
< Atreus>
It's not like I insulted your messiah.
01:53
< Namegduf>
Yes it is
01:53 * McMartin tends towards LL(k), though Parsec and its mighty parser combinators are certainly impressive.
01:53
< Atreus>
Get over yourself fictitious person.
01:53
< maoranma>
Atreus: I think you did though.
01:53
< Atreus>
http://www.youtube.com/watch?v=SYkbqzWVHZI
01:54
< Atreus>
You know the bit where he does a jig chanting "Jehova"?
01:54
< Atreus>
That's my response.
01:54
<&McMartin>
In other news, I should probably finish up that silly code generator of mine.
01:55
<&McMartin>
The parser parts are done but you can't do anything meaningful with them yet.
02:07
< maoranma>
Code generator?
02:08 * McMartin has been writing a compiler from a subset of Pascal to C64 assembly code.
02:08
<&McMartin>
Mainly as an excuse to do something of reasonable size in OCaml.
02:09
< maoranma>
Do you have a C64 to hack on?
02:09
<&McMartin>
Ssssort of.
02:09
<&McMartin>
I have VICE, and the C64 has been my 8-bit Machine Of Choice for ages.
02:10
<&McMartin>
Ophis - the 65xx assembler I wrote back in the day - appears to still see some use.
02:11
<@himi>
Why Pascal?
02:11
<&McMartin>
With only a few extensions I could probably make something that would sensibly target the NES. That lets you strip out a ton of the standard library
02:11
<&McMartin>
Pascal mainly because I'd found yacc/lex code for the parser in the public domain.
02:11
<&McMartin>
And because by restricting it I got exactly the parts I cared about abstracting.
02:12
<&McMartin>
Since the 65xx is CISC, C is actually a royal pain to compile, plus cc65 already exists.
02:12
<@himi>
Ah
02:12
<&McMartin>
(The 65xx is also very bad at memory indirection but has addressing modes that map more cleanly to non-pointer access modes)
02:13
<@himi>
I was thinking more about ML as the alternative, given the implementation language
02:13
<&McMartin>
Oh, yeah, no, that's totally not on the table here.
02:14
<&McMartin>
I mostly want a formula translator and a proper call stack here. BASIC would give me the former but not the latter.
02:14 * himi nods
02:14
< maoranma>
Okay, I now have USB installer
02:14
<&McMartin>
The C64 is also... special... since almost everything fun is done via memory-mapped I/O.
02:14
<@himi>
Given the limitations of the chip, Pascal makes more sense
02:14
< maoranma>
Guess it's time to brave linux land once some of my stuff backs up to dropbox
02:15
<&McMartin>
(The other purpose is for me to test out some of my ABI design experiments)
02:15
<&McMartin>
But one of them turns out to require an escape analysis
02:16
<~Vornicus>
I seem to remember my dad having a C compiler for C64
02:16
<&McMartin>
There were some in the day; it also had several very good LISP implementations.
02:16
<&McMartin>
And its compiled BASICs were more or less equivalent to early FORTRANs with more memory-mapped I/O.
02:17
<@himi>
I imagine there are C compilers for essentially every architecture ever built
02:17
< maoranma>
Probably
02:17
<@himi>
For values of "C" that map to something pretty broad
02:17
<&McMartin>
Yeah
02:17
<&McMartin>
It works *best* on MIPS-like machines, imo
02:17
<&McMartin>
Because the operations there map closely to C's primitives.
02:17
<&McMartin>
This is not a coincidence, really >_>
02:18
<@himi>
Why not?
02:18 * himi isn't familiar with the origins of MIPS
02:18 Attilla [Obsolete@Nightstar-eb2a44e1.threembb.co.uk] has quit [Ping timeout: 121 seconds]
02:18
<&McMartin>
Because MIPS was designed to be able to easily represent compiled code, so it introduced huge numbers of shortcuts to make the code super-pipelinable, and pipelinable in ways exploitable by compilers.
02:19
<&McMartin>
Like, it's the programmer's job to do instruction re-ordering to take advantage of data hazards; the instruction right after any branch will always be executed, *then* the branch happens.
02:19 * himi nods
02:19
<&McMartin>
Human-targeted assemblers will secretly add no-ops after every branch, but a clever compiler can find some piece of work that the branch doesn't depend on that comes before it and put it after it.
02:19
<&McMartin>
It also exploits this to get atomic return-from-interrupt without having an actual atomic return from interrupt instruction >_>
02:20
<&McMartin>
But C was already the dominant language when MIPS was designed, and it's a clear influence on the chip design.
02:20
<@himi>
Architectures designed with compilers in mind - a major step forward, that we've blithely sidestepped in our mad rush for process-related improvements
02:20
<&McMartin>
To be fair, hyperthreading is pretty boss, and VLIW is a disaster.
02:20
<&McMartin>
There's a fine line between "architectures designed with compilers in mind" and "this chip is shit but we can fix it in the compiler".
02:21
<@himi>
Yeah, VLIW turned out to be nuts
02:22
<&McMartin>
Anyway, that reminds me that one of the things that 8-bit chips make hard is anything involving pointers or memory access
02:22
<&McMartin>
Because as a rule, memory locations don't fit in registers.
02:22
<&McMartin>
So there's a chunk of RAM that's dedicated, on 65xx chips, to holding pointers, more or less, and instructions have to route through them to do indirection.
02:23
<&McMartin>
However, indirection off a known start point fits in an instruction and uses an 8-bit index, and is about twice as fast.
02:23
<&McMartin>
I had some weird ABI plans that would exploit this by keeping the current stack frame in a fixed part of memory, but this only works if you can't take the addresses of stack variables.
02:26
<@himi>
It always amazed just how many different ways of doing the same thing most ISAs expose
02:26
<&McMartin>
Now that you mention it, a brain-dead mark-and-sweep Scheme compiler would be pretty entertaining, but a lot of assembler work to make the core library.
02:26
<@himi>
I think the only one that /is/ pretty much truly orthogonal is MMIX, and that's probably because, you know, Knuth
02:27
<&McMartin>
MIPS is darn close; you might want to look into it if you haven't checked anything out about it
02:27
<&McMartin>
It's basically got load 16-bit immediate and read from memory at location [Register] + [constant index]
02:28
<&McMartin>
No form for copy - you just add your source register with the register that is always zero
02:28
<@himi>
I've seen one or two things about it, but I haven't looked in detail
02:28
<@himi>
I'll put it on the list of things to play with
02:28
<&McMartin>
It's very close to three-adderss code for registers, and two-address code for Register/Memory ops.
02:29
<@himi>
Hm
02:29
<@himi>
Wouldn't that limit you to a 16-bit stack window?
02:29
<@himi>
Not that I expect that'd be a major issue, mind
02:29
<&McMartin>
I believe that's correct.
02:30
<&McMartin>
At least for single-instruction lookup.
02:30 * himi nods
02:31
<&McMartin>
You could always load the offset into $Rx and then do ADD $Rx, $Rx, $SP; LD $Rx, $Rx, 0
02:31
<&McMartin>
Other fun things; no CALL, just Jump-And-Link; maintaining stacks of return addresses is your job
02:32
<@himi>
Hey, this /is/ RISC
02:32
<&McMartin>
(This also means leaf routines with few locals can live entirely in caller-save registers and simply Jump Indirect to the linked register at the end)
02:33
<@himi>
I assume this is a 32 register ISA?
02:33
<&McMartin>
Yeah
02:33
<&McMartin>
I may have a slight bias here - Patterson and Hennessey together represent my two alma maters
02:33
<@himi>
Bias? Never . . .
02:34
<@himi>
MIPS is pretty much dead from an actual silicon perspective, isn't it?
02:34 eckse [eckse@Nightstar-4300ba27.dsl.sentex.ca] has quit [Ping timeout: 121 seconds]
02:34
<&McMartin>
Pretty much, yeah; the only places it would be useful these days are taken by ARM.
02:35 * himi nods
02:35
<@himi>
ARM won that war a while ago, for much the same reason x86 won everywhere else
02:35 eckse [eckse@Nightstar-4300ba27.dsl.sentex.ca] has joined #code
02:35 mode/#code [+o eckse] by ChanServ
02:36
< maoranma>
Off to install debian, back when I get irssi installed
02:36
<@himi>
Good luck
02:37 maoranma [maoranma@490720.C448F4.E35DC0.B67F22] has quit [[NS] Quit: ]
02:37
<@himi>
I think the main lesson of the computer era has been this: good enough will /always/ win, in the end
02:38
<&Derakon>
Well, to the extent that the good enough shows up at least a little before the better.
02:40
<&McMartin>
ARM has, AIUI, genuine advantages as an embedded platform
02:40
<&McMartin>
And what little I've seen on ARM code did not look too awful.
02:41
<@himi>
I'm not even sure /that's/ true - x86 had better competitors around at the time they got going (for certain values of better), but they put more money into process improvements than into making a philosophically better design and they won out
02:41
<@himi>
McMartin: yeah, ARM is very definitely highly optimised for embedded
02:42
<&Derakon>
Himi: philosophically better and better in practice are different things, though.
02:42
<@himi>
That's kind of what I mean, though
02:42 eckse [eckse@Nightstar-4300ba27.dsl.sentex.ca] has quit [Connection reset by peer]
02:42
<&Derakon>
Practically nobody uses Lisp these days, for example~
02:43
<@himi>
Good enough turns out to be better in practise
02:43
<&Derakon>
Mm, you're only measuring along a fairly narrow axis, then.
02:43
<@himi>
um
02:43
<&Derakon>
I'm considering not just how "pure" the language is but how nice it is for me to implement my projects in it.
02:43
< celticminstrel>
[Mar 22@22:11:09] <McMartin> With only a few extensions I could probably make something that would sensibly target the NES. That lets you strip out a ton of the standard library
02:43
< celticminstrel>
Which standard library? Also, what's the dangling else problem, again?
02:44
<@himi>
A better restatement might be: don't try to optimise too far
02:44
<&Derakon>
Oh, well, that's certainly true. :)
02:44
<@himi>
Good enough in /all/ axes beats better in one
02:45
<&Derakon>
That works too.
02:45
<@himi>
Putting resources into making sure you're good enough everywhere beats focusing on one area
02:45
<&McMartin>
celticminstrel: NES wouldn't need anything really resembling full string handling, floating point, etc
02:45
<&Derakon>
And makes sense, too -- you hit diminishing returns on resources invested as you try to make your project as good as possible along a certain axis.
02:46
<&McMartin>
Really what you'd want for that is the ability to have records and then compile individual functions.
02:46
< celticminstrel>
I guess you mean Pascal standard library then?
02:46
<&McMartin>
Yeah
02:46
<&Derakon>
So you get much more "total quality" by investing up to the point of diminishing returns in all axes.
02:46
<@himi>
Derakon: yeah
02:46
< celticminstrel>
My other reading of it was "NES standard library" which lead to a "wait what" moment. :P
02:46
<&McMartin>
Dangling else problem: if (a) if (b) f(); else g();
02:46 eckse [eckse@Nightstar-4300ba27.dsl.sentex.ca] has joined #code
02:46 mode/#code [+o eckse] by ChanServ
02:46
<&McMartin>
Ha
02:46
<&McMartin>
Yeah, quite.
02:46
<&McMartin>
I've done some NES development, using Ophis directly.
02:46
< celticminstrel>
Ah, the problem of which if the else belongs to.
02:47
<&McMartin>
So I *have*, if not a standard library, a standard crt0.s
02:47
<@himi>
I'm eyeing Intel to get this description, mind - there are other examples, but they're the one that makes my brain hurt
02:47
<&Derakon>
McM: in what language is that?
02:47
< celticminstrel>
What's that?
02:47
<&Derakon>
CM: common runtime library.
02:47
<&McMartin>
crt0.s is a gcc-ism; it's the assembler code that runs before main() begins.
02:47
<@himi>
Derakon: that's any language with an if-else
02:47
< celticminstrel>
Ah.
02:48
<&McMartin>
".s" specifically means "assembler code" on most Unix systems.
02:48
<&McMartin>
Ophis uses .oph.
02:48 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
02:49
<&Derakon>
Himi: any language with if-else and no form of block dilineation.
02:49
<&McMartin>
and no mandatory form
02:49
<@himi>
Well, with optional block delineation
02:49
<&McMartin>
Both C and Pascal have it optionally and therefore have this problem.
02:49
<&McMartin>
I wrote it as C
02:49
<@himi>
Which seems to be pretty common
02:49 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code
02:49
<&McMartin>
In Pascal it would be if a then if b then f() else g()
02:51 Vash [Vash@Nightstar-cdeba41f.wlfrct.sbcglobal.net] has quit [[NS] Quit: I lovecraft Vorn!]
02:51
<&Derakon>
I always thought curly-less blocks in C/C++ were stupid.
02:52
<&Derakon>
You go to add a second line to your block and suddenly you have a bug.
02:52
<@himi>
Yes
02:52
<@himi>
Honestly, I think a lot of programmers (and language designers are generally programmers) like that sort of thing because it makes them seem cool knowing little tricks like that
02:53
<&McMartin>
We used to joke about a --no-l33t-features flag for C and C++
02:53
<&McMartin>
Though topping that list?
02:53
<&McMartin>
fucking %n
02:53
< celticminstrel>
What about %n?
02:54
<&McMartin>
It exists
02:54 * Derakon looks up the printf docs.
02:54
<&Derakon>
It...tells you the number of characters printed thus far in the string?
02:54
<&Derakon>
Why?
02:54
<@himi>
heh
02:54
<&McMartin>
It, um
02:54
<&Derakon>
(You pass in a pointer to a signed int, and instead of printing the pointer, it sticks the number of characters printed into the int)
02:54
<&McMartin>
Walks off the end of the varargs string and makes printf be a privilege escalation security vulnerability.
02:55
<&McMartin>
It means that any program with printf in it is a potential security hole.
02:55
<&Derakon>
Oh goody.
02:55
<&McMartin>
The name for the attack is "format string attack"
02:55
<&McMartin>
Happily, the ways of detecting it are not entirely unlike the ways of detecting SQL injection, and are at this point well-understood
02:56
<&McMartin>
Except for the part where you have to apply it to every program with a printf in it.
02:57 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
02:57
<@himi>
I'm trying to think why it just doesn't get un-implemented in any sane standard library
02:57
<@himi>
What on earth would you /use/ it for?
02:58
<&McMartin>
Measuring the lengths of printed numbers for formatting purposes? Damfino.
02:58
<&McMartin>
omg teh standardz, though, same reason gets() still gets implemented, with a BUGS marked DO NOT FUCKING USE THIS FUNCTION FUCKING EVER
02:59
<@himi>
Teh standardz should all have marked them deprecated as soon as the vulnerabilities were well understood, and taken them out a couple of versions later
02:59 Vash [Vash@Nightstar-cdeba41f.wlfrct.sbcglobal.net] has joined #code
02:59 mode/#code [+o Vash] by ChanServ
03:03 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code
03:03
<@himi>
I mean, this /is/ code that we're talking about - it's not like anyone building old code with a new compiler won't have the actual source code to hand to make fixes as necessary
03:04
<&McMartin>
Yeah
03:04
<&McMartin>
But the typical gcc approach would be to have a flag that enables/disables it. For all I know by now there is one.
03:08
<@himi>
Well, -Wall doesn't warn about %n with gcc 4.4.3
03:09
<&McMartin>
It's not that %n is bad when deliberately used
03:10
<&McMartin>
It's that user-tainted format strings can include %n in them and smash your stack.
03:10
<~Vornicus>
Can it reasonably do so? Often, strings are -- that
03:10
<&McMartin>
See what happens if you give it argv[1] as the format string.
03:11
<~Vornicus>
(I meant the warn)
03:11
<@himi>
Yeah, it warns that the format isn't a string literal
03:12
<&McMartin>
That's the attack vector, so.
03:12 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
03:12 * himi nods
03:19 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code
03:34 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
03:39 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code
03:42
< celticminstrel>
%n isn't actually part of the standard, is it?
03:43
<@ToxicFrog>
%n is C89.
03:44 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
03:46 Kindamoody[zZz] is now known as Kindamoody
03:51 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code
03:53 Vash [Vash@Nightstar-cdeba41f.wlfrct.sbcglobal.net] has quit [[NS] Quit: I lovecraft Vorn!]
03:58
< celticminstrel>
Really? Huh.
03:58
< celticminstrel>
I thought it was a GNU or POSIX or something extension.
04:01
<@ToxicFrog>
Nope!
04:01
<@ToxicFrog>
Wish my dad were still around so I could ask him WTF they were thinking.
04:05
< celticminstrel>
Why him?
04:11
<@ToxicFrog>
Because he was on the ANSI C89 standards committee.
04:15
< celticminstrel>
Whoa, really?
04:16
<@ToxicFrog>
Yep.
04:16
<@ToxicFrog>
This was pretty nice when I was learning C!
04:20
< celticminstrel>
Heh!
04:21 * celticminstrel found a copy of the C++ standard somewhere while learning the language in high school, and read through more or less the whole thing.
04:21
< celticminstrel>
(Note, by "somewhere" I mean "online".)
04:21
< celticminstrel>
I can't remember, did they finish that new C++ standard yet?
04:27
<@ToxicFrog>
Don't think so, but I haven't been paying attention
04:35 Stalker [Z@Nightstar-5aa18eaf.balk.dk] has quit [Ping timeout: 121 seconds]
04:59 Stalker [Z@Nightstar-3602cf5a.cust.comxnet.dk] has joined #code
05:14 * Derakon gets killed unexpectedly in Angband, proceeds to run some stats on the monster list to prove that the monster that killed him is overpowered.
05:15
<&Derakon>
(Monsters 50% deeper in the dungeon still don't deal more damage than it does!)
05:33
< Stalker>
You are assuming Angband is balanced?
05:34
<&Derakon>
I'm assuming it isn't gratuitously unbalanced.
05:41 eckse [eckse@Nightstar-4300ba27.dsl.sentex.ca] has quit [Client closed the connection]
05:45 Derakon is now known as Derakon[AFK]
06:10
< Rhamphoryncus>
It's balanced, but not in a normal way
06:10
< Rhamphoryncus>
There aren't "level appropriate" monsters to grind on through your exponential growth curve
06:11
< Rhamphoryncus>
Instead, it's more like a ballistic arc. You must always go forward, you only have so much time before you hit the ground
06:18 celticminstrel [celticminst@Nightstar-5d22ab1d.cable.rogers.com] has quit [[NS] Quit: Kablammo! Celticminstrel is now unavailable for comment.]
06:48 Stalker [Z@Nightstar-3602cf5a.cust.comxnet.dk] has quit [Ping timeout: 121 seconds]
07:05 himi [fow035@D741F1.243F35.CADC30.81D435] has quit [Ping timeout: 121 seconds]
08:15 Attilla [Obsolete@Nightstar-76beb3a3.as43234.net] has joined #code
08:20 Attilla [Obsolete@Nightstar-76beb3a3.as43234.net] has quit [Ping timeout: 121 seconds]
09:22 Attilla [Obsolete@Nightstar-76beb3a3.as43234.net] has joined #code
09:24 himi [fow035@Nightstar-5d05bada.internode.on.net] has joined #code
09:24 mode/#code [+o himi] by ChanServ
09:42 You're now known as TheWatcher
10:02 Kindamoody is now known as Kindamoody|out
10:08 himi [fow035@Nightstar-5d05bada.internode.on.net] has quit [Ping timeout: 121 seconds]
10:20 himi [fow035@Nightstar-5d05bada.internode.on.net] has joined #code
10:20 mode/#code [+o himi] by ChanServ
10:27 Tamber [tamber@furryhelix.co.uk] has quit [Ping timeout: 121 seconds]
10:32 Tamber [tamber@furryhelix.co.uk] has joined #code
10:32 mode/#code [+o Tamber] by ChanServ
10:44 * TheWatcher hates all over documentation
11:19 Rhamphoryncus [rhamph@Nightstar-5697f7e2.abhsia.telus.net] has quit [Client exited]
11:42 * TheWatcher dodges writing dox by bugfixing doxygen >.>
13:06 Noah [nbarr@490720.DD2C85.FBA87F.D5580D] has joined #code
13:06
< Noah>
God damn Intel
13:08
<@TheWatcher>
?
13:08
< Noah>
So, I'm finally on Debian after finding a USB tether for android that worked correctly for Linux since Cyanogen Mod's apparently doesn't
13:10
< Noah>
Now I have to figure out how to get my wireless card working properly
13:12
< Noah>
At least sound is working out of the box
13:14
< ShellNinja>
What card do you have?
13:16
< Noah>
Sec
13:16
< Noah>
03:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection (rev 02)
13:18 Stalker [Z@Nightstar-3602cf5a.cust.comxnet.dk] has joined #code
13:19
< ShellNinja>
Don't know that one.
13:19
< ShellNinja>
Might want to check out http://wiki.debian.org/WiFi
13:20
< ShellNinja>
http://wiki.debian.org/iwlwifi Might be what you need.
13:23
< Noah>
It's because the firmware isn't installed
13:30 * TheWatcher stops reading the TPS archive, applies wrist braces, actually writes docs now, really ;.;
13:35 maoranma [nbarr@490720.DD2C85.FBA87F.D5580D] has joined #code
13:35
< maoranma>
Okay, tentatively saying I have wireless working
13:35
< maoranma>
I got it working via command line last night, but it seemed if it was idle for too long it would hang upp
13:36
<@TheWatcher>
Isn't that normal for wireless?~
13:36 Noah [nbarr@490720.DD2C85.FBA87F.D5580D] has quit [Ping timeout: 121 seconds]
13:37 * maoranma tosses TheWatcher out a window
13:38
< maoranma>
Now to see if I can get the fingerprint scanner working
14:00
< maoranma>
can't seem to find the debian repo that has it in it
14:03
< maoranma>
guess I'll have to do it from source later
14:28 Attilla_ [Obsolete@7D8456.47D3C7.F84632.375BF7] has joined #code
14:29 Attilla [Obsolete@Nightstar-76beb3a3.as43234.net] has quit [Ping timeout: 121 seconds]
14:51 Attilla [Obsolete@Nightstar-76beb3a3.as43234.net] has joined #code
14:52 maoranma [nbarr@490720.DD2C85.FBA87F.D5580D] has quit [Ping timeout: 121 seconds]
14:55 Attilla_ [Obsolete@7D8456.47D3C7.F84632.375BF7] has quit [Ping timeout: 121 seconds]
15:17 Attilla_ [Obsolete@Nightstar-76beb3a3.as43234.net] has joined #code
15:17 Attilla_ [Obsolete@Nightstar-76beb3a3.as43234.net] has quit [[NS] Quit: ]
15:18 Attilla [Obsolete@Nightstar-76beb3a3.as43234.net] has quit [Ping timeout: 121 seconds]
15:39 RichyB [MyCatVerbs@Nightstar-3b2c2db2.bethere.co.uk] has joined #code
15:56 celticminstrel [celticminst@Nightstar-5d22ab1d.cable.rogers.com] has joined #code
16:01 Vash [Vash@Nightstar-cdeba41f.wlfrct.sbcglobal.net] has joined #code
16:01 mode/#code [+o Vash] by ChanServ
16:34 Vash [Vash@Nightstar-cdeba41f.wlfrct.sbcglobal.net] has quit [[NS] Quit: I lovecraft Vorn!]
16:55 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
17:00 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code
17:01 Attilla [Obsolete@Nightstar-cb7c77c5.threembb.co.uk] has joined #code
17:38 Kindamoody|out is now known as Kindamoody
18:20 Kindamoody is now known as Kindamoody[zZz]
18:55 Atreus is now known as Tarinaky
19:14 RichyB [MyCatVerbs@Nightstar-3b2c2db2.bethere.co.uk] has quit [[NS] Quit: Leaving]
19:37 maoranma [nbarr@490720.DD2C85.FBA87F.D5580D] has joined #code
20:15
< maoranma>
Okay, so I have a sorta short list of things to fix
20:17
< maoranma>
Fingerprint scanner, and I have several options, so I'll have to research on that. Gotta get the middle button scrolling working for the touchpoint. Gotta see if there's anything I can do with the 1GB readydrive thing from intel I have. See if I can do something fun with the ThinkVantage button. And Nvidia drivers, for compiz
21:07 maoranma [nbarr@490720.DD2C85.FBA87F.D5580D] has quit [[NS] Quit: Leaving]
21:07 maoranma [nbarr@490720.DD2C85.FBA87F.D5580D] has joined #code
21:13 maoranma [nbarr@490720.DD2C85.FBA87F.D5580D] has quit [Ping timeout: 121 seconds]
21:30 Stalker [Z@Nightstar-3602cf5a.cust.comxnet.dk] has quit [Ping timeout: 121 seconds]
21:55
<&McMartin>
maoranma: Aren't people using mutter these days instead of compiz?
22:02 eckse [eckse@Nightstar-4300ba27.dsl.sentex.ca] has joined #code
22:02 mode/#code [+o eckse] by ChanServ
22:11
<@Ling>
They replaced compiz with something ungoogleable?
22:11
<@Ling>
Genius.
22:12
< celticminstrel>
Mutter?
22:14
<@Ling>
Oh except they didn't
22:14
<@Ling>
Mutter is just GNOME-shit
22:18
<&McMartin>
I don't think it's actually reasonable to treat compiz as *good*~
22:21 maoranma [nbarr@490720.DD2C85.FBA87F.D5580D] has joined #code
22:32 Alek [omegaboot@Nightstar-efc8dc53.il.comcast.net] has quit [[NS] Quit: reboot. D:]
22:43 Alek [omegaboot@Nightstar-efc8dc53.il.comcast.net] has joined #code
22:43 mode/#code [+o Alek] by ChanServ
23:41
< maoranma>
got the trackpoint press to click to work on the clit mouse: echo -n 1 > /sys/devices/platform/i8042/serio1/serio2/press_to_select
23:41
<@Alek>
wat
23:49
< maoranma>
I have a TrackPoint Style Pointer -> Nub -> Nipple Mouse -> Clit Mouse on my laptop
23:49
< maoranma>
And it's the soft dome type, so if you push on it, you give it an orgasm
23:49
< maoranma>
I mean, simulate a mouse button 1 press
23:53 Derakon[AFK] is now known as Derakon
23:58
< maoranma>
http://xkcd.com/243/
--- Log closed Sat Mar 24 00:00:26 2012
code logs -> 2012 -> Fri, 23 Mar 2012< code.20120322.log - code.20120324.log >

[ Latest log file ]