Страница 2 из 2

Добавлено: 21 июн 2004, 11:35
Llama
fa3a, программа написана на ruby. GUI через биндинг к сишной библиотеке. Соответсвенно нужна сама либа, биндинг, и ruby.

Добавлено: 21 июн 2004, 11:52
fa3a
Что такое биндинг к сишной библиотеке?? Первый раз встречаю такой термин, плиз поясни.

Добавлено: 21 июн 2004, 12:00
Llama
Возможно я не сосем корректно выразился. Binding - это нечто, позволяющее программе писаной на языке (как правило) более высокого уровня, обращаться к библиотеке написаной на другом языке. Позволяет использовать к примеру из скриптовых языков вызывать функции определенные с библиотеках на C и как правило содержит высокоуровневую обертку.

Добавлено: 21 июн 2004, 13:50
fa3a
Позволяет использовать к примеру из скриптовых языков вызывать функции определенные с библиотеках на C
Хм.. не знал, что из скриптовых языков можно сишные функции вызывать! Т.е. получается, что я могу из перлового скрипта например вызвать функцию, которую я на писал на С++ и слинковал в статическую либу?? Круто!

Лана, не суть. Я имел в виду, что если высокоуровневая обертка для изи-инстоллера была написана на FOX-e, то по моему супер скромному мнению ее можно бы было сбилдить статически для того чтобы не инсталлировать FOX.

Добавлено: 21 июн 2004, 14:44
leikind
fa3a писал(а):
Позволяет использовать к примеру из скриптовых языков вызывать функции определенные с библиотеках на C
Хм.. не знал, что из скриптовых языков можно сишные функции вызывать! Т.е. получается, что я могу из перлового скрипта например вызвать функцию, которую я на писал на С++ и слинковал в статическую либу?? Круто!
Это называется extension, расширение. Всегда так можно было делать, и если говорить о Perl или любом другом современном скриптовом языке, то огромное количество библиотек включают себя писанные на C расширения. Достаточно запустить команду

Код: Выделить всё

find /usr/lib/perl -name '*so'
чтобы в этом убедиться.

Добавлено: 21 июн 2004, 15:05
fa3a
круто однако! Я так понимаю, что для каждой новой библиотеки (либы) достаточно просто написать свой перловый extension (на С), вероятно воспользовавшись неким Perl API (должны же быть точки входа для перла!), и потом как-то заставить перл подгрузить этот extension (шареную либу). Если так, то сама идея плагинов конечно не нова, но ее присутствие очень расширяет возможности скриптовых языков..

Добавлено: 21 июн 2004, 16:33
leikind
Так оно и есть.

Добавлено: 22 июн 2004, 14:40
mend0za
2 fa3a: я использовал такую фичу в нашем проекте, вызов setrlimit из кода ruby

Код: Выделить всё

# setrlimit/getrlimit implementation
#
# for CPU time set
# 
# Author:: Vladimir Shahov
# Inspired by:: Alexander Bokovoy

require "dl/import"
require "dl/struct"

module LIBC 
    extend DL::Importable
   
    begin
        dlload "libc.so.6"
    rescue
        dlload "libc.so.5"
    end
    
    extern "int getrlimit(int, struct rlimit *)"
    extern "int setrlimit(int, const struct rlimit *)"
    
    Rlimit=struct [
        "ulong rlim_cur",
        "ulong rlim_max",
    ]

    # from /usr/include/bits/resource.h:  RLIMIT_CPU = 0 
    RLIMIT_CPU=0x0 



end

# class Ulimit
# set and get CPU (ulimit -t) limits
#
# has problems, when call from non-root users
class Ulimit
    UNLIMITED_CPU=4294967295

    def Ulimit.set_cpu(new_limit=UNLIMITED_CPU)
        val=LIBC::Rlimit.malloc
        val.rlim_cur=new_limit
        val.rlim_max=new_limit
        return LIBC::setrlimit(LIBC::RLIMIT_CPU, val) 
    end    
    def Ulimit.get_cpu
        val=LIBC::Rlimit.malloc
        
        LIBC::getrlimit(LIBC::RLIMIT_CPU, val) 
        return val.rlim_cur
    end


вызов из динамического языка билиотек Си - это вещь!

Добавлено: 22 июн 2004, 16:12
fa3a
вещь однозначно!!

Добавлено: 22 июн 2004, 17:50
leikind
Но то что показал мендоза, и extensions, о которых мы говорили суть разные вещи. DL - это динамический вызов функций из библиотек.

Добавлено: 22 июн 2004, 19:18
mend0za
первое не исключает второе

можно писать extensions на DL или вообще напрямую обращаться к функциям.