Действительно ли производство scala.net готово? [закрытый]

Я думаю, что у вас есть правильная идея здесь

wrapped_apis = [OriginalApi(), OriginalApi()]
for wrapped_api in wrapped_apis:
    wrapped_api.do_something(1, 2, True)

Вы можете определить свой класс-обертку, наследуя из list, а затем обрабатывать вызовы API для его элементов, как только он будет создан.

class WrapperClass(list):
    def __init__(self, api_type):
        self.api_type = api_type

        for func in dir(api_type):
            if callable(getattr(api_type, func)) and not func.startswith("__"):
                setattr(self, func, lambda *args, **kwargs: 
                    [getattr(o, func)(*args, **kwargs) for o in self])

w = WrapperClass(OriginalApi)
o1, o2 = [OriginalApi()]*2
w.append(o1)
w.append(o2)
print(w.do_something(1, 2, True))
# [None, None]
print(w[0].b)
# 12
print(w[1].b)
# 12
print(o1.b)
# 12

Здесь я перебираю каждый метод в вашем классе API и создаю метод в классе-обертке, который применяет свои аргументы ко всем своим элементам списка. Затем он возвращает понимание списка, состоящее из результатов.

Излишне говорить, что вам, вероятно, следует проверить тип нового объекта, добавляемого к этому WrapperClass, например,

def append(self, item):
    if not isinstance(item, self.api_type):
        raise TypeError('Wrong API type. Expected %s'.format(self.api_type))
    super(WrapperClass, self).append(item)
43
задан Kyle Alons 8 February 2013 в 02:52
поделиться

5 ответов

Я слышал, что было приобретено новое финансирование для стороны .NET, но на данный момент оно велико и продолжает расти расстояние от «производства готово» или даже «годен к употреблению». Не было регистрации, которая бы в течение долгого времени содержательно затрагивала сторону .NET.

Обновление 15 января 2010: Недавнее сообщение в один из списков scala.

От: Lukas Rytz

В пт, 15 января 2010 в 03:18, Нафтоли Гугенхайм написал:

Не уверен, что это то, что вы ищете, но я думаю, что H2 может быть запущен на
.NET, согласно его документации / веб-сайту.
Если вы ищете механизм базы данных, запрограммированный в Scala, лично я
ничего не слышал, но это ничего не значит.
Если вы имеете в виду ОРМ и т.д., есть несколько. Вы можете использовать Lift Mapper даже в
не-лифтовое приложение (просто включите webkit и util jars IIRC).
Каков статус Scala в .NET?

Мы работаем над загрузкой компилятора и исправляем ошибки MSIL-Backend-Bugs. EPFL предоставит компилятор, работающий на .NET (который использует IKVM.OpenJDK.Core.dll, по крайней мере, в первой версии).

Сейчас у нас есть кросс-компилятор, работающий на JVM, и уменьшенная версия scala. -library.jar, который работает в .NET.

В некоторых частях мы будем полагаться на сообщество (например, перенести больше scala-library.jar в .NET).

Lukas

27
ответ дан psp 26 November 2019 в 23:03
поделиться

Статья в Википедии утверждает:

Существует альтернативная реализация для платформы .NET, но она не имеет были в курсе. (требуется цитирование)

Раздел «1120314» «Ограничения» часто задаваемых вопросов содержит следующую запись:

Работает ли Scala с .Net?

Да, текущий дистрибутив Scala можно скомпилировать программу для .Net Платформа. Платформа .Net имеет много сходство с Java, но оно также имеет многие идиосинкразии, делая поддержание этого порта является сложным задача. MSIL / .Net версия Scala реализует на этом этапе практически весь язык Scala, и большинство стандартные библиотеки. Один значительный ограничение заключается в том, что структурные типы делают еще не работает на .NET. Там еще может быть проблемы при использовании особенно сложные обработчики исключений. Маленький количество библиотек недоступно из-за особенностей .Net, и взаимодействие с другими .Net языки не поддерживаются. Для дальнейшего подробности, пожалуйста, обратитесь к этому (возможно, немного устаревший) страница документации.

В руководстве по использованию Scala с .NET говорится о версии 1.4, которая к настоящему времени устарела. С другой стороны, похоже, что документация была написана совсем недавно, в 2008 году, включая страницу «Scala на .NET: причуды» , которая звучит довольно важно.

Сам не имея никакого опыта, она Похоже, что поддержка хромает, но порт .NET на самом деле не первоклассный гражданин. Тот факт, что Scala в .NET (по сравнению с версией Java) не вызывает «ажиотажа», также не внушает оптимизма. Это не похоже на то, что я хотел бы использовать в настоящее время для коммерческого программного обеспечения. Конечно, возможно, что это хорошо, и просто не хорошо продается. Если вы действительно заинтересованы в этой идее, я бы попросил список рассылки .

9
ответ дан Jon Skeet 26 November 2019 в 23:03
поделиться

На данный момент - нет, не совсем, что очень жаль, так как это довольно забавный язык.

Программы типа "Hello world", хорошо - даже такие необычные трюки, как написание простого стека, в котором небольшой фрагмент Python (тот же код под Jython или IronPython) управляет тем же фрагментом Scala.

Что-нибудь умеренно обременительное - компиляция scalac-net может и будет бросать, даже если код не t использовать что-либо за пределами пространства имен scala, а также создает и передает довольно исчерпывающий набор модульных тестов на JVM. Он может сопротивляться построению даже довольно простых сборок (даже если он построен с использованием .net 1.0, чтобы соответствовать низкой спецификации mscorlib, включенной в пакет scala-msil).

Мои наборы тестов для "умеренно сложных" включают следующие реализации предназначены для компенсации текущих недостатков в. BigInteger ( из codeplex , с моими собственными модульными тестами)

  • порт на Scala кода Java в scala.actors
  • 3
    ответ дан 26 November 2019 в 23:03
    поделиться

    Если посмотреть на репозиторий SVN, в пространстве .net определенно наблюдается некоторая активность. В 2.7.x был каталог dotnet-library , но он отсутствовал в 2.8.x и стволе . Вместо этого есть каталог msil , в котором совсем недавно, 4 месяца назад, от rytz происходили некоторые нетривиальные вещи.

    Вся доступная документация кажется устаревшей, но, возможно, стоит спросить одного из основных участников, каков текущий статус. Обратите внимание, что импровизированный (который, как уже ответил на этот вопрос более года назад), похоже, является одним из них.

    0
    ответ дан 26 November 2019 в 23:03
    поделиться

    По состоянию на Scala Days 2010 в апреле, Мигель Гарсия работал над Scala.NET. Я полагаю, что он работает над плагином для visual studio, и я не уверен, насколько далеко продвинулись его работы, однако вы можете найти свидетельства его работы здесь:

    http://lamp.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/ http://www.sts.tu-harburg.de/people/mi.garcia/ScalaCompilerCorner/MixedSourceScalaCSharp.pdf http://www.sts.tu-harburg.de/people/mi.garcia/ScalaCompilerCorner/ScalaNetLearnsLINQTricks.pdf

    Сейчас Мигель занимается постдоком в EPFL: http://lamp.epfl.ch/~magarcia/

    Ответ Пола (extempore), вероятно, содержит более свежую информацию, но если бы мне было интересно, я мог бы спросить Мигеля напрямую.

    2
    ответ дан 26 November 2019 в 23:03
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: