{"id":13830990,"url":"https://github.com/xsawyerx/xs-fun","last_synced_at":"2025-07-18T00:07:00.396Z","repository":{"id":66533161,"uuid":"12767881","full_name":"xsawyerx/xs-fun","owner":"xsawyerx","description":"XS is fun: a simple and easy tutorial on writing Perl XS","archived":false,"fork":false,"pushed_at":"2017-08-18T07:47:15.000Z","size":185,"stargazers_count":143,"open_issues_count":3,"forks_count":35,"subscribers_count":29,"default_branch":"master","last_synced_at":"2024-10-18T23:15:06.606Z","etag":null,"topics":["c","documentation","perl","tutorial","xs"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xsawyerx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2013-09-11T21:11:32.000Z","updated_at":"2024-02-18T16:16:25.000Z","dependencies_parsed_at":"2023-05-04T17:41:36.916Z","dependency_job_id":null,"html_url":"https://github.com/xsawyerx/xs-fun","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/xsawyerx/xs-fun","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xsawyerx%2Fxs-fun","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xsawyerx%2Fxs-fun/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xsawyerx%2Fxs-fun/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xsawyerx%2Fxs-fun/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xsawyerx","download_url":"https://codeload.github.com/xsawyerx/xs-fun/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xsawyerx%2Fxs-fun/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265683299,"owners_count":23810826,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","documentation","perl","tutorial","xs"],"created_at":"2024-08-04T10:01:14.681Z","updated_at":"2025-07-18T00:07:00.345Z","avatar_url":"https://github.com/xsawyerx.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"XS Fun\n======\n\nAny XS guru will tell you XS is easy. I've heard this many times. While it may\nbe true, I realized one thing: XS can be scary.\n\nThe purpose of this guide is to make XS fun. Yes, fun. Try it out, if you won't\nfeel as exhilarated as I do as you make your way up the stairs of XS\nknowledge, I will fully reimburse your tuition.\n\nGround rules\n------------\n\n1. We use a template instead of [`h2xs`](http://perldoc.perl.org/h2xs.html).\n2. We do not bundle an additional C library.\n3. We assume you have at least Perl 5.14.2.\n\nThese are the best bits of advice I've received so far and they've proven\nto be crucial.\n\n`h2xs` is old and crufty, and thus far seems more like a hurdle. Instead,\nthis guide includes a skeleton for each exercise that you can copy and use\neach time you start a new project.\n\nBundling additional C libraries requires hacks with `ExtUtils::MakeMaker`\n(which is a war in and of itself), including tab character nightmares and\nadditional recursive Makefiles. One way around the obvious \"you need to have\nthis library installed\" problem is to provide an `Alien` package. This guide\nmight go over it at some point but makes no promises.\n\nEliminating the use of `h2xs` and bundling any C libraries we use (that\nwe haven't written by ourselves) removes a lot of needless complexity.\n\nPerl 5.14.2 is prevalent enough to consider it a starting ground, though at\nthis point it is not yet necessarily important.\n\nRelevant resources\n------------------\n\n* [perlxs](http://perldoc.perl.org/perlxs.html) (`perldoc perlxs`)\n* [perlapi](http://perldoc.perl.org/perlapi.html) (`perldoc perlapi`)\n\nMore advanced or specialized resources\n--------------------------------------\n\n* [General index](http://perldoc.perl.org/index-internals.html)\n* [perlxstypemap](http://perldoc.perl.org/perlxstypemap.html) (`perldoc perlxstypemap`)\n* [perlhack](http://perldoc.perl.org/perlhack.html) (`perldoc perlhack`)\n* [perlhacktips](http://perldoc.perl.org/perlhacktips.html) (`perldoc perlhacktips`)\n* [perlhacktut](http://perldoc.perl.org/perlhacktut.html) (`perldoc perlhacktut`)\n* [perlguts](http://perldoc.perl.org/perlguts.html) (`perldoc perlguts`)\n* [perlintern](http://perldoc.perl.org/perlintern.html) (`perldoc perlintern`)\n* [perlinterp](http://perldoc.perl.org/perlinterp.html) (`perldoc perlinterp`)\n* [perlcall](http://perldoc.perl.org/perlcall.html) (`perldoc perlcall`)\n* [perlsource](http://perldoc/perl.org/perlsource.html) (`perldoc perlsource`)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxsawyerx%2Fxs-fun","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxsawyerx%2Fxs-fun","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxsawyerx%2Fxs-fun/lists"}