1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

examples: show how to call a simple v module from ruby (#19073) (#19073)

This is a copy/adaptation of the python example (#13105)
This commit is contained in:
Everton J. Carpes 2023-08-07 01:07:00 -03:00 committed by GitHub
parent 7c2f3e4530
commit 357ac0bb5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 44 additions and 0 deletions

View File

@ -244,6 +244,7 @@ pub fn new_test_session(_vargs string, will_compile bool) TestSession {
if testing.github_job != 'ubuntu-tcc' {
skip_files << 'examples/c_interop_wkhtmltopdf.v' // needs installation of wkhtmltopdf from https://github.com/wkhtmltopdf/packaging/releases
skip_files << 'examples/call_v_from_python/test.v' // the example only makes sense to be compiled, when python is installed
skip_files << 'examples/call_v_from_ruby/test.v' // the example only makes sense to be compiled, when ruby is installed
// the ttf_test.v is not interactive, but needs X11 headers to be installed, which is done only on ubuntu-tcc for now
skip_files << 'vlib/x/ttf/ttf_test.v'
skip_files << 'vlib/vweb/vweb_app_test.v' // imports the `sqlite` module, which in turn includes sqlite3.h

View File

@ -0,0 +1,7 @@
A simple example to show how to call a function written in v from ruby
Step 1: Compile the v code to a shared library using `v -d no_backtrace -shared test.v`
Step 2: Run the ruby file using `ruby test.rb`
Note: you do not need `-d no_backtrace` if you use gcc or clang .

View File

@ -0,0 +1,23 @@
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'ffi'
end
require 'ffi'
module Lib
extend FFI::Library
ffi_lib File.join(File.dirname(__FILE__), 'test.so')
attach_function :square, [:int], :int
attach_function :sqrt_of_sum_of_squares, [:double, :double], :double
end
puts "Lib.square(10) result is #{Lib.square(10)}"
raise 'Cannot validate V square().' unless Lib.square(10) == 100
raise 'Cannot validate V sqrt_of_sum_of_squares().' unless \
Lib.sqrt_of_sum_of_squares(1.1, 2.2) == Math.sqrt(1.1*1.1 + 2.2*2.2)

View File

@ -0,0 +1,13 @@
module test
import math
[export: 'square']
fn square(i int) int {
return i * i
}
[export: 'sqrt_of_sum_of_squares']
fn sqrt_of_sum_of_squares(x f64, y f64) f64 {
return math.sqrt(x * x + y * y)
}