如果我要开发一个客户端, 要求跨 Windows/Mac/ Linux /安卓/iOS 平台, 复用同一份底层逻辑代码, 那么 C++是不是唯一的选项? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ybw
V2EX    程序员

如果我要开发一个客户端, 要求跨 Windows/Mac/ Linux /安卓/iOS 平台, 复用同一份底层逻辑代码, 那么 C++是不是唯一的选项?

  •  1
     
  • /div>   ybw 2019-11-23 17:45:08 +08:00 7339 次点击
    这是一个创建于 2204 天前的主题,其中的信息可能已经有所发展或是发生改变。
    47 条回复    2019-12-11 14:49:27 +08:00
    missdeer
        1
    missdeer  
       2019-11-23 17:54:03 +08:00
    js 表示不服
    另外 Go 从技术上也没问题
    ybw
        2
    ybw  
    OP
       2019-11-23 18:03:08 +08:00   1
    @missdeer 你是说 Electron 吗, 使用这个框架的程序, 已经被 Apple 禁止上架了。
    hkitdog
        3
    hkitdog  
       2019-11-23 18:04:41 +08:00 via iPhone
    Rust 也可以
    JunoNin
        4
    JunoNin  
       2019-11-23 18:05:15 +08:00
    Rust 可以试试
    tomczhen
        5
    tomczhen  
       2019-11-23 18:06:18 +08:00 via Android
    pwa : doge:
    hehheh
        6
    hehheh  
       2019-11-23 18:09:50 +08:00
    小客户端还行,如果稍微大点的程序,不如 ios 和 macos 用 swift 其他平台用 java。
    一是 c++本身学习成本太高,找一队能 hold 住的人有点难。
    二是 c++的跨平台也没那么容易实现,光是 Linux 和 win 就需要在 header 和函数的使用上下点功夫。
    还有 c++本身有不少坑,就是不同的平台对一样的代码的解释可能会不太一样,这个和编译器有关。有的时候有的平台的编译器实现了优化,你的代码就行,有的平台的编译器没有优化,这个就很麻烦。。。
    ArthurRen
        7
    ArthurRen  
       2019-11-23 18:15:48 +08:00
    pyqt
    hhx
        8
    hhx  
       2019-11-23 18:17:25 +08:00 via Android
    @hehheh 请教下。目前国内的 C++开发是否要求掌握某个平台的开发库,例如 linux 提供的 C 接口等。我有 C 语言基础,也有一定的 linux 开发经验,想要从事 Cpp 开发的话,是否需要花时间学习 Cpp 相关的内容,例如 Cpp 标准库以及 boost 等准标准库。谢谢。
    mmdsun
        9
    mmdsun  
       2019-11-23 18:22:18 +08:00 via Android   1
    Xamarin 开发跨平台 App, 国外用的人也不少
    hehheh
        10
    hehheh  
       2019-11-23 18:25:30 +08:00
    @hhx 大兄弟你真的问错人了,我没有在国内工作过。。。不过如果你单纯想问你懂 c 能不能直接上 c++的话,我只能告诉你这真的是两门语言。区别比一般人想象的大得多
    iceheart
        11
    iceheart  
       2019-11-23 18:30:03 +08:00 via Android
    你自己写,可以上 C++。
    多人合作,建议上 golang。
    C++给别人擦屁股最难受了。
    zeroDev
        12
    zeroDev  
       2019-11-23 18:37:09 +08:00 via Android
    可以尝试写个网页?
    xiubin
        13
    xiubin  
       2019-11-23 19:29:18 +08:00 via iPhone
    flutter 它不香吗?
    hkitdog
        14
    hkitdog  
       2019-11-23 19:36:50 +08:00 via iPhone
    @xiubin 话法太他妈恶心
    vipcc
        15
    vipcc  
       2019-11-23 19:40:41 +08:00 via Android
    把各个平台不同的底层进行封装。
    然后进行业务逻辑开发。
    qt 已经帮你做好了。

    然而我不认同。
    HuHui
        16
    HuHui  
       2019-11-23 19:53:14 +08:00
    目前在用 go + qt
    https://github.com/therecipe/qt
    dosmlp
        17
    dosmlp  
       2019-11-23 19:59:34 +08:00
    c++似乎是唯一跨平台的了
    feelapi
        18
    feelapi  
       2019-11-23 20:03:40 +08:00
    看你客户端的规模了。cpp 是可以的,核心逻辑也就是非界面部分用 cpp,可以做到所有系统一份代码。界面部分可以自己想办法。比如 qt,这个可以做到所有平台。这个也是 cpp。
    对开发人员要求很高,没有十年经验的人坐镇,你就不要想了,太多的坑经验少的人填不上的。
    xiangyuecn
        19
    xiangyuecn  
       2019-11-23 20:29:51 +08:00
    html+css 做界面,js 搞逻辑吧,门槛超低,培训一个月就能上岗,真正的跨平台 这玩意你知道的能运行,你不知道的也能运行。不仅现在的平台能运行,过气的也能运行,甚至未来会诞生的都能运行

    当然要出产品请临时工肯定不行。
    across
        20
    across  
       2019-11-23 20:40:11 +08:00 via iPhone
    是。
    假如不考虑部分原生 c 教派的话...
    rust 怕是比 c++更难找人。
    MasterMonkey
        21
    MasterMonkey  
       2019-11-23 20:40:59 +08:00 via iPhone
    Cordova 怎么样?
    另外 EletronJS 怎么样?
    qazwsxkevin
        22
    qazwsxkevin  
       2019-1-23 20:45:18 +08:00
    @feelapi 请教,如果业务的具体逻辑实现用 cpp 开发,在 win 的平台下(不使用 WEB 的方式,WEB 在人力的成本投入其实不低吧?)用什么做 UI,衔接最好,成本最低,人也容易上手?
    neoblackcap
        23
    neoblackcap  
       2019-11-23 20:46:04 +08:00
    @dosmlp 只要能编译成对应目标平台的,其实都可以。虽然很多人没有说 Java,但是我的确也看过不少基于 JVM 平台开发的软件,虽然那个不太能算自己跨平台。
    如果对性能,交互要求很高的,的确是用 C++开发的比较多。可能还有其他用 Rust 啊,D-lang 啊。不过的确是用 C++的成功事例比较多。
    neoblackcap
        24
    neoblackcap  
       2019-11-23 20:47:26 +08:00
    @across 其实写 rust 的,认同 rust 的,大多数也就是写 C++的那批人。rust 是可以说是 better c++了。
    feelapi
        25
    feelapi  
       2019-11-23 21:15:26 +08:00
    @qazwsxkevin QT, WPF,MFC, 看你能找到什么样的人。
    mfc 很古老,但是发布简单,开发比较慢,不好找人。
    wpf 可以做的很漂亮,发布要注意一下。找人还好,可以做的很漂亮。
    qt 比较简单,上手快,但是有坑不好填。主要是有熟练工还好。
    heiheidewo
        26
    heiheidewo  
       2019-11-23 21:36:25 +08:00
    别问,问就是 C++
    rome7054
        27
    rome7054  
       2019-11-23 22:26:53 +08:00
    不是,前面楼层连 golang 这种对 UI 支持不友好的有人提出来,js 没用过不评论,python 和 golang 用着还行,然鹅对 Android/iOS 支持那还是算了,既然复用同一份底层逻辑代码,且包含移动平台,说实话 C#其实是更好选择,Windows/Mac/ Linux 直接使用 dotnet core 用的很舒服,安卓 /iOS 可以用 Xamarin,配合隔壁热帖宇宙第一 IDE VS,而且比起 C++,C#写起来不能再舒服
    Cbdy
        28
    Cbdy  
       2019-11-23 22:30:58 +08:00 via Android
    @ybw 最可行的确实是 js,另外下架的原因是部分 app 用了私有的 API,并非所有 electron 应用都下架
    shuangya
        29
    shuangya  
       2019-11-23 22:58:21 +08:00
    可以是可以,但是 C++后续维护难度……特别是稍微复杂点的应用,涉及到多端兼容……够你喝一壶的
    beginor
        30
    beginor  
       2019-11-23 23:19:00 +08:00 via Android
    可能 Xamarin + C# 才是最佳方案
    lzihua
        31
    lzihua  
       2019-11-23 23:31:17 +08:00
    持续关注下
    kwanzaa
        32
    kwanzaa  
       2019-11-23 23:35:18 +08:00
    Golang 它不香?
    yukinotech
        33
    yukinotech  
       2019-11-23 23:43:35 +08:00
    @ybw 为什么?因为风控和合规的原因吗?
    momocraft
        34
    momocraft  
       2019-11-23 23:48:04 +08:00
    什么叫底层逻辑, io 意义上还是 ddd 意义上
    trait
        35
    trait  
       2019-11-23 23:49:17 +08:00 via iPhone
    @kwanzaa go 的主战场是服务端,别啥都无脑推,跨平台这种带尿瓶的就是弟弟
    Ahri
        36
    Ahri  
       2019-11-24 00:03:17 +08:00
    TypeScript + React Native
    xuanbg
        37
    xuanbg  
       2019-11-24 00:26:54 +08:00
    WebApp 也是客户端呢
    MonoLogueChi
        38
    MonoLogueChi  
       2019-11-24 00:37:09 +08:00 via Android
    关键是你是否需要 UI 界面,如果不需要 gui,选择很多
    kwanzaa
        39
    kwanzaa  
       2019-11-24 01:24:14 +08:00
    @trait 我觉得你不打算好好说话。
    mingl0280
        40
    mingl0280  
       2019-11-24 05:58:34 +08:00 via Android
    是唯一选项。
    如果功能较多的软件,做 webapp 的性能调优能把你做到怀疑人生,c 艹起码在有良好的编码规范的情况下不会太坑爹。
    changdy
        41
    changdy  
       2019-11-24 10:20:21 +08:00
    那么问题来了 为什么也 要复用一份逻辑代码... 尤其是 跨越 移动端 桌面端
    服用代码并不能减少 开发时间. 甚至后期坑更多
    jason94
        42
    jason94  
       2019-11-24 10:36:47 +08:00   2
    @ybw 大多数人都只是看了一下标题,就以为 electron 应用被禁止上架,然后以讹传讹。

    原文是在这里 https://david.dev/you-cannot-submit-an-electron-6-or-7-app-to-the-apple-store

    被禁止上架的原因是他使用了一些非公开的 api,有个 issue 也讨论了这个问题 https://github.com/electron/electron/issues/20027

    而且这也不止是在 electron,在 futter/rn 中使用非公开的 api 也是会被禁止上架的~~
    jason94
        43
    jason94  
       2019-11-24 10:42:14 +08:00
    如果没有追求极致的性能,推荐桌面端 electron + react,移动端用 react-native,可以复用不少逻辑。
    mxT52CRuqR6o5
        44
    mxT52CRuqR6o5  
       2019-11-24 11:08:12 +08:00 via Android
    rn(rn-web 配合 electron 能做桌面端),flutter,kivy,q
    duanxianze
        45
    duanxianze  
       2019-11-24 12:47:17 +08:00
    只有纯 web 能满足你的需求 大不了自带一个 chrome 嘛
    loginbygoogle
        46
    loginbygoogle  
       2019-11-24 19:19:08 +08:00 via iPhone
    抱歉,flutter 无敌。
    GM
        47
    GM  
       2019-12-11 14:49:27 +08:00
    挖个坟,Gluon Mobile 貌似还不错。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     971 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 23:24 PVG 07:24 LAX 15:24 JFK 18:24
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86