?

Log in

No account? Create an account

Previous Entry | Next Entry

Open sourced OCaml ports for Erlang

Выложил в open source библиотеку поддержки программ на OCaml, работающих в качестве Erlang портов: http://github.com/EchoTeam/ocaml-erlang-port.

OCaml код порта выглядит примерно так:

open ErlangTerm

let port_command_dispatcher old_value = function
    | ET_Tuple [ET_Atom "forget"; _] ->
          None, ET_Atom "ok"
    | ET_Tuple [ET_Atom "set"; term] ->
          Some term, ET_Atom "ok"
    | ET_Tuple [ET_Atom "get"; _] ->
          old_value, begin match old_value with
            | None -> ET_Tuple [ET_Atom "error"; ET_Atom "no_value"]
            | Some term -> ET_Tuple [ET_Atom "ok"; term]
          end
    | _ -> raise (Failure "Unknown command")
    ;;

ErlangPort.erlang_port_interact_with_key port_command_dispatcher None

Erlang код выглядит примерно так:

  1> c(portserver).
  {ok,portserver}
  2> portserver:start_link({local, ocaml}, "./port_sample").
  {ok,<0.40.0>}
  3> portserver:call(ocaml, get, []).  
  {error,no_value}
  4> portserver:call(ocaml, set, {foo,bar}).
  ok
  5> portserver:call(ocaml, get, []).       
  {ok,{foo,bar}}
  6> portserver:call(ocaml, forget, []).
  ok


Лицензия BSD.

Tags:

Comments

(Deleted comment)
lionet
Feb. 21st, 2010 01:53 pm (UTC)
2. Ну да, конечно. Пока почему-то народ десять компиляторов SML нарожал, и ни одного — OCaml. У OCaml даже нет формальной спецификации языка — он как Perl, «defined by implementation».
3. Хочу чтобы язык становился проще, путём добавления некоторых уровней абстракции, а не сложнее, путём задрочки ocamlp4. Почему нет Type classes, и геморрой делать тот же pretty-printing?
4. Эрланг прост, у него есть io:format("~p") :)
(Deleted comment)
lionet
Feb. 21st, 2010 02:05 pm (UTC)
2. MLton? Очень даже. Не развивается, но и зашёл гораздо дальше в своих оптимизациях. Это в качестве примера того, что даёт открытая формальная спецификация для языка.
3. Haskell рулит очень в данном случае. У него самая мощная pretty-printing библиотека (http://www.cs.chalmers.se/~rjmh/Papers/pretty.html, статья рулит, между прочим), и вместе с Type classes, а также автоматическим выводом некоторых классов, типа Show, решают проблему с печатью и маршалингом на таком уровне приятности для программиста, который иные могут ожидать только от динамически типизированных языков.
(Deleted comment)
lionet
Feb. 21st, 2010 02:19 pm (UTC)
3. Haskell до Ocaml ещё пилить и пилить.

Ты не в курсе. Всё строго наоборот, с точки зрения фич вообще и этой в частности. Более того, даже с SMP/multicore у Haskell лучше, чем у OCaml. Ты знаешь, что GHC, чтобы лишний раз не синхронизироваться между процессорами, позволяет себе иной раз форсировать какой-то санк без сериализации доступа к ячейке результата, так как известно, что функция идемпотентна? Да, на нескольких процессорах может одновременно выполниться один и тот же санк, и записать результат. Last writer wins, но функция идемпотентна, так что пофиг. Это тебе не эрланг с окамлем, тут яйца из стали нужны. И они у хаскелистов имеются.

А на работе мы конкретно не пишем на сях и жабе вообще. А вот на Хаскеле, не говоря про окамл с эрлангом — пишем.
(Deleted comment)
lionet
Feb. 21st, 2010 02:31 pm (UTC)
3. Не смешите тапки честных людей. LWT в OCaml — это что-то из разряда херни на палочке. В сравнении с чем угодно, с тем же эрлангом, например, или питоном. Не говоря уже о хаскеле.
(Deleted comment)
(no subject) - lionet - Feb. 21st, 2010 02:33 pm (UTC) - Expand
(no subject) - sigterm - Feb. 21st, 2010 03:10 pm (UTC) - Expand
(no subject) - lionet - Feb. 21st, 2010 03:12 pm (UTC) - Expand
(no subject) - lionet - Feb. 21st, 2010 03:14 pm (UTC) - Expand
(no subject) - sigterm - Feb. 21st, 2010 04:54 pm (UTC) - Expand
(no subject) - lionet - Feb. 21st, 2010 05:01 pm (UTC) - Expand
(no subject) - levgem - Feb. 21st, 2010 06:30 pm (UTC) - Expand
(no subject) - lionet - Feb. 24th, 2010 11:12 am (UTC) - Expand
(no subject) - levgem - Feb. 24th, 2010 11:15 am (UTC) - Expand
(no subject) - lionet - Feb. 24th, 2010 11:26 am (UTC) - Expand
(no subject) - levgem - Feb. 24th, 2010 11:29 am (UTC) - Expand
(no subject) - levgem - Feb. 24th, 2010 03:40 pm (UTC) - Expand
(no subject) - sigterm - Feb. 22nd, 2010 05:27 pm (UTC) - Expand
(no subject) - lionet - Feb. 22nd, 2010 05:38 pm (UTC) - Expand
(no subject) - lionet - Feb. 22nd, 2010 05:41 pm (UTC) - Expand
(no subject) - rumataestor - Feb. 23rd, 2010 09:04 pm (UTC) - Expand
(no subject) - lionet - Feb. 23rd, 2010 09:25 pm (UTC) - Expand
(no subject) - rumataestor - Feb. 24th, 2010 08:35 am (UTC) - Expand
(no subject) - lionet - Feb. 24th, 2010 08:40 am (UTC) - Expand
(no subject) - gaperton - Feb. 23rd, 2010 09:59 pm (UTC) - Expand
(no subject) - lionet - Feb. 23rd, 2010 10:21 pm (UTC) - Expand
(no subject) - gaperton - Feb. 23rd, 2010 10:22 pm (UTC) - Expand
(no subject) - lionet - Feb. 23rd, 2010 10:25 pm (UTC) - Expand
(no subject) - gaperton - Feb. 23rd, 2010 10:32 pm (UTC) - Expand
(no subject) - lionet - Feb. 23rd, 2010 10:40 pm (UTC) - Expand
(no subject) - gaperton - Feb. 23rd, 2010 10:45 pm (UTC) - Expand
(no subject) - lionet - Feb. 23rd, 2010 10:50 pm (UTC) - Expand
(no subject) - gaperton - Feb. 24th, 2010 08:01 am (UTC) - Expand
(no subject) - lionet - Feb. 24th, 2010 08:25 am (UTC) - Expand
(no subject) - dmzlj - Feb. 24th, 2010 08:32 am (UTC) - Expand
(no subject) - lionet - Feb. 24th, 2010 08:38 am (UTC) - Expand
(no subject) - gaperton - Feb. 23rd, 2010 09:56 pm (UTC) - Expand
(no subject) - lionet - Feb. 23rd, 2010 10:12 pm (UTC) - Expand
(no subject) - gaperton - Feb. 23rd, 2010 10:30 pm (UTC) - Expand
(no subject) - lionet - Feb. 23rd, 2010 10:37 pm (UTC) - Expand
(no subject) - gaperton - Feb. 23rd, 2010 10:42 pm (UTC) - Expand
(no subject) - lionet - Feb. 21st, 2010 02:34 pm (UTC) - Expand
(no subject) - Kirill A. Korinskiy [catap.ru] - Feb. 21st, 2010 03:06 pm (UTC) - Expand
(no subject) - lionet - Feb. 21st, 2010 03:11 pm (UTC) - Expand
(no subject) - thesz - Feb. 22nd, 2010 01:07 am (UTC) - Expand
zoonior
Feb. 21st, 2010 06:58 pm (UTC)
Для Ocaml есть Wadler's pretty-printer
Про претти-принтинг есть еще более еще более рулящая статья Wadler'a A prettier printer by Philip Wadler,
по мотивам которой Daan Leijen (который Parsec) написал для Haskell'а не менее мощную PPrint (живет здесь: http://hackage.haskell.org/package/wl-pprint). И практически сразу Линдиг (cminusminus) портировал ее на Ocaml с хвостовой рекурсией и.т.д.
Вот оно (облитературено Noweb) : http://code.google.com/p/quest-tester/source/browse/trunk/src/pretty.nw

Я, в свою очередь, переписал ее на Scala (обращайтесь если что), и даже на Lua:
http://github.com/downloads/zoon/luapp/luapp51-0.7.zip
lionet
Feb. 21st, 2010 10:59 pm (UTC)
Re: Для Ocaml есть Wadler's pretty-printer
Очень интересно, спасибо!

P.S. Показательно, впрочем, что, это само по себе иллюстрация того, откуда и в каком направлении фичи идут.
(Deleted comment)
lionet
Feb. 21st, 2010 02:49 pm (UTC)
Статически и строго типизированный; сорри, забыл добавить.
(Deleted comment)
lionet
Feb. 21st, 2010 02:58 pm (UTC)
Именно. К счастью, erlang wins по совокупности других причин: лёгкость въезжания в него коллег, лёгкость поддержки в продакшне нашего типа.
sigterm
Feb. 22nd, 2010 07:16 pm (UTC)
Мне вот кажется, что эта легкость -- немного обманчива. Т.е. сам язык очень простой, стройный и с низким порогом вхождения, это да, но вот экосистему (OTP) в целом я бы простой не назвал.
(no subject) - lionet - Feb. 22nd, 2010 08:12 pm (UTC) - Expand

Profile

lionet
Lev Walkin
Website

Latest Month

December 2016
S M T W T F S
    123
45678910
11121314151617
18192021222324
25262728293031

Page Summary

Powered by LiveJournal.com
Designed by yoksel