Hacker News new | past | comments | ask | show | jobs | submit login

This is intriguing to me, do you know which (programming) languages tolerate this?



Python

    python3 -c "some·identifier = 0; print(some·identifier)"
C

    echo -e '#include <stdio.h>\nint main() { int some·identifier = 0; printf("%d", some·identifier); return 0; }' | gcc -x c -o temp - && ./temp
C++

    echo '#include <iostream>\nint main() { int some·identifier = 0; std::cout << some·identifier; return 0; }' | g++ -x c++ -o temp - && ./temp
Ruby

    ruby -e 'some·identifier = 0; puts some·identifier'
Javascript

    node -e 'let some·identifier = 0; console.log(some·identifier);'
Rust

    echo 'fn main() { let some·identifier = 0; println!("{}", some·identifier); }' > temp.rs && rustc temp.rs && ./temp 

Go throw an invalid character U+00B7 '·' in identifier

Java throw error: illegal character: '\u00b7'

C# is really annoyed with it apparently:

    echo 'using System; class Program { static void Main() { int some·identifier = 0; Console.WriteLine(some·identifier); } }' > Program.cs && mcs Program.cs && mono Program.exe

Program.cs(1,60): error CS1056: Unexpected character `·' Program.cs(1,60): error CS1525: Unexpected symbol `identifier', expecting `,', `;', or `=' Program.cs(1,99): error CS1056: Unexpected character `·' Program.cs(1,99): error CS1525: Unexpected symbol `identifier'

That’s it for the top in TIOB index I tested in the frame of this message.


Thank you very much for testing it! I'm plugging away on Advent of Code 2015 in C, I'll give this a go to see if I like it


The reason this works in Rust is that Rust follows Unicode's categorization of which code points are useful as identifiers: https://www.unicode.org/reports/tr31/

MIDDLE DOT is Other_ID_Continue

I know less about the other languages but it wouldn't surprise me if they did similar things.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: