:claw honing - Beta milestone and alien-works

Long time no see my C++ autowrapping rants. But several bindings later, :claw has reached the stage where it is ready to leave a garage and see the outside world. Since my last post, some approaches were revised, though the autowrapping process is still not fully cemented yet. I wouldn’t expect :claw to be out of beta for at least a year. That doesn’t mean it is unusable, but rather I cannot guarantee a stable interface and a trivial procedure for setting it up.

In other big news, :alien-works system got all required foreign libraries wrapped and integrated, including some complex and peculiar C++ ones (Skia 👀). Next step is to write a game, based on :alien-works framework, to see how much lispification of autowrapped systems is possible without loosing any performance and what is required for a solid game delivery.

Continue reading...

:claw honing - First milestone

Huge first milestone for :claw honing is reached - I’ve run C++ library routines (PhysX) from Common Lisp without writing any C/C++ myself, without writing any bindings manually. :claw generated C adapter and CL bindings, I only built the former and called the latter.

This is an important proof of the concept:

  • IFFI approach works
  • C wrapper generation for C++ is possible with libresect (libclang) - no need to dive into llvm/clang development libraries any deeper, or so it seems so far.

99% work done, so only another 99% left.

Continue reading...

:claw honing

Free time too play with CL is quite a luxury item for me as of late, but finally! - I’ve got a whole week of me-time and I’m planning to pour all of it into :claw - the precious jewel at the heart of most of my projects.

:claw is a library for automatically creating Common Lisp bindings to foreign libraries that provide C interface. :claw already works well, but having access only to libraries with C-compatible interface is quite limiting. I’m a game developer both at work and at home and a lot of gamedev libraries are either C++ only and don’t export any C interface at all or such interface is out-of-date or heavily underdocumented. Unfortunately, I don’t have enough man-hours to reimplement all of those in pure Common Lisp myself and bindings seem like a huge time saver. That’s right, I’m working on bringing C++ support into :claw.

In this post, I’ll try to summarize how I envision this support being implemented in :claw. If you think something can be done better, faster or maybe I’m plain wrong somewhere - I appreciate if you drop a comment with your ideas here or via email/IRC.

Continue reading...

trivial-gamekit's future

Lisp Game Jam 2019 is over and there are quite a number of submissions based on trivial-gamekit this time:

Thanks to everyone who participated and I’m especially grateful to authors of above games for their trust in gamekit. Any jam is a stress and having solid tools during this time is very important. Thank you for giving gamekit a chance!

I’ve received a couple questions about trivial-gamekit future and what direction it is heading.

Here’s my answer.

Continue reading...

Guide to cl-bodge graphics system is in the works

Unbeleivably, I’ve got into writing more cl-bodge docs recently. But you know what, now I know how to make it a lot more fun - literate programming!

Common Lisp, SLY/SLIME and Emacs org-mode are especially good for this kind of task.

org-mode exposes tools for evaluating code blocks directly from a document and tangling those blocks into source files appropriately, while Common Lisp + SLY/SLIME combination allows you to gradually build your project evaluating code bit-by-bit in a live session, meaning you are writing documentation and building a project at the same time, meaning you are not getting bored of writing plaintext as much, which is just an amazingly handy trait of writing guides or examples in literate programming style.

To have a sneak peek into what’s coming, you can have a look at the WIP guide on GitHub. All source code in this project is generated from .org files. You can’t use the guide yet, because latest cl-bodge updates are not published into cl-bodge dist. You can clone whole bodge-projects repository recursively into ~/quicklisp/local-projects/, but I would recommend against this practice. At least don’t forget to delete all the cloned stuff after trying it out.

Continue reading...

cl-bodge documentation efforts has begun

It started, at last!

I have so much going on in CL land that writing a documentation for a thing no one uses (besides me, obviously) and is not even stable enough, is literally one of the last things I consider doing. But lately there was some interest in trivial-gamekit internals1 which is really just a high-level cl-bodge interface, so I finally decided to bring my ass into writing at least some documentation for most stable parts of it. Refreshed introductory and an overview pages so far.

Hopefully, that wouldn’t be the end of it - the immense effort generic programmers like myself very love to engage with.

  1. literally, a couple of people asked - cl-bodge is famous now! 

Continue reading...

April's 2017 Lisp Game Jam Postmortem

That was a blast! And so Mortar Combat was born.

I probably should have stopped right here, but, apparently, there quite a few people interested in the events of those days. Their minds call them to fill up the void made by vicious curiosity that delves deeper and deeper to clear space for pure knowledge of what actually happened during the sacred ritual known as Lisp Game Jam where miraculous Mortar Combat was bor… —Nah, right, you got me there— No one cares, but I’m still gonna put some words about it here nevertheless.

Continue reading...

Delivering games written in Common Lisp

Speaking generally, we can split end-users of a game into two groups: conventional gamers and those who would like to tinker with game sources, if there’s such option. Several ways exist to serve needs of both groups. In this piece of writing we would look into two of them: via Quicklisp or bundling executable with required resources (game assets, dynamic libraries, configs, etc) into downloadable package.

Continue reading...

Introducing boroblog

Sharing is caring!

In the past there were a couple of requests to write about my experiences with various tools. Sometimes I just had something to say on a particular topic. Therefore, I finally decided to organize a place to share my thoughts and whatever knowledge I had acquired no one else probably cares about.

And here we are now. Welcome to boroblog! Place where I can polish my english writing skills at the expense of readers curiousity.

Continue reading...