<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Akira Shimodate</title>
    <description>The latest articles on DEV Community by Akira Shimodate (@shimodateakira).</description>
    <link>https://dev.to/shimodateakira</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1952262%2Fd38dea58-fdfe-4f4a-b7dd-ccfd8d4b3d79.png</url>
      <title>DEV Community: Akira Shimodate</title>
      <link>https://dev.to/shimodateakira</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shimodateakira"/>
    <language>en</language>
    <item>
      <title>Are User-Defined Literals Necessary in C#?</title>
      <dc:creator>Akira Shimodate</dc:creator>
      <pubDate>Fri, 20 Mar 2026 12:22:46 +0000</pubDate>
      <link>https://dev.to/shimodateakira/are-user-defined-literals-necessary-in-c-22a4</link>
      <guid>https://dev.to/shimodateakira/are-user-defined-literals-necessary-in-c-22a4</guid>
      <description>&lt;h2&gt;
  
  
  A Step Toward Meaningful Values
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This is not a new idea.&lt;/p&gt;

&lt;p&gt;👉 It is a continuation of how C# has been evolving.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Giving meaning directly to values is a natural evolution of C#.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;C# has been moving in this direction for years.&lt;/p&gt;

&lt;p&gt;This article proposes User-Defined Literals (UDL) as a natural&lt;br&gt;
continuation of that evolution.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Current Limitation
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;duration&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;123&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;We don't know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  seconds?\&lt;/li&gt;
&lt;li&gt;  milliseconds?&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;No meaning.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Current Solution
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="m"&gt;123&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Milliseconds&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;Meaning depends on API.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  The Core Problem
&lt;/h2&gt;

&lt;p&gt;Traditionally, meaning is attached after the value is created.&lt;/p&gt;

&lt;p&gt;UDL shifts that boundary.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Values themselves have no meaning.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Proposal
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;duration&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;123&lt;/span&gt;&lt;span class="n"&gt;_ms&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Type is known\&lt;/li&gt;
&lt;li&gt;  Meaning is known&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Meaning is embedded in the value.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Why This Is Natural
&lt;/h2&gt;

&lt;p&gt;C# has already evolved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  foreach (pattern-based)\&lt;/li&gt;
&lt;li&gt;  await (pattern-based)\&lt;/li&gt;
&lt;li&gt;  using (pattern-based)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Language privileges have been opened.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;See also:\&lt;br&gt;
👉 (&lt;a href="https://dev.to/shimodateakira/why-c-keeps-opening-its-syntax-and-why-it-matters-3l7f"&gt;https://dev.to/shimodateakira/why-c-keeps-opening-its-syntax-and-why-it-matters-3l7f&lt;/a&gt;)&lt;/p&gt;
&lt;h2&gt;
  
  
  Common Misconception
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Literal = compile-time constant&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not true.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Now&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Literal is syntax, not evaluation timing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  APIs attach meaning later\&lt;/li&gt;
&lt;li&gt;  Literals carry meaning immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;This is not syntax sugar. It's a design shift.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;So the real question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Should values themselves carry meaning?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And if so:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How far should C# go in that direction?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'm curious how others see this.&lt;/p&gt;

&lt;p&gt;Is this a natural evolution of C#,&lt;br&gt;
or are we just moving complexity from APIs into the language itself?&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>programming</category>
      <category>languagedesign</category>
    </item>
    <item>
      <title>Why C# Keeps Opening Its Syntax (And Why It Matters)</title>
      <dc:creator>Akira Shimodate</dc:creator>
      <pubDate>Fri, 20 Mar 2026 11:57:17 +0000</pubDate>
      <link>https://dev.to/shimodateakira/why-c-keeps-opening-its-syntax-and-why-it-matters-3l7f</link>
      <guid>https://dev.to/shimodateakira/why-c-keeps-opening-its-syntax-and-why-it-matters-3l7f</guid>
      <description>&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;C# has been evolving in a very specific direction:&lt;/p&gt;

&lt;p&gt;👉 It is gradually giving language-level privileges to user-defined types.&lt;/p&gt;

&lt;p&gt;This is not accidental.&lt;br&gt;
This article explains why.&lt;/p&gt;

&lt;p&gt;C# has been evolving in a very specific direction:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Language-level privileges are gradually being opened to user-defined&lt;br&gt;
types.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This article explains that evolution and why it naturally leads to the&lt;br&gt;
idea of giving meaning to values themselves.&lt;/p&gt;
&lt;h2&gt;
  
  
  Early C#: Permission by Type
&lt;/h2&gt;

&lt;p&gt;In early C#, language constructs were tightly bound to specific types.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This required IEnumerable.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This construct only works if your type implements this interface.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Modern C#: Pattern-Based
&lt;/h2&gt;

&lt;p&gt;Today, it's different.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyCollection&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Enumerator&lt;/span&gt; &lt;span class="nf"&gt;GetEnumerator&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Enumerator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;Enumerator&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;Current&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;MoveNext&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;The compiler now cares about behavior, not type.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  This Pattern Repeats
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  using → Dispose()&lt;/li&gt;
&lt;li&gt;  await → GetAwaiter()&lt;/li&gt;
&lt;li&gt;  deconstruction → Deconstruct()&lt;/li&gt;
&lt;li&gt;  collection initializer → Add()&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Language features are no longer exclusive.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why This Change Happened
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Meaning should not be trapped inside APIs.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;TimeSpan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FromMilliseconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;123&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;vs&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="m"&gt;123&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Milliseconds&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;The latter embeds meaning directly into the value.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Syntax as a Shortcut for Meaning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  APIs are read sequentially\&lt;/li&gt;
&lt;li&gt;  Syntax is recognized instantly&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Syntax reduces cognitive load.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Next Question
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Can values themselves carry meaning?&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This has no meaning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Direction of Evolution
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt; Meaning in types\&lt;/li&gt;
&lt;li&gt; Meaning in behavior\&lt;/li&gt;
&lt;li&gt; Meaning in syntax&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Next:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Meaning in values&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Related Proposal
&lt;/h2&gt;

&lt;p&gt;I proposed a concrete idea based on this direction:\&lt;br&gt;
(&lt;a href="https://dev.to/shimodateakira/why-cant-user-types-have-literals-in-c-3ln1"&gt;https://dev.to/shimodateakira/why-cant-user-types-have-literals-in-c-3ln1&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;C# is no longer just a language for writing programs.&lt;/p&gt;

&lt;p&gt;👉 It is becoming a language for expressing meaning directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;C# is evolving from type-centric to meaning-centric.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And naturally:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Toward embedding meaning directly into values.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>programming</category>
      <category>languagedesign</category>
    </item>
    <item>
      <title>Why Can't User Types Have Literals in C#?</title>
      <dc:creator>Akira Shimodate</dc:creator>
      <pubDate>Sun, 15 Mar 2026 03:52:08 +0000</pubDate>
      <link>https://dev.to/shimodateakira/why-cant-user-types-have-literals-in-c-3ln1</link>
      <guid>https://dev.to/shimodateakira/why-cant-user-types-have-literals-in-c-3ln1</guid>
      <description>&lt;h1&gt;
  
  
  Why Can't User Types Have Literals in C#?
&lt;/h1&gt;

&lt;p&gt;This is about a simple question:&lt;/p&gt;

&lt;p&gt;Why can built-in types have literals, but user-defined types cannot?&lt;/p&gt;

&lt;p&gt;C# allows us to write literals like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="m"&gt;123L&lt;/span&gt;
&lt;span class="m"&gt;1.5m&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These suffixes change the type of the literal.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;L&lt;/code&gt; → &lt;code&gt;long&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;m&lt;/code&gt; → &lt;code&gt;decimal&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This syntax is extremely convenient and natural.&lt;/p&gt;

&lt;p&gt;But it raises an interesting question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is this feature limited to built-in types?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What if user-defined types could have literal suffixes too?&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="n"&gt;_ms&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;1080&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;_pt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"abc.*"&lt;/span&gt;&lt;span class="n"&gt;_regex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These could mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;100_ms&lt;/code&gt; → &lt;code&gt;TimeSpan&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;(1920,1080)_pt&lt;/code&gt; → &lt;code&gt;Point&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"abc.*"_regex&lt;/code&gt; → &lt;code&gt;Regex&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, &lt;strong&gt;user types could participate in literal syntax.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Current Way
&lt;/h2&gt;

&lt;p&gt;Today, we typically write something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TimeSpan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FromMilliseconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If user-defined literals existed, we could instead write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="n"&gt;_ms&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The meaning would be identical.&lt;/p&gt;

&lt;p&gt;But the code becomes closer to the domain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Another Example
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Point
&lt;/h3&gt;

&lt;p&gt;Current code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;1080&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Literal version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;1080&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;_pt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Regex
&lt;/h3&gt;

&lt;p&gt;Current code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Regex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"abc.*"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Literal version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"abc.*"&lt;/span&gt;&lt;span class="n"&gt;_regex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These examples show how domain types could become &lt;strong&gt;first-class literals&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Could This Be Defined?
&lt;/h2&gt;

&lt;p&gt;One possible syntax could look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;TimeSpan&lt;/span&gt; &lt;span class="k"&gt;operator&lt;/span&gt; &lt;span class="nf"&gt;_ms&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;TimeSpan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FromMilliseconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we could write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="n"&gt;_ms&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;Point&lt;/span&gt; &lt;span class="k"&gt;operator&lt;/span&gt; &lt;span class="nf"&gt;_pt&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;coords&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coords&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;coords&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;1080&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;_pt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives user types an entry point into &lt;strong&gt;literal syntax&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Extension Properties Aren't the Same
&lt;/h2&gt;

&lt;p&gt;A common alternative might be something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ms&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But semantically this is different.&lt;/p&gt;

&lt;p&gt;Extension property interpretation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100
↓
int
↓
extension property
↓
TimeSpan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Literal interpretation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100_ms
↓
TimeSpan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The difference is subtle but important.&lt;/p&gt;

&lt;p&gt;Extension properties &lt;strong&gt;operate on values&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;User-defined literals &lt;strong&gt;change how the literal itself is interpreted&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Doesn't C# Already Have This?
&lt;/h2&gt;

&lt;p&gt;Most programming languages treat literals as &lt;strong&gt;built-in type privileges&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example in C#:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;123
1.5
"abc"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are tied directly to built-in types.&lt;/p&gt;

&lt;p&gt;Allowing user-defined literals would affect multiple parts of the compiler:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;lexer&lt;/li&gt;
&lt;li&gt;parser&lt;/li&gt;
&lt;li&gt;type binding&lt;/li&gt;
&lt;li&gt;IDE tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because literals sit at the core of language syntax, they are traditionally restricted.&lt;/p&gt;

&lt;h2&gt;
  
  
  But Some Languages Already Do This
&lt;/h2&gt;

&lt;p&gt;C++ introduced &lt;strong&gt;User Defined Literals (UDL)&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mx"&gt;100ms&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows conversions like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;literal → user type
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And it works surprisingly well in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Potential Use Cases
&lt;/h2&gt;

&lt;p&gt;User-defined literals could improve expressiveness in several domains.&lt;/p&gt;

&lt;h3&gt;
  
  
  Units
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;delay&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="n"&gt;_ms&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;distance&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1.5&lt;/span&gt;&lt;span class="n"&gt;_km&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Physics / Simulation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;velocity&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="n"&gt;_mps&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;gravity&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;9.8&lt;/span&gt;&lt;span class="n"&gt;_mps2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Regex
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;regex&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;@"^[a-z0-9_]+$"&lt;/span&gt;&lt;span class="n"&gt;_regex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  SQL DSL
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;$"select * from Users where id=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="n"&gt;_sql&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  UI Coordinates
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;1080&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;_pt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In these cases the code becomes closer to the &lt;strong&gt;domain language&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Type System Perspective
&lt;/h2&gt;

&lt;p&gt;This idea isn't just syntactic sugar.&lt;/p&gt;

&lt;p&gt;Today C# effectively has:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;literal authority → built-in types
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;User-defined literals would expand this to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;literal authority → any type
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In other words, it would give user types &lt;strong&gt;literal citizenship&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This touches on deeper questions about &lt;strong&gt;type system design&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proposal
&lt;/h2&gt;

&lt;p&gt;I wrote a more detailed proposal here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dotnet/csharplang/discussions/9605" rel="noopener noreferrer"&gt;https://github.com/dotnet/csharplang/discussions/9605&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd be curious to hear what other C# developers think about this idea.&lt;/p&gt;

&lt;p&gt;Would user-defined literals make C# more expressive,&lt;br&gt;
or would they introduce unnecessary complexity?&lt;/p&gt;

&lt;h2&gt;
  
  
  Discussion and Counterpoints
&lt;/h2&gt;

&lt;p&gt;This idea has also sparked discussion on Reddit, where a number of interesting counterpoints were raised:&lt;/p&gt;

&lt;p&gt;[&lt;a href="https://www.reddit.com/r/csharp/comments/1rw6fwd/proposal_userdefined_literals_for_c/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/csharp/comments/1rw6fwd/proposal_userdefined_literals_for_c/&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;One recurring argument is that UDLs are effectively no different from extension methods.&lt;/p&gt;

&lt;p&gt;While that comparison makes sense at the implementation level, I think it misses an important distinction in how meaning is expressed in code — which is the main motivation behind this proposal.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>programming</category>
      <category>languagedesign</category>
    </item>
    <item>
      <title>Introducing VirtualStorageLibrary: A .NET Solution for In-Memory Tree Structures</title>
      <dc:creator>Akira Shimodate</dc:creator>
      <pubDate>Tue, 20 Aug 2024 01:12:56 +0000</pubDate>
      <link>https://dev.to/shimodateakira/introducing-virtualstoragelibrary-a-net-solution-for-in-memory-tree-structures-2133</link>
      <guid>https://dev.to/shimodateakira/introducing-virtualstoragelibrary-a-net-solution-for-in-memory-tree-structures-2133</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn006hyzr16pfsoisse42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn006hyzr16pfsoisse42.png" alt="burner.png" width="800" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;repository: &lt;a href="https://github.com/shimodateakira/VirtualStorageLibrary" rel="noopener noreferrer"&gt;https://github.com/shimodateakira/VirtualStorageLibrary&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hello Dev.to,&lt;/p&gt;

&lt;p&gt;I'm excited to share a project I've been working on called VirtualStorageLibrary.&lt;br&gt;
It's a .NET library designed to manage in-memory tree structures, including items, directories, and symbolic links.&lt;/p&gt;

&lt;p&gt;Here's an introduction to the library:&lt;/p&gt;

&lt;p&gt;Project Overview and Purpose:&lt;/p&gt;

&lt;p&gt;VirtualStorageLibrary is a .NET library that operates entirely in-memory and &lt;br&gt;
provides a tree-structured collection. This library offers a foundation &lt;br&gt;
for managing hierarchical data structures, supporting items, directories, &lt;br&gt;
and symbolic links that encapsulate user-defined types  (generic types defined by the user).&lt;br&gt;&lt;br&gt;
This library is not a file system.&lt;br&gt;&lt;br&gt;
Instead, it was redesigned from scratch to create a more &lt;br&gt;
flexible and user-friendly tree structure. The library aims to make it &lt;br&gt;
intuitive to reference, traverse, and manipulate nodes by specifying &lt;br&gt;
paths.&lt;/p&gt;

&lt;p&gt;Project Background:&lt;/p&gt;

&lt;p&gt;The collections provided by .NET are linear, including types like hash sets, &lt;br&gt;
arrays, lists, and dictionaries, which inherently have a linear structure (such as arrays and lists).&lt;br&gt;
In contrast, common file systems can be viewed as tree-shaped collections, where &lt;br&gt;
elements are managed as nodes in a hierarchical structure. While there are &lt;br&gt;
existing libraries that support tree-shaped collections, I couldn’t find one &lt;br&gt;
that models a file system-like structure. Therefore, I conceptualized a &lt;br&gt;
logical interpretation of a file system and asked, "Can we implement a tree &lt;br&gt;
collection purely as objects?" The goal was to create a system that can &lt;br&gt;
flexibly manage hierarchical  and allow intuitive access.&lt;/p&gt;

&lt;p&gt;Key Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Flexible Tree Structure&lt;br&gt;
Hierarchical structure based on parent-child&lt;br&gt;
relationships, enabling flexible node management.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Various Nodes&lt;br&gt;
Items, directories, and symbolic links, including&lt;br&gt;
user-defined types .&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Intuitive Node Operations via Paths&lt;br&gt;
API for referencing, searching, adding,&lt;br&gt;
deleting, renaming, copying, and moving nodes using paths.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Link Management&lt;br&gt;
Symbolic links managed with a link dictionary, tracking&lt;br&gt;
changes in target paths.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Circular Reference Prevention&lt;br&gt;
Detects and prevents circular references in paths involving&lt;br&gt;
symbolic links by throwing an exception.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flexible Node List Retrieval&lt;br&gt;
Retrieves node lists within directories, filtered, grouped, and&lt;br&gt;
sorted by specified node types and attributes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anticipated Use Cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Natural Language Processing (NLP)&lt;/li&gt;
&lt;li&gt;Knowledge Base Systems&lt;/li&gt;
&lt;li&gt;Game Development&lt;/li&gt;
&lt;li&gt;Hierarchical Clustering&lt;/li&gt;
&lt;li&gt;Education and Learning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Development Status and Future Plans:&lt;/p&gt;

&lt;p&gt;The current version is 0.8.0 (prerelease).&lt;br&gt;
As of 2024/08, all essential features for version 1.0.0 have been implemented.&lt;br&gt;&lt;br&gt;
However, some bug fixes, around 30 feature improvements, and refactoring tasks remain.&lt;br&gt;&lt;br&gt;
With version 0.8.0, we aim to gather user feedback, including bug reports and feature enhancement suggestions.&lt;br&gt;&lt;br&gt;
Simultaneously, we plan to work through the remaining tasks for version 0.9.0, targeted for release in October 2024.&lt;br&gt;&lt;br&gt;
During this period, class names, method names, property names, and other elements in the library may change, merge, or be deprecated without notice.&lt;br&gt;&lt;br&gt;
Detailed information will be provided in the release notes, so please check them for updates.  &lt;/p&gt;

&lt;p&gt;For more detailed information on the current issues and planned improvements, please visit the following page (content in Japanese):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/users/shimodateakira/projects/3/views/3" rel="noopener noreferrer"&gt;https://github.com/users/shimodateakira/projects/3/views/3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you for your interest, and I look forward to your feedback.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HmcGAg5g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/shimodateakira/VirtualStorageLibrary/master/tree_256x256.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HmcGAg5g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/shimodateakira/VirtualStorageLibrary/master/tree_256x256.svg" alt="VirtualStorageLibraryLogo" width="256" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>opensource</category>
      <category>nuget</category>
    </item>
  </channel>
</rss>
