Rust: ๋น„ ASCII ์‹๋ณ„์ž์— ๋Œ€ํ•œ ์ถ”์  ๋ฌธ์ œ(๊ธฐ๋Šฅ "non_ascii_idents")

์— ๋งŒ๋“  2015๋…„ 10์›” 12์ผ  ยท  54์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: rust-lang/rust

๋น„ ASCII ์‹๋ณ„์ž๋Š” ํ˜„์žฌ ๊ธฐ๋Šฅ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์˜ ์ฒ˜๋ฆฌ๋Š” ์ˆ˜์ •๋˜์–ด์•ผ ํ•˜๊ณ  ๊ธฐ๋Šฅ ๊ฒŒ์ดํŠธ๋Š” ์ œ๊ฑฐ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

B-unstable C-tracking-issue P-low T-lang

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๊ฒƒ์ด ์ด๊ฒƒ์„ ๊ฒŒ์‹œํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ์žฅ์†Œ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ, ์ˆ˜ํ•™ ๊ธฐํ˜ธ์˜ ๋ณดํ’€๊ณผ ํ•จ๊ป˜ ๋ช‡ ๊ฐ€์ง€ ํฅ๋ฏธ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ž‘์„ฑํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ”ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ ๋ฐฉ์ •์‹๊ณผ์˜ ๋” ๋‚˜์€ ์ƒ๊ด€ ๊ด€๊ณ„๊ฐ€ ๋ชฉํ‘œ์ธ ๊ฒฝ์šฐ ์ค‘์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ์Šคํฌ๋ฆฐ์ƒท์—์„œ ฮ”(๋Œ€๋ฌธ์ž) ๋Œ€ ฮด(์†Œ๋ฌธ์ž)์ž…๋‹ˆ๋‹ค. linter๋Š” /wrong/์ด ์•„๋‹ˆ์ง€๋งŒ ์—ฌ๊ธฐ์— ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ด์น˜์— ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

screen shot 2017-06-27 at 2 28 55 pm

๋ชจ๋“  54 ๋Œ“๊ธ€

/cc @rust-lang/lang

์ง€๋ช…

cc @SimonSapin

๋ถ„๋ช…ํžˆ ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค: http://www.unicode.org/reports/tr31/ ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์•ˆ์ •ํ™”๋˜๊ธฐ๋ฅผ ๋ฐ”๋ผ์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ์˜ณ์€ ์ผ์„ ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์Šค์Šค๋กœ๋ฅผ ์„ค๋“ํ•˜๋Š” ๋ฐ๋Š” ์•ฝ๊ฐ„์˜ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๋ญ๊ฐ€ ๋งž๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์œ ๋‹ˆ์ฝ”๋“œ ๊ถŒ์žฅ ์‚ฌํ•ญ ์™ธ์—๋„ ๋‹ค๋ฅธ ์–ธ์–ด๊ฐ€ ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…๊ณผ ๊ด€๋ จ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ ๋˜๋Š” ๋น„ํŒ์„ ๋ฐ›๋Š”์ง€ ์‚ดํŽด๋ณด๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ์ด ๊ธฐ๋Šฅ์ด ์ฒ˜์Œ ๋„์ž…๋˜์—ˆ์„ ๋•Œ ์ด๋ฏธ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

@SimonSapin
C ๋ฐ C++๋Š” http://unicode.org/reports/tr31/#Alternative_Identifier_Syntax (์•ฝ๊ฐ„์˜ ์ œํ•œ์ด ์žˆ์Œ)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ isocpp ํฌ๋Ÿผ์ด๋‚˜ ๋ฌธ์ œ ๋ชฉ๋ก์—์„œ ์ด์— ๋Œ€ํ•œ ๋ถˆ๋งŒ์„ ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. :)
๋ฌธ์ œ ๊ฐœ์š”: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1518.htm
Clang์—์„œ ๊ตฌํ˜„: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/UnicodeCharSets.h?view=markup
์ฐธ์กฐ https://github.com/rust-lang/rust/issues/4928

์‹๋ณ„์ž์˜ ์ •๊ทœํ™” ๋ฐ ์œ ๋‹ˆ์ฝ”๋“œ mod ์ด๋ฆ„์„ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ด๋ฆ„(OS X, IIRC์˜ ๊ฒฝ์šฐ)์— ๋งคํ•‘ํ•˜๋Š” ๋ฐ์—๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ ๊ด€๋ จ ๋งํฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค . https://github.com /rust-lang/rust/issues/2253. (์ตœ์•…์˜ ๊ฒฝ์šฐ ์ธ๋ผ์ธ์ด ์•„๋‹Œ mod s ๋ฐ extern crate s๋Š” ๊ฐ•์ œ๋กœ ASCII๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ)

์˜ˆ #2253์€ ์œ ๋‹ˆ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ์‹๋ณ„์ž์˜ ์กฐ๊ธฐ ์•ˆ์ •ํ™”์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

(์—ฌ๊ธฐ์— ์žˆ๋Š” ๋…ผ์˜๋Š” ๋” ๊ด‘๋ฒ”์œ„ํ•˜๊ณ  ํ‹€๋ฆผ์—†์ด ๋‘ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ ๋ถ„๊ธฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‹๋ณ„์ž์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ์ •๊ทœํ™” ๊ฒฝ๋กœ๋ฅผ ์ทจํ•˜๊ณ  ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ๋‚ด์šฉ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ํ•˜๋‚˜๋ฅผ _ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค_.)

์ด ํ† ๋ก ์„ RFCS ์ €์žฅ์†Œ(์˜ˆ: https://github.com/rust-lang/rfcs/issues/802 )๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด RFC ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

non_ascii_idents ๊ธฐ๋Šฅ ๊ฒŒ์ดํŠธ์˜ ์•ˆ์ •ํ™”(๋˜๋Š” ์‚ฌ์šฉ ์ค‘๋‹จ ๋“ฑ)๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์ด ๋ฌธ์ œ์˜ ์šฉ๋„๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

lang ํŒ€ ํšŒ์˜์—์„œ ๋…ผ์˜ํ•œ ํ›„ ์šฐ๋ฆฌ๋Š” ์˜ˆ, RFC๊ฐ€ ์—ฌ๊ธฐ์—์„œ ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ ์†”๋ฃจ์…˜์„ ์ˆ˜์ง‘ํ•˜๊ณ  ์žฅ๋‹จ์ ์„ ๋ถ„์„ํ•˜๊ณ  Rust์— ์ ์ ˆํ•œ ์„ ํƒ์„ ์ œ์•ˆํ•˜๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ๊ณ  ์ถฉ๋ถ„ํžˆ ๋ณต์žกํ•˜์—ฌ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ „์ฒด์— ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋งค์ผ Rust๋ฅผ ํ•ดํ‚นํ•˜๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์–ด์จŒ๋“  ๋น„ ASCII์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ๋งŽ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ถ„๋ฅ˜: P-๋‚ฎ์Œ

ํ˜„์žฌ RFC๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ˜ํ…์ธ ๊ฐ€ ์—†๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

JavaScript, Perl 5 ๋ฐ Perl 6์—์„œ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(ํŒŒ์ด์–ดํญ์Šค 50)

function ะกะปะพะฒะพ(ัั‚ะพะนะฝะพัั‚) {
  this.ัั‚ะพะนะฝะพัั‚ = ัั‚ะพะนะฝะพัั‚;
}
var ะทะดั€ะฐัั‚ะธ = new ะกะปะพะฒะพ("ะ—ะดั€ะฐะฒะตะน, ัะฒัั‚");
console.log(ะทะดั€ะฐัั‚ะธ.ัั‚ะพะนะฝะพัั‚) //ะ—ะดั€ะฐะฒะตะน, ัะฒัั‚

ํŽ„ >=5.12

use utf8;
{
  package ะกะปะพะฒะพ;
  sub new {
    my $self = bless {}, shift;
    $self->{ัั‚ะพะนะฝะพัั‚} = shift;
    $self
  }
};
my $ะทะดั€ะฐัั‚ะธ = ะกะปะพะฒะพ->new("ะทะดั€ะฐะฒะตะน, ัะฒัั‚");
say ucfirst($ะทะดั€ะฐัั‚ะธ->{ัั‚ะพะนะฝะพัั‚}); #ะ—ะดั€ะฐะฒะตะน, ัะฒัั‚

Perl6(์ด๊ฒƒ์€ Perl์˜ ๋‹ค์Œ ๋ฒ„์ „์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด ์–ธ์–ด์ž…๋‹ˆ๋‹ค)

class ะกะปะพะฒะพ {
  has $.ัั‚ะพะนะฝะพัั‚;
}

my $ะทะดั€ะฐัั‚ะธ = ะกะปะพะฒะพ.new(ัั‚ะพะนะฝะพัั‚ => 'ะทะดั€ะฐะฒะตะน, ัะฒัั‚');
say $ะทะดั€ะฐัั‚ะธ.tc; #ะ—ะดั€ะฐะฒะตะน, ัะฒัั‚

Rust์—์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ๊ธฐ์ฉ๋‹ˆ๋‹ค.

ECMAScript 2015 ์˜ ์‹๋ณ„์ž๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ํ‘œ์ค€ ๋ถ€๋ก #31 ์˜ ๊ธฐ๋ณธ ์‹๋ณ„์ž ๊ตฌ๋ฌธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

use utf8; ๊ฐ€ ์žˆ๋Š” Perl์€ ์•„๋ž˜์˜ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉฐ XID_Start ๋ฐ XID_Continue ๋„ UAX # 31์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

/ (?[ ( \p{Word} & \p{XID_Start} ) + [_] ])
        (?[ ( \p{Word} & \p{XID_Continue} ) ]) *    /x

๋„ค! @SimonSapin ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

ํŒŒ์ด์ฌ ์˜ ๊ฒฝ์šฐ <XID_Start> <XID_Continue>* ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋น„ ASCII ์‹๋ณ„์ž๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๋™์ผํ•œ ํ‘œ์ค€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์„ธ๋ถ€ ์‚ฌํ•ญ์—์„œ ๊ฐ๊ฐ์€ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค...

๊ฐœ์ธ์ ์œผ๋กœ ์ˆ˜ํ•™ ๊ด€๋ จ ์‹๋ณ„์ž์— ๋Œ€ํ•œ ์ง€์›์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, โˆ…(๊ทธ๋ฆฌ๊ณ  โˆฉ ๋ฐ โˆช๊ณผ ๊ฐ™์€ ์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž). ์—ฐ๊ตฌ ๋…ผ๋ฌธ/์‚ฌ์–‘์˜ ๋ฐฉ์ •์‹์„ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์ข…์ข… ์žฅํ™ฉํ•˜๊ณ  ์ฝ๊ธฐ ์–ด๋ ค์šด ์ฝ”๋“œ๋ฅผ ์ดˆ๋ž˜ํ•˜๋Š” ๋”์ฐํ•œ ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ๋…ผ๋ฌธ์˜ ์ˆ˜ํ•™ ๋ฐฉ์ •์‹์— ์žˆ๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์‹๋ณ„์ž๋ฅผ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๊ตฌํ˜„์ด ๋‹จ์ˆœํ™”๋˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹ํ™•์ธํ•˜๊ณ  ๋…ผ๋ฌธ์˜ ๋ฐฉ์ •์‹๊ณผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์˜ ์š”์ ์€ ์ •ํ™•ํžˆ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ฝ”๋“œ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ์ •๋ง ๋ณด๊ธฐ ํ‰ํ•˜๊ฒŒ ํ˜ผํ•ฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ ์™ธ์—(์˜์–ด๊ฐ€ ์œ ์ผํ•œ ์ง„์ •ํ•œ ๊ตญ์ œ ์–ธ์–ด์ž„), ์–ธ์–ด ๊ธฐ๋Šฅ์— ์•„๋ฌด๋Ÿฐ ์ด์ ๋„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ์œ ๋‹ˆ์ฝ”๋“œ ์ง€์›์„ ์œ„ํ•œ ์œ ๋‹ˆ์ฝ”๋“œ ์ง€์›์ธ๊ฐ€์š”?

@DoumanAsh ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ๊ตญ์ œ์ ์ด์ง€๋Š” ์•Š์œผ๋ฉฐ ์˜์–ด ์œ ์ฐฝํ•จ์ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์ผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ์˜ ๋ณ€์ˆ˜ ์ด๋ฆ„๊ณผ ์ฃผ์„์ด ์˜์–ด๋กœ ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์˜ ํ›Œ๋ฅญํ•œ ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Rustc ์ž์ฒด๋ฅผ ํฌํ•จํ•œ ๋งŽ์€ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด ์–ธ์–ด๊ฐ€ ๊ทธ๊ฒƒ์œผ๋กœ ์ œํ•œ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ณธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ต์œก์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋˜๋ ค๋ฉด ์˜์–ด์— ๋Šฅํ†ตํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์ •๋ง ์งœ์ฆ๋‚ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ƒํ™ฉ์€ ์™ธ๊ตญ์–ด UI๋ฅผ ์ž‘์„ฑํ•  ๋•Œ UI์— "pล™รญjmenรญ"๋ผ๋Š” ํ…์ŠคํŠธ ์ƒ์ž๊ฐ€ ์žˆ์ง€๋งŒ ๊ฐ’์„ "last name"์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ์ด์ƒํ•œ ๊ฐ’์„ ๋„ฃ๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋” ์ด์ƒํ•œ ๊ฒƒ์€ "rodnรฉ_ฤรญslo"(์ฒด์ฝ” ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ)๋ผ๋Š” ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด์™€ ์œ ์‚ฌํ•œ ์˜์–ด ๋‹จ์–ด๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒด์ฝ” ์„ธ๊ธˆ ์•ฑ์ด๋‚˜ ์€ํ–‰ ์•ฑ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์ •๋‹นํ•œ ์ด์œ  ์—†์ด ์ด์ƒํ•œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์•ฑ์ด ์–ด์จŒ๋“  ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์ด์‹๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ด๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ข‹์€ ์ด์œ ๋Š” ์–ธ์–ดํ•™์ž๊ฐ€ ์ข…์ข… ๋ณ€์ˆ˜ ์ด๋ฆ„์— IPA ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. IPA ๊ธฐํ˜ธ์˜ ์˜์–ด ์ด๋ฆ„์€ ์—„์ฒญ๋‚˜๊ฒŒ ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋นจ๊ฐ„์ƒ‰์ด๋ผ๋Š” ๋‹จ์–ด์˜ ๋ฏธ๊ตญ์‹ ์˜์–ด r ์†Œ๋ฆฌ๋Š” ํ•œ ๋ฌธ์ž ษนฬ ๋กœ ํ‘œ๊ธฐ๋˜์ง€๋งŒ ํํฌ ํ›„ ์—ญ๊ตด๊ณก ๊ทผ์‚ฌ๋กœ ๋ช…๋ช…๋ฉ๋‹ˆ๋‹ค. https://en.wikipedia.org/wiki/Alveolar_and_postalveolar_approximants ๋”ฐ๋ผ์„œ ํ…์ŠคํŠธ ์Œ์„ฑ ๋ณ€ํ™˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ $ fn say_post_alveolar_retroflexive_approximant() ๋Œ€์‹  fn say_ษนฬ () ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜๊ฒฌ์ด ์—†๋Š” ์ธก๋ฉด์—์„œ, ๋ณ€์ˆ˜ ์ด๋ฆ„์˜ ์ผ๋ถ€๋กœ ํ—ˆ์šฉ๋˜๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ์ฝ”๋“œ ํฌ์ธํŠธ์™€ ๊ด€๋ จํ•˜์—ฌ ์—ฌ๊ธฐ์—์„œ ํฅ๋ฏธ๋กœ์šด ํ† ๋ก ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: ๋ณ€์ˆ˜ ์ด๋ฆ„์„ priceโ‚ฌ ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋งˆ๋„ ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค price$ ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ? ๋ฒกํ„ฐ ์ƒ์„ฑ์„ ์œ„ํ•œ โ†’![] ๋งคํฌ๋กœ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๋ ‡๊ฒŒํ•˜๊ณ  ์‹ถ์–ด ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ โ†’ "์ˆ˜ํ•™ ๊ธฐํ˜ธ" http://www.fileformat.info/info/unicode/char/2192/index.htm ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ ‰์‹ฑํ•  ๋•Œ ์–ด๋–ค ์ฝ”๋“œ ํฌ์ธํŠธ๊ฐ€ ํ—ˆ์šฉ๋˜๊ณ  ์–ด๋–ค ์ฝ”๋“œ ํฌ์ธํŠธ๊ฐ€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ rust๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋ฌธ์ž์ธ์ง€ ์•„๋‹Œ์ง€ ์œ ๋‹ˆ์ฝ”๋“œ ํ‘œ์ค€์— ๋ฉ์ฒญํ•˜๊ฒŒ ๋ฌป์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๊ตฌํ˜„์—์„œ @timthelion Rust๋Š” ๋‹จ์ˆœํžˆ ์œ ๋‹ˆ์ฝ”๋“œ ํ‘œ์ค€์— ์–ด๋–ค ๊ฒƒ์ด ๋ฌธ์ž์ธ์ง€ ์•„๋‹Œ์ง€ ๋ฌป์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์˜ˆ์ œ์—์„œ ์ •ํ™•ํ•˜๊ณ  ์ง๊ด€์ ์ธ ๋™์ž‘์„ ํ•˜๋Š” XID_Start ๋ฐ XID_Continue ์œ ๋‹ˆ์ฝ”๋“œ ์†์„ฑ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

  • $# 'ษน' ๋ฐ 'ฬ ' ๊ฐ€ ๋ชจ๋‘ XID_Continue์ด๋ฏ€๋กœ say_ษนฬ  ๊ฐ€ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • $# 'โ‚ฌ' ๋ฐ '$' ๋Š” XID_Continue๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— $ priceโ‚ฌ ๋ฐ price$ ๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • $# 'โ†’' โ†’![] ๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • pล™รญjmenรญ ๋ฐ rodnรฉ_ฤรญslo ๊ฐ€ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

@dtolnay ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ "๋ฉ์ฒญํ•˜๊ฒŒ"๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ์— ๋Œ€ํ•ด ๊ธฐ๋ถ„์ด ์ƒํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ์ž˜๋ชป ์„ ํƒ๋œ ๋‹จ์–ด์˜€์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, ์œ„๋Œ€ํ•œ ์‚ฌ๋žŒ๋“ค์ด ๋˜‘๊ฐ™์ด ์ƒ๊ฐํ•˜๊ณ  ์œ ๋‹ˆ์ฝ”๋“œ ๊ธฐ์ˆ  ์œ„์›ํšŒ์˜ ํ›Œ๋ฅญํ•œ ์‚ฌ๋žŒ๋“ค์ด ๋‹น์‹ ๊ณผ ๊ฐ™์€ ์šฐ๋ ค๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค๋Š” ์ ์„ ์ง€์ ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ”„๋กœ๋•์…˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ๋ถ„์•ผ์˜ ์ผ๋ถ€ ๋‹จ์–ด๋Š” ์˜์–ด๋กœ ๋ฒˆ์—ญํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ ์ผ๋ถ€ ํ”„๋กœ๊ทธ๋žจ(์˜ˆ: ๊ฒŒ์ž„, ์ง€์—ญ ์˜จ๋ผ์ธ-์˜คํ”„๋ผ์ธ ์„œ๋น„์Šค)์€ ์˜ˆ๋ฅผ ๋“ค์–ด ์ค‘๊ตญ ์š”๋ฆฌ ์ด๋ฆ„, ์˜์›… ์ด๋ฆ„, ์žฅ์†Œ ์ด๋ฆ„์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํšŒ์‚ฌ์—์„œ ์ผํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์˜์–ด ๋ฒˆ์—ญ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์˜์–ด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด์ƒํ•œ ์ด๋ฆ„์„ ๋– ์˜ฌ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ๋™๋ฃŒ๊ฐ€ ์ดํ•ดํ•˜๊ธฐ์—๋Š” ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

ํ˜„์‹œ์ ์—์„œ ์šฐ๋ฆฌ ์‚ฌ๋ก€๊ฐ€ ๋งŽ๋‹ค๋Š” ๊ฒƒ์€ ์˜์‹ฌ์˜ ์—ฌ์ง€๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ํŒŒ์•…ํ•˜๋Š” ์ผ๋งŒ ๋‚จ์•˜์Šต๋‹ˆ๋‹ค.

  • ์ •ํ™•ํžˆ ์–ด๋–ค ๋ฌธ์ž๊ฐ€ ํ—ˆ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ASCII๊ฐ€ ์•„๋‹Œ ๊ตฌ๋‘์ ์€ ์ œ์™ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ •๊ทœํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€: ๋‘ ๊ฐœ์˜ ์‹๋ณ„์ž๊ฐ€ ๋‹ค๋ฅธ ์ฝ”๋“œ ํฌ์ธํŠธ(์†Œ์Šค ํŒŒ์ผ์˜ ๋‹ค๋ฅธ UTF-8 ๋ฐ”์ดํŠธ)๋กœ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋™๋“ฑํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์–ธ์–ด๊ฐ€ Unicode Standard Annex # 31์— ๋™์˜ํ•˜์ง€๋งŒ ์„ธ๋ถ€ ์‚ฌํ•ญ์—๋Š” ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ, ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์ด Rust์— ๊ฐ€์žฅ ์ข‹์€์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์ด ์ด๋Ÿฌํ•œ ์ฐจ์ด๋ฅผ ์œ ๋ฐœํ•˜๋Š”์ง€ ์•Œ์•„๋‚ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

https://rosettacode.org/wiki/Unicode_variable_names ์—๋Š” ์—ฌ๋Ÿฌ ์–ธ์–ด์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@SimonSapin ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ฌด๋„ ์ด๊ฒƒ์ด ์œ ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์˜์‹ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ํ‘œ์ค€ ์†”๋ฃจ์…˜์ด ์—†๊ณ  ์šฐ๋ฆฌ ์ค‘ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค(์˜ˆ: ๋‚˜ ์ž์‹ )์ด ์ ˆ์ถฉ์•ˆ์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ ์—ด์•…ํ•œ ์œ„์น˜์— ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋†“์น˜๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ˆ˜์ง‘ํ•˜๊ณ  ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์ œ์‹œํ•  ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ์‹œ์ ์—์„œ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ์ง€ ์•Š๋Š” ๊ฒƒ๋ณด๋‹ค ์–ด๋–ค ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์•„์ง ๋˜ ๋‹ค๋ฅธ ๊ทœ์น™ ์ง‘ํ•ฉ์„ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ช‡ ๊ฐ€์ง€ ์„ ๋ก€(์ด์ƒ์ ์œผ๋กœ๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ์‚ฌ์–‘์ด๋‚˜ ๋ถ€๋ก์ด์ง€๋งŒ ๋‹ค๋ฅธ ์–ธ์–ด์ผ ์ˆ˜๋„ ์žˆ์Œ)๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์„ ํ™•์‹คํžˆ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

@nikomatsakis ๋‹ค์–‘ํ•œ ์–ธ์–ด ๊ฐ„์˜ ์ž‘์€ ์ฐจ์ด์ ์— ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•œ ์ •ํ™•ํ•œ ์›์ธ์„ ์กฐ์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์ง€๋งŒ ์•„๋ฌด๋„ ๊ทธ ์กฐ์‚ฌ์— ๋‚˜์„œ์ง€ ์•Š๊ณ  ์–ด์จŒ๋“  ๊ณ„์† ์ง„ํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด UAX # 31์„ ์ •ํ™•ํžˆ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ตฌํ˜„์€) ํ›Œ๋ฅญํ•œ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ๊ตฌํ˜„๊ณผ ์ผ์น˜ํ•˜๋”๋ผ๋„ ์„ธ๋ถ€์ ์ธ ๋””์ž์ธ์œผ๋กœ RFC ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์—ฌ์ „ํžˆ ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์–ด๋–ค ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ๋™๋“ฑ์„ฑ์„ ์œ„ํ•ด ์ •๊ทœํ™”/๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•, ํ–ฅํ›„ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฒ„์ „์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ๋“ฑ) ์ด RFC๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋“ ์ง€ UAX 31์„ ์œ„์—์„œ ์•„๋ž˜๋กœ ํ•œ ๋ฒˆ ์ด์ƒ ์ฝ์„ ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์‹๋ณ„์ž์— ๋Œ€ํ•ด ์ƒˆ PRECIS ํ”„๋กœํ•„(๋˜๋Š” ๊ธฐ์กด ํ”„๋กœํ•„ ์ค‘ ํ•˜๋‚˜์˜ ์ œํ•œ๋œ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ) PRECIS ํ”„๋กœํ•„[1]์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋„ ๋™์ผํ•˜๊ฒŒ ๊ฐ„์ฃผ๋˜์–ด์•ผ ํ•˜๋Š” ์‹๋ณ„์ž๋ฅผ ์ •๊ทœํ™”ํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ(์˜ˆ: ๋™์ผํ•˜๊ฒŒ ๋ณด์ด์ง€๋งŒ ์œ ๋‹ˆ์ฝ”๋“œ ํ‘œํ˜„์ด ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ํ…์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ‚ค๋ณด๋“œ๊ฐ€ ์žˆ๋Š” ๋กœ์ผ€์ผ์˜ ๊ฒฝ์šฐ) ๋ช…ํ™•ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ํšจํ•œ Rust ์‹๋ณ„์ž๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ„๊ฒฐํ•œ ๊ทœ์น™ ์„ธํŠธ.

์ €๋Š” PRECIS ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ์กด Rust ๊ตฌํ˜„์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์Šค์Šค๋กœ๋ฅผ ์ „๋ฌธ๊ฐ€๋ผ๊ณ  ๋ถ€๋ฅด์ง€๋Š” ์•Š๊ฒ ์ง€๋งŒ PRECIS ๊ตฌํ˜„ ํ•˜๋‚˜๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์คฌ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ RFC์™€ ๋ช‡ ๊ฐ€์ง€ ํ•จ์ •๊ณผ ๋ฌธ์ œ์— ์ต์ˆ™ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ณณ์—.

[1] [RFC 7564](https://tools.ietf.org/html/rfc7564): PRECIS ํ”„๋ ˆ์ž„์›Œํฌ: ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ”„๋กœํ† ์ฝœ์—์„œ ๊ตญ์ œํ™” ๋ฌธ์ž์—ด์˜ ์ค€๋น„, ์‹œํ–‰ ๋ฐ ๋น„๊ต

๋˜‘๊ฐ™์ด ์ƒ๊ธด ์บ๋ฆญํ„ฐ์— ๋Œ€ํ•œ ์ข‹์€ ์ . ์—ฌ๊ธฐ๋Š” ์œ„ํ‚คํ”ผ๋””์•„
๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ธฐ์‚ฌ
https://en.wikipedia.org/wiki/Duplicate_characters_in_Unicode

๋‹ค์Œ์€ ์ค‘๋ณต ๋ฌธ์ž๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ธฐ์‚ฌ์ž…๋‹ˆ๋‹ค.
์•„์‹œ์•„ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋Œ€๋ถ€๋ถ„ ํ†ตํ•ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://people.w3.org/rishida/scripts/chinese/

2017๋…„ 4์›” 11์ผ ์˜คํ›„ 9์‹œ 1๋ถ„์— Sam Whited๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.
>

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์ƒˆ๋กœ์šด(๋˜๋Š” ๋” ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€
๊ธฐ์กด ํ”„๋กœํ•„ ์ค‘ ํ•˜๋‚˜์˜ ์ œํ•œ๋œ ํ•˜์œ„ ์ง‘ํ•ฉ) PRECIS ํ”„๋กœํ•„ [1]
์‹๋ณ„์ž์˜ ๊ฒฝ์šฐ. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹๋ณ„์ž๋ฅผ ์ •๊ทœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์•ฝ๊ฐ„ ๋‹ค๋ฅด๋”๋ผ๋„ ๋™์ผํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ:
๋™์ผํ•˜๊ฒŒ ๋ณด์ด๋Š” ํ…์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ‚ค๋ณด๋“œ๊ฐ€ ์žˆ๋Š” ๋กœ์ผ€์ผ์˜ ๊ฒฝ์šฐ
๊ทธ๋Ÿฌ๋‚˜ ์œ ๋‹ˆ์ฝ”๋“œ ํ‘œํ˜„์—์„œ ์•ฝ๊ฐ„ ๋‹ค๋ฆ„) ์ œ๊ณตํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ
์œ ํšจํ•œ Rust๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•œ ๊ทœ์น™ ์„ธํŠธ
์‹๋ณ„์ž.

PRECIS์˜ ๊ธฐ์กด Rust ๊ตฌํ˜„์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
ํ”„๋ ˆ์ž„์›Œํฌ(ํ•˜๋‚˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์š”ํ•œ ๋งŽ์€ ์œ ๋‹ˆ์ฝ”๋“œ ์ธํ”„๋ผ
๋‚ด ์ƒ๊ฐ์—๋Š” ์—ฌ์ „ํžˆ ๋ˆ„๋ฝ๋˜์—ˆ์ง€๋งŒ ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ์ˆ˜์ •๋˜์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค
์–ด๋Š ์ •๋„).

[1] RFC 7564 https://tools.ietf.org/html/rfc7564 : PRECIS ํ”„๋ ˆ์ž„์›Œํฌ:
๊ตญ์ œํ™” ๋ฌธ์ž์—ด์˜ ์ค€๋น„, ์‹œํ–‰ ๋ฐ ๋น„๊ต
์‘์šฉ ํ”„๋กœํ† ์ฝœ์—์„œ

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/rust-lang/rust/issues/28979#issuecomment-293367700 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ABU7-IMgXefW2yZYyM0tn8qLhpGFw0bSks5ru84GgaJpZM4GM3Lj .

@SamWhited ์œ ๋‹ˆ์ฝ”๋“œ์˜ NFC ๋˜๋Š” NFKC๋ณด๋‹ค PRECIS๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์œ ๋‹ˆ์ฝ”๋“œ์˜ NFC ๋˜๋Š” NFKC๋ณด๋‹ค PRECIS๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

TL:DR โ€” ์ •๊ทœํ™”๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ ์œ ํšจํ•œ ์‹๋ณ„์ž์ธ์ง€ ๊ฒฐ์ •ํ•  ๋•Œ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ํ•œ ๋‹จ๊ณ„์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@SimonSapin ์œ ๋‹ˆ์ฝ”๋“œ ์ •๊ทœํ™”๋Š” PRECIS ํ”„๋กœํŒŒ์ผ์˜ ํ•œ ๋‹จ๊ณ„์ผ ๋ฟ์ž…๋‹ˆ๋‹ค(๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ์ •๊ทœํ™”๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ถ”์ธก์— ๋”ฐ๋ฅด๋ฉด NFC์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค). ๊ทธ๋Ÿฌ๋‚˜ PRECIS๋Š” ๋” ๊ด‘๋ฒ”์œ„ํ•œ ํ•ญ๋ชฉ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ •๊ทœํ™” ํ˜•์‹์€ ๋„ˆ๋น„ ๋งคํ•‘์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ(์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?), ๋”ฐ๋ผ์„œ FullWidth ๋Š” ๏ผฆ๏ฝ•๏ฝŒ๏ฝŒ๏ผท๏ฝ‰๏ฝ„๏ฝ”๏ฝˆ ์™€ ๋™์ผํ•œ ์‹๋ณ„์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ „์ฒด ๋„ˆ๋น„ ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๋ ค๋Š” ํ‚ค๋ณด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด๊ฒƒ์ด ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด๋Š” ๋ผํ‹ด ๋ฌธ์ž๋ณด๋‹ค ๋™์•„์‹œ์•„ ๋ฌธ์ž์— ๋” ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ „์ฒด ๋„ˆ๋น„ ํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋กœ์ผ€์ผ์˜ ๋ˆ„๊ตฐ๊ฐ€๋Š” ๋‚ด๊ฐ€ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋ฌธ์ œ๋ฅผ ์ž˜๋ชป ํ‘œํ˜„ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”. PRECIS ํ”„๋กœํŒŒ์ผ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์ผ์—๋Š” ํ—ˆ์šฉ๋˜๋Š” ๋ฌธ์ž ์†์„ฑ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: ๋ฌธ์ž, ์ˆซ์ž, ๋Œ€์‹œ ๋ฐ ๋ฌธ์ž ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์œผ๋กœ ์‹œ์ž‘).

_๋ฉด์ฑ… ์กฐํ•ญ:_ ์ €๋Š” ์‹ค์ œ๋กœ ์ „์ฒด ๋„ˆ๋น„ ํ…์ŠคํŠธ ๋งคํ•‘์ด ๋ฐ”๋žŒ์งํ•œ์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‹จ์ง€ ์˜ˆ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ •๊ทœํ™”๊ฐ€ ์ค‘์š”ํ•œ ์ „๋ถ€์ผ ์ˆ˜๋„ ์žˆ๊ณ  ๋งคํ•‘์„ ์ „ํ˜€ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Go๋Š” ์‹๋ณ„์ž์— ๋ฌธ์ž ๋˜๋Š” ์ˆซ์ž ์†์„ฑ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ๋งŒ ํ•˜๋ฏ€๋กœ, ๊ทธ๊ฒƒ๋งŒ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค๋ฉด ์šฐ๋ฆฌ์—๊ฒŒ๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ๋” ๋งŽ์€ ์ƒ๊ฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ฝ๊ธฐ: ์ด๊ฒƒ์€ Go ์‚ฌ์–‘์ด ํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค(๋‚ด๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๋ฉฐ ์ข‹์€ ๊ฒƒ์ผ ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋‹ ์ˆ˜๋„ ์žˆ์Œ): https://golang.org/ref/spec#Source_code_representation

PRECIS๋Š” ๋ฌด์—‡์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

PRECIS๋Š” ๋ฌด์—‡์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

Go ์ด์™ธ์˜ ์–ธ์–ด๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ Go 2 ๋ฌธ์ œ: golang/go#16033

2017๋…„ 4์›” 11์ผ ํ™”์š”์ผ 02:07:49PM -0700์— Sam Whited๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ •๊ทœํ™” ํ˜•์‹์€ ๋„ˆ๋น„ ๋งคํ•‘์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ FullWidth ๋Š” ๏ผฆ๏ฝ•๏ฝŒ๏ฝŒ๏ผท๏ฝ‰๏ฝ„๏ฝ”๏ฝˆ ์™€ ๋™์ผํ•œ ์‹๋ณ„์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

NFKC๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Python 3.6.0 (default, Jan 16 2017, 12:12:55)
[GCC 6.3.1 20170109] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> ๏ผฆ๏ฝ•๏ฝŒ๏ฝŒ๏ผท๏ฝ‰๏ฝ„๏ฝ”๏ฝˆ = 1
>>> FullWidth
1

--
์นœ์• ํ•˜๋Š”,
lilydjwg

@SamWhited , ์ฒซ ๋ฒˆ์งธ ๋งํฌ์—์„œ ๋‹ค์Œ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

identifier = letter { letter | unicode_digit } .
letter        = unicode_letter | "_" .

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ Go๋Š” ํ˜„์žฌ ์ •๊ทœํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉฐ PRECIS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ œ์•ˆ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋งž์Šต๋‹ˆ๊นŒ?

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ Go๋Š” ํ˜„์žฌ ์ •๊ทœํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉฐ PRECIS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ œ์•ˆ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋งž์Šต๋‹ˆ๊นŒ?

@SimonSapin ๋งž์Šต๋‹ˆ๋‹ค. ๊ธ€์Ž„์š”, ์‹ค์ œ๋กœ ์ œ์•ˆ๋„ ์•„๋‹ˆ๊ณ  ๊ทธ๋ƒฅ ์ด ๋ฌธ์ œ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•ด ๋ด์•ผ ํ•  ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค(์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋ฌธ์žฅ๊ณผ ์ œ ๋งํฌ๋ฅผ ๋‹ค์‹œ ์ฝ์–ด๋ณด๋‹ˆ ์ž˜๋ชป๋œ ํ‘œํ˜„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ๋‹น์žฅ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋‹จ์ง€ ์ œ๊ฐ€ Go ์ด์™ธ์˜ ๋‹ค๋ฅธ ๊ฒƒ์€ ์‹ค์ œ๋กœ ๋น„ASCII ์‹๋ณ„์ž๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค).

@SimonSapin

ํ˜„์žฌ ๊ตฌํ˜„๊ณผ ์ผ์น˜ํ•˜๋”๋ผ๋„ ์„ธ๋ถ€์ ์ธ ๋””์ž์ธ์œผ๋กœ RFC ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์—ฌ์ „ํžˆ ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘

๋ฐฉ๊ธˆ UAX #31 ์„ ํ†ตํ•ด ๊ทธ๋“ค์ด ํ•œ ์ผ์„ ๋ณด๊ณ  ์žˆ์—ˆ๊ณ  PRECIS ํ”„๋กœํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์˜ ๋˜ ๋‹ค๋ฅธ ์ด์ ์ด ๋ˆˆ์— ๋„์—ˆ์Šต๋‹ˆ๋‹ค. stringprep์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  PRECIS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฒ„์ „์—์„œ ๋ฏธ๋ž˜์— ํ˜ธํ™˜๋˜๊ณ  ๋ฏผ์ฒฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค( ๊ฐœ๋ณ„ ์ฝ”๋“œ ํฌ์ธํŠธ ์ž์ฒด๊ฐ€ ์•„๋‹Œ ์ฝ”๋“œ ํฌ์ธํŠธ์˜ ํŒŒ์ƒ ์†์„ฑ์— ๋Œ€ํ•ด ์ž‘๋™).

TR31์—๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” " Immutable Identifiers "๋ผ๋Š” ๊ฐœ๋… ์ด ์žˆ์ง€๋งŒ ์‚ฌ์‹ค์ƒ ์ž์œ  ํ˜•์‹ ํด๋ž˜์Šค์—์„œ ํŒŒ์ƒ๋œ PRECIS ํ”„๋กœํ† ์ฝœ์˜ ์•ฝ๊ฐ„ ๋œ ์ œํ•œ์ ์ธ ๋ฒ„์ „์ด์ง€๋งŒ PRECIS๊ฐ€ ๊ทœ์น™์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š” ์ˆœ์„œ์— ๋Œ€ํ•œ ๊ณ ๋ ค ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ ์šฉ (์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?) ๋˜ํ•œ ๊ทธ๋ฆฌ์Šค ์ตœ์ข… ์‹œ๊ทธ๋งˆ ์‚ฌ์šฉ๊ณผ ๊ฐ™์€ PRECIS ํ”„๋ ˆ์ž„ ์›Œํฌ ๋˜๋Š” ํ•œ๊ธ€ ์ž๋ชจ ์ฃผ๋ณ€์˜ ์ผ๋ถ€ ์‚ฌ๋ก€๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค (๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ๋‚˜๋Š” ์ด๋“ค ์ค‘ ์–ด๋Š ์ชฝ์—๋„ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. , ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด PRECIS๊ฐ€ ์กด์žฌํ•˜๋Š” ์ด์œ ์ด๋ฉฐ ์ „๋ฌธ๊ฐ€๋“ค์ด ์ด๋ฏธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค).

์ด๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ๋ฒ„์ „ ์ „์ฒด์—์„œ ๋ฏธ๋ž˜์— ํ˜ธํ™˜๋˜๊ณ  ๋ฏผ์ฒฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(๊ฐœ๋ณ„ ์ฝ”๋“œ ํฌ์ธํŠธ ์ž์ฒด ๋Œ€์‹  ์ฝ”๋“œ ํฌ์ธํŠธ์˜ ํŒŒ์ƒ ์†์„ฑ์—์„œ ์ž‘๋™).

๋‚˜๋Š” ์ด ์ ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค. XID_Start ๋ฐ XID_Continue ๋Š” ํŒŒ์ƒ ์†์„ฑ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ์ ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค. XID_Start ๋ฐ XID_Continue๋Š” ํŒŒ์ƒ ์†์„ฑ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด UAX 31์„ ์ž˜๋ชป ์ดํ•ดํ–ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ์œ ๋‹ˆ์ฝ”๋“œ ๋ฒ„์ „์ด ํ•„์š”ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ฝ์–ด๋„ ์–ด๋””์„œ ์–ป์—ˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ด๊ฒƒ์„ ๊ฒŒ์‹œํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ์žฅ์†Œ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ, ์ˆ˜ํ•™ ๊ธฐํ˜ธ์˜ ๋ณดํ’€๊ณผ ํ•จ๊ป˜ ๋ช‡ ๊ฐ€์ง€ ํฅ๋ฏธ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ž‘์„ฑํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ”ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ ๋ฐฉ์ •์‹๊ณผ์˜ ๋” ๋‚˜์€ ์ƒ๊ด€ ๊ด€๊ณ„๊ฐ€ ๋ชฉํ‘œ์ธ ๊ฒฝ์šฐ ์ค‘์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ์Šคํฌ๋ฆฐ์ƒท์—์„œ ฮ”(๋Œ€๋ฌธ์ž) ๋Œ€ ฮด(์†Œ๋ฌธ์ž)์ž…๋‹ˆ๋‹ค. linter๋Š” /wrong/์ด ์•„๋‹ˆ์ง€๋งŒ ์—ฌ๊ธฐ์— ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ด์น˜์— ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

screen shot 2017-06-27 at 2 28 55 pm

Swift์™€ ๊ฐ™์ด XID ์‹œ์ž‘/๊ณ„์†์ด ์•„๋‹ˆ๋”๋ผ๋„ ๋ณ€์ˆ˜ ์ด๋ฆ„์— ์ด๋ชจํ‹ฐ์ฝ˜์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@fwrs , ์ด๋ชจํ‹ฐ์ฝ˜์€ ์ด๋ชจํ‹ฐ์ฝ˜์ด ์•„๋‹Œ ๋ฌธ์ž๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ถ€ ๊ณต๊ธ‰์—…์ฒด ๋•๋ถ„์— ์ด์ œ ์ƒ‰์ƒ๊ณผ ์ž‘์€ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๊ณ„์† ๋ณ€๊ฒฝํ•˜๋Š” Emoji ๊ฒฐํ•ฉ(ZWJ) ์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ๋งŽ์€ ๋ถ€๋ถ„์ด ๋ฐ˜๋“œ์‹œ ์œก์•ˆ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋˜ํ•œ Emoji์˜ ์ •์˜๋Š” ๋งค๋…„ ๋น ๋ฅด๊ฒŒ ํ™•์žฅ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์•ˆ์ •์ ์ด๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์„ ์›ํ•˜๋Š” ์‹œ์Šคํ…œ ์ˆ˜์ค€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ท€์—ฝ๊ธด ํ•˜์ง€๋งŒ Rust ๋ชฉํ‘œ์™€ ์ž˜ ์–ด์šธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋…น ๊ธฐ๋ฐ˜ ์Šคํฌ๋ฆฝํŒ…/๊ต์œก์šฉ ์–ธ์–ด๋Š” ๋ชฉํ‘œ์— ๋”ฐ๋ผ Emojis๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ryankurte ๊ท€ํ•˜์˜ ์˜ˆ์—๋Š” ์˜๋ฏธ๋ก ์  ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ•™ ๊ณต์‹์„ ๊ธฐ๋กํ•˜๊ณ  ์žˆ์ง€๋งŒ U+2206 INCREMENT ๋Œ€์‹  U+0394 GREEK CAPITAL LETTER DELTA๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „์ž๋Š” ๊ทธ๋ฆฌ์Šค ์•ŒํŒŒ๋ฒณ ๋ฌธ์ž์ด๋ฏ€๋กœ ๋Œ€์†Œ๋ฌธ์ž ๋งคํ•‘์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ›„์ž๋Š” ์ˆ˜ํ•™ ๊ธฐํ˜ธ์ด๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ์˜๊ฒฌ์„ ๊ต์ฐจ ๋งํฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค: https://github.com/rust-lang/rust/issues/4928#issuecomment -343137316

๋‚˜๋Š” ์—ฌ๊ธฐ์—์„œ ๋™ํ˜• ๋ฌธ์ž ๊ธฐ๋ฐ˜ ๊ณต๊ฒฉ์„ ํ™œ์„ฑํ™”ํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์ง€ ๋ชปํ–ˆ์ง€๋งŒ(๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋‹ค๋ฉด ๋…ธ์ด์ฆˆ๋ฅผ ๋ฌด์‹œํ•˜์‹ญ์‹œ์˜ค) ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ํ•˜๋Š” ๋ณดํ‘ธ๋ผ๊ธฐ๋ฅผ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๋ฅผ ์ฑ„์› ์Šต๋‹ˆ๋‹ค .

#![feature(non_ascii_idents)]
fn main() {
    let a = 2;
    let ะฐ = 3;
    assert_eq!(a, 2);  // OK
    assert_eq!(ะฐ, 3);  // OK
}

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ์ด ๋‘ a ์€ ์„œ๋กœ ๋‹ค๋ฅธ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์ด๋ฏ€๋กœ ๋‘ ๋ฒˆ์งธ let ๋ฐ”์ธ๋”ฉ์€ ์ฒซ ๋ฒˆ์งธ ๋ฐ”์ธ๋”ฉ์„ ๊ทธ๋ฆผ์ž ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‘ ์ฃผ์žฅ ๋ชจ๋‘ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค(ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ์‹๋ณ„์ž๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์ด๊ฒƒ์„ ๋กœ์ปฌ์—์„œ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค; ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค).

์ด "๊ธฐ๋Šฅ"์€ ํƒ์ง€ํ•˜๊ธฐ ์–ด๋ ค์šด Rust ํ”„๋กœ๊ทธ๋žจ์˜ ์ต์Šคํ”Œ๋กœ์ž‡์„ ๋„์ž…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์„€๋„์ž‰ let ๋ฐ”์ธ๋”ฉ์ด ์ €๋ฅผ ํฌํ•จํ•˜์—ฌ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ด€์šฉ์  Rust๋กœ ๊ฐ„์ฃผํ•œ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

์ถ”์‹ : ์ด "๊ธฐ๋Šฅ"์€ ์–ธ๋”ํ•ธ๋“œ ๋Ÿฌ์ŠคํŠธ ์ฝ˜ํ…Œ์ŠคํŠธ์—์„œ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ #![feature(non_ascii_idents)] ๋Š” ์•ฝ๊ฐ„์˜ ๋ˆˆ์‚ด์„ ์ฐŒํ‘ธ๋ฆฌ๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

@gnzlbg ์‚ฌ๋žŒ๋“ค์ด ์„ธ๋ฏธ์ฝœ๋ก ์„ ๊ทธ๋ฆฌ์Šค์–ด ๋ฌผ์Œํ‘œ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ํ˜ผ๋™ ๊ฐ์ง€์— ๋Œ€ํ•œ ์ง€์›์ด ์ด๋ฏธ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ ํ•˜์ง€๋งŒ ์‹๋ณ„์ž์— ์ ์šฉ๋˜๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์ตœ์†Œํ•œ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œ๋™์•ˆ ์ค‘์š”ํ•œ ์›€์ง์ž„์ด ์—†์—ˆ๊ณ  RFC๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๋‹ซํž ์ˆ˜ ์žˆ๊ณ  ์ฝ”๋“œ๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์กฐ๊ธˆ ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค. ์ €๋Š” Rust๊ฐ€ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•˜๋Š” 21์„ธ๊ธฐ์˜ ์–ธ์–ด์ด๊ณ  Rust๊ฐ€ ์˜์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์นœ์ˆ™ํ•œ ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๋‹นํ•œ ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒƒ์€ ์‹ค์ œ๋กœ RFC๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋Šฅ๋ ฅ์ž…๋‹ˆ๋‹ค.

@์ผ€์ธ ๋ฐ˜

์‚ฌ๋žŒ๋“ค์ด ์„ธ๋ฏธ์ฝœ๋ก ์„ ๊ทธ๋ฆฌ์Šค์–ด ๋ฌผ์Œํ‘œ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ˜ผ๋™ ๊ฐ์ง€์— ๋Œ€ํ•œ ์ง€์›์ด ์ด๋ฏธ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์‹๋ณ„์ž์— ์ ์šฉ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ํด๋ฆฌํ”ผ ๋ฌธ์ œ์—์„œ @oli-obk๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ Rust ๊ตฌํ˜„์€ ๋Œ€์‹  ์ตœ์‹  ๊ณต์‹ ํ˜ผ๋™ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

http://www.unicode.org/Public/security/revision-06/confusables.txt

๋™ํ˜• ๋ฌธ์ž ๊ธฐ๋ฐ˜ ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชฉ๋ก์€ ๋™๊ธฐํ™” ์ƒํƒœ๋กœ ์œ ์ง€ํ•ด์•ผ ํ•˜์ง€๋งŒ ์ด๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๋กœ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@์ผ€์ธ ๋ฐ˜

์ด ์ ์„ ์—ผ๋‘์— ๋‘์‹œ๋ฉด ์‹๋ณ„์ž์— ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ์–ธ์–ด์—๋Š” RFC ํ”„๋กœ์„ธ์Šค์™€ ์œ ์‚ฌํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์˜ ํ”ผ๋“œ๋ฐฑ๊ณผ ํ•จ๊ป˜ ๋ณ‘ํ•ฉํ•˜๊ณ  ๋‚ด๋ถ€ ํฌ๋Ÿผ์—์„œ ์‚ฌ์ „ RFC๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ˆ„๊ฐ€ ์••๋‹ˆ๊นŒ? ๊ทธ ์‹œ์ ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•ฉ/๋…ผ์Ÿํ•˜๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ด๋ฉฐ, ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ์•Œ๊ธฐ๋„ ์ „์— RFC๋ฅผ ์ค€๋น„ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ด๋–ค ๋ฉด์—์„œ ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ASCII ์‹๋ณ„์ž๋ฅผ ์˜์›ํžˆ ๊ณ ์ˆ˜ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์œ ๋‹ˆ์ฝ”๋“œ ์‹๋ณ„์ž๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์—„์ฒญ๋‚œ ์ƒํ˜ธ ์šด์šฉ์„ฑ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. NFKC ๋งคํ•‘์˜ ๋” ๊ธฐ์ดํ•œ ์˜ˆ ์ค‘ ์ผ๋ถ€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•ญ๋ชฉ์ด ๋™์ผํ•œ ์‹๋ณ„์ž์— ๋งคํ•‘๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

>>> โ„Œ = 1
>>> H
1
>>> โ…จ = 42
>>> IX
42
>>> โ„• = 23
>>> N
23
>>> import math
>>> โ„ฏ = math.e
>>> e
2.718281828459045
>>> โ„จ = 2
>>> Z
2

@mitsuhiko ํ˜„์‹ค ์„ธ๊ณ„๋Š” ๊ทธ๋Ÿฐ ๊ณ ํ†ต์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ต๊ณ  _๊ฐœ์ธ์ ์œผ๋กœ_ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ํ˜„์žฌ RFC๋Š” ์ด์™€ ๋งค์šฐ ์œ ์‚ฌํ•œ ์˜ˆ์— ๋Œ€ํ•ด _๋งŽ์€_ ๋…ผ์˜ ํ›„์— NFKC๋ฅผ ํ†ตํ•œ NFC๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰