자료구조같은거 공부하려고 보면 LinkedList같이 채썰어놓은거나 알려주고 있다.

나는 Copy를 최대한 지연시키면서 메모리 곳곳에 흩어져있는 배열들을 유연하게 이어붙여 인덱싱하고싶다.

이는 내가 앱 나부렝이나 개발하던 고교시절부터 열망(Aspire)해오던 숙원이다. (앱개발에 그런게 뭐하러 필요했는지는 기억이 안난다.)


한동안 잊고지내다 업무적으로 마샬링을 다루게되면서 다시금 갈망이 되살아났는데

닷넷에서 Span, Memory 등을 다루면서 분명 얘들을 이어붙이는 객체도 있을것이라 확신하였다

ReadOnlySequence 라는게 그런목적임이 분명해보이는데, 같다쓰기엔 생태계에 마땅히 자리잡지 않고 이름만 올라와있는 상태이다.


써먹어 보고 싶은데 시퀀스연계부를 다 알아서 구현하라고 하니 파악하기위한 파악조차 어려워하고있다가

System.IO.Pipelines 에서 이를 활용한다는것까지 확인하고

오늘 msdn 구석탱이에 시퀀스생성 유틸리티가 쳐박혀있는것까지 확인했다.

https://learn.microsoft.com/dotnet/api/orleans.serialization.testkit.readonlysequencehelper.toreadonlysequence

ReadOnlySequenceHelper.ToReadOnlySequence Method (Orleans.Serialization.TestKit)Learn more about the Orleans.Serialization.TestKit.ReadOnlySequenceHelper.ToReadOnlySequence in the Orleans.Serialization.TestKit namespace.learn.microsoft.com

아무도안쓰는 오를레앙도 아니고 오를레앙의 테스트 툴킷의 유틸로 박아놨다.

아직 제네릭한 에코시스템을 구성하기엔 한참 멀었나보다.

대기업도 종잡지 못하고있는 고도의 시스템 설계를 응용 애플리케이션이나 만들다가 직접 구현하려고 했던 시도가 얼마나 객기였는가 싶다.


난 이제 사방팔방에 쪼개진 바이너리를 하나의 연속된 바이트처럼 취합해 핸들링할수있는 힘을 얻었다.

닷넷은 신이고 나는 오늘 또다른 스마이트를 갈길수 있게되었다.


#r "nuget: Microsoft.Orleans.Serialization.TestKit, 9.0.1"
using Orleans.Serialization.TestKit;
using System.Buffers;

byte[][] seq = [[1,2,3],[4,5,6]];
var roSeq = seq.ToReadOnlySequence();
foreach(var b in roSeq.Slice(1,4))
b.Display();

IEnumerable<Memory<byte>> Good()
{
yield return (byte[])[1,2,3,4];
yield return (byte[])[5,6,7,8];
}
Good().ToReadOnlySequence().Slice(2, 4).ToArray()