<?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: Yuki Kimoto</title>
    <description>The latest articles on DEV Community by Yuki Kimoto (@yukikimoto).</description>
    <link>https://dev.to/yukikimoto</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%2F592222%2Fb7033b06-7559-4902-9325-49521389b3c4.jpg</url>
      <title>DEV Community: Yuki Kimoto</title>
      <link>https://dev.to/yukikimoto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yukikimoto"/>
    <language>en</language>
    <item>
      <title>Enabling AddressSanitizer (ASan) in Makefile.PL for Linux Environments</title>
      <dc:creator>Yuki Kimoto</dc:creator>
      <pubDate>Wed, 13 May 2026 01:03:09 +0000</pubDate>
      <link>https://dev.to/yukikimoto/enabling-addresssanitizer-asan-in-makefilepl-for-linux-environments-22fe</link>
      <guid>https://dev.to/yukikimoto/enabling-addresssanitizer-asan-in-makefilepl-for-linux-environments-22fe</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx27fwry0vz7mvpb6nxzq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx27fwry0vz7mvpb6nxzq.png" alt=" " width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    &lt;strong&gt;Note: This method is designed for Linux systems where LD_PRELOAD is available.&lt;/strong&gt; &lt;br&gt;
    AddressSanitizer (ASan) is a powerful tool for detecting memory corruption in C/C++ code. When developing Perl XS modules, you can integrate ASan support directly into your &lt;code&gt;Makefile.PL&lt;/code&gt; to make debugging seamless.&lt;br&gt;
  &lt;/p&gt;


&lt;h3&gt;Add the 'asan-on-linux' Option&lt;/h3&gt;
&lt;br&gt;
  &lt;p&gt;&lt;br&gt;
    First, use &lt;code&gt;GetOptions&lt;/code&gt; to provide a dedicated flag for ASan. This allows users to enable memory sanitization explicitly. We also set up a temporary directory to store ASan's detailed log files.&lt;br&gt;
  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;use Getopt::Long;
use File::Path 'mkpath';

GetOptions('asan-on-linux' =&amp;gt; \my $asan_on_linux);

my @ccflags;
my @ldflags;
my $asan_logs_dir = ".tmp/asan_logs";

if ($asan_on_linux) {
    push @ccflags, "-fsanitize=address", "-fno-omit-frame-pointer";
    push @ldflags, "-fsanitize=address";
    
    mkpath $asan_logs_dir unless -d $asan_logs_dir;
}&lt;/code&gt;&lt;/pre&gt;


&lt;h3&gt;Automate Library Preloading via Makefile Macros&lt;/h3&gt;
&lt;br&gt;
  &lt;p&gt;&lt;br&gt;
    Since the standard &lt;code&gt;perl&lt;/code&gt; binary isn't typically compiled with ASan, we must ensure &lt;code&gt;libasan.so&lt;/code&gt; is correctly preloaded before the interpreter starts. By using the &lt;code&gt;macro&lt;/code&gt; parameter in &lt;code&gt;WriteMakefile&lt;/code&gt;, we can automate this process for &lt;code&gt;make test&lt;/code&gt;.&lt;br&gt;
  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;use Config;

WriteMakefile(
    NAME              =&amp;gt; 'My::Module',
    CCFLAGS           =&amp;gt; "$Config{ccflags} " . join(' ', @ccflags),
    LDDLFLAGS         =&amp;gt; "$Config{lddlflags} " . join(' ', @ldflags),
    # ...
    macro =&amp;gt; {
        $asan_on_linux ? (
            'override FULLPERL' =&amp;gt; qq|LD_PRELOAD=\$\$($Config{cc} -print-file-name=libasan.so) ASAN_OPTIONS="log_path=$asan_logs_dir/asan.log:exitcode=0" $^X|
        ) : (),
    },
);&lt;/code&gt;&lt;/pre&gt;


&lt;h3&gt;How to Handle Memory Issues&lt;/h3&gt;
&lt;br&gt;
  &lt;p&gt;&lt;br&gt;
    When ASan is enabled, the behavior depends on the type of memory issue:&lt;br&gt;
  &lt;/p&gt;
&lt;br&gt;
  &lt;ul&gt;

    &lt;li&gt;

      &lt;strong&gt;Memory Corruption:&lt;/strong&gt; Issues like buffer overflows or use-after-free will cause a &lt;strong&gt;Segmentation Fault (Segfault)&lt;/strong&gt; immediately. When this happens, you must fix the code until all tests pass without crashing.
    &lt;/li&gt;

    &lt;li&gt;

      &lt;strong&gt;Memory Leaks:&lt;/strong&gt; Unlike corruption, memory leaks do not cause a crash. To find them, you &lt;strong&gt;must check the logs&lt;/strong&gt; after running your tests.
    &lt;/li&gt;

  &lt;/ul&gt;


&lt;p&gt;&lt;br&gt;
    ASan generates a separate log file for each process. To efficiently find both corruption reports and leaks related to your specific module, use the following Perl one-liner (Replace &lt;code&gt;My::Module&lt;/code&gt; with your module's name):&lt;br&gt;
  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;perl -00 -ne 'print "--- File: $ARGV ---\n$_\n" if /My::Module/' .tmp/asan_logs/* &amp;gt; .tmp/asan_summary.log&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;br&gt;
    This command uses Perl's "paragraph mode" (&lt;code&gt;-00&lt;/code&gt;) to extract the entire stack trace, allowing you to see exactly where the issue (crash or leak) was triggered in your native code.&lt;br&gt;
  &lt;/p&gt;





&lt;h2&gt;Appendix: Platform Compatibility&lt;/h2&gt;


&lt;h3&gt;macOS (Untested Hint)&lt;/h3&gt;
&lt;br&gt;
  &lt;p&gt;&lt;br&gt;
    On macOS, you might try &lt;code&gt;DYLD_INSERT_LIBRARIES&lt;/code&gt; instead of &lt;code&gt;LD_PRELOAD&lt;/code&gt;. However, &lt;strong&gt;System Integrity Protection (SIP)&lt;/strong&gt; often prevents preloading into system binaries like &lt;code&gt;/usr/bin/perl&lt;/code&gt;. You would likely need to use a perl installed via &lt;code&gt;perlbrew&lt;/code&gt; or &lt;code&gt;plenv&lt;/code&gt;.&lt;br&gt;
  &lt;/p&gt;


&lt;h3&gt;Windows (Not Supported)&lt;/h3&gt;
&lt;br&gt;
  &lt;p&gt;&lt;br&gt;
    &lt;strong&gt;This mechanism is not applicable to Windows.&lt;/strong&gt; Windows lacks &lt;code&gt;LD_PRELOAD&lt;/code&gt;, and memory sanitization requires a fundamentally different configuration, typically involving a specially compiled perl interpreter.&lt;br&gt;
  &lt;/p&gt;



&lt;br&gt;
  &lt;p&gt;&lt;em&gt;Author: Yuki Kimoto&lt;/em&gt;&lt;/p&gt;

</description>
      <category>perl</category>
      <category>linux</category>
      <category>xs</category>
      <category>addresssanitizer</category>
    </item>
    <item>
      <title>Hacking Makefile.PL: How to Force Parallel Builds and Tests (The GNU Make Way)</title>
      <dc:creator>Yuki Kimoto</dc:creator>
      <pubDate>Fri, 08 May 2026 04:30:56 +0000</pubDate>
      <link>https://dev.to/yukikimoto/hacking-makefilepl-how-to-force-parallel-builds-and-tests-the-gnu-make-way-5ch6</link>
      <guid>https://dev.to/yukikimoto/hacking-makefilepl-how-to-force-parallel-builds-and-tests-the-gnu-make-way-5ch6</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbb7vc5fkmieanlnr0xm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbb7vc5fkmieanlnr0xm.png" alt=" " width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are developing a large-scale Perl module or a native extension (XS/SPVM), build and test times can become a bottleneck. While we often manually pass &lt;code&gt;-jN&lt;/code&gt; to &lt;code&gt;make&lt;/code&gt;, I wanted a way to bake parallel execution directly into the &lt;code&gt;Makefile.PL&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Today, I want to share a rather "aggressive" hack to achieve parallel builds and tests by injecting logic into &lt;code&gt;WriteMakefile&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;The Snippet&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;WriteMakefile(
  macro =&amp;gt; {
    # Force parallel builds
    MAKEFLAGS =&amp;gt; "-j$jobs",
    
    # Inject parallel test execution by overriding TEST_VERBOSE
    # Constraints for Windows shell compatibility (pwsh/cmd.exe):
    # 1. The entire command is wrapped in double quotes.
    # 2. No backslashes (\) to avoid escape hell.
    # 3. No dollar signs ($) to prevent pwsh variable expansion.
    # 4. No nested parentheses to avoid pwsh tokenization errors.
    # 5. Only '();. are used for maximum safety.
    # 6. Minimal symbols to avoid edge cases in shell parsing.
    'override TEST_VERBOSE' =&amp;gt; "scalar (eval chr(36) . q(ENV{HARNESS_OPTIONS}='j$jobs'), 0)",
  },
);&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;How it works&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
&lt;strong&gt;Parallel Build (&lt;code&gt;MAKEFLAGS&lt;/code&gt;)&lt;/strong&gt;: This sets the &lt;code&gt;-j&lt;/code&gt; flag for GNU Make. Please note that &lt;strong&gt;this only works with gmake&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;
&lt;strong&gt;Parallel Test Hack (&lt;code&gt;override TEST_VERBOSE&lt;/code&gt;)&lt;/strong&gt;: This is the "dirty" part. I’m hijacking the &lt;code&gt;TEST_VERBOSE&lt;/code&gt; macro, which is usually intended for toggling verbose output. By using &lt;code&gt;eval&lt;/code&gt; and &lt;code&gt;chr(36)&lt;/code&gt; (to avoid the &lt;code&gt;$&lt;/code&gt; symbol which causes pain in PowerShell), I’m forcing the &lt;code&gt;HARNESS_OPTIONS&lt;/code&gt; environment variable to be set to &lt;code&gt;j$jobs&lt;/code&gt; just as the test suite starts.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The constraints in the comments ensure that this string remains "shell-safe" even on Windows (cmd.exe or PowerShell), avoiding backslashes and nested parentheses that usually break the build.&lt;/p&gt;

&lt;h3&gt;Is there a better way?&lt;/h3&gt;

&lt;p&gt;I’ll be honest: &lt;strong&gt;this works, but I’m not sure if it’s the "best" or "right" way to do it.&lt;/strong&gt; It feels like a brilliant hack, but hacking &lt;code&gt;TEST_VERBOSE&lt;/code&gt; to set environment variables is definitely not what the ExtUtils::MakeMaker authors intended.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I’d love to hear your thoughts:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Is there a built-in &lt;code&gt;WriteMakefile&lt;/code&gt; option that handles parallel tests natively?&lt;/li&gt;
  &lt;li&gt;Have you found a cleaner way to pass &lt;code&gt;HARNESS_OPTIONS&lt;/code&gt; through the generated Makefile without shell-escaping hell?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have a more "canonical" approach, please let me know in the comments!&lt;/p&gt;

</description>
      <category>makefile</category>
      <category>automation</category>
      <category>programming</category>
      <category>perl</category>
    </item>
    <item>
      <title>SPVM standard modules on CPAN</title>
      <dc:creator>Yuki Kimoto</dc:creator>
      <pubDate>Mon, 25 Aug 2025 04:01:06 +0000</pubDate>
      <link>https://dev.to/yukikimoto/spvm-standard-modules-on-cpan-3m98</link>
      <guid>https://dev.to/yukikimoto/spvm-standard-modules-on-cpan-3m98</guid>
      <description>&lt;p&gt;There are SPVM standard modules on CPAN.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Address" rel="noopener noreferrer"&gt;SPVM::Address&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Array" rel="noopener noreferrer"&gt;SPVM::Array&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Bool" rel="noopener noreferrer"&gt;SPVM::Bool&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Byte" rel="noopener noreferrer"&gt;SPVM::Byte&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::ByteList" rel="noopener noreferrer"&gt;SPVM::ByteList&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Callback" rel="noopener noreferrer"&gt;SPVM::Callback&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Callback::Grep" rel="noopener noreferrer"&gt;SPVM::Callback::Grep&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Callback::Map" rel="noopener noreferrer"&gt;SPVM::Callback::Map&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Callback::MapExpand" rel="noopener noreferrer"&gt;SPVM::Callback::MapExpand&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Cloneable" rel="noopener noreferrer"&gt;SPVM::Cloneable&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Cloner" rel="noopener noreferrer"&gt;SPVM::Cloner&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::CommandInfo" rel="noopener noreferrer"&gt;SPVM::CommandInfo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Comparable" rel="noopener noreferrer"&gt;SPVM::Comparable&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Comparator" rel="noopener noreferrer"&gt;SPVM::Comparator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Comparator::Double" rel="noopener noreferrer"&gt;SPVM::Comparator::Double&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Comparator::Float" rel="noopener noreferrer"&gt;SPVM::Comparator::Float&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Comparator::Int" rel="noopener noreferrer"&gt;SPVM::Comparator::Int&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Comparator::Long" rel="noopener noreferrer"&gt;SPVM::Comparator::Long&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Comparator::String" rel="noopener noreferrer"&gt;SPVM::Comparator::String&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Complex_2d" rel="noopener noreferrer"&gt;SPVM::Complex_2d&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Complex_2f" rel="noopener noreferrer"&gt;SPVM::Complex_2f&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Double" rel="noopener noreferrer"&gt;SPVM::Double&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::DoubleList" rel="noopener noreferrer"&gt;SPVM::DoubleList&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::EqualityChecker" rel="noopener noreferrer"&gt;SPVM::EqualityChecker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::EqualityChecker::Address" rel="noopener noreferrer"&gt;SPVM::EqualityChecker::Address&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::EqualityCheckable" rel="noopener noreferrer"&gt;SPVM::EqualityCheckable&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Error" rel="noopener noreferrer"&gt;SPVM::Error&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Error::Compile" rel="noopener noreferrer"&gt;SPVM::Error::Compile&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Error::FieldNotSpecified" rel="noopener noreferrer"&gt;SPVM::Error::FieldNotSpecified&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Error::MethodCallNotPermitted" rel="noopener noreferrer"&gt;SPVM::Error::MethodCallNotPermitted&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Error::NotSupported" rel="noopener noreferrer"&gt;SPVM::Error::NotSupported&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Error::System" rel="noopener noreferrer"&gt;SPVM::Error::System&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Error::Unicode::InvalidUTF8" rel="noopener noreferrer"&gt;SPVM::Error::Unicode::InvalidUTF8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Float" rel="noopener noreferrer"&gt;SPVM::Float&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::FloatList" rel="noopener noreferrer"&gt;SPVM::FloatList&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Fn" rel="noopener noreferrer"&gt;SPVM::Fn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Format" rel="noopener noreferrer"&gt;SPVM::Format&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Hash" rel="noopener noreferrer"&gt;SPVM::Hash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Hash::Entry" rel="noopener noreferrer"&gt;SPVM::Hash::Entry&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Immutable::ByteList" rel="noopener noreferrer"&gt;SPVM::Immutable::ByteList&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Immutable::DoubleList" rel="noopener noreferrer"&gt;SPVM::Immutable::DoubleList&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Immutable::FloatList" rel="noopener noreferrer"&gt;SPVM::Immutable::FloatList&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Immutable::IntList" rel="noopener noreferrer"&gt;SPVM::Immutable::IntList&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Immutable::LongList" rel="noopener noreferrer"&gt;SPVM::Immutable::LongList&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Immutable::ShortList" rel="noopener noreferrer"&gt;SPVM::Immutable::ShortList&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Immutable::StringList" rel="noopener noreferrer"&gt;SPVM::Immutable::StringList&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Int" rel="noopener noreferrer"&gt;SPVM::Int&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::IntList" rel="noopener noreferrer"&gt;SPVM::IntList&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::List" rel="noopener noreferrer"&gt;SPVM::List&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Long" rel="noopener noreferrer"&gt;SPVM::Long&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::LongList" rel="noopener noreferrer"&gt;SPVM::LongList&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Native" rel="noopener noreferrer"&gt;SPVM::Native&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Native::Arg" rel="noopener noreferrer"&gt;SPVM::Native::Arg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Native::BasicType" rel="noopener noreferrer"&gt;SPVM::Native::BasicType&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Native::ClassFile" rel="noopener noreferrer"&gt;SPVM::Native::ClassFile&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Native::ClassVar" rel="noopener noreferrer"&gt;SPVM::Native::ClassVar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Native::Compiler" rel="noopener noreferrer"&gt;SPVM::Native::Compiler&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Native::Env" rel="noopener noreferrer"&gt;SPVM::Native::Env&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Native::Field" rel="noopener noreferrer"&gt;SPVM::Native::Field&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Native::Method" rel="noopener noreferrer"&gt;SPVM::Native::Method&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Native::MethodCall" rel="noopener noreferrer"&gt;SPVM::Native::MethodCall&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Native::Runtime" rel="noopener noreferrer"&gt;SPVM::Native::Runtime&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Native::Stack" rel="noopener noreferrer"&gt;SPVM::Native::Stack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Point" rel="noopener noreferrer"&gt;SPVM::Point&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Point3D" rel="noopener noreferrer"&gt;SPVM::Point3D&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Scope::Guard" rel="noopener noreferrer"&gt;SPVM::Scope::Guard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Short" rel="noopener noreferrer"&gt;SPVM::Short&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::ShortList" rel="noopener noreferrer"&gt;SPVM::ShortList&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Sort" rel="noopener noreferrer"&gt;SPVM::Sort&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::SPVM" rel="noopener noreferrer"&gt;SPVM::SPVM&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Stringable" rel="noopener noreferrer"&gt;SPVM::Stringable&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::StringBuffer" rel="noopener noreferrer"&gt;SPVM::StringBuffer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Stringer" rel="noopener noreferrer"&gt;SPVM::Stringer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::StringList" rel="noopener noreferrer"&gt;SPVM::StringList&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Sync::Mutex" rel="noopener noreferrer"&gt;SPVM::Sync::Mutex&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spvm</category>
      <category>perl</category>
      <category>cpan</category>
    </item>
    <item>
      <title>I started to develope SPVM::Mojolicious</title>
      <dc:creator>Yuki Kimoto</dc:creator>
      <pubDate>Sat, 09 Aug 2025 00:50:27 +0000</pubDate>
      <link>https://dev.to/yukikimoto/i-started-to-develope-spvmmojolicious-4hif</link>
      <guid>https://dev.to/yukikimoto/i-started-to-develope-spvmmojolicious-4hif</guid>
      <description>&lt;p&gt;I started to develope &lt;a href="https://github.com/yuki-kimoto/SPVM-Mojolicious" rel="noopener noreferrer"&gt;SPVM::Mojolicious&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I released &lt;a href="https://metacpan.org/pod/SPVM::Mojolicious" rel="noopener noreferrer"&gt;SPVM::Mojolicious&lt;/a&gt; on CPAN.&lt;/p&gt;

&lt;p&gt;This is an early release.This project is incomplete.&lt;/p&gt;

&lt;p&gt;We plan to make most Mojolicious features available.&lt;/p&gt;

&lt;p&gt;As SPVM features, we'll be able to create groutines, threads, and executables.&lt;/p&gt;

</description>
      <category>perl</category>
      <category>spvm</category>
    </item>
    <item>
      <title>How to create Mac GUI applications in SPVM?</title>
      <dc:creator>Yuki Kimoto</dc:creator>
      <pubDate>Sun, 08 Dec 2024 22:54:18 +0000</pubDate>
      <link>https://dev.to/yukikimoto/how-to-create-mac-gui-applications-in-spvm-ma1</link>
      <guid>https://dev.to/yukikimoto/how-to-create-mac-gui-applications-in-spvm-ma1</guid>
      <description>&lt;p&gt;How to create Mac GUI applications in SPVM?&lt;/p&gt;

&lt;p&gt;See the following content.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/yuki-kimoto/SPVM/wiki/Mac-GUI-Applications" rel="noopener noreferrer"&gt;Mac GUI Applications&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SPVM can now create a Mac GUI application. It is an executable file. you can execute it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% spvmcc -o mac_hello_world mac_hello_world.spvm
% ./mac_hello_world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An alert dialog is shown.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwb6ajrrbjs471kn5byz9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwb6ajrrbjs471kn5byz9.png" alt="Image description" width="223" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spvm</category>
      <category>perl</category>
      <category>mac</category>
      <category>apple</category>
    </item>
    <item>
      <title>How to create a parallel echo server using goroutines in SPVM?</title>
      <dc:creator>Yuki Kimoto</dc:creator>
      <pubDate>Wed, 09 Oct 2024 05:59:12 +0000</pubDate>
      <link>https://dev.to/yukikimoto/how-to-create-a-parallel-echo-server-using-goroutines-in-spvm-4e7p</link>
      <guid>https://dev.to/yukikimoto/how-to-create-a-parallel-echo-server-using-goroutines-in-spvm-4e7p</guid>
      <description>&lt;p&gt;How to create a parallel echo server using goroutines in SPVM?&lt;/p&gt;

&lt;p&gt;I write a parallel echo server using &lt;a href="https://metacpan.org/pod/SPVM::IO::Socket::IP" rel="noopener noreferrer"&gt;SPVM::IO::Socket::IP&lt;/a&gt; and goroutines, channels, select in &lt;a href="https://metacpan.org/pod/SPVM::Go" rel="noopener noreferrer"&gt;SPVM::Go&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See the following test code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/yuki-kimoto/SPVM-IO/blob/46649347456d90eb7919c36ec8b169ae9f08c122/t/lib/SPVM/TestUtil.spvm#L45" rel="noopener noreferrer"&gt;run_echo_server_go&lt;/a&gt;&lt;/p&gt;

</description>
      <category>perl</category>
      <category>spvm</category>
    </item>
    <item>
      <title>How to generate an executable file for an AI program using SPVM ?</title>
      <dc:creator>Yuki Kimoto</dc:creator>
      <pubDate>Tue, 08 Oct 2024 04:59:31 +0000</pubDate>
      <link>https://dev.to/yukikimoto/how-to-generate-an-executable-file-for-an-ai-program-using-spvm--3eie</link>
      <guid>https://dev.to/yukikimoto/how-to-generate-an-executable-file-for-an-ai-program-using-spvm--3eie</guid>
      <description>&lt;p&gt;Wouldn't you like to output a single executable file from your AI program? Then, you can run the AI ​​program just by copying the executable file to the Raspberry Pi. Here's how to achieve this using SPVM. Here's an example of image recognition using MINIST as an example of AI using deep learning.&lt;/p&gt;

&lt;h4&gt;SPVM program&lt;/h4&gt;

&lt;p&gt;This is an AI program to recognize images using MINIST data.&lt;/p&gt;

&lt;p&gt;It is writen by &lt;a href="https://metacpan.org/pod/SPVM" rel="noopener noreferrer"&gt;SPVM&lt;/a&gt; and &lt;a href="https://metacpan.org/pod/SPVM::R" rel="noopener noreferrer"&gt;SPVM::R&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="https://github.com/yuki-kimoto/en_deeplearning/blob/master/examples/my_minist_app.spvm" rel="noopener noreferrer"&gt;my_minist_app.spvm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://github.com/yuki-kimoto/en_deeplearning/blob/master/examples/my_minist_app.config" rel="noopener noreferrer"&gt;my_minist_app.config&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://github.com/yuki-kimoto/en_deeplearning/blob/master/examples/network_lib/SPVM/MyAIUtil2.spvm" rel="noopener noreferrer"&gt;network_lib/SPVM/MyAIUtil2.spvm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install dependent modules.&lt;/p&gt;

&lt;pre&gt;
cpanm SPVM
cpanm SPVM::Errno
cpanm SPVM::File::Basename
cpanm SPVM::File::Spec
cpanm SPVM::FindBin
cpanm SPVM::Math
cpanm SPVM::Regex
cpanm SPVM::Sys
cpanm SPVM::Time::Local
cpanm SPVM::Time::Piece
cpanm SPVM::IO
cpanm SPVM::R
&lt;/pre&gt;

&lt;p&gt;Execute an SPVM program.&lt;/p&gt;

&lt;pre&gt;
spvm -I network_lib/SPVM my_minist_app.spvm
&lt;/pre&gt;

&lt;p&gt;Generate an executable file and execute it.&lt;/p&gt;

&lt;pre&gt;
spvmcc -I network_lib/SPVM -o my_minist_app my_minist_app.spvm

./my_minist_app
&lt;/pre&gt;

&lt;p&gt;I'm not an AI expert, but if you are, I think you can modify this.&lt;/p&gt;

&lt;p&gt;If you're interested in parallelization using threads and goroutines, see also:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="https://metacpan.org/pod/SPVM::Thread" rel="noopener noreferrer"&gt;SPVM::Thread&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://metacpan.org/pod/SPVM::Go" rel="noopener noreferrer"&gt;SPVM::Go&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>spvm</category>
      <category>perl</category>
      <category>ai</category>
      <category>raspberrypi</category>
    </item>
    <item>
      <title>GitPrep has some new features and bug fixes.</title>
      <dc:creator>Yuki Kimoto</dc:creator>
      <pubDate>Thu, 29 Aug 2024 23:30:18 +0000</pubDate>
      <link>https://dev.to/yukikimoto/gitprep-has-some-new-features-and-bug-fixes-3ki</link>
      <guid>https://dev.to/yukikimoto/gitprep-has-some-new-features-and-bug-fixes-3ki</guid>
      <description>&lt;p&gt;GitPrep has some new features and bug fixes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/yuki-kimoto/gitprep" rel="noopener noreferrer"&gt;GitPrep - Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitPrep is portable Github-like system, which can be installed and hosted on your own Unix/Linux server.&lt;/p&gt;

</description>
      <category>gitprep</category>
      <category>perl</category>
    </item>
    <item>
      <title>SPVM::R - A Port of The R Language Features.</title>
      <dc:creator>Yuki Kimoto</dc:creator>
      <pubDate>Wed, 21 Aug 2024 00:15:36 +0000</pubDate>
      <link>https://dev.to/yukikimoto/spvmr-a-port-of-the-r-language-features-3m4a</link>
      <guid>https://dev.to/yukikimoto/spvmr-a-port-of-the-r-language-features-3m4a</guid>
      <description>&lt;p&gt;R class in &lt;a href="https://metacpan.org/pod/SPVM" rel="noopener noreferrer"&gt;SPVM&lt;/a&gt; is a port of the &lt;a href="https://www.r-project.org/" rel="noopener noreferrer"&gt;R language&lt;/a&gt; features.&lt;/p&gt;

&lt;h1 id="Features"&gt;
&lt;span&gt;&lt;/span&gt;Features&lt;/h1&gt;

&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::NDArray" rel="noopener noreferrer"&gt;N-dimensional arrays&lt;/a&gt; and &lt;a href="https://metacpan.org/pod/SPVM::R::OP" rel="noopener noreferrer"&gt;their operations&lt;/a&gt;, such as addition, subtraction, multiplication, division, modulo(or remainder), sum, max, min, mean, cumulative sum, cumulative product, trigonometric functions, exponential functions, log functions.&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Support of &lt;a href="https://metacpan.org/pod/SPVM::R::OP::Int#seq" rel="noopener noreferrer"&gt;sequence creation&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::OP#rep" rel="noopener noreferrer"&gt;repetition&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::NDArray#slice" rel="noopener noreferrer"&gt;slice&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::NDArray#order" rel="noopener noreferrer"&gt;order&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::NDArray#sort_asc" rel="noopener noreferrer"&gt;sort&lt;/a&gt; of a n-dimensional array.&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Various types of n-dimensional arrays(&lt;a href="https://metacpan.org/pod/SPVM::R::OP::Byte" rel="noopener noreferrer"&gt;byte&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::OP::Short" rel="noopener noreferrer"&gt;short&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::OP::Int" rel="noopener noreferrer"&gt;int&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::OP::Long" rel="noopener noreferrer"&gt;long&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::OP::Float" rel="noopener noreferrer"&gt;float&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::OP::Double" rel="noopener noreferrer"&gt;double&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::OP::FloatComplex" rel="noopener noreferrer"&gt;float complex&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::OP::DoubleComplex" rel="noopener noreferrer"&gt;double complex&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::OP::String" rel="noopener noreferrer"&gt;string&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::OP::StringBuffer" rel="noopener noreferrer"&gt;variable-length string&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::OP::Time::Piece" rel="noopener noreferrer"&gt;datetime&lt;/a&gt;).&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Support of &lt;a href="https://metacpan.org/pod/SPVM::R::NDArray#NA-Representation" rel="noopener noreferrer"&gt;NA representation&lt;/a&gt;.&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::DataFrame" rel="noopener noreferrer"&gt;Data frame&lt;/a&gt; and &lt;a href="https://metacpan.org/pod/SPVM::R::OP::DataFrame" rel="noopener noreferrer"&gt;its operations&lt;/a&gt;.&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Support of &lt;a href="https://metacpan.org/pod/SPVM::R::DataFrame#slice" rel="noopener noreferrer"&gt;slice&lt;/a&gt;(&lt;a href="https://metacpan.org/pod/SPVM::R::OP::DataFrame#subset" rel="noopener noreferrer"&gt;subset&lt;/a&gt;), &lt;a href="https://metacpan.org/pod/SPVM::R::DataFrame#order" rel="noopener noreferrer"&gt;order&lt;/a&gt;, &lt;a href="https://metacpan.org/pod/SPVM::R::DataFrame#sort" rel="noopener noreferrer"&gt;sort&lt;/a&gt; of a data frame.&lt;/p&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id="Tutorial"&gt;
&lt;span&gt;&lt;/span&gt;Tutorial&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/yuki-kimoto/SPVM-R/wiki/SPVM%3A%3AR-Tutorial" rel="noopener noreferrer"&gt;SPVM::R Tutorial&lt;/a&gt;&lt;/p&gt;

&lt;h1 id="Modules"&gt;
&lt;span&gt;&lt;/span&gt;Modules&lt;/h1&gt;

&lt;h2 id="N-Dimension-Array"&gt;
&lt;span&gt;&lt;/span&gt;&lt;a id="N"&gt;&lt;/a&gt;N-Dimension Array&lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::NDArray" rel="noopener noreferrer"&gt;R::NDArray&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::NDArray::Byte" rel="noopener noreferrer"&gt;R::NDArray::Byte&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::NDArray::Short" rel="noopener noreferrer"&gt;R::NDArray::Short&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::NDArray::Int" rel="noopener noreferrer"&gt;R::NDArray::Int&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::NDArray::Float" rel="noopener noreferrer"&gt;R::NDArray::Float&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::NDArray::Double" rel="noopener noreferrer"&gt;R::NDArray::Double&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::NDArray::FloatComplex" rel="noopener noreferrer"&gt;R::NDArray::FloatComplex&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::NDArray::DoubleComplex" rel="noopener noreferrer"&gt;R::NDArray::DoubleComplex&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::NDArray::Long" rel="noopener noreferrer"&gt;R::NDArray::Long&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::NDArray::AnyObject" rel="noopener noreferrer"&gt;R::NDArray::AnyObject&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::NDArray::String" rel="noopener noreferrer"&gt;R::NDArray::String&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::NDArray::StringBuffer" rel="noopener noreferrer"&gt;R::NDArray::StringBuffer&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::NDArray::Time::Piece" rel="noopener noreferrer"&gt;R::NDArray::Time::Piece&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="N-Dimension-Array-Operations"&gt;
&lt;span&gt;&lt;/span&gt;&lt;a id="N1"&gt;&lt;/a&gt;N-Dimension Array Operations&lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP" rel="noopener noreferrer"&gt;R::OP&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::Byte" rel="noopener noreferrer"&gt;R::OP::Byte&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::Short" rel="noopener noreferrer"&gt;R::OP::Short&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::Int" rel="noopener noreferrer"&gt;R::OP::Int&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::Long" rel="noopener noreferrer"&gt;R::OP::Long&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::Float" rel="noopener noreferrer"&gt;R::OP::Float&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::Double" rel="noopener noreferrer"&gt;R::OP::Double&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::FloatComplex" rel="noopener noreferrer"&gt;R::OP::FloatComplex&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::DoubleComplex" rel="noopener noreferrer"&gt;R::OP::DoubleComplex&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::AnyObject" rel="noopener noreferrer"&gt;R::OP::AnyObject&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::String" rel="noopener noreferrer"&gt;R::OP::String&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::StringBuffer" rel="noopener noreferrer"&gt;R::OP::StringBuffer&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::Time::Piece" rel="noopener noreferrer"&gt;R::OP::Time::Piece&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="Matrix-Operations"&gt;
&lt;span&gt;&lt;/span&gt;&lt;a id="Matrix"&gt;&lt;/a&gt;Matrix Operations&lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::Matrix" rel="noopener noreferrer"&gt;R::OP::Matrix&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::Matrix::Float" rel="noopener noreferrer"&gt;R::OP::Matrix::Float&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::Matrix::Double" rel="noopener noreferrer"&gt;R::OP::Matrix::Double&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::Matrix::FloatComplex" rel="noopener noreferrer"&gt;R::OP::Matrix::FloatComplex&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::Matrix::DoubleComplex" rel="noopener noreferrer"&gt;R::OP::Matrix::DoubleComplex&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="Data-Frame"&gt;
&lt;span&gt;&lt;/span&gt;&lt;a id="Data"&gt;&lt;/a&gt;Data Frame&lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::DataFrame" rel="noopener noreferrer"&gt;R::DataFrame&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::OP::DataFrame" rel="noopener noreferrer"&gt;R::OP::DataFrame&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="Utilities"&gt;
&lt;span&gt;&lt;/span&gt;Utilities&lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::R::Util" rel="noopener noreferrer"&gt;R::Util&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id="Wiki"&gt;
&lt;span&gt;&lt;/span&gt;Wiki&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/yuki-kimoto/SPVM-R/wiki" rel="noopener noreferrer"&gt;SPVM::R Wiki&lt;/a&gt;&lt;/p&gt;

&lt;h1 id="Repository"&gt;
&lt;span&gt;&lt;/span&gt;Repository&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/yuki-kimoto/SPVM-R" rel="noopener noreferrer"&gt;SPVM::R - Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>perl</category>
      <category>spvm</category>
      <category>r</category>
    </item>
    <item>
      <title>SPVM::Resource::Eigen released</title>
      <dc:creator>Yuki Kimoto</dc:creator>
      <pubDate>Wed, 17 Jul 2024 23:22:40 +0000</pubDate>
      <link>https://dev.to/yukikimoto/spvmresourceeigen-released-43p0</link>
      <guid>https://dev.to/yukikimoto/spvmresourceeigen-released-43p0</guid>
      <description>&lt;p&gt;SPVM::Resource::Eigen, a &lt;a href="https://metacpan.org/pod/SPVM" rel="noopener noreferrer"&gt;SPVM&lt;/a&gt; resource for the C++ library &lt;a href="https://eigen.tuxfamily.org/index.php?title=Main_Page" rel="noopener noreferrer"&gt;Eigen&lt;/a&gt; that can calculate the matrix operations required by AI/Deep Learning, has been released.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Resource::Eigen" rel="noopener noreferrer"&gt;SPVM::Resource::Eigen - CPAN&lt;/a&gt;&lt;/p&gt;

</description>
      <category>perl</category>
      <category>spvm</category>
      <category>cpp</category>
      <category>ai</category>
    </item>
    <item>
      <title>Perl v5.40.0 is released</title>
      <dc:creator>Yuki Kimoto</dc:creator>
      <pubDate>Tue, 11 Jun 2024 04:54:35 +0000</pubDate>
      <link>https://dev.to/yukikimoto/perl-v5400-is-released-3occ</link>
      <guid>https://dev.to/yukikimoto/perl-v5400-is-released-3occ</guid>
      <description>&lt;p&gt;Perl v5.40.0 is released.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Perl/perl5/releases/tag/v5.40.0" rel="noopener noreferrer"&gt;https://github.com/Perl/perl5/releases/tag/v5.40.0&lt;/a&gt;&lt;/p&gt;

</description>
      <category>perl</category>
    </item>
    <item>
      <title>SPVM Documentation</title>
      <dc:creator>Yuki Kimoto</dc:creator>
      <pubDate>Wed, 24 Apr 2024 02:02:30 +0000</pubDate>
      <link>https://dev.to/yukikimoto/spvm-documentation-27af</link>
      <guid>https://dev.to/yukikimoto/spvm-documentation-27af</guid>
      <description>&lt;p&gt;This is the &lt;a href="https://metacpan.org/pod/SPVM" rel="noopener noreferrer"&gt;SPVM&lt;/a&gt; Documentation.&lt;/p&gt;

&lt;h1 id="Tutorial"&gt;
&lt;span&gt;&lt;/span&gt;Tutorial&lt;/h1&gt;

&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href="https://github.com/yuki-kimoto/SPVM/wiki/Tutorial" rel="noopener noreferrer"&gt;SPVM Tutorial&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id="Documents"&gt;
&lt;span&gt;&lt;/span&gt;Documents&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document" rel="noopener noreferrer"&gt;All SPVM Documents&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::Language" rel="noopener noreferrer"&gt;Language Specification&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::Language::Tokenization" rel="noopener noreferrer"&gt;Lexical Tokenization&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::Language::SyntaxParsing" rel="noopener noreferrer"&gt;Syntax Parsing&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::Language::Class" rel="noopener noreferrer"&gt;Class Definition&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::Language::Types" rel="noopener noreferrer"&gt;Types&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::Language::Statements" rel="noopener noreferrer"&gt;Statements&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::Language::Operators" rel="noopener noreferrer"&gt;Operators&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::Language::ExceptionHandling" rel="noopener noreferrer"&gt;Exception Handling&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::Language::GarbageCollection" rel="noopener noreferrer"&gt;Garbage Collection&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::Language::System" rel="noopener noreferrer"&gt;System Setting&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;/ul&gt;




&lt;/li&gt;


&lt;li&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeClass" rel="noopener noreferrer"&gt;Native Classes&lt;/a&gt;&lt;/p&gt;




&lt;/li&gt;


&lt;li&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Builder::Config" rel="noopener noreferrer"&gt;Native Class Config&lt;/a&gt;&lt;/p&gt;




&lt;/li&gt;


&lt;li&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeAPI" rel="noopener noreferrer"&gt;Native APIs&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeAPI::Runtime" rel="noopener noreferrer"&gt;Runtime Native APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeAPI::BasicType" rel="noopener noreferrer"&gt;Basic Type Native APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeAPI::ClassVariable" rel="noopener noreferrer"&gt;Class Variable Native APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeAPI::Field" rel="noopener noreferrer"&gt;Field Native APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeAPI::Method" rel="noopener noreferrer"&gt;Method Native APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeAPI::Argument" rel="noopener noreferrer"&gt;Argument Native APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeAPI::Type" rel="noopener noreferrer"&gt;Type Native APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeAPI::Compiler" rel="noopener noreferrer"&gt;Compiler Native APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeAPI::ClassFile" rel="noopener noreferrer"&gt;Class File Native APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeAPI::StringBuffer" rel="noopener noreferrer"&gt;String Buffer Native APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeAPI::Allocator" rel="noopener noreferrer"&gt;Allocatord Native APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeAPI::Mutex" rel="noopener noreferrer"&gt;Mutex Native APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::NativeAPI::Internal" rel="noopener noreferrer"&gt;Internal Native APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;/ul&gt;




&lt;/li&gt;


&lt;li&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::Resource" rel="noopener noreferrer"&gt;Resources&lt;/a&gt;&lt;/p&gt;




&lt;/li&gt;


&lt;li&gt;

&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Document::EnvironmentVariables" rel="noopener noreferrer"&gt;Environment Variables&lt;/a&gt;&lt;/p&gt;




&lt;/li&gt;


&lt;/ul&gt;

&lt;h1 id="Exchange-APIs"&gt;
&lt;span&gt;&lt;/span&gt;&lt;a id="Exchange"&gt;&lt;/a&gt;Exchange APIs&lt;/h1&gt;

&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::ExchangeAPI" rel="noopener noreferrer"&gt;Exchange APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id="Builder-APIs"&gt;
&lt;span&gt;&lt;/span&gt;&lt;a id="Builder"&gt;&lt;/a&gt;Builder APIs&lt;/h1&gt;

&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Builder::API" rel="noopener noreferrer"&gt;Builder APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Builder::Util::API" rel="noopener noreferrer"&gt;Builder Utility APIs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/SPVM::Builder::Config::Info" rel="noopener noreferrer"&gt;Config Information&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id="Commands"&gt;
&lt;span&gt;&lt;/span&gt;Commands&lt;/h1&gt;

&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/spvm" rel="noopener noreferrer"&gt;spvm - Executing SPVM Programs&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/spvmcc" rel="noopener noreferrer"&gt;spvmcc - Generating Executable Files&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://metacpan.org/pod/spvmdist" rel="noopener noreferrer"&gt;spvmdist - Distributing SPVM Modules&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>perl</category>
      <category>spvm</category>
    </item>
  </channel>
</rss>
