惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
V
V2EX
博客园 - 【当耐特】
Vercel News
Vercel News
雷峰网
雷峰网
爱范儿
爱范儿
WordPress大学
WordPress大学
云风的 BLOG
云风的 BLOG
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Microsoft Azure Blog
Microsoft Azure Blog
F
Full Disclosure
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
NISL@THU
NISL@THU
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Attack and Defense Labs
Attack and Defense Labs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
P
Proofpoint News Feed
B
Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
K
Kaspersky official blog
I
InfoQ
Google Online Security Blog
Google Online Security Blog
L
LINUX DO - 最新话题
Project Zero
Project Zero
Engineering at Meta
Engineering at Meta
V
Visual Studio Blog
AI
AI
Schneier on Security
Schneier on Security
B
Blog RSS Feed
T
Tor Project blog
H
Help Net Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
S
Security @ Cisco Blogs
T
Threat Research - Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
Cyber Attacks, Cyber Crime and Cyber Security
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
V2EX - 技术
V2EX - 技术
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
Arctic Wolf
Webroot Blog
Webroot Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main

博客园 - HenryRead

OpenGL 像素在内存中的排列方式 Unreal Engine 4 一些小技巧或提示 介绍Unreal Engine 4中的接口(Interface)使用C++和蓝图 Project Euler Problem 17 一种简单定义FourCC常量的方法 (C/C++) [翻译]进化游戏的层次结构 - 用组件来重构你的游戏实体 [转载]Netmsg 局域网聊天程序 [转载]使用 WSAAsyncSelect 的 Winsock 编程模型 [转载]Singleton的一个基类实现 [转载] VC6 STLport-5.1.4 /STLport-4.6.2 编译,安装 [转载] 跨平台C++程序开发系列文章 计算机科学数学理论浅谈 (转载) 致初学作曲的业余音乐爱好者 (转载) 搜集的优良OpenGL教程 (转载) OpenGL教程 "Top Ten" (转载) fltk2更新简介 FLTK简介 [Linux 书籍合集] Linux eBooks collection CodeLite可以媲美Code::Blocks 不指定
开发者:我们应该在哪个层次编写代码?
HenryRead · 2009-11-17 · via 博客园 - HenryRead

    这个周末闲来无事, 于是在VMware Workstation 5。5。1 Linux版本上安装了一个Mac OS X 10。4。3, 也就是Drawin 8。3。1。 整个安装过程的确碰到些小的问题, 主要的两个”不可能”的问题是:

    1. 必须要将ISO刻录成DVD来安装, VMware 5。5的虚拟光驱不兼容Mac OS X的安装。

    2. VMware的光驱需要安装在IDE 0:1的位置上, 和硬盘同一个IDE口。

    其他需要注意的是Guest OS需要选择FreeBSD, 在安装过程中先删除网卡, 声卡, USB这些模块, 等系统安装完成后再加载。 这样可以让整个安装过程非常顺利。

    不过我在这里要谈的一个重点是我之后安装了DVD盘自带的X11, 以及XCode中的GCC和DevSDK。 非常有趣的是我将一个在Linux上基于XLIB开发的程序在Drawin上重新编译, 一切出奇地顺利, 然后就能运行了。

    我从来不知道C和XLIB写出来的程序具有如此高的可移植性。 这让我回想到前几周我运行一个JAVA程序所碰到经历, 这个JAVA程序对运行环境的版本出奇地敏感, 这导致了超过半数的机器无法运行。 这不得不让我重新思考一下中低级语言和高级语言之间在可移植性上的问题。

    高级语言因为面临其功能的扩充与频繁的升级, 反而导致了开发上的复杂度(最极端的或许就是HTML, JS这样的表层语言)。 那些所谓的低成本维护和高移植性的神话正在被其自身的剧烈变化所击破。 而相比较人们不再去触碰像C这样构筑的中低层结构, 这让程序开发环境变得非常稳定, 而这种稳定也带来了出乎意料的高可移植性与性能。

    下图就是我测试的 一个程序, 我拿我所有在Linux用C开发的程序在 FreeBSD, NetBSD, Cygwin 以及 Drawin 上均编译运行通过, 并且性能良好。 这或许应该让我们重新思考一下, 我们应该在哪个层次编写代码? 我的观点是: “一个稳定的层次“, 而从物理角度来看待这个问题同样显而易见: 这个最甜的层次通常就是结构的中下层。

那个写这篇博客的人,所写的C程序能有良好的移植性,是因为Unix类的系统都是遵循一个统一的标准,POSIX。说白了,就是C语言和系统POSIX系统调用的行为应该一致的。C语言较为简单,有良好的移植性,标准化时间长,实现之间的不兼容性问题较少。而POSIX标准,是根据现行的类Unix系统共同制定。这些层次,属于中低层,变化较小,但不兼容性问题依然存在。因为,中低层以上有大量的上层应用,如果一点轻微的改变都会使上层的应用软件无法运行或者是运行不正常。Vista不兼容,以前的很多软件就是典型的例子。

中低层不是绝对的稳定层,应该是在软件开发中尽量保持稳定的层次。