Top 1,000 Features Creators Events Podcasts Extensions Interviews Blog Explorer CSV


< >

XS is a programming language created in 2002.

#902on PLDB 22Years Old 532Repos

XS is a Perl foreign function interface through which a program can call a C or C++ subroutine. XS or xsub is an abbreviation of "eXternal Subroutine", where external refers to programming languages external to Perl. XS also refers to a glue language for specifying calling interfaces supporting such interfaces (see below).. Read more on Wikipedia...

Example from Linguist:
/* * This software is copyright (C) by Nick Wellnhofer <>. * * This is free software; you can redistribute it and/or modify it under * the same terms as the Perl 5 programming language system itself. * * Terms of the Perl programming language system itself * * a) the GNU General Public License as published by the Free * Software Foundation; either version 1, or (at your option) any * later version, or * b) the "Artistic License" */ /* * Notes on memory management * * - A pointer to the Perl SV representing a node is stored in the * user data slot of `struct cmark_node`, so there's a 1:1 mapping * between Perl and C objects. * - Every node SV keeps a reference to the parent SV. This is done * indirectly by looking up the parent SV and increasing its refcount. * - This makes sure that a document isn't freed if the last reference * from Perl to the root node is dropped, as references to child nodes * might still exist. * - As a consequence, as long as a node is referenced from Perl, all its * ancestor nodes will also be associated with a Perl object. */ #define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include <stdlib.h> #include <cmark.h> #if CMARK_VERSION < 0x001000 #error libcmark 0.16.0 is required. #endif /* Fix prefixes of render functions. */ #define cmark_node_render_html cmark_render_html #define cmark_node_render_xml cmark_render_xml #define cmark_node_render_man cmark_render_man static SV* S_create_or_incref_node_sv(pTHX_ cmark_node *node) { SV *new_obj = NULL; while (node) { SV *obj; HV *stash; /* Look for existing object. */ obj = (SV*)cmark_node_get_user_data(node); if (obj) { /* Incref if found. */ SvREFCNT_inc_simple_void_NN(obj); if (!new_obj) { new_obj = obj; } break; } /* Create a new SV. */ o

Language features

Feature Supported Example Token
/* A comment
MultiLine Comments
/* A comment
/* */
Semantic Indentation X

View source

- Build the next great programming language · About · Resources · Acknowledgements · Part of the World Wide Scroll