Ruby除了用Ruby写的扩展库以外,还有许多C写的扩展库,比如socket编程库/系统日志功能库/数据库驱动
这些库以.so或者.dll结尾,这也是我们require的时候不要使用.rb后缀的原因,比如
require 'gdbm'
Ruby开源项目、扩展库站点:
Ruby Application Archive(RAA)
RubyForge
怎样写Ruby的C扩展库呢?
我们来看看
How to create a Ruby extension in C under 5 minutes
该程序的前提是需要在linux/unix环境下
MyTest/extconf.rb
# Loads mkmf which is used to make makefiles for Ruby extensions
require 'mkmf'
# Give it a name
extension_name = 'mytest'
# The destination
dir_config(extension_name)
# Do the work
create_makefile(extension_name)
MyTest/MyTest.c
// Include the Ruby headers and goodies
#include "ruby.h"
// Defining a space for information and references about the module to be stored internally
VALUE MyTest = Qnil;
// Prototype for the initialization method - Ruby calls this, not you
void Init_mytest();
// Prototype for our method 'test1' - methods are prefixed by 'method_' here
VALUE method_test1(VALUE self);
// The initialization method for this module
void Init_mytest() {
MyTest = rb_define_module("MyTest");
rb_define_method(MyTest, "test1", method_test1, 0);
}
// Our 'test1' method.. it simply returns a value of '10' for now.
VALUE method_test1(VALUE self) {
int x = 10;
return INT2NUM(x);
}
就这么简单,我们进入MyTest目录,运行
ruby extconf.rb
这会为我们创建Makefile,然后我们运行
make
这样我们的C扩展库就compile和build好了,让我们运行mytest.rb测试一下:
# Load in the extension (on OS X this loads ./MyTest/mytest.bundle - unsure about Linux, possibly mytest.so)
require 'MyTest/mytest'
# MyTest is now a module, so we need to include it
include MyTest
# Call and print the result from the test1 method
puts test1
# => 10
该demo程序下载地址:
extension-code.tar.gz
分享到:
相关推荐
学院管理系统-Ruby on Rails 学校/学院管理系统 该系统是一个非常全面的系统,并且在考虑到学校和学院功能的前提下进行了清晰的查看。 它使用以下技术构建- Ruby On Rails Bootsrap(CSS / JavaScript框架) ...
使用Ruby on Rails的信号量演示CI / CD管道 这是一个示例应用程序和CI / CD管道,显示了如何在Semaphore 2.0上运行Ruby on Rails项目。 本地应用程序设置 Ruby版本在.ruby-version指定。 我们建议使用rbenv。 ...
很棒的Rails安全性 Ruby on Rails应用程序安全资源的精选列表 目录 资源 官方资源 实验室-脆弱的应用程序 ...CanCanCan -Ruby和Ruby on Rails的授权库,它限制了给定用户被允许访问的资源。 Pundit -Pundit提
编写代码时,需要遵循Ruby的语法规则,并可以利用Ruby丰富的库和框架来简化开发过程。 调试Ruby代码:在编写代码的过程中,可能需要进行调试以查找和修复错误。Ruby提供了多种调试方式,如使用puts或p语句输出变量...
可扩展性:Ruby 可以通过 C 或 Java 扩展,以利用这些语言的性能优势。 社区和库:Ruby 有着活跃的社区和丰富的库资源,例如 Rails 框架,使得构建 Web 应用变得非常简单。 Ruby 的用途 Web 开发:Ruby 最著名的...
它使用Ruby on Rails,后端使用PostgreSQL数据库,前端使用React.js和Redux。 技术领域 后端 Ruby On Rails PostgreSQL Jbuilder的 赫鲁库 前端 React / Redux JavaScript Webpack npm 贮存 AWS S3 Chrome扩展...
该项目旨在使新的和现有的Rails应用程序都更容易采用经过实践证明的模式,这些模式可使代码在长期内更具可持续性,并且代码库更易于维护和扩展。 我们将推荐一组简单但实用的抽象和实践,这些抽象和实践可在Rails
该项目旨在使新的和现有的Rails应用程序都更容易采用经过验证的模式,这种模式可以使代码长期更可持续地发展,并且代码库更易于维护和扩展。 我们将推荐一组简单但实用的抽象和实践,这些抽象和实践可在Rails应用程
刚刚发布的2.1.1版本新增了Ruby脚本的支持,可以支持Ruby脚本的开发、调试、生成可执行文件、控制台等功能,可以支持wxRuby、RubyTk等界面库,目前还不支持Rails的调试,后续版本会不断完善。 下载地址和详细介绍请...
设计 - 验证用户 Bootstrap - 通用样式 Paperclip - 上传和显示图像 Mailboxer - 帮助消息传递功能(包括回复) Bootstrap Material Design - 扩展设计 Masonry Rails - 通过过滤组织用户的显示(稍后显示) ...
信用到期的信用使此扩展程序更易于编码的两件事: rack-bug ,一个 Rails 调试工具栏 - 我用它作为后端,因为它有一个很好的结构来处理这样的工具。 约翰Resig的JavaScript microtemplating microframework - ...
Ruby on Rails的respond_to代码类似物对ASP.NET MVC NuGet 项目: 说明 该库为您的控制器提供了类似响应响应的 RoR 扩展方法。 简而言之, RespondTo允许您的操作根据客户端提交的 *HTTP Accept* 标头以不同的...
用于 Ruby 开发(不是 Rails)的有用实用程序和库的集合 安装 该工具集可以通过以下方式安装: gem install ruby-development-toolbox 用法 工具箱中的大多数模块都在基本 Ruby 类的基础上进行扩展,以提供附加...
通过提供包括服务器和数据库在内的完整应用程序,扩展了的原始目标。 目录 演示版 您可能会注意到与在免费服务上托管有关的一些延迟。 为什么 许多开发人员并不知道有可能使用默认的Rails工具来构建响应式“现代”...
Ruby routing-filter 包裹了 Rails 路由系统的复杂野兽,在 Rails URL 识别和生成中提供了看不见的灵活性和强大功能 路由过滤器围绕着复杂的野兽,Rails 路由系统在 Rails URL 识别和生成中提供了看不见的灵活性和...
注意:此存储库管理rubocop-rails gem(> = 2.0.0)。 rubocop-rails gem(<= 1.5.0)已重命名为 gem。 安装 只需安装rubocop-rails gem gem install rubocop-rails 或者如果您使用捆绑程序,请将其放入...
注意:此存储库管理 rubocop-rails gem (>= 2.0.0)。 rubocop-rails gem (<= 1.5.0) 已重命名为 gem。 安装 只需安装rubocop-rails gem gem install rubocop-rails 或者如果你使用 bundler 把它放在你的...
超级简单的库,用于读取或创建 API文档。 这是其他gem中使用的引擎,用于将API定义(grape,rails)转换为Swagger定义。 注意:仅支持规范的Swagger 2.0版。 安装 您可以将gem安装为 gem install ruby-swagger 或...
对于Rails开发人员来说,即使您没有直接使用Ruby元编程,也可以通过使用Rails获得收益。 该研讨会由( 为“ 。 学分 如果您想了解有关Ruby元编程的更多信息,我建议:(亚马逊会员链接) 讲习班目标 给您动手介绍...
为Swift中的验证建立标准的嵌入式库,同时使用户可以轻松扩展以创建自定义验证。 并避免开发人员为不同项目一遍又一遍地编写相同的代码和验证。 产品特点 快速验证。 超级简单的声明式语法。 容易扩展。 完全...