From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 1A7AC7F706 for ; Tue, 17 Dec 2013 07:12:02 +0100 (CET) Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of daniel.buenzli@erratique.ch) identity=pra; client-ip=74.55.86.74; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="daniel.buenzli@erratique.ch"; x-sender="daniel.buenzli@erratique.ch"; x-conformance=sidf_compatible Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of daniel.buenzli@erratique.ch) identity=mailfrom; client-ip=74.55.86.74; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="daniel.buenzli@erratique.ch"; x-sender="daniel.buenzli@erratique.ch"; x-conformance=sidf_compatible Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@smtp.webfaction.com) identity=helo; client-ip=74.55.86.74; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="daniel.buenzli@erratique.ch"; x-sender="postmaster@smtp.webfaction.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmABAKjqr1JKN1ZKnGdsb2JhbABZg0KDWLcXDgEBAQEBBg0JCRQogi0CIIELAiYCKh8WG4d8BAmhH48NmCWBKYtvhG81gRMElUeDf4R+F456 X-IPAS-Result: AmABAKjqr1JKN1ZKnGdsb2JhbABZg0KDWLcXDgEBAQEBBg0JCRQogi0CIIELAiYCKh8WG4d8BAmhH48NmCWBKYtvhG81gRMElUeDf4R+F456 X-IronPort-AV: E=Sophos;i="4.95,499,1384297200"; d="scan'208";a="49273780" Received: from mail6.webfaction.com (HELO smtp.webfaction.com) ([74.55.86.74]) by mail2-smtp-roc.national.inria.fr with ESMTP; 17 Dec 2013 07:12:01 +0100 Received: from [172.20.10.2] (170-225.197-178.cust.bluewin.ch [178.197.225.170]) by smtp.webfaction.com (Postfix) with ESMTP id 456EE2241FBE for ; Tue, 17 Dec 2013 06:11:59 +0000 (UTC) Date: Tue, 17 Dec 2013 07:11:56 +0100 From: =?utf-8?Q?Daniel_B=C3=BCnzli?= To: caml list Message-ID: <4DDEBB7487B641C0834F09D522EA9918@erratique.ch> X-Mailer: sparrow 1.6.4 (build 1178) MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Subject: [Caml-list] SDL2 bindings, testers and feedback welcome Hello, I have written thin bindings to SDL 2 using ocaml-ctypes. The binding is finished but should be considered unstable: it was not thoroughly tested and may still change as it has not been *used* yet. The purpose of this unstable release is to: 1) Iron out the install procedure and test on a variety of platforms. 2) Get feedback about the design of the binding (see below). More precisely, apart from the eventual bugs, I'm interested in getting feedback in the following areas: * I used an 'a result = [ `Error | `Ok of 'a ] rather than an exception for functions that return error codes/null is error. I tend to lean on exceptionless designs but I'm still unsure whether it is a good idea that case. One of the problems is that SDL doesn't make a clear distinction (at the signature level *and* in the documentation) between programming errors (invalid_arg), exceptional errors (e.g. out of memory) and non-exceptional errors (e.g. could not access/setup a resource). * The signature/approach of certain binding functions may be disputable or may need change to achieve reasonable performance. * Testing the binding to the joystick/game controller/force feedback api, I have none of these things in my hands. I welcome discussions/ideas about these points and the general design of the binding on github's issue tracker (http://github.com/dbuenzli/tsdl) Note that the philosophy of the binding is to be "thin", that is a mostly type-safe(r), minimal, hopefully efficient, one-to-one binding. This means that I'm not interested in prettyfing the C API like OCamlSDL does. I expect tsdl code to look like C SDL code (including the inconsistent naming schemes) and the binding to be used by programmers to build higher-level, more OCaml friendly, abstractions. To install (only tested on osx and linux so far) you'll need at least SDL 2.0.1 installed on your system. Then: opam repo add erratique-u http://erratique.ch/software/opam/unreleased opam update && opam install tsdl On osx 10.8.5 with OCaml 4.01.0 there's a heisenbug I couldn't track so far (see [1] for more info). Use 4.00.1 instead for now but note that the binding takes a long time to compile (~8 min on my machine) with that. If you want to hack the sources: git clone http://github.com/dbuenzli/tsdl cd tsdl && ./build test.native && ./test.native The documentation of the binding is here: http://erratique.ch/software/tsdl/doc/Tsdl Best, Daniel [1] http://lists.ocaml.org/pipermail/ctypes/2013-December/000027.html P.S. If anyone wonders, the existing OCamlSDL is a very good binding to SDL 1.X, but SDL 2.0 is an entirely new, incompatible, API. Besides SDL 2.0 changed to a zlib license, tsdl is under BSD3, OCamlSDL is LGPL.