<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Annotations on Nalar</title>
    <link>https://nalar.dev/tags/annotations/</link>
    <description>Recent content in Annotations on Nalar</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 09 Sep 2026 00:00:00 +0700</lastBuildDate>
    <atom:link href="https://nalar.dev/tags/annotations/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Introspect Deferred Annotations with Python annotationlib</title>
      <link>https://nalar.dev/introspect-deferred-annotations-with-python-annotationlib/</link>
      <pubDate>Wed, 09 Sep 2026 00:00:00 +0700</pubDate>
      <guid>https://nalar.dev/introspect-deferred-annotations-with-python-annotationlib/</guid>
      <description>&lt;p&gt;Python annotations are not only for static type checkers. Frameworks use them to build dependency graphs, validators inspect them to derive schemas, and documentation tools render them for humans. That makes annotation introspection part of the runtime behavior of many Python applications.&lt;/p&gt;&#xA;&lt;p&gt;Python 3.14 changes that behavior substantially. Annotations now use deferred evaluation by default, and the standard library adds &lt;code&gt;annotationlib&lt;/code&gt; as the dedicated low-level interface for retrieving them.&lt;/p&gt;&#xA;&lt;p&gt;The important consequence is that annotation consumers should stop assuming there is one universally correct representation. Sometimes you want actual runtime values. Sometimes unresolved names must remain inspectable. Sometimes you only need readable text and should avoid resolving names entirely.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
