一位跨平台开发者的自白

导读 Andreia Gaita在 SCON 开源大会上发表了一个题为跨平台开发者的自白的演讲。她长期从事于开源工作,并且为 Mono 工程(LCTT 译注:一个致力于开创 .NET 在 Linux 上使用的开源工程)做着贡献,主要以 C#/C++ 开发。Andreia 任职于 GitHub,她的工作是专注构建 Visual Studio 的 GitHub 扩展管理器。

我在她发表演讲前就迫不及待的想要问她一些关于跨平台开发的事,问问她作为一名跨平台开发者在这 16 年之中学习到了什么。

在你开发跨平台代码中,你使用过的最简单的和最难的代码语言是什么?

我很少讨论某种语言的好坏,更多是讨论是那些语言有哪些库和工具。语言的编译器、解释器以及构建系统决定了用它们做跨平台开发的难易程度(或者它们是否可能做跨平台开发),可用的 UI 库和对本地系统的访问能力决定了与该操作系统集成的紧密程度。按照我的观点,我认为 C# 最适合完成跨平台开发工作。这种语言自身包括了允许快速的本地调用和精确的内存映射的功能,如果你希望你的代码能够与系统和本地函数库进行交互就需要这些功能。而当我需要非常特殊的系统功能时,我就会切换到 C 或者 C++。

你使用的跨平台开发工具或者抽象层有哪些?

我的大部分跨平台工作都是为其它需要开发跨平台应用的人开发工具、库和绑定(binding),一般是用 MONO/C# 和 C/C++。在抽象的层面我用的不多,更多是在 glib 库和友元(friends)方面。大多数时候,我用 Mono 去完成各种跨平台应用的,包括 UI,或者偶然在游戏开发中用到 Unity3D 的部分。我经常使用 Electron(LCTT 译注:Atom 编辑器的兄弟项目,可以用 Electron 开发桌面应用)。

你接触过哪些构建系统?它们之间的区别是由于语言还是平台的不同

我试着选择适合我使用的语言的构建系统。那样,就会很少遇到让我头疼的问题(希望如此)。它需要支持平台和体系结构间的选择、构建输出结果位置可以智能些(多个并行构建),以及易配置性等。大多数时候,我的项目会结合使用 C/C++ 和 C#,我要从同一源代码同时构建不同的配置环境(调试、发布、Windows、OSX、Linux、Android、iOS 等等),这通常需要为每个构建的输出结果选择带有不同参数的不同编译器。构建系统可以帮我做到这一切而不用让我(太)费心。我时常尝试着用不同的构建系统,看看有些什么新的变化,但是最终,我还是回到了使用 makefile 的情况,并结合使用 shell 和批处理脚本或 Perl 脚本来完成工作(因为如果我希望用户来构建我的软件,我还是最好选择一种到处都可以用的命令行脚本语言)。

你接触过哪些构建系统?它们之间的区别是由于语言还是平台的不同

跨平台的用户界面的实现很困难。在过去几年中我已经使用了一些跨平台 GUI,并且我认为这些事情上并没有最优解。基本上有两种选择。你可以选择一个跨平台工具去做一个并不是完全适合你所有支持的平台的 UI,但是代码库比较小,维护成本比较低。或者你可以选择去开发针对平台的 UI,那样看起来更原生,集成的也更好,但是需要更大的代码库和更高的维护成本。这种决定完全取决于 APP 的类型、它有多少功能、你有多少资源,以及你要把它运行在多少平台上? 最后,我认为用户比较接受这种“一个 UI 打通关”了,就比如 Electron 框架。我有个 Chromium + C + C# 的框架侧项目,有一天我希望可以用 C# 构建 Electron 型的 app,这样的话我就可以做到两全其美了。

构建/打包系统的依赖性对你有影响吗 ?

我依赖的使用方面很保守,我被崩溃的 ABI(LCTT 译注:应用程序二进制接口)、冲突的符号、以及丢失的包等问题困扰了太多次。我决定我要针对的操作系统版本,并选择最低的公有部分来使问题最小化。通常这就意味着有五种不同的 Xcode 和 OSX 框架库,要在同样的机器上相应安装五种不同的 Visual Studio 版本,多种 clang(LCTT 译注:C语言、C++、Object-C、C++ 语言的轻量级编译器)和 gcc 版本,一系列的运行着各种发行版的虚拟机。如果我不能确定我要使用的操作系统的包的状态,我有时就会静态连接库,有时会子模块化依赖以确保它们一直可用。大多时候,我会避免这些很棘手的问题,除非我非常需要使用他们。

你使用持续集成(CI)、代码审查以及相关的工具吗?

基本每天都用。这是保持高效的唯一方式。我在一个项目中做的第一件事情是配置跨平台构建脚本,保证每件事尽可能自动化完成。当你面向多平台开发的时候,持续集成是至关重要的。没有人能在一个机器上构建各种平台的不同组合,并且一旦你的构建过程没有包含所有的平台,你就不会注意到你搞砸的事情。在一个共享式的多平台代码库中,不同的人拥有不同的平台和功能,所以保证质量的唯一的方法是跨团队代码审查结合持续集成和其他分析工具。这不同于其他的软件项目,如果不使用相关的工具就会面临失败。

你依赖于自动构建测试,或者倾向于在每个平台上构建并且进行本地测试吗?

对于不包括 UI 的工具和库,我通常使用自动构建测试。如果有 UI,两种方法我都会用到——针对已有的 GUI 工具的可靠的、可脚本化的 UI 自动化少到几乎没有,所以我要么我去针对我要跨我所支持的平台创建 UI 自动化工具,要么手动进行测试。如果一个项目使用了定制的 UI 库(比如说一个类似 Unity3D 的 OpenGL UI),开发可编程的自动化工具并自动化大多数工作就相当容易。不过,没有什么东西会像人一样双击就测试出问题。

你更倾向哪种跨编辑器的构建系统?

如果你要做跨平台开发,你喜欢用跨编辑器的构建系统,比如在 Windows 上使用 Visual Studio,在 Linux 上使用 Qt Creator,在 Mac 上使用 XCode 吗?还是你更趋向于使用 Eclipse 这样的可以在所有平台上使用的单一平台? 我喜欢使用跨编辑器的构建系统。我更喜欢在不同的IDE上保存项目文件(这样可以使增加 IDE 变得更容易),通过使用构建脚本让 IDE 在它们支持的平台上去构建。对于一个开发者来说编辑器是最重要的工具,学习它们是需要花费时间和精力的,而它们是不可相互替代的。我有我自己喜欢的编辑器和工具,每个人也可以使用他们最喜爱的工具。

在跨平台开发的时候,你更喜欢使用什么样的编辑器、开发环境和 IDE 呢?

跨平台开发者被限制在只能选择可以在多数平台上工作的所共有的不多选择之一。我爱用 Visual Studio,但是我不能依赖它完成除 Windows 平台之外的工作(你可能不想让 Windows 成为你的主要的交叉编译平台),所以我不会使用它作为我的主要 IDE。即使可以,跨平台开发者的核心技能也是尽可能的了解和使用大量的平台。这就意味着必须很熟悉它们——使用该平台上的编辑器和库,了解这种操作系统及其适用场景、运行方式以及它的局限性等。做这些事情就需要头脑清醒(我的捷径是加强记忆),我必须依赖跨平台的编辑器。所以我使用 Emacs 和 Sublime。

你之前和现在最喜欢的跨平台项目是什么?

我一直很喜欢 Mono,并且得心应手,其它的项目大部分都是以某种方式围绕着它进行的。Gluezilla 是我在多年前开发的一个 Mozilla绑定(binding),可以把 C# 开发的应用嵌入到 Web 浏览器页面中,并且看起来很有特色。我开发过一个 Winform 应用,它是在 linux 上开发的,它可以在 Windows 上运行在一个 Mozilla 浏览器页面里嵌入的 GTK 视图中。CppSharp 项目(以前叫做 Cxxi,更早时叫做 CppInterop)是一个我开始为 C++ 库生成 C#绑定(binding)的项目,这样就可以在 C# 中调用、创建实例、子类化 C++ 类。这样,它在运行的时候就能够检测到所使用的平台,以及用来创建本地运行库的是什么编译器,并为它生成正确的 C#绑定(binding)。这多么有趣啊。

你怎样看跨平台开发的未来趋势呢?

我们构建本地应用程序的方式已经改变了,我感觉在各种桌面操作系统的明显差异在慢慢变得模糊;所以构建跨平台的应用程序将会更加容易,而且对系统的集成也不需要完全本地化。不好的是,这可能意味着应用程序易用性更糟,并且在发挥操作系统特性方面所能做的更少。库、工具以及运行环境的跨平台开发是一种我们知道怎样做的更好,但是跨平台应用程序的开发仍然需要我们的努力。

原文来自:https://linux.cn/article-7743-1.html

免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:http://www.linuxprobe.com/

时间: 2024-10-29 19:12:20

一位跨平台开发者的自白的相关文章

跨平台开发者的经验之谈

导读 Andreia Gaita 在 OSCON 开源大会上发表了一个题为跨平台开发者的自白的演讲.她长期从事于开源工作,并且为 Mono 工程(LCTT 译注:一个致力于开创 .NET 在 Linux 上使用的开源工程)做着贡献,主要以 C#/C++ 开发.Andreia 任职于 GitHub,她的工作是专注构建 Visual Studio 的 GitHub 扩展管理器. 我在她发表演讲前就迫不及待的想要问她一些关于跨平台开发的事,问问她作为一名跨平台开发者在这 16 年之中学习到了什么. 在

XE6支持64位跨平台开发,非常方便

如需开发位64位的项目,只需在上图Target Platform目标平台鼠标右键选择Add Platform即可 然后下拉列表框选择相应的平台按OK键 默认选中的是32平台,如果需要开发64位平台的,只需双击上图中的64-bit Windows,或者鼠标右键选择Activate即可,开发出来的应用就是64位的 系统会在目录下自己成生Win64位这样一个目录里面的exe文件即是64位平台下可以跑起来的应用. XE6支持64位跨平台开发,非常方便

每一位Android开发者应该知道的Android体系架构和开发库

英文原文:Android Architecture and Libraries Every Android Developer Should Know Android 的体系架构鼓励组件重用,允许开发者发布共享 Activity.Service 并且访问其他应用程序的数据,还可以根据开发者制定的安全限制进行管理.话虽如此,今天我将分享一些关于 Android 架构和开发库信息,供开发者创建下一个杀手级应用使用.准备好了吗?请继续下面的阅读! 不要被上面的图片吓到,你无需了解所有内容. Andro

高危群体:开发者的自白,躲坑,迷茫,和下一步

今天结束了,项目仍未完成.走出大厦,逃避思考任何事情,思维中充斥着无力感,但身体却想发泄,想一吐胸郁,想健身至力竭.我是做开发的,想转行当力工,立个牌子,一天300日结.不知道有没有人雇我.我包饺子贼6,想去饺子店打工,最好能当个领班,把手艺传给小徒弟. 我也就想想. 说说我自己吧.参加工作到现在:物价涨了 2 倍,工资涨了 3 倍,房价涨了 5 倍, 比特币涨了 1000 倍--我今年刚好30 岁,编程更新换代之快,让我强迫自己精通one,学习another,关注next. 每天很忙,生活和职

一位测试员的自白:漫漫测试路,我们因隐秘而伟大

埋头干了多年的APP测试,有些苦.有些累已经刻在骨子里了,滋味可能只有我们自己知道,想说,却又不知道从何说起,于是这几天总归是给了自己一点闲余,归整了一下这几年杂融的生活,说不尽更说不清,但也想零零散散地分享出来,也权当是一种仅剩的情趣吧. 曾经迷迷糊糊地入了这行,刚开始工作的压力和彷徨让我成了一个淹不死的溺水人,拼命地在水中挣扎,被迫地去接受这种窒息感.但我翻不出生活的五指山,只得默默地匐身忍受,而前进的更是无路的暗夜丛林,只得等待我去探索. 每天的流水线式的重复操作就像一潭泥沼,但是能够使我

【Mood-14】龙虎榜 活跃在github中的1000位中国开发者

Last cache created on 2015-01-07 by Github API v3. ♥ made by hzlzh just for fun. Rank Gravatar username name location language repos followers created 1 cloudwu 云风 China C 43 4000 2011-04-14 2 lifesinger lifesinger Hangzhou, China JavaScript 6 3708 2

一位后端开发者推荐的书籍

我推荐的如下书籍,都是我看过的,觉得还不错,很有启发意义,不管是本专业出身还是其他转行过来的,我认为都有必要看看. 推荐书一: 推荐理由: 可以让你系统了解什么是软件工程,采用什么方式让开发具有高效率,而且还让你知道为什么代码要这么写,架构要这样分.这本书中,有很多文档示例可做参考,可作为软件开发的参考手册,当然了,实际情况还是不能照搬书上的,得根据业务需求而定.不过建议最好多读几遍,可以做做笔记,目前我只读了一遍,感觉有很多启发. 推荐书二: 推荐理由: 自从毕业到工作后,在开发的过程中,我发

【明星开发者招募】>>>>>在线讨论专区

亲爱的开发者: 非常感谢大家对本次活动的支持,以及踊跃参与~~现将本次活动通过评选的明星开发者,部分资料公布于下(排名不分先后): 昵称:flynetjoe 常驻城市:北京 人物介绍:熟悉JS CSS HTML Java 了解oracle mysql 经常写trigger 和procedure 对AppCan使用评价:之前对安卓开发一片空白,公司说让做app 硬着头皮开干 是appcan帮了我 非常感谢appcan 由衷的 代表作品:<代 理人掌中宝>.<头条联播> 昵称:nets

【新技术】免ios开发者账号申请ios证书打包ipa真机调试

虽然xcode现在可以免证书进行测试了,但众多跨平台开发者,如果还没注册苹果开发者账号. 想安装到自己非越狱手机测试是无能为力了. 不过新技术来了,只需要普通免费的苹果账号无需付费成为开发者就可以申请iOS证书打包ipa安装到自己手机测试,强大吧! 这个神器就是Appuploader,ios app测试及上架辅助工具. Appuploader安装教程 当然如果要上架App Store还是需要注册一个付费的苹果开发者账号. 如果只是安装ios应用到自己手机测试,现在只需要注册一个普通的苹果账号就行