Портирование кода, основанного на Python, в Scala: необходим фреймворк - PullRequest
7 голосов
/ 15 мая 2011

Я пытаюсь перенести значительное количество кода, написанного на python, с витой на scala, и я ищу мнения о том, какую комбинацию фреймворков выбрать.

По сути, это сервер и клиент RPC (пользовательский протокол на основе protobuf + xmlrpc) / HTTP, который выполняет некоторые операции по хранению и преобразованию базы данных, но позже отправляет rpcs работникам, которые выходят за рамки этого переписывания.

В качестве сетевого ввода-вывода / базы для реализации стека RPC я использую netty. Все рабочие процессы в старой штуке были основаны на Twisted Deferred, и в настоящее время для его замены я рассматриваю либо ChannelFuture напрямую, либо оборачиваю его внутри либо в scalaz.Promise, либо в akka.Future.

Полагаю, одна часть вопроса - это можно сделать проще, чем вручную работать с обратными вызовами? Думаю, если я выберу этот маршрут, я могу упростить его позже, добавив некоторые обертки и используя продолжения, но, возможно, мне нужно использовать что-то отличное от начала?

Я пытался вписать рабочий процесс в модель актера, но, похоже, он не работает с актерами stdlib.

Спасибо.

Обновление: Кажется, что Finagle смоделирован близко или, по крайней мере, случайно подобен скрученному. twitter.util.Future выглядит очень похоже на Twisted's Deferred. Так что я использую это на данный момент.

Обновление 2: Причины, по которым я перенес его в первую очередь, - статическая типизация и производительность.

Ответы [ 2 ]

2 голосов
/ 04 февраля 2012

Finagle, похоже, моделируется близко или, по крайней мере, случайно похож на витой. twitter.util.Future выглядит очень похоже на Twisted's Deferred. Поэтому я использую это на данный момент.

1 голос
/ 16 июня 2011

Посмотрите на эту ссылку .

Это сообщение в блоге о сравнении производительности между Scala и Python + Twisted. Его код (или его совет) может быть полезен для вас.

...