前不久手头有两个软件需要同步开发,且成为软件A
和软件B
吧,面临开发工具的选择:
软件A
:有两个版本, PC edition和mobile edition. 分别运行在普通的PC环境和手持设备上。
核心部分基于同一棵源代码树。平台相关部分单独编写和优化。这个软件要完成的功能是实时
的显示和诊断低速(<11000bps)和中速(<500kbps)工业控制网络。工业控制网络和PC间的信号转换
已经有现成的设备支持, PC只需处理经USB口或者bluetooth接收上来的数据,并向网络发送控制
命令就可以了。mobile edition的通信模块有成熟的电路可用,这里不用考虑。
软件的核心部分之一是一个类似行为树的结构,可以基于Finite State Machine或者PetriNET,
另一个主要的部分是通信,需要支持包括CAN在内的协议。
对这个软件来说语言上的选择非常有限, 基本上是在两条路中选一:全部用C开发;或者
用C/C++混合开发。我心里非常倾向于用纯C开发全部产品代码,这样做的好处显而易见:
既可以跑在PC平台上,又可以方便为未来的mobile edition选择性价比高的硬件平台。
比如我熟悉的两种日系平台(toshiba T900, Renesas M16)价格非常有吸引力,只有C语言
开发套件。但是用C语言开发也有很大的缺点:凭我个人绝对不可能在有吸引力的时间完成这个
软件的第一个版本,而且我身边找不到出色的写较大规模C程序的能手。
C++有不少优点, 它的库比C丰富, 可以直接使用STL里面的结构快速的写出原型,
我曾用下班前的两个小时用STL基本实现了PETRI-NET的功能, 而花了一个星期还没有完全调通一个
用C写的运行时行为可变的FSM。C++对我来说最大的问题是阻止了我硬件成本的下降, 想想看
C++程序很难跑在一个用16位MCU加512K RAM/2M ROM搭建起来的平台上(还不考虑编译器支持问题),
即使只和一个很小的内核和文件系统捆绑在一起。
图形界面是非常复杂的一部分,因为要跨平台还要考虑性能。QT是一个不错的选择, 但是
QT对嵌入式环境要求不低,费用也是不得不计较的。这个部分我准备使用公司目前在用的图形库,
价格公道,性能还可以,因为以前我做过类似的移植工作,所以是完全可行,缺点是图形界面
不够丰富,没法和QT相比。 按照目前流行的做法,常规的图形界面抽象出来做成数据驱动的界面,
数据格式已经定好了,但是访问数据的代码还没有动手。
软件B
:软件B实际上作为软件A的二次开发环境被单独开发, 运行在windowsXP上。功能如下:
一个类似labview的图形编辑环境,以可视化方式编辑有限状态机和Petri-NET; 数据库访问部分,
数据库使用SQL SERVER 2005;数据生成部分,最终生成定制的二进制格式文件。软件A的图形界面
编辑和生成部分, 这个部分输出的数据用来驱动A的界面变化。
前段时间我试着在Netbeans 6环境下用java/swing为软件B写了一些代码,但是最终失败了。原因有以下几点:
1) 我以前从来没有用java写过哪怕一个有用的程序;
2) 我不熟悉Swing;
3) Netbeans我用不习惯(但不可否认这个IDE给我留下了非常深刻的印象)
后来我打算回头用C++来开发软件B。在windows下,如果开发大一些的软件, 有如下几个选择:
1) VC++/MFC: 我用曾经用这套工具写过几个规模不大的程序,但并没有涉及非常复杂的图形界面,不过我曾经参加
一个庞大的用win32/C开发的产品并提交过数量不少的产品代码, 所以MFC图形界面开发对我来说学习曲线并不陡;
2) C/Win32 API,虽然很熟悉这种开发方式,但目前身边的人并不屑这样做,遂放弃。
3) VC++/CLR: 我曾就这个问题问过以前在Microsoft工作过的同事,他并不推荐和CLR搞在一起的C++,
但他向我推荐C#,可见CLR还是能成事的。
4) Python/wxWidgets: 用python写过一些小工具,但以我所知道的用这套组合工具开发的软件,有名一点的好像
只有Chandler,一个不太成功的开源项目。 而且我不熟悉wxWidgets.
5) C#: 来自MS的同事强力推荐这个。我在07年用C#写过一个基于PC的控制单元模拟器,USB口收发数据,数千行代码,仅此而已。印象深刻的就是最新的Visual Stdio 2005贴心的开发环境(以前用的VS版本仅限于6)。C#的语法和巨大的.net库是参照MSDN现用现学的。看来C#还真是开发软件B的强有力的候选者。
6)Java/Swing: java本来不在我的考虑之内。在职业生涯的前面几年里我赖以生存的基本就是C和C++, 第一次领略到
java的能力是一个同事给我演示他的一个不大的程序,寥寥百十行代码,访问数据库,生成定制格式的数据。
估计换成我用C要折腾半天还不一定搞的定。当然我也知道J2EE以及众多开源框架的大名,但跟我的工作并不相干,
所以没有理会。现在看来要重新评估java在PC桌面开发的能力了, 遂让公司给买了core java2影印版两卷开始翻, 觉得
java可以满足这样一个中等规模的,侧重在用户交互和图形界面的,访问数据库的软件。身边的C/C++程序员也大多
愿意学习这样一门新的语言(对我们来说)。
结论
:最后的选择结果是,软件A我们使用了C++, 因为我们都非常熟悉C++,大多数同事有5年以上的C++软件
开发经验, 用纯C比较冒险, 重新实现很多数据结构不说,完整的测试这些基础设施也非常耗时。当然我们用C++付出
的代价是软件A mobile edition的运行环境不低于这个水准 : 140 MHZ 以上的RISC机器, 32M SDRAM以及3.5'TFT LCD,以及winCE系统。目前进度还算乐观:最核心的几个功能已经写好了。正在为PC版本写平台相关代码。
软件B选择用C#是反复权衡的结果,MS的桌面开发成熟程度还是比较高, 我们还是倾向于保守的选择。J2SE可能确实有不少我不知道的重量级应用实例, 但是我个人感觉它的开发环境比Microsoft的差一些。 我想也许J2SE有统治桌面开发的那一天。但是现在我必须得把东西做出来,一个粗糙的版本也好, 否则老大见不到DEMO, 我们也就申请不到资源,后继的开发根本无从谈起。软件B 最困难的图形符号编辑部分还没有动手, 由图形生成的数据描述文件的格式已经定好,解析这些文件的代码也已经调试通过,可以使用了。
分享到:
相关推荐
C++和C#的性能比较:https://blog.csdn.net/wwwsq/article/details/4771093?utm_source=distribute.pc_relevant.none-task C++与C#界面编程比较:https://blog.csdn.net/loadstar_kun/article/details/8467631?...
ortools是Google开源的一款强大的运筹学和优化工具包,主要用C++编写,提供了Python、Java和C#等多语言接口。这个“ortools-1.3538-py2.7-linux-x86_64.egg”文件是一个针对Python 2.7版本且适用于Linux 64位系统的...
- Python、Java、C#、PHP等语言具有自动内存管理,开发效率较高。 - C和C++需要手动管理内存,但运行速度更快。 - Python在系统运维领域,特别是Linux运维中广泛使用,自动化程度高。 - Python的类库丰富,实现...
Python是一种高级编程语言,以其简洁明了的语法和强大的功能深受程序员喜爱。它不仅适合初学者入门,也是专业开发者的高效工具。以下是关于Python的一些关键知识点: 1. **Python的优点**: - 优雅的语法:Python...
2. 内存管理:Python、Java、C#等语言有虚拟机管理内存,而C语言需要程序员手动管理。 3. 执行效率:Python运行速度较慢,但解释器如PyPy通过JIT技术提高了执行效率。 4. 应用场景:Python在系统运维、Linux自动化等...
text_data = ["Python is fun", "JAVA is also great", "C# or C++?"] preprocessed_data = [preprocess_text(item) for item in text_data] print(preprocessed_data) # 输出:["python is fun", "java is also ...
you can program in some object-oriented programming language, such as C++, C#, Java, or of course Python itself. A slight familiarity with HTML is also assumed, and some knowledge of regular ...
Python与Java、PHP、C、C#、C++等其他语言的比较? - **Python**: 动态类型、解释执行、易于学习。 - **Java**: 静态类型、编译执行、面向对象。 - **PHP**: 主要用于 Web 开发、动态类型。 - **C/C++/C#**: 编译...
- **动态与静态类型**:Python为动态类型,而Java、C#和C++为静态类型。 - **解释与编译**:Python通常被解释执行,而C/C++等需要编译。 - **应用领域**:Python在数据科学领域表现突出;Java适用于企业级应用;C/...
Plus, Python features full modularity, supporting hierarchical packages, exception-based error handling, and modules easily written in C, C++, Java, R, or .NET languages, such as C#. In addition, ...
软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...
Millions of people worldwide have used Deitel books and LiveLessons videos to master C#, C++, Java™, C, iPhone app development, Internet and web programming, JavaScript, XML, Visual Basic®, Visual ...
DLL - Dynamically-linked library for Windows development supports C, Visual C++, C++ Builder, C#, Visual Basic, Python and more. Delphi - DCUs and optionally source code for development using all ...
OpenCV 支持C++、Python、Java等多种编程语言,方便开发者选择适合自己的环境进行开发。 在"opencv截图工具"的实现中,我们需要使用到以下几个核心功能: 1. **图像读取**:OpenCV的`imread()`函数可以用来读取...
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...
• People with a background in application languages, such as Java, C#, Python, and Ruby, looking for something ‘‘closer to the machine’’ – something more flexible, something offering better ...
软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...
java图书馆swing源码快速阶乘函数 项目状态:维护和更新。 在这里您可以找到最有效的计算算法的实现 功能, 功能, 功能。 另见这个不错。 简短指南: 如果你想研究为计算阶乘函数而提出的不同算法,最好的开始是...