Ваш пример JSON не выглядит многомерным массивом. Это массив с кучей объектов в нем. Если это для Java, почему бы не использовать Джексона или GSon или подобную библиотеку для получения объекта в списке массивов! Все, что вам нужно определить, это объект POJO с соответствующими именами переменных с геттерами и сеттерами.
Я не видел сделанный прежде, но это возможно.
libruby
. Ваш основной исполняемый файл будет записан в Haskell, который будет звонить ruby_init()
и связанные функции, для выполнения незавершенного интерпретатора Ruby. Это действительно позволяет Вам выполнять произвольный код Ruby, все же.hs_init()
, и может только получить доступ foreign export
функции редактора.Необходимо будет написать код связующего звена, некоторых в C, для получения любой из тех двух опций работа.
Я не знаю, каковы Ваши требования, но это - то, для чего я пошел бы - это намного легче.
Я попробовал точно это (я - тот из упомянутого твита).
Я не думал о подходе libruby, но я потратил изрядное количество, пытающееся использовать FFI рубина для обертывания экспортируемой функции от haskell, и никогда не мог вполне получать его ко всей ссылке и работать.
При рассмотрении примеров haskell FFI Вы будете видеть, что они все включают основное C () функция. Так как FFI рубина не имеет (и не может иметь) основное (), который не будет работать. Если Вы пробуете без этого, Вы заканчиваете со странными ошибками ссылки.
Я могу совместно использовать то, что я имею с Вами, проверяю с помощью ping-запросов меня на freenode (cschneid), или в Твиттере (BlurredWeasel).
@ephemient, я на самом деле ищу someways для использования Ruby (высокий уровень + динамичный), чтобы быть логикой основного контроллера и вызывающий haskell для большого объема данных, уплотняющего (функциональный + скорость)
Я думаю, что собственная привязка близко к несуществованию кроме этого твита http://twitter.com/BlurredWeasel/status/1321484127
Используя RPC JSON будет, вероятно, самый легкий способ реализовать, где существует тонкая обертка в рубине к (method_missing) для вызова haskell по JSON/Socket.
JSON имеет преимущество способности легко отобразить примитивы на собственные типы между различными языками..
class SciHs
def method_missing(method, *args)
// json encode
// request Haskell over tcp socket or unix pipes
// json decode
end
end
Другая альтернатива для быстрого перемалывания чисел в рубине (+ функциональный стиль)
Мысли кто-либо?
Я не уверен в стороне Haskell, но здесь являюсь прохладным видео с Горы на запад Ruby Conf 09 о работе с FFI от Ruby. Это похоже на довольно хороший интерфейс.
http://mwrc2009.confreaks.com/13-mar-2009-16-10-ffi-jeremy-hinegardner.html
Я немного опоздал с этим обсуждением, но в настоящее время я пишу мост между Ruby и Haskell. Это http://github.com/mwotton/Hubris - это привязка, которая работает на уровне C. Однако все еще находится на очень ранней стадии разработки.
GHC 6.12.1 поддерживает создание динамических библиотек в Linux. Попробуйте что-нибудь вроде:
{-# LANGUAGE ForeignFunctionInterface #-}
module Example where
import Foreign.C.Types
fibonacci :: Int -> Int
fibonacci n = fibs !! n
where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
fibonacci_hs :: CInt -> CInt
fibonacci_hs = fromIntegral . fibonacci . fromIntegral
foreign export ccall fibonacci_hs :: CInt -> CInt
#include <stdlib.h>
#include "HsFFI.h"
void
example_init (void)
{
hs_init (NULL, NULL);
}
void
example_exit (void)
{
hs_exit ();
}
require 'dl'
require 'dl/import'
module Example
extend DL::Importable
dlload "./libffi-example.so"
extern "void example_init()"
extern "void example_exit()"
extern "int fibonacci_hs(int)"
end
Example.example_init
1.upto( 40 ) do | x |
puts "#{ x } -> #{ Example.fibonacci_hs x }\n"
end
Example.example_exit
GHC=ghc-6.12.1
libffi-example.so: Example.o wrapper.o Example_stub.o
$(GHC) -o $@ -shared -dynamic -fPIC $^ -lHSrts-ghc6.12.1
Example_stub.c Example_stub.h Example.o: Example.hs
$(GHC) -c -dynamic -fPIC Example.hs
Example_stub.o: Example_stub.c
$(GHC) -c -dynamic -fPIC Example_stub.c
wrapper.o: wrapper.c Example_stub.h
$(GHC) -c -dynamic -fPIC wrapper.c
clean:
rm -f *.hi *.o *_stub.[ch] *.so
make
ruby script.rb