Older blog entries for redi (starting at number 268)

"Well, the feature was in the language so I figured I
should use it.". It is our belief that this is not a
sufficient criteria for using a feature of C++. A feature
should be used only when it can be demonstrated to be
of benefit. A mountain is climbed "because it is there".
The same should not hold true for C++ features. Their
mere existence is not justification for use.

-- Evan Adams, The Old Man and the C
The Future of C++: Live broadcast this Friday by Herb Sutter.

If you are interested in C++, on any platform, you’ll want to tune in.
26 Oct 2012 (updated 29 May 2014 at 15:31 UTC) »
"Don't put all your information on websites you don't trust." that's Andy Smith, a very sensible govt. official on internet security, stating the obvious.

On the other hand, Helen Goodman, MP for Bishop-Auckland, is a moron.

Andy Smith, an internet security chief at the Cabinet Office, said people should only give accurate details to trusted sites such as government ones.

He said names and addresses posted on social networking sites "can be used against you" by criminals.

His advice was described by Labour MP Helen Goodman as "totally outrageous".

Ms Goodman, shadow culture minister, told BBC News: "This is the kind of behaviour that, in the end, promotes crime.

"It is exactly what we don't want. We want more security online. It's anonymity which facilitates cyber-bullying, the abuse of children."


What a fscking idiot.

Giving a fake date of birth to some e-commerce site that has no valid need for my identifying details and just wants to send me marketing mail no more promotes crime than buying a pair of tights for my wife promotes bank robbery.

(Aside: this image comes from armedrobberyadvice.com ... WTF?)

If Helen Goodman, shadow cabinet minister for talking crap about subjects she doesn't understand, has her way I'll be forced to show my passport to get a Facebook account ... oh wait, they already think they're entitled to that.

Thankfully until the day I can't open a bank account without a validated faecesbook account I can continue being a facebook-refusenik and give fake DOBs to marketers, and can call Helen Goodman MP a moron (and I don't even need the benefit of anonymity to facilitate doing that.) Moron.
25 Oct 2012 (updated 6 Feb 2013 at 10:55 UTC) »

Recently I've had time to work on some C++11 library additions for libstdc++ which had been brewing in my Git tree for months. std::forward_list meets the C++11 allocator container requirements now. std::scoped_allocator_adaptor is 99% complete now. I'm trying to provide std::this_thread::yield(), std::this_thread::sleep_*() and a high-resolution std::system_clock even when GCC isn't built with --enable-libstdcxx-time (with huge thanks to Roland McGrath for help from glibc.) I need to write tests for my implementations of std::wstring_convert and std::wbuffer_convert so I can commit them.

Some stuff I've looked at today:

Mirage, a good reason to learn OCaml.

Parallela, a supercomputer for everyone.

From a few entries down on Advogato's recentlog: the Ada Initiative is running a fundraising campaign, you should donate.

6 Sep 2012 (updated 6 Sep 2012 at 11:40 UTC) »

I hate Istanbul airport.

The GCC checkin policy requires a ChangeLog entry for each change, and that entry is usually also used as the commit message. I used to use a fairly crappy, homemade vim plugin to extract the first entry from a ChangeLog file into the editor buffer to use as the svn commit message. I decided to replace that vim plugin with a Git prepate-commit-msg hook that automatically prepares the commit message for me by extracting the first entry from each ChangeLog that is part of the commit.

As a cursory web search didn't find anything similar, I'm posting it here in case it's useful to anyone else.


$ cat .git/hooks/prepare-commit-msg
#!/bin/bash
#
# Hook script to prepare the commit log message from the first
# entry in each modified ChangeLog being committed.

set -e

[[ "$2,$3" == 'merge,' ]] && exit

tmpf=$(mktemp)
awk -f $0.awk $(git status -s | awk '/^M .*ChangeLog/{print $NF}') > $tmpf
sed 1d $1 >> $tmpf
mv $tmpf $1



$ cat .git/hooks/prepare-commit-msg.awk
# When there is more than one ChangeLog in the commit, precede
# the entry by the directory name.
FNR == 1 && ARGC > 2 {
printf "%s:\n\n", gensub("/ChangeLog$", "", "", FILENAME)
}

# Save the first line until we know if we want to print it.
FNR == 1 {
line1=$0
}

# If second line is blank there is only one patch author, omit it.
FNR == 2 && /^$/ {
}

# If second line is not blank there are multiple authors, print them.
FNR == 2 && /^./ {
print line1
print
}

# Stop processing the file at the next entry.
FNR > 3 && /^20[1-9][0-9]-[0-1][1-9]-[0-3][0-9] / {
nextfile
}

# Otherwise, just print the line.
FNR > 2 {
print
}
12 Apr 2012 (updated 12 Apr 2012 at 20:37 UTC) »

In response to repeated claims that Clang has far better diagnostics than GCC I decided to re-run some of the tests on the Clang Expressive Diagnostics page (which uses the ancient GCC 4.2 release that Apple still use) to show how much GCC has improved. The results are at Clang Diagnostics Comparison in the GCC wiki. Enjoy.

8 Feb 2012 (updated 8 Feb 2012 at 16:50 UTC) »
fzort and cdfrey, the conditional (a.k.a ternary) operator doesn't strictly require the second and third operands to have the same type, but it must be possible to convert one operand to the type of the other. In fzort's example both needed to be converted to foo*, neither can be converted to the other type, so it's ill-formed.

(There is another form allowed which doesn't require conversion, where one of the operands is a throw-expression: which ? new foo : throw "catch me". This isn't entirely useless syntactic sugar, it can be used to throw exceptions from constexpr functions, which don't allow if statements.)
12 Jan 2012 (updated 8 Feb 2012 at 22:26 UTC) »

I've finally drunk the git kool aid. I'd tried it before, but didn't inhale. Maybe I'm just feeling the effects of that cocktail of mixed metaphors but I really like it.

No more manually copying files between my home machine and my netbook (which isn't big enough or strong enough to handle a whole gcc subversion checkout, let alone the whole git repo) so I can work on the train. And I've already created about one new local branch a day in my gcc clone, so I can juggle fixes for several different PRs at once without constantly applying and reverting patches to my svn working dir.

I signed up to github so I can easily fork other people's repositories and send pull requests via the web interface, but decided to use gitorious for hosting some of my own projects. I like that gitorious itself is open source, but unfortunately ... it just doesn't work as well! I don't mind occasional weird rendering bugs on the web pages, but now I can't push/pull anything, due to an ssh error that didn't happen previously. Ho hum, I'll stick with it for a while yet. Github, on the other hand, is pretty damn slick.

6 Jan 2012 (updated 8 Jan 2012 at 17:09 UTC) »

Vim syntax highlighting for C++11 raw strings



A little over a year ago I mentioned a vim syntax file for C++0x which I was using for a while, but it only adds support for some new keywords, not new syntax such as lambda expressions and list-initialization. Last month I found cpp11.vim in the Vim online script database, which intends to support the new C++11 syntax, by replacing your existing cpp.vim entirely.

Not quite satisfied with either of those, I've started using my own cpp.vim to extend the default cpp.vim file (which is done by putting it in ~/.vim/after/syntax/cpp.vim) with syntax highlighting for the new keywords and also C++11 raw strings.

With my colour settings they look like this:
  
char raw[] = R"#(s/"\([^"]*\)"/'\1'/g)#";
which is equivalent to:
  
char yuk[] = "s/\"\\([^\"]*\\\"/'\\1'/g";
only without suffering from leaning toothpick syndrome.

The # in the example can be (almost) any sequence of zero or more characters acting as a delimiter. The example above requires a non-empty delimiter because the string contains )", which would be taken as the end of the raw string otherwise:
  
char raw[] = R"(s/"\([^"]*\)"/'\1'/g)"; // ERROR!


You could choose to use "" as the delimiter sequence, as a nod to Python
  
char raw[] = R"""(triple-quoted for great justice)""";

259 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!