ブログ 2018/12/24 書記素分割/Unicode カテゴリー判定 なんか、昔作ったGraphemeSplitterがC++方面のUnicodeがらみのブログから参照されてたので、ちょっと補足。 UNICODE TEXT SEGMENTATION 「書記素って何?」って話は詳しくは昔書いた記事でも見てもらうとして。 とりあえず、「人間が見て1文字と思うようなもの」を指して書記素(grapheme)といいます。複数の Unicode コードポイントが結合しまくるので、可変長。 いつも例に出すのが家族絵文字(👩🏻👦🏼👨🏽👦🏾👦🏿👩… 続きを読む 2018/12/24 静的な typeof/sizeof JIT Intrinsicsで少し触れましたが、 .NET Core 2.1ではEnum.HasFlagに対する最適化が掛かります。 .NET Core 2.0と2.1でEnum.HasFlagの実行速度が1桁違うわけですが、 古いランタイムでも何とかする手段がなくもないです(ただし、Unsafe)。 今日はそんな、.NET Core 2.0以前でも使える最適化の話。 定数最適化 例えば、以下のようなコードを考えます。 static int X() { if (true… 続きを読む 2018/12/23 JIT Intrinsics .NET Core 2.1 では、いくつか、JIT 時の特殊対応によるパフォーマンス改善を行っています。 そういう「特殊対応」を intrinsic (固有の、内在的な、内因的な、本質的な)と呼びます。 「JIT 時の特殊対応」であれば「JIT intrinsic expansions」(固有展開)とか「JIT intrinsics」(s が付くことで名詞化してる。economics とかの s と同じ)と言います。 Intrinsic 属性 JIT 時特殊対応をしているクラスやメソッド… 続きを読む 2018/12/22 配列インデックスは0以上 今日は corefx (.NET の標準ライブラリ)の実装レベルの最適化の話。 .NET Core 2.0 とか 2.1 リリースの頃にブログも出ていましたが、 .NET Core 2.X 世代は結構パフォーマンス改善を頑張っています。 Performance Improvements in .NET Core Performance Improvements in .NET Core 2.1 実際、 .NET Framework で動かしていたアプリを、 .NET Core… 続きを読む 2018/12/21 ピックアップRoslyn 12/21 & Connect() Japan フォローアップ 昨日、Connect(); Japan 2018でちょっとだけですけども、C# 8.0の話をしたりしました。 7分(ちょっと超過したけど)だとあんまり大したことを話せず… とりあえず、昨日やったデモは、1機能1コミットでプルリクを作って GitHub においてあるのでそちらも参照してみてください。 C# 8.0 デモ用 … 昨日やれたデモ。Preview 1 で入った機能の紹介。 UfcppSample … C# によるプログラミング入門で書いてるコードに対して NullableRe… 続きを読む 新しい投稿へ 過去の投稿へ
2018/12/24 書記素分割/Unicode カテゴリー判定 なんか、昔作ったGraphemeSplitterがC++方面のUnicodeがらみのブログから参照されてたので、ちょっと補足。 UNICODE TEXT SEGMENTATION 「書記素って何?」って話は詳しくは昔書いた記事でも見てもらうとして。 とりあえず、「人間が見て1文字と思うようなもの」を指して書記素(grapheme)といいます。複数の Unicode コードポイントが結合しまくるので、可変長。 いつも例に出すのが家族絵文字(👩🏻👦🏼👨🏽👦🏾👦🏿👩… 続きを読む
2018/12/24 静的な typeof/sizeof JIT Intrinsicsで少し触れましたが、 .NET Core 2.1ではEnum.HasFlagに対する最適化が掛かります。 .NET Core 2.0と2.1でEnum.HasFlagの実行速度が1桁違うわけですが、 古いランタイムでも何とかする手段がなくもないです(ただし、Unsafe)。 今日はそんな、.NET Core 2.0以前でも使える最適化の話。 定数最適化 例えば、以下のようなコードを考えます。 static int X() { if (true… 続きを読む
2018/12/23 JIT Intrinsics .NET Core 2.1 では、いくつか、JIT 時の特殊対応によるパフォーマンス改善を行っています。 そういう「特殊対応」を intrinsic (固有の、内在的な、内因的な、本質的な)と呼びます。 「JIT 時の特殊対応」であれば「JIT intrinsic expansions」(固有展開)とか「JIT intrinsics」(s が付くことで名詞化してる。economics とかの s と同じ)と言います。 Intrinsic 属性 JIT 時特殊対応をしているクラスやメソッド… 続きを読む
2018/12/22 配列インデックスは0以上 今日は corefx (.NET の標準ライブラリ)の実装レベルの最適化の話。 .NET Core 2.0 とか 2.1 リリースの頃にブログも出ていましたが、 .NET Core 2.X 世代は結構パフォーマンス改善を頑張っています。 Performance Improvements in .NET Core Performance Improvements in .NET Core 2.1 実際、 .NET Framework で動かしていたアプリを、 .NET Core… 続きを読む
2018/12/21 ピックアップRoslyn 12/21 & Connect() Japan フォローアップ 昨日、Connect(); Japan 2018でちょっとだけですけども、C# 8.0の話をしたりしました。 7分(ちょっと超過したけど)だとあんまり大したことを話せず… とりあえず、昨日やったデモは、1機能1コミットでプルリクを作って GitHub においてあるのでそちらも参照してみてください。 C# 8.0 デモ用 … 昨日やれたデモ。Preview 1 で入った機能の紹介。 UfcppSample … C# によるプログラミング入門で書いてるコードに対して NullableRe… 続きを読む