Name : perl-FFI-Platypus
| |
Version : 2.08
| Vendor : obs://build_opensuse_org/home:huakim:matrix
|
Release : 1.6
| Date : 2024-10-12 05:15:00
|
Group : Unspecified
| Source RPM : perl-FFI-Platypus-2.08-1.6.src.rpm
|
Size : 0.94 MB
| |
Packager : (none)
| |
Summary : Write Perl bindings to non-Perl libraries with FFI. No XS required
|
Description :
Platypus is a library for creating interfaces to machine code libraries written in languages like C, C++, Go, Fortran, Rust, Pascal. Essentially anything that gets compiled into machine code. This implementation uses at https://sourceware.org/libffi/ to accomplish this task. at https://sourceware.org/libffi/ is battle tested by a number of other scripting and virtual machine languages, such as Python and Ruby to serve a similar role. There are a number of reasons why you might want to write an extension with Platypus instead of XS:
* FFI / Platypus does not require messing with the guts of Perl
XS is less of an API and more of the guts of perl splayed out to do whatever you want. That may at times be very powerful, but it can also be a frustrating exercise in hair pulling.
* FFI / Platypus is portable
Lots of languages have FFI interfaces, and it is subjectively easier to port an extension written in FFI in Perl or another language to FFI in another language or Perl. One goal of the Platypus Project is to reduce common interface specifications to a common format like JSON that could be shared between different languages.
* FFI / Platypus could be a bridge to Raku
One of those \"other\" languages could be Raku and Raku already has an FFI interface I am told.
* FFI / Platypus can be reimplemented
In a bright future with multiple implementations of Perl 5, each interpreter will have its own implementation of Platypus, allowing extensions to be written once and used on multiple platforms, in much the same way that Ruby-FFI extensions can be use in Ruby, JRuby and Rubinius.
* FFI / Platypus is pure perl (sorta)
One Platypus script or module works on any platform where the libraries it uses are available. That means you can deploy your Platypus script in a shared filesystem where they may be run on different platforms. It also means that Platypus modules do not need to be installed in the platform specific Perl library path.
* FFI / Platypus is not C or C++ centric
XS is implemented primarily as a bunch of C macros, which requires at least some understanding of C, the C pre-processor, and some C++ caveats (since on some platforms Perl is compiled and linked with a C++ compiler). Platypus on the other hand could be used to call other compiled languages, like Fortran, Go, Rust, Pascal, C++, or even assembly, allowing you to focus on your strengths.
* FFI / Platypus does not require a parser
Inline isolates the extension developer from XS to some extent, but it also requires a parser. The various Inline language bindings are a great technical achievement, but I think writing a parser for every language that you want to interface with is a bit of an anti-pattern.
This document consists of an API reference, a set of examples, some support and development (for contributors) information. If you are new to Platypus or FFI, you may want to skip down to the EXAMPLES to get a taste of what you can do with Platypus.
Platypus has extensive documentation of types at FFI::Platypus::Type and its custom types API at FFI::Platypus::API.
You are *strongly* encouraged to use API level 2 for all new code. There are a number of improvements and design fixes that you get for free. You should even consider updating existing modules to use API level 2 where feasible. How do I do that you might ask? Simply pass in the API level to the platypus constructor.
my $ffi = FFI::Platypus->new( api => 2 );
The Platypus documentation has already been updated to assume API level 1.
|
RPM found in directory: /packages/linux-pbone/ftp5.gwdg.de/pub/opensuse/repositories/home:/huakim:/matrix/openSUSE_Tumbleweed/x86_64 |
Hmm ... It's impossible ;-) This RPM doesn't exist on any FTP server
Provides :
libplfill.so()(64bit)
perl(FFI::Build)
perl(FFI::Build::File::Base)
perl(FFI::Build::File::C)
perl(FFI::Build::File::CXX)
perl(FFI::Build::File::Library)
perl(FFI::Build::File::Object)
perl(FFI::Build::MM)
perl(FFI::Build::MM::FBX)
perl(FFI::Build::Platform)
perl(FFI::Build::Plugin)
perl(FFI::Build::PluginData)
perl(FFI::Platypus)
perl(FFI::Platypus)
perl(FFI::Platypus::API)
perl(FFI::Platypus::Buffer)
perl(FFI::Platypus::Bundle)
perl(FFI::Platypus::Closure)
perl(FFI::Platypus::ClosureData)
perl(FFI::Platypus::Constant)
perl(FFI::Platypus::DL)
perl(FFI::Platypus::Function)
perl(FFI::Platypus::Function::Function)
perl(FFI::Platypus::Function::Wrapper)
perl(FFI::Platypus::Internal)
perl(FFI::Platypus::Lang)
perl(FFI::Platypus::Lang::ASM)
perl(FFI::Platypus::Lang::C)
perl(FFI::Platypus::Lang::Win32)
perl(FFI::Platypus::Legacy)
perl(FFI::Platypus::Memory)
perl(FFI::Platypus::Record)
perl(FFI::Platypus::Record::Meta)
perl(FFI::Platypus::Record::TieArray)
perl(FFI::Platypus::ShareConfig)
perl(FFI::Platypus::Type)
perl(FFI::Platypus::Type::PointerSizeBuffer)
perl(FFI::Platypus::Type::StringArray)
perl(FFI::Platypus::Type::StringPointer)
perl(FFI::Platypus::Type::WideString)
perl(FFI::Platypus::TypeParser)
perl(FFI::Platypus::TypeParser::Version0)
perl(FFI::Platypus::TypeParser::Version1)
perl(FFI::Platypus::TypeParser::Version2)
perl(FFI::Probe)
perl(FFI::Probe::Runner)
perl(FFI::Probe::Runner::Builder)
perl(FFI::Probe::Runner::Result)
perl(FFI::Temp)
perl-FFI-Platypus
perl-FFI-Platypus(x86-64)
Requires :