C++ backend & C# frontend

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Ins3t, 27 Jan 2017.

  1. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    944
    Likes Received:
    427
    Reputations:
    139
    Привет, кто пробовал? Какие подводные камни? В основном интересуют проблемы с сериализацией плюсовых типов в дотнетовские.
    Призываю @GRRRL Power, помнится ты что то говорил об этом.
     
    #1 Ins3t, 27 Jan 2017
    Last edited: 27 Jan 2017
  2. SooLFaa

    SooLFaa Members of Antichat

    Joined:
    17 Mar 2014
    Messages:
    515
    Likes Received:
    472
    Reputations:
    145
    Расскажи - ЗАЧЕМ?! Почему бы не сделать всё на шарпе или плюсах? Тем более есть асп.нет
     
    _________________________
  3. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    944
    Likes Received:
    427
    Reputations:
    139
    При чем здесь асп.нет?

    На шарп переписывать нельзя из за соображений производительности, а на С++ писать гуй это просто ад. Вот и хочется разделить: сервис на С++, гуй на С#.
     
  4. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    636
    Likes Received:
    541
    Reputations:
    3
    А расскажи что у тебя за соображения производительности такие? Скорость языка почти никогда не является проблемой в веб-приложениях. Особенно если использовать кэширование и факторизовать computational-intensive логику.

    Ты можешь сделать бэкенд на удобном языке, определить места, где нужно больше производительности и их переписать на "быстром" языке.

    Про сериализацию: JSON, protobuf, messagepack — работают со многими языками.
     
  5. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    944
    Likes Received:
    427
    Reputations:
    139
    У меня не веб сервиса а windows service, по производительности скажем так - очень активная работа с файловой системой, перебор и обработка больших объемов файлов.

    К протобафу нужно еще RPC либу которая умеет его юзать и для С++ и для С#, нужно гуглонуть.
     
  6. GRRRL Power

    GRRRL Power Moderator

    Joined:
    13 Jul 2010
    Messages:
    827
    Likes Received:
    184
    Reputations:
    84
    Я сам работал вот с такими вариантами:
    1. Сделать либу с plain C интерфейсом и просто вызывать ее функции из C#-кода.
    2. Сделать либу на C++ с плюсовым интерфейсом, потом написать для C++ классов C++/CLI-обертки и использовать их из C#. Как преобразовывать типы, решаешь в таком случае сам. Из минусов - прилично кода, ничего не генерится автоматически.

    Есть еще вариант, когда есть отдельное приложение на C++ и отдельное на C#. Это как раз случай с C++ - windows service и GUI на C#. Можно по-разному организовать их общение. Например, RPC и какой-нибудь сериализатор. Я не в курсе, есть ли какие-то открытые библиотеки, позволяющие организовать такое взаимодействие (не искал, но думаю, что что-то можно нарыть). В одной из компаний используется для разработки ПО именно такая архитектура, но существует самописные библиотеки сериализации/десериализации и автоматические генераторы врапперов, позволяющие обернуть C++-интерфейсы для использования их в C# через RPC. Из плюсов - есть набор типов, которые доступны для сериализации в автоматическом режиме, можно сериализовывать структуры из этих типов. Можно удаленно получать интерфейсы и вызывать их методы. Минусы - дофига кода, который отвечает за процесс генерации всего этого добра, а также кода, который позволяет безопасно гонять всё это через RPC. Все плюсовые типы не получится преобразовать в C#-типы, равно как и наоборот, придется ограничиться фиксированным набором (строки, массивы, числа и т.д.)

    PS. На Qt + QML можно сделать сейчас малыми усилиями неплохой кроссплатформенны интерфейс, хотя WPF всё равно богаче, конечно.
     
    _________________________
    Ins3t likes this.
  7. pravdaru

    pravdaru Member

    Joined:
    5 Dec 2015
    Messages:
    176
    Likes Received:
    45
    Reputations:
    0
    C# лучше с C# так как метаданные не надо будет потом парсить.
    Можно прямо структурами передавать. Получается в разы быстрее.
    Я пробовал писать десктоп игру - 3-их выдерживает без проблем в реалтайм.
    ИМХО C# лучше.