ufcpp-live / UfcppLiveAgenda

@ufcpp live streaming agenda
MIT License
24 stars 2 forks source link

【C# 11 候補】 low level #53

Closed ufcpp closed 2 years ago

ufcpp commented 2 years ago

配信URL: https://www.youtube.com/watch?v=Dx4MbqW0fN8

https://github.com/ufcpp-live/UfcppLiveAgenda/issues/51 もまだ2/3くらい未消化なわけですが。

4件追加 & この内容あんまり配信でやってないかも。

pattern maching on ReadOnlySpan<char> にも触れてもいいかも。

ufcpp-live commented 2 years ago
using System.Text.RegularExpressions;

//lang=regex
var s = @"(\w+)";

//lang=json
var json = @"{ ""abc"": 123 }";
// これでも色がつくようになる予定 (VS 17.2 p1)。
Bar.M(@"{ ""abc"": 123 }");

//lang=date はない!!!
var d = "ffff";
DateTime.Now.ToString("ffffff"); // インテリセンス候補が出るだけ。色付けなし。

class Bar
{
    // StringSyntax 属性が .NET 7 Preview 1 に入ってるはず。
    public static void M([StringSyntax("json")] string json) { }
}
ufcpp-live commented 2 years ago
int x = 123;

//↓こう書きたい予感するけど、多分、 $ 付けると embedded language 働かない。
//lang=json
var rawString = $$"""
    {
         "abc": {{x}}
    }
    """;
ufcpp-live commented 2 years ago
int x = 123;

//↓こう書きたい予感するけど、多分、 $ 付けると embedded language 働かない。
//lang=json
var rawString = $$"""
    {
         "abc": {{x}}
    }
    """;
ufcpp-live commented 2 years ago
var f = (ref int x
, int x0, int x1, int x2, int x3, int x4, int x5, int x6, int x7
, int x10, int x11, int x12, int x13, int x14, int x15, int x16, int x17
, int x20, int x21, int x22, int x23, int x24, int x25, int x26, int x27
         ) => ref x;

これから生成される匿名デリゲートの内部的な名前は <>F{4000000000001} でした。

ちなみに、 (ref int x) => ref x; のやつは <>F{00000005}

ufcpp-live commented 2 years ago

多値 ref 戻り値ほしい…

(ref T A, ref T B) m(int index)
{
    var ia = index >> 4;
    var ib = 0xF & index;

    ref var a = ref table[ia];
    ref var b = ref a.SubTable[ib];

    return (ref a, ref b);
}
ufcpp-live commented 2 years ago
int m(ReadOnlySpan<char> s) => s switch
{
    "abc" => 1,
    "def" => 2,
    _ => 0,
};
ufcpp-live commented 2 years ago
using System.Text;

var s = "😊";
var sub = s.Substring(1); // invalid な UTF-16

Console.WriteLine($"{sub} {(int)sub[0]:X}");

var bytes = Encoding.Unicode.GetBytes(sub);
var decoded = Encoding.Unicode.GetString(bytes);

foreach (var b in bytes)
{
    Console.WriteLine($"{(int)b:X}");
}

Console.WriteLine($"{decoded} {(int)decoded[0]:X}");
? DE0A
FD
FF
? FFFD
ufcpp-live commented 2 years ago

U+200B

image

ufcpp-live commented 2 years ago

今日のラストはビープ音だった

Console.WriteLine("\a");