éASCIIèå¥åã¯çŸåšæ©èœã²ãŒããããŠããŸãã ãããã®åãæ±ããä¿®æ£ãããã£ãŒãã£ãŒã²ãŒããåé€ããå¿ èŠããããŸãã
/ cc @ rust-lang / lang
æå
cc @SimonSapin
ã©ãããç§ãã¡ã¯ãããå®è£ ããŠããŸãïŒhttpïŒ //www.unicode.org/reports/tr31/ãŸãã¯ããã«äŒŒããã®ã
ãããå®å®ããããšãæãã§ããŸãããç§ãã¡ãæ£ããããšãããŠããããšãèªåèªèº«ã«çŽåŸãããã«ã¯ãããããã®äœæ¥ãå¿ èŠã§ãã
ç§ã¯ããã§æ£ããããšãäœã§ãããããããŸããã Unicodeã®æšå¥šäºé ã«å ããŠãä»ã®èšèªãå®éã«äœãããŠããã®ãããããŠããããã©ã®ãããªé¢é£ãããã°ã¬ããŒããæ¹å€ãåããŠããã®ãã調ã¹ãããšæããããããŸããã ãããšãããã®æ©èœãæåã«å°å ¥ããããšãã«ããã¯ãã§ã«è¡ãããŠããŸãããïŒ
@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
cc https://github.com/rust-lang/rust/issues/4928
èå¥åã®æ£èŠåãšUnicode mod
åã®ãã¡ã€ã«ã·ã¹ãã åãžã®ãããã³ã°ïŒOS XãIIRCïŒã«ãåé¡ããããŸãããé¢é£ãããªã³ã¯ãããã«èŠã€ãããŸããïŒ https ://github.com mod
ãšextern crate
ã¯ASCIIã«åŒ·å¶ãããå¯èœæ§ããããŸãïŒ
ã¯ãïŒ2253ã¯ç§ãç¥ã£ãŠãã倧ããªåé¡ã§ãããéUnicodeèå¥åã®ææå°æ©ãªå®å®åã«ã€ããŠå¿é ããŠããŸãã
ïŒããã§ã®è°è«ã¯ãã£ãšåºããééããªã2ã€ã®ã¹ã¬ããã«åå²ããå¯èœæ§ããããŸããããšãã°ãèå¥åçšã«1ã€ã®æ£èŠåãã¹ã䜿çšããæååãªãã©ã«ã³ã³ãã³ãçšã«å¥ã®æ£èŠåãã¹ã䜿çšããããšãã§ããŸããïŒ
ãã®ãã£ã¹ã«ãã·ã§ã³ãRFCSãªããžããªã«ç§»è¡ããããšããå§ãããŸãïŒäŸïŒ httpsïŒ//github.com/rust-lang/rfcs/issues/802ïŒ
ç§ã¯ããããRFCããã»ã¹ãééããã«å€ããæ©èœã§ããããšã«åæããŸãã
non_ascii_idents
æ©èœã²ãŒãã®å®å®åïŒãŸãã¯éæšå¥šãªã©ïŒã远跡ããããã«ããã®åé¡ãåå©çšããŸããã
langããŒã äŒè°ã§è©±ãåã£ãåŸãã¯ããRFCãããã§ã®é©åãªæ¹æ³ã§ãããšå€æããŸããã ä»ã®èšèªãããœãªã¥ãŒã·ã§ã³ãåéãããããã®é·æ/çæãåæããRustã®é©åãªéžæãææ¡ãããã®ãå¿ èŠã§ãã ããã¯ç©è°ãéžãã»ã©è€éãªã®ã§ãã³ãã¥ããã£å šäœã«æã¡èŸŒãå¿ èŠããããŸããç¹ã«ãRustãæ¥åžžçã«ãããã³ã°ããŠããç§ãã¡ã®å€ãã¯ãéASCIIã®çµéšãããŸããªãããã§ãã
ããªã¢ãŒãžïŒP-low
çŸåšRFCããªããããå®çšçãªã³ã³ãã³ãããªããããäœãããŒã¯ãä»ããŸãã
JavaScriptãPerl5ããã³Perl6ã§ã¯ããã®æ©èœãå©çšã§ããŸãã
JavaScriptïŒFirefox 50ïŒ
function СлПвП(ÑÑПйМПÑÑ) {
this.ÑÑПйМПÑÑ = ÑÑПйМПÑÑ;
}
var зЎÑаÑÑО = new СлПвП("ÐÐŽÑавей, ÑвÑÑ");
console.log(зЎÑаÑÑО.ÑÑПйМПÑÑ) //ÐÐŽÑавей, ÑвÑÑ
Perl> = 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ã®èå¥åã®äŸ¡å€ã¯ã Unicode Standard AnnexïŒ31ã®ããã©ã«ãã®èå¥åæ§æã«åºã¥ããŠããŸãã
use utf8;
ã®Perlã¯ã以äžã®æ£èŠè¡šçŸã䜿çšããŸãã XID_Start
ãšXID_Continue
ãããããUAXïŒ31ããã®ãã®ã§ãã
/ (?[ ( \p{Word} & \p{XID_Start} ) + [_] ])
(?[ ( \p{Word} & \p{XID_Continue} ) ]) * /x
ã¯ãïŒ ããããšã@SimonSapinïŒ
Pythonã®å Žå<XID_Start> <XID_Continue>*
ã§ãã
ãããã£ãŠãéASCIIèå¥åãèš±å¯ããå€ãã®ããã°ã©ãã³ã°èšèªã¯åãæšæºã«åºã¥ããŠããããã«èŠããŸããã詳现ã§ã¯ãããããããããã«ç°ãªãããšãè¡ããŸãâŠ
å人çã«ã¯ãæ°åŠé¢é£ã®èå¥åã®ãµããŒããæåŸ ããŠããŸãã ããšãã°ãâ ïŒããã³â©ãâªãªã©ã®éåæŒç®åïŒã æ¹çšåŒãç 究è«æ/ä»æ§ããã³ãŒãã«å€æããããšã¯ãå€ãã®å Žåãã²ã©ãããã»ã¹ã§ãããåé·ã§èªã¿ã«ããã³ãŒãã«ãªããŸãã è«æã®æ°åŠæ¹çšåŒã«ããã®ãšåãèå¥åãã³ãŒãã§äœ¿çšã§ãããšãå®è£ ãç°¡çŽ åãããã³ãŒããè«æã®æ¹çšåŒãšæ¯èŒããŠç¢ºèªãããããªããŸãã
ãã®æ©èœã®æ£ç¢ºãªãã€ã³ãã¯äœã§ããïŒ ã³ãŒãå ã«ããŸããŸãªèšèªã®æ¬åœã«éãçµã¿åãããäœæããå¯èœæ§ãè¿œå ããããšãé€ãã°ïŒè±èªã¯å¯äžã®çã«åœéçãªèšèªã§ãïŒãèšèªæ©èœã«é¢ããŠã¯äœã®ã¡ãªããããããŸããã ãããšããUnicodeããµããŒãããããã®Unicodeã®ãµããŒãã§ããïŒ
@DoumanAshãã¹ãŠã®ããã°ã©ã ãåœéçã§ãããšã¯éããŸããããŸããè±èªã®æµæ¢ããããã°ã©ãã³ã°ã®èŠä»¶ã§ããå¿ èŠã¯ãããŸããã
ã³ãŒãå ã®å€æ°åãšã³ã¡ã³ããè±èªã«ããããšã決å®ããããšã¯ãã©ã®ãããžã§ã¯ãã®åªããã¡ã³ããã§ããããŸãã ããã¯ãrustcèªäœãå«ãå€ãã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§èµ·ããããšã§ãã ããããããã¯èšèªãããã«å¶éãããã¹ãã ãšããæå³ã§ã¯ãããŸããã
ç§ãèŠãŠãããŠãŒã¹ã±ãŒã¹ã¯ããããã¯ã·ã§ã³ã³ãŒããæžãããã§ã¯ãªããæããããã®ãã®ã§ãã ããã°ã©ããŒã«ãªãã«ã¯è±èªã«å ªèœã§ãªããã°ãªããªãããšã人ã ã«äŒããã®ã¯æ¬åœã«æ®å¿µã§ãã ãã1ã€ã®ç¶æ³ã¯ãå€åœèªã®UIãäœæããŠãããšãã«ãUIã«ãpÅÃjmenÃããšããã©ãã«ã®ä»ããããã¹ãããã¯ã¹ãããããå€ããlastnameããšããååã®å€æ°ã«å ¥ããŠããŸãå Žåã§ãã ããã«å¥åŠãªã®ã¯ããrodné_ÄÃsloãïŒãã§ã³ã®åœæ°IDçªå·ïŒãšããååã®ãã£ãŒã«ããããå Žåã§ãã ãã®ããã®é¡äŒŒããè±èªã®åèªã¯ãããŸããã ãããã£ãŠããã§ã³ã®çšåã¢ããªãéè¡ã®ã¢ããªãäœæããŠããå Žåã¯ãæ£åœãªçç±ããªãå¥åŠãªååã䜿çšããå¿ èŠããããŸãã ãã®ãããªã¢ããªã¯ãšã«ããä»ã®èšèªã«ç§»æ€ã§ãããããªãã®ã§ã¯ãããŸããã
ãããå¯èœã«ãããã1ã€ã®çç±ã¯ãèšèªåŠè
ãå€æ°åã«IPAè¡šèšã䜿çšããå¿
èŠãããå Žåãå€ãããšã§ãã IPAèšå·ã®è±èªåã¯ãéæ¹ããªãé·ããªãå¯èœæ§ããããŸãã ããšãã°ãèµ€ãšããåèªã®ã¢ã¡ãªã«è±èªã®ré³ã¯ã1æåã®É¹Ì ãšããŠè»¢åãããŸãããæ¯èåŸéšæ¯èåŸéšæ¯èã®æ¥è¿é³ãšåŒã°ããŸãã 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ã§ãã ãããã£ãŠãåå¥è§£æãè¡ããšãã¯ãã©ã®ã³ãŒããã€ã³ããåãå
¥ãå¯èœã§ãã©ããåãå
¥ããããªããã決å®ããå¿
èŠããããŸãããããããéã¯ãäœããæåã§ãããã©ããããŠãã³ãŒãæšæºã«åçŽã«å°ããã¹ãã§ã¯ãããŸããã
çŸåšã®å®è£ ã®@timthelionRustã¯ãUnicodeæšæºã«äœããæåã§ãããã©ãããåçŽã«å°ããã®ã§ã¯ãªãããã¹ãŠã®äŸã§æ£ããçŽæçãªåäœãããXID_Startããã³XID_ContinueãŠãã³ãŒãããããã£ã«äŸåããŠããŸãã
'ɹ'
ãš'Ì '
ã®äž¡æ¹ãXID_Continueã§ããããã say_ɹÌ
ãèš±å¯ãããŸãã'â¬'
ãš'$'
ã¯XID_Continueã§ã¯ãªãããã priceâ¬
ãšprice$
ã¯èš±å¯ãããŠããŸããã'â'
ã¯XID_Startã§ã¯ãªãããã$ â![]
ã¯èš±å¯ãããŠããŸãããpÅÃjmenÃ
ãšrodné_ÄÃslo
ãèš±å¯ãããŸãã@dtolnay説æããããšãããããŸãã ç§ããã°ãããŠããšããèšèã䜿ã£ãããšã«è ¹ãç«ãŠãŠããªãããšãé¡ã£ãŠããŸããããããããã¯ããŸãéžã°ããªãã£ãèšèã§ããã
ããããçŽ æŽãããå¿ã¯åãããã«èããŠããããŠãã³ãŒãæè¡å§å¡äŒã®åªç§ãªäººã ã¯ããªããšåãæžå¿µãæã£ãŠããããšãææããã ãã§ãã
ä»ã®æ¬çªç°å¢ã®ãŠãŒã¹ã±ãŒã¹ãèãåºãããšãã§ããŸãã
ç¹å®ã®åéã®äžéšã®åèªã¯è±èªã«ç¿»èš³ããã®ãé£ããã§ãããäžéšã®ããã°ã©ã ïŒã²ãŒã ãããŒã«ã«ã®ãªã³ã©ã€ã³ãããªãã©ã€ã³ãžã®ãµãŒãã¹ãªã©ïŒã¯ãäžè¯æçã®ååãããŒããŒã®ååãå°åãªã©ãåŠçããå¿ èŠãããå ŽåããããŸãã äŒæ¥ã§åãããã°ã©ããŒã¯ãè±èªã®ç¿»èš³ãäœã§ããããç¥ãå¿ èŠã¯ãããŸããããå€æ°ãšé¢æ°ã®ååãä»ããå¿ èŠããããŸãã 圌ããè±èªã䜿ããªããã°ãªããªãå Žåã圌ãã¯å¥åŠãªååãæãä»ãã§ããããéåžžä»ã®ååãç解ããã®ã¯éåžžã«é£ããã§ãã
ãã®æç¹ã§ãç§ãã¡ã®ã±ãŒã¹ãå€ãããšã¯ééããªããšæããŸãã ããã¹ãããšã¯ã詳现ãç解ããããšã§ãã
ä»ã®ããã€ãã®èšèªã¯UnicodeStandardAnnexïŒ31ã«åæããŠããŸããã詳现ã«ããããªéãããããŸãã çæ³çã«ã¯ãRustã«æé©ãªãã®ã決å®ããããã«ããããã®éãã®åæ©ãèŠã€ããŸãã
https://rosettacode.org/wiki/Unicode_variable_namesã«ã¯ãå€ãã®èšèªã«é¢ããæ å ±ããããŸãã
ç§ã¯@SimonSapinã«åæããŸã-ããã圹ç«ã€ããšã¯ééããããŸããã åé¡ã¯ãæšæºçãªè§£æ±ºçããªããç§ãã¡ã®å€ãïŒããšãã°ç§èªèº«ïŒããã¬ãŒããªããè©äŸ¡ããã®ã«äžååãªç«å Žã«ããããšã§ãã ç§ãã¡ã«æ¬ ããŠããã®ã¯ãå¶çŽãåéããŠæšå¥šãè¡ã人ã ãšæããŸãã ãã®æç¹ã§ã¯ã決å®ãäžããªããããã決å®ãäžãæ¹ãæãŸãããšæããŸãããã ããYet Anotherã®äžé£ã®ã«ãŒã«ãæ¡çšããããããããã€ãã®å äŸïŒçæ³çã«ã¯ãUnicodeä»æ§ãŸãã¯ä»é²ãããã«ã¯å¥ã®èšèªïŒã«åŸãããšã匷ãæãã§ããŸãã
@nikomatsakisããŸããŸãªèšèªéã®å°ããªéãã®åæ©ãæ£ç¢ºã«èª¿æ»ããã®ã¯è¯ãããšã§ããã誰ããã®èª¿æ»ãè¡ãããã«ã¹ãããã¢ããããããšã«ããç¶è¡ãããå Žåã¯ãUAXïŒ31ã«æ£ç¢ºã«åŸããšæããŸãïŒããã¯ç§ãã¡ã®çŸåšã®å®è£ ã¯ïŒãé©åãªããã©ã«ãã§ãã
çŸåšã®å®è£ ãšäžèŽããŠããå Žåã§ãã詳现ãªèšèšã§RFCããã»ã¹ãå®è¡ãã䟡å€ãããå ŽåããããŸãã ïŒäœ¿çšã§ããæåãæ£èŠå/åçæ§ã®æ¯èŒãå°æ¥ã®UnicodeããŒãžã§ã³ã®åŠçæ¹æ³ãªã©ïŒãã®RFCãäœæãã人ã¯ãå°ãªããšã1åã¯UAX31ãäžããäžã«èªãããšããå§ãããŸãã
ãŸããèå¥åçšã«æ°ããïŒãŸãã¯ãããå¯èœæ§ãé«ãã®ã¯ãæ¢åã®ãããã¡ã€ã«ã®1ã€ã®å¶éããããµãã»ããã䜿çšããïŒPRECISãããã¡ã€ã«[1]ãäœæããããšãæ€èšããããšãã§ããŸãã ããã«ããããããã«ç°ãªãå Žåã§ãåããšèŠãªãããèå¥åãæ£èŠåã§ãïŒããšãã°ãåãããã«èŠããããã¹ããåºåããããUnicodeè¡šçŸããããã«ç°ãªãããŒããŒããåãããã±ãŒã«ã®å ŽåïŒãæ確ãªæ å ±ãæäŸã§ããŸããæå¹ãªRustèå¥åã決å®ããããã®ç°¡æœãªã«ãŒã«ã»ããã
PRECISãã¬ãŒã ã¯ãŒã¯ã®æ¢åã®Rustå®è£ ãèªèããŠããŸããïŒäœæã«å¿ èŠãªUnicodeã€ã³ãã©ã¹ãã©ã¯ãã£ã®å€ãããŸã äžè¶³ããŠãããšæããŸãããããã¯ããããããããã®æ¹æ³ã§ä¿®æ£ããå¿ èŠããããŸãïŒã
ç§ã¯èªåèªèº«ãå°é家ãšã¯åŒã³ãŸãããã1ã€ã®PRECISå®è£ ã®æ§ç¯ãæ¯æŽããRFCãšããã€ãã®èœãšãç©Žãšèœãšãç©Žã«äžè¬çã«ç²ŸéããŠããã®ã§ãåãã§æ¯æŽããŸãïŒãŸãã¯PRECISã¯ãŒãã³ã°ã°ã«ãŒãã«å©ããæ±ããŠãã°ãå ±åããŸãïŒå¿ èŠã«å¿ããŠã
[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åãSamWhitedã¯æ¬¡ã®ããã«æžããŠããŸãã
>>
ãŸããæ°ãããã®ãäœæããããšãæ€èšã§ããŸãïŒãŸãã¯ãããå¯èœæ§ãé«ãã®ã¯ã
æ¢åã®ãããã¡ã€ã«ã®1ã€ã®å¶éããããµãã»ããïŒPRECISãããã¡ã€ã«[1]
èå¥åçšã ããã«ããã次ã®ãããªèå¥åãæ£èŠåã§ããŸãã
ãããã«ç°ãªã£ãŠããŠãåããšèŠãªãå¿ èŠããããŸãïŒäŸïŒ
åãããã«èŠããããã¹ããåºåããããŒããŒãããããã±ãŒã«ã®å Žåã
ãã ããUnicodeè¡šçŸããããã«ç°ãªããŸãïŒ
æå¹ãªRustã決å®ããããã®æ確ã§ç°¡æœãªäžé£ã®ã«ãŒã«
èå¥åãPRECISã®æ¢åã®Rustå®è£ ãèªèããŠããŸãã
ãã¬ãŒã ã¯ãŒã¯ïŒ1ã€ãäœæããããã«å¿ èŠãªUnicodeã€ã³ãã©ã¹ãã©ã¯ãã£ã®å€ã
ãŸã è¡æ¹äžæã ãšæããŸãããããããä¿®æ£ããå¿ èŠããããŸã
ããã©ã¡ãã®æ¹æ³ã§ãïŒã[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ãªãUnicodeã®NFCãŸãã¯NFKCãããPRECISãªã®ãïŒ
Unicodeã®NFCãŸãã¯NFKCãããPRECISã䜿çšããçç±
TLïŒDR âæ£èŠåã¯ãäœããæå¹ãªèå¥åã§ãããã©ãããå€æãããšãã«å®è¡ããã1ã€ã®ã¹ãããã«ãããŸããã ä»ã®æäœãå®è¡ããå¿ èŠãããå ŽåïŒãŸãã¯å®è¡ããªãå ŽåããããŸãïŒã
@SimonSapin Unicodeã®æ£èŠåã¯PRECISãããã¡ã€ã«ã®1ã€ã®ã¹ãããã«ãããŸããïŒãããã£ãŠãå®éã«ã¯æ£èŠåã䜿çšããŸããããããNFCãæšæž¬ããŸãïŒããPRECISã¯ããåºç¯å²ã®ãã®ãã«ããŒããŸãã ããšãã°ãæ£èŠåãã©ãŒã ã¯å¹
ã®ãããã³ã°ãè¡ããªãããïŒç§ã¯æããŸãããïŒïŒã FullWidth
ã¯ïŒŠïœïœïœïŒ·ïœïœïœïœ
ãšåãèå¥åã«ã¯ãªããŸããã å
šå¹
ã®ããã¹ããå
¥åãããããŒããŒãã䜿çšããŠããå Žåãããã¯åé¡ã«ãªãå¯èœæ§ããããŸãïŒããã¯ãã©ãã³æåãããæ±ã¢ãžã¢ã®æåã®æ¹ãåé¡ã«ãªãå¯èœæ§ããããŸãããå
šå¹
ã®ããã¹ãã䜿çšãããã±ãŒã«ã®èª°ããåé¡ã«ãªãå¯èœæ§ããããŸããã£ã€ã ã鳎ãããŠãåé¡ã誀ã£ãŠäŒããŠãããã©ããæããŠãã ããïŒã PRECISãããã¡ã€ã«ã§å®è¡ã§ãããã®ä»ã®ããšã«ã¯ãèš±å¯ãããæåããããã£ã®ãµãã»ããã®å®çŸ©ãå«ãŸããŸãïŒããšãã°ãæåãæ°åãããã·ã¥ãæåãªã©ã§å§ãŸãïŒã
_å 責äºé ïŒ_å šå¹ ã®ããã¹ãããããã³ã°ããããšãæãŸãããã©ããã«ã€ããŠã¯ãå®éã«ã¯èããŠããŸããã ããã¯åãªãäŸã§ãã æ£èŠåãéèŠãªã®ãããããŸãããããããã³ã°ããŸã£ããæ°ã«ããªãã®ãããããŸããã Goã¯ãèå¥åã«æåãŸãã¯æ°åã®ããããã£ããããã©ããã ãããã§ãã¯ããã®ã§ãããã ãã§ããŸãããã®ã§ããã°ãç§ãã¡ã«ãšã£ãŠãåé¡ãªããããããŸããã 確ãã«ãã£ãšèããå¿ èŠã§ãã
ããã«èªãïŒããã¯Goä»æ§ãè¡ãããšã§ãïŒããã¯ç§ãææ¡ãããã®ãããã¯ããã«åçŽã§ãè¯ãããšãããããªãããããã§ãªããããããŸããïŒïŒ https ://golang.org/ref/spec#Source_code_representation
PRECISã䜿çšãããã®ã¯äœã§ããïŒ ããã°ã©ãã³ã°èšèªã¯ãããŸããïŒ
PRECISã䜿çšãããã®ã¯äœã§ããïŒ ããã°ã©ãã³ã°èšèªã¯ãããŸããïŒ
ã©ã®èšèªã§ãããããŸããããGoã¯ããããŸãã
é¢é£ããGo2ã®åé¡ïŒgolang / goïŒ16033
2017幎4æ11æ¥ç«ææ¥02:07:49PM-0700ã«ãSamWhitedã¯æ¬¡ã®ããã«æžããŠããŸãã
ããšãã°ãæ£èŠåãã©ãŒã ã¯å¹ ã®ãããã³ã°ãè¡ããªãããã
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ããã¯æ£ããã§ãã ãŸããå®éã«ã¯ææ¡ã§ã¯ãªãããã®åé¡ã®ããã«èãæãããã¢ã€ãã¢ã§ãïŒç³ãèš³ãããŸãããããã®æãšç§ã®ãªã³ã¯ãèªã¿çŽããŠãã ããããããŠããã¯èšèãäžååã§ãã;ãããä»ããã䜿çšããŠããããšã瀺åããããšãæå³ããã®ã§ã¯ãªããç§ã ãéASCIIèå¥åãåŠçããããã«Go以å€ãå®éã«äœãããã®ãããããªãïŒã
@SimonSapin
çŸåšã®å®è£ ãšäžèŽããŠããå Žåã§ãã詳现ãªèšèšã§RFCããã»ã¹ãå®è¡ãã䟡å€ãããå ŽåããããŸãã
ð
UAXïŒ31ãèªãã§ããã®æ©èœã確èªããŸãããPRECISãããã¡ã€ã«ã䜿çšããããšã®ãã1ã€ã®å©ç¹ã¯ãstringprepãå»æ¢ãã代ããã«PRECISã䜿çšããã®ãšåãããã«ãUnicodeããŒãžã§ã³éã§å°æ¥ã®äºææ§ãšã¢ãžã£ã€ã«ãå®çŸããæ¹æ³ãæäŸããŸãïŒåã ã®ã³ãŒããã€ã³ãèªäœã§ã¯ãªããã³ãŒããã€ã³ãã®æŽŸçããããã£ãæäœããããšã«ãã£ãŠïŒã
TR31ã«ã¯ãããã«å¯ŸåŠããããã®ãäžå€èå¥åãã®æŠå¿µããããŸãããäºå®äžãèªç±åœ¢åŒã¯ã©ã¹ãã掟çããPRECISãããã³ã«ã®å¶éããããã«å°ãªãããŒãžã§ã³ã§ãããPRECISã¯ãã«ãŒã«ãå¿ èŠãªé åºãèæ ®ããŠããŸãããé©çšãããŸãïŒç§ã¯æããŸãããïŒïŒãŸããã®ãªã·ã£ã®æçµã·ã°ãã®äœ¿çšãªã©ãPRECISãã¬ãŒã ã¯ãŒã¯ã§ã«ããŒããããšããžã±ãŒã¹ããŸãã¯ãã³ã°ã«ãžã£ã¢åšèŸºã®ããã€ãã®ãšããžã±ãŒã¹ãã«ããŒããŸããïŒç¹°ãè¿ããŸãããç§ã¯ãããã®ã©ã¡ãã®å°é家ã§ããããŸãããããããããPRECISãååšããçç±ã§ã;å°é家ã¯ãã§ã«äœæ¥ãè¡ã£ãŠããŸãïŒã
ããã¯ãUnicodeããŒãžã§ã³éã§å°æ¥ã®äºææ§ãšã¢ãžã£ã€ã«ãå®çŸããæ¹æ³ãæäŸããŸãïŒåã ã®ã³ãŒããã€ã³ãèªäœã§ã¯ãªããã³ãŒããã€ã³ãã®æŽŸçããããã£ãæäœããããšã«ããïŒã
ãã®ç¹ãããããŸããã XID_Start
ãšXID_Continue
ã¯æŽŸçããããã£ã§ãã
ãã®ç¹ãããããŸããã XID_Startããã³XID_Continueã¯æŽŸçããããã£ã§ãã
ãã®æãç§ã¯UAX31ã誀解ãããããããŸããã ç¹å®ã®UnicodeããŒãžã§ã³ãå¿ èŠãªããã«èŠããŸããã èªã¿çŽããŸããããã©ãããå ¥æããã®ãããããŸããã
ãããæçš¿ããã®ã«é©åãªå Žæãã©ããã¯ããããŸããããæ°åŠèšå·ã®ãªã³ãã£ã³ã°ã§ããã€ãã®èå³æ·±ãåé¡ãçºçããå¯èœæ§ããããŸãã å€æ°åãæžãåºãããšã§ç°¡åã«åé¿ã§ããŸãããå®éã®æ¹çšåŒãšã®ããè¯ãçžé¢ãç®æšã§ããå Žåã¯éèŠã«ãªãå¯èœæ§ããããŸãã
ããšãã°ã次ã®ã¹ã¯ãªãŒã³ã·ã§ããã®ÎïŒå€§æåïŒãšÎŽïŒå°æåïŒã ãªã³ã¿ãŒã¯/wrong/ã§ã¯ãããŸããããããã§ã¹ããŒã¯ã±ãŒã¹ã®èŠä»¶ãé©çšããããšã¯å®éã«ã¯æå³ããããŸããã
Swiftã®ããã«ãXID Start / Continueã§ãªããŠããå€æ°åã§çµµæåãèš±å¯ããããšã¯å¯èœã§ããããïŒ
@fwrs ãçµµæåã¯éçµµæåãããã¯ããã«è€éã«ãªããŸããã
äžéšã®ãã³ããŒã®ãããã§ãè²ã现éšãå€æŽãç¶ããçµµæåçµåïŒZWJïŒã·ãŒã±ã³ã¹ã䜿çšã§ããããã«ãªããŸããããããã®ã·ãŒã±ã³ã¹ã®å€ãã¯ãå¿ ãããèçŒã§ã¯èŠããŸããã
ãŸããçµµæåã®å®çŸ©ã¯æ¯å¹Žæ¥éã«æ¡å€§ããŠããŸããããã¯ãå®å®ããä¿¡é Œã§ããããŒãºãæãã§ããã·ã¹ãã ã¬ãã«ã®ããã°ã©ãã³ã°èšèªã§ã¯ãããŸããã
ã§ããããããããã§ãããRustã®ç®æšãšã¯çžæ§ãæªããšæããŸãã ãã ããéããŒã¹ã®ã¹ã¯ãªãã/æè²èšèªã¯ãç®æšã«ãã£ãŠã¯çµµæåãèš±å¯ããããšã§ã¡ãªãããåŸãããå ŽåããããŸãã
@ryankurteãã®äŸã«ã¯æå³äžã®åé¡ããããŸããæ°åŒãæžãåããŠããŸãããU +2206INCREMENTã§ã¯ãªãU+0394 GREEK CAPITALLETTERDELTAã䜿çšããŸããã åè ã¯ã®ãªã·ã£æåã®æåã§ãããã±ãŒã¹ãããã³ã°ããããŸãã åŸè ã¯æ°åŠèšå·ã§ãããããã§ã¯ãããŸããã
ãã®ã³ã¡ã³ããã¯ãã¹ãªã³ã¯ãããïŒ 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
}
äžèšã§èšãã°ãããã2ã€ã®a
ã¯ç°ãªãUnicodeæåã§ããããã2çªç®ã®letãã€ã³ãã£ã³ã°ã¯æåã®letãã€ã³ãã£ã³ã°ãã·ã£ããŠã€ã³ã°ãããäž¡æ¹ããã¹ãã¢ãµãŒãããŸãïŒãã ããéã³å Žã¯Unicodeèå¥åããµããŒãããŠããªãããã§ããããã¯ããŒã«ã«ã§è©ŠããŠãã ãã;ç§ã®ããã«åäœããŸãïŒã
ãã®ãæ©èœãã䜿çšããŠãæ€åºãé£ããRustããã°ã©ã ã«ãšã¯ã¹ããã€ããå°å ¥ã§ããŸããç¹ã«ãã·ã£ããŠã€ã³ã°ã¬ãããã€ã³ãã£ã³ã°ã¯ãç§ãå«ããå€ãã®äººãæ £çšçãªRustãšèŠãªããŠããããã§ãã
PSïŒãã®ãæ©èœãã¯ãæã«è² ããªãRustã³ã³ãã¹ãã§åœ¹ç«ã€ãããããŸãããã #![feature(non_ascii_idents)]
ã¯çãã²ãããã¯ãã§ã:)
@gnzlbg人ã ãããªãã®ã»ãã³ãã³ãã®ãªã·ã£èªã®çå笊ãªã©ã«äº€æããã®ãé²ãããã«ãçŽããããæ€åºããã§ã«ããçšåºŠãµããŒããããŠãããšæããŸããããããèå¥åã«é©çšããããã©ããã¯ããããŸããã ãããããªããããã¯ãã®åé¡ã解決ããŸãã ããã§ãªãå Žåã¯ãå°ãªããšããããã«å®è¡ã§ããããŒã«ããããŸãã
ãã°ããã®é倧ããªåãããªããRFCãå¿ èŠãªããããããéããããã³ãŒããã³ã³ãã€ã©ããåé€ãããå¯èœæ§ãããããšãå°ãå¿é ããŠããŸãã ç§ã¯ãRustã21äžçŽã®èšèªãã€ãŸãUnicodeã§ãããRustãè±èªã話ããªãããã°ã©ããŒã«åªããããšãããªãæ°ã«ãããŠããŸãã ç§ã«æ¬ ããŠããã®ã¯ãRFCãå®éã«äœæããæ©èœã§ãã
@ã±ããã³
人ã ãããªãã®ã»ãã³ãã³ãã®ãªã·ã£èªã®çå笊ãªã©ã«äº€æããã®ãé²ãããã®çŽããããæ€åºã®ãµããŒãã¯ãã§ã«ãããšæããŸããããããèå¥åã«é©çšããããã©ããã¯ããããŸããã
ã¯ããã¯ãªããã®åé¡ã§@ oli-obkã瀺åããŠããããã«ãRustã®å®è£ ã§ã¯ã代ããã«ææ°ã®å ¬åŒã®çŽãããããªã¹ãã䜿çšãããšæããŸãã
http://www.unicode.org/Public/security/revision-06/confusables.txt
ãã¢ã°ãªãããŒã¹ã®æ»æãé²ãããšãã§ããŸãã ãã®ãªã¹ãã¯åæãä¿ã€å¿ èŠããããŸãããããã¯ãã«ãã·ã¹ãã ã®äžéšãšããŠèªååã§ãããã®ã§ãã
@ã±ããã³
ãããæ°ã«ãããªããèå¥åã§ãŠãã³ãŒãããµããŒãããä»ã®èšèªãããããããã®èšèªã«ã¯RFCããã»ã¹ãšåæ§ã®ããã»ã¹ããããŸãã ããªãã¯ãããããã§ãã¯ããããšããå§ããããšãã§ããŸãã 誰ãç¥ã£ãŠããã§ããããå€åããªãã¯ãã®åé¡ã®ãã£ãŒãããã¯ãšäžç·ã«ããããããŒãžããŠãå éšãã©ãŒã©ã ã§pre-RFCãååŸããããšãã§ããŸããïŒ ãã®æç¹ãããããã¯ä»ã®äººãšã®ãã£ãŒãããã¯ãåãå ¥ãããè°è«ãããããããšã§ãããããªãããããç¥ãåã«ããªãã¯RFCã®æºåãã§ããŠããã§ãããã
ããæå³ã§ãASCIIèå¥åãæ°žé ã«äœ¿ãç¶ããããšãé¡ã£ãŠããŸãã Unicodeèå¥åã®åŠçã¯ãçžäºéçšæ§ã®é¢ã§éåžžã«å€§ããªåé¡ã§ãã NFKCãããã³ã°ã®ããå¥åŠãªäŸã®ããã€ãã¯ããã®ãããªãã®ãåãèå¥åã«ããããããããšã§ãã
>>> â = 1
>>> H
1
>>> â
š = 42
>>> IX
42
>>> â = 23
>>> N
23
>>> import math
>>> ⯠= math.e
>>> e
2.718281828459045
>>> âš = 2
>>> Z
2
@mitsuhikoçŸå®ã®äžçã«ã¯ããããçã¿ããããŸãã ãã®åé¡ã¯ã察åŠãé£ããã_å人çã«_圹ã«ç«ããªãæ©èœãå«ãŸããŠãããããç¡èŠããããšã¯ã§ããŸããã
ãŸããçŸåšã®RFCã¯ããããã«éåžžã«é¡äŒŒããäŸã«ã€ããŠã®_lot_ã®è°è«ã®åŸãNFKCãããNFCãæ瀺çã«ææ¡ããŠããŸãã
æãåèã«ãªãã³ã¡ã³ã
ãããæçš¿ããã®ã«é©åãªå Žæãã©ããã¯ããããŸããããæ°åŠèšå·ã®ãªã³ãã£ã³ã°ã§ããã€ãã®èå³æ·±ãåé¡ãçºçããå¯èœæ§ããããŸãã å€æ°åãæžãåºãããšã§ç°¡åã«åé¿ã§ããŸãããå®éã®æ¹çšåŒãšã®ããè¯ãçžé¢ãç®æšã§ããå Žåã¯éèŠã«ãªãå¯èœæ§ããããŸãã
ããšãã°ã次ã®ã¹ã¯ãªãŒã³ã·ã§ããã®ÎïŒå€§æåïŒãšÎŽïŒå°æåïŒã ãªã³ã¿ãŒã¯/wrong/ã§ã¯ãããŸããããããã§ã¹ããŒã¯ã±ãŒã¹ã®èŠä»¶ãé©çšããããšã¯å®éã«ã¯æå³ããããŸããã