- 博客(135)
- 收藏
- 关注
原创 C++并不支持Unicode,即使是utf8
时至今日,字符串使用unicode已经是不需要理由的常识,但对一些有着悠久历史的编程语言来说,这仍然是个头痛的问题。如果抛开第三方库的支持,C++其实并不能实际有效地支持unicode,即使是utf8。(注:本文讨论的是字符串在内存中的编码方案,而不是文件或网络数据流。)
2014-10-04 17:41:36
7173
2
翻译 OpenGL驱动质量的事实现状(精简翻译版)
原文:http://richg42.blogspot.com/2014/05/the-truth-on-opengl-driver-quality.html一、厂商A:为大多数开发者所使用,功能最全,测试得最好,几乎是事实上的标准驱动。其驱动性能很高,而且其设计偏向于实际中管用,而不是GL标准的纯粹性。大多数你所能听到的GL的好话,比如可以和D3D12/Mantle抗衡,源自使用这家驱
2014-05-14 22:10:21
4212
原创 翻新并行程序设计的认知整理版(state of the art parallel)
近几年,业内对并行和并发积累了丰富的经验,有了较深刻的理解。但之前积累的大量教材,在当今的软硬件体系下,反而都成了负面教材。所以,有必要加强宣传,翻新大家的认知。首先,天地倒悬,结论先行:当你需要并行时,优先考虑不需要线程间共享数据的设计,其次考虑共享Immutable的数据,最糟情况是共享Mutable数据。这个最糟选择,意味着最差的性能,最复杂啰嗦的代码逻辑,最容易出现难于重现的bug
2014-05-10 08:30:48
3675
1
原创 内核模式驱动不推荐使用C++的缘由
本文所讲内容主要源自Windows DDK文档。一、内存页面交换和用户模式程序不同,内存页面交换对内核模式的代码不是透明的,而是需要一定程度的主动管理,要保证在代码执行过程中不会需要载入新的页面。编译器有相关的扩展#pragma指令来帮助C代码显式控制生成的二进制代码布局,以便相关的代码被放在一起,被调用时只需载入最少的页面。而对C++而言,还存在一些编译器自动生成的代码块和数
2013-12-03 13:36:40
3824
翻译 C++/C#/Java等非web语言交叉编译到JavaScript的实用现状
自从两年前见识了浏览器里用JavaScript运行Linux后,看看如今JavaScript交叉编译的进展。看来我也要考虑一下这东西的实用性了。以下为翻译转述。常见交叉编译器:C/C++: Emscripten, MandreelJava: Google Web Toolkit (GWT)C#: JSIL, Script#Python: pyjsLua: lua
2013-10-17 15:38:14
4093
原创 常见开源协议大白话说明
GPL:只要你用了任何该协议的库、甚至是一段代码,那么你的整个程序,不管以何种方式链接,都必须全部使用GPL协议、并遵循该协议开源。商业软件公司一般禁用GPL代码,但可以使用GPL的可执行文件和应用程序。AGPL:即Affero GPL,是GPL的更严格版本。只要你用了任何该协议的库、甚至是一段代码,那么运行时和它相关的所有软件、包括通过网络联系的所有软件,必须全部遵循该协议开源。据律师说
2013-10-07 22:07:22
20779
3
原创 GC与显式内存管理
C++复兴的话题至今已被鼓吹两年有余,Herb Sutter和Bjarne Stroustrup等大牛们也为C++带来了大步伐的革新。然而,从这两年的效果而言,C++的复兴并没有发生。一方面随着世界经济的动荡,IT行业也出现了一定程度的衰退;另一方面这也是个新兴语言如雨后春笋的时代,尤其是web平台上,CoffeeScript、Dart、TypeScript等,新人阶前花更红。抛开非技术原因不谈,
2013-10-05 23:46:32
4572
1
原创 k-thread 与 n-thread
一段程序,如果最多只能利用有限常数个数的线程,那么它为k-thread的。比如,如果设计一个线程加载资源、一个线程计算、一个线程显示,那么最多能利用3个线程,在一个8核处理器上至少5个核是没有利用的。而如果一段程序能利用任意多个线程,则被称为n-thread的。比如,在单核机器上是单线程跑,在n核机器上是n线程跑。当然这么说不准确,现实中实际利用线程数经常会大于核数,因为有些线程会因锁、IO等
2013-09-27 22:06:41
3584
原创 并行(parallel)和并发(concurrency)
并行(parallel)和并发(concurrency)是两个不同的概念。并行是指多个任务同时都在执行,一般通过多线程、多进程或多台计算机实现。并发是指至少两个任务都在推进,不一定是并行的,也可以是时间片切分的方式串行。Windows 3.x时的协作式多任务(cooperative multitasking),是基于并发的多任务,一个进程交出执行权后下一个进程才能继续执行。Wind
2013-09-27 21:56:46
5512
原创 说说游戏制作的build系统
如今的大牌游戏都是动则10G、20G的,build系统已经成了一个创新的新领域。暴雪在GDC2013上就讲了他们自主研发的分布式build系统。游戏的build不只要build程序代码,还包括各种美工资源的预处理,比如资源提取、校验、格式转换、组合等。而且这些资源普遍比较大,比如一个纹理图片的原始图片文件就可能有10M,模型的原始文件比如fbx或collada。Build系统会根据需要从原
2013-06-12 09:25:05
4519
原创 应用结构:pattern的终结是anti-pattern
以下讨论只针对应用开发,库开发的情况有所不同。起初,人们大多在用C,人们讨论函数(functions)和编译单元(compilation unit)。OO(面向对象、对象导向、物件导向)兴起后,人们开始认为,全局函数不好,全局变量不好,应该都封装到类(class)里。随着程序越来越大,对象越来越多,人们发现,有很多对象几乎要被所有其它的类引用,而且这些对象被四处传递,不
2013-01-28 17:59:50
3307
2
转载 更靠谱一点的编程语言排行榜
TIOBE的编程语言排行榜如今很火,CSDN月月拿它当头条。但相信很多人也对其排名和趋势变化感到惊奇。真有那么多人用Objective C?真有那么多人在用C?Javascript用户竟然会比Perl用户少?其实,这不过是个数据分析方法问题。不同的方法是可以导致非常不同的结果的。要分析得尽可能正确,还是需要点统计专业知识的。比如这个分析的就更专业一点,其结果可以和indeed job tr
2013-01-04 13:10:52
4307
2
原创 反斜线的历史
Windows用户对\字符都不陌生,它是路径分隔符,同时也是C风格字符串的换码符。(正斜线和反斜线很容易搞混,交流时不妨称作撇和捺。)该符号由Bob Bemer发明,最初用于在ALGOL语言中构造/\和\/符号,也就是逻辑与和或。此人亦是ASCII制定者之一、换码序列(ESCape)的发明者。DOS 1.0并没有层级目录功能。2.0主要针对具有10M硬盘的IBM PC/XT开发,于
2012-09-05 15:30:07
3538
原创 基于stackoverflow.com问题标签的对语言、平台流行度的统计
注意:本结果仅供参考。局部统计结果不代表整体结果,任何脱离统计背景的解释都是不合理的。统计时间:2012年6月15日注1:ruby-on-rails的问题数高于c的问题数,故ruby理应排在c之前。但如此处理又对其他语言不公平,则都得考虑框架,但很多无法将语言和框架数量合理组合,故使用原始标签数量。注2:中国用户上stackoverflow的不算多,故不反映国内情况。注3:问题多不
2012-06-15 14:15:45
3045
原创 微软平台生态圈已经改变
二十年来微软主宰了PC,但如今形势已经发生转变,而且这种转变是从微软内部开始的。长话短说,Windows平台Server和Client发展方向明确分离,Server向着云服务、Web应用、数据中心靠拢,Client向手机、平板等消费型产品靠拢,PC沦为向后兼容的过渡品。对普通用户,这种转变不会很快带来影响,但对软件开发者,已经是眼皮底下的事。 Windows 8和Visual Stu
2012-05-31 22:29:26
4819
2
原创 术语: Marshal (编列、列集)
这个术语因.NET的Interop(不同技术间交互)而流行。取自部队等整编列队集结的本意,引申为对数据格式的重新编排转换,以便在不同标准的二进制接口间传递数据。注意,这个和数据类型转换不同,数据类型一般并不改变,而只是数据的存储结构改变,从一个标准的结构转换成另一个标准的结构。比如.NET的Boolean是1字节,而Win32是4字节。专业翻译词典上对此含义给出了两个译词:编列、列集。编列
2012-03-07 11:40:40
3504
原创 CurrentCulture 与 CurrentUICulture
这两个都是对应Windows系统的设置。CurrentCulture和数字、时间日期等的格式化相关,和字符串比较、排序、大小写转换相关。属于软件国际化(Globalization)。CurrentUICulture用于选择界面语言,和界面语言的翻译相关。属于软件本地化(Localization)。两者经常值相同,但也可不同。比如,可以用英文版WIndows系统,CurrentUICul
2012-02-27 20:57:03
4945
原创 Silverlight消散,WinRT登台
2011年,Silverlight刚开始有蓬勃发展的起色,不利的传言就开始大量流传。不安的Silverlight开发者们要求微软澄清,但得到的只是沉默。终于随着微软在BUILD上亮相Window 8以及新的API WinRT,开发者们意识到,Silverlight的故事结束了。尽管微软在年底如期发布了大幅改进的Silverlight 5,但大势已去,微软甚至都没怎么宣传。随后传闻Silverlig
2012-02-01 20:43:42
4557
2
原创 由于简繁汉字一对多而导致经常写错的繁体字
这几年国学热,繁体字也热了。于是有了一群明明不会繁体、却偏要用繁体、内裤外穿炫耀的,以为把输入法切换到繁体,就变文化人了。为了不太丢中国人的脸,内裤外穿之前至少也要先速成一下。兹收集常见易用错的繁体字,列表如下,以供申脸者防身,打脸党备用。【干】1. 干 gan1:干戈;天干地支,若干;干涉;干求;事不干己2. 乾、乹、亁 gan1:乾燥,乾涸,餅乾3. 幹、榦 gan4:
2012-01-15 14:25:28
3862
原创 游戏Entity层通信机制:超越虚函数
面向对象的程序设计模式无疑是成功的,虚函数机制对构造复杂系统无疑是非常有用的。但面对足够复杂的问题时,我们往往会需要更加强大的机制。游戏的实体层的构造,就是其中一种可能的情况。 有人会惊诧道:哪尼,传说中的XXL号的软件都可以完美地用OO实现,一个游戏逻辑会更复杂?莫急莫急,待我娓娓道来。话说从前有个程序,它有很多可能的事件需要子类定制处理,于是它就定义了很多的虚函数,但是每个子类通
2011-10-30 14:15:06
2519
2
原创 最隐晦的程序设计指引
一、百家争鸣 俗话说,程序员半年不学新东西,就变奥特曼(out man,过时之人)了。IT行业可以说是变化最快的行业,每年都有大量的新概念、新术语、新技术被创造出来,在多数人还在一头雾水时,“更好的”替代品又被创造出来。别的不说了,单说设计方法。 想当年静态类型系统是
2011-07-24 16:14:01
18427
118
原创 Query Comprehension 查询推导式
指Linq的查询语法结构。在Linq诞生之前有个类似的概念List Comprehension——列表推导式,广泛用于函数式编程语言。如Python的:S = [2*x for x in range(101) if x**2 > 3]Linq实现了一种针对强类型语言的更加一般化的架构,推导对象不限于列表,可以是数据库或任意对象,只要实现了对应的查询算子。还有一个比较热门的推导式
2011-07-01 13:44:00
1566
原创 C++/CLI不是用来写应用的
可以同时支持编译出机器码和.NET托管代码的C++/CLI,前身是Managed C++。程序员喜欢强大的语言可以理解,不少人学用C++也是因为C++很强大。但强大并不一定各方面都擅长,有所得必有所失。其至今的最主要用途,仍然是用于托管和非托管程序的交互,包装非托管代码成托管类库。而用其写.NET应用,并无长处,也不是Visual Studio支持的重点,例如WPF编辑器就不支持C++/CLI。
2011-05-31 14:44:00
2583
原创 D3D10移植感想
<br /> 折腾了许久,今天终于完成到D3D10的移植了。总体感觉不错,性能提高了不少。基本上,有一种再也不想回到混乱的D3D9时代的感觉。新的API很精简,没有冗余,操作和性能的关系很明了,完全贴合硬件。<br /><br /> 当然,这也意味着,它和D3D8、9的设计方向完全不同,而是一套偏向底层的API。早年,D3D API一直饱受争议,PC开发者大多认为它太底层太难用,而少数来自游戏主机开发背景的人则反而认为它抽象层次太高阻碍优化(游戏主机的API要更加底层)。当然,PC开发者的意
2011-02-07 15:36:00
3768
6
原创 如何在渲染到反射贴图时避免改变CullMode
<br /> 通常在渲染到反射贴图时需要翻转CullMode,因为视矩阵被镜像了。但我们知道,减少状态切换是提高3D管线效率的重要优化。更重要的是,渲染到反射贴图涉及到引擎中会用到的大部分Effect,因为他们都需要被用来渲染到反射贴图,这意味着要在较大的范围内考虑和支持翻转CullMode,将一个效果的复杂度扩散到引擎层面,增加了引擎的复杂度。<br /><br /> 如果能避免翻转CullMode,则一来简化架构二来提高效率。那么如何做到呢?其实也简单,之所以镜像视矩阵会导致需要翻转Cu
2011-02-07 12:22:00
2349
原创 名词解释:side by side
<br />就是 并存 或 并用,特指不同版本的同一可执行模块在同一机器上或同一进程里可以互不干扰同时并存。<br /> <br />比如A发布的应用有全局共享模块shared.dll的1.0和2.0,B发布的程序也恰巧有同名的shared.dll 1.0,side by side技术可以要求每个模块不仅有名字和版本号,还有可验证的数字密钥,二进制哈希码等信息,以便唯一标识和定位共享模块,正确加载。而普通的dll加载只用模块名(不包括扩展名)做标识,同名的模块加载请求会被认作已经加载,即无法加载同名模块,而
2010-11-08 20:21:00
1856
原创 小谈CAD制图和游戏3D的区别
<br />小谈CAD制图和游戏3D的区别<br /><br />并不是所有人学3D都是为了做游戏,但如今3D学习资料大多是游戏背景的情况下,会让不少走CAD路线的人走错路。<br /><br />游戏领域,3D向着实时电影级效果发展,强调视觉效果,为了获得足够的运行时性能,要把尽可能多的计算放到制作阶段预处理。而CAD领域,画线能力远比视觉效果重要,模型往往需要实时编辑,对单纯的三角面的吞吐量需求很高,需要在大量的线和面中作精准的选取操作,而对硬件加速需求上,OpenGL 1.2的功能基本就够了。
2010-09-25 11:09:00
4631
原创 profile在IT领域的profile
<br />profile这个词在IT领域比较难于翻译。尽管IT里的应用大多是基于它 简述 这个意思,但与汉语简述这个词的用法不同,它是可数名词,喻示可以有多个不同的简述存在,不同的情况下可以用不同的简述。好比一个人准备了好几套简历,用于投不同的职位。这时用简述、描述、表述、概要之类的翻译就会词不达意,而一般要翻译成配置,如:<br /> <br />color profile: 颜色配置文件<br />hardware profile: 硬件配置文件<br />local user prof
2010-07-24 10:24:00
2871
原创 换掉Lua是个错误
要支持一种脚本语言,JavaScript无疑是非常好的选择。最大的优势就是上过网的人大多知道JavaScript是什么,很多人都能写上那么一两行。尽管JavaScript也有一些WTF(Worse Than Failure)的地方,但不影响它成为一个非常成功个的动态脚本语言。在发现Jint开源项目后,我想终于有个.NET上能用的JavaScript引擎了。不要提JScript.NET,那个
2010-05-22 21:16:00
3364
2
原创 WPF四年,尤不足以替代WinForm
WPF四年,尤不足以替代WinFormWPF出山已四年,作为官方内定的下一代UI系统掌门,没少露脸。但这个新掌门能否胜任,仍是众多开发者的心头之虑。通过对VisualStudio 2010的编辑器部分用WPF重写,微软终于对这个胜任与否的问题给出了个证实,当然,也给WPF做了不少重要的改进,尤其是终于解决了文本看不清的问题。所以,至少从.NET 4开始,WPF应该可以比较安全的用于重要的开
2010-05-09 19:37:00
8673
6
原创 LingEngine图形部分架构图
如图: 注:1. 图中实心三角形箭头应为空心三角形箭头。2. SceneSystem和RenderContext都是可以创建多个实例的。3. 每个Actor子类类型对应有一个ActorResource类型,用来管理共享mesh、动画数据等资源。 另:无奖问答,这个结构受了哪些引擎的影响?
2010-04-17 12:32:00
3970
3
原创 为什么不用C++写游戏
当今世界上绝大多数游戏都是C++写的,为什么要说不呢?要做什么?写游戏。写游戏首先要考虑些什么?做什么样的游戏,图形、音效、游戏逻辑如何实现。用C++要先考虑什么?定义跨平台数据类型抽象,实现常用集合类,设计宏实现RTTI,写一个支持Unicode并可以和其他多种字符串类型互相转换的字符串类,自定义内存分配器,写个shared_ptr,组织预编译头文件,设计实现Object
2010-04-12 20:52:00
7775
11
原创 LingEngine——实验轻量级游戏引擎(更新至0.71)
【为什么要做这个游戏引擎】为了挣钱?除了几个出名的引擎外,其他的引擎是很难卖出去的。即使能卖出去,一般也入不敷出,因为那些成功的商业引擎销量大、售价低,你无法卖得比他们贵。而且,没有成功的游戏验证过,就不是好引擎。为了做个更牛叉的?抱歉,没那个本事。国内商业引擎落后国外两三代,参加主流开源项目的可能水平要高些,但全球主流开源项目也是落后顶级商业引擎一两代的,更何
2010-04-04 15:57:00
8274
12
翻译 中国对龙芯处理器的努力(新闻翻译)
原文:http://www.osnews.com/story/22674/China_s_Loongson_Processor_Effort翻译(注意原作者的有些观点有点不靠谱):Richard Stallman(GNU项目和自由软件基金会的创世人、Emacs之父)用的是什么笔记本电脑?戴尔,惠普,或许是苹果?不,他用的是一台非常特别的电脑,一台使用龙芯处理器的上网本:逸珑,完全“
2010-01-02 18:28:00
1496
原创 混乱的GPU术语
针对GPU平台,每个厂商都发明了自己的术语,大致对应关系表: CUDA Larrabee Windows DirectCompute-----------------------------------------------------------------Thread Strand Fi
2009-11-23 13:10:00
1323
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人