数据库引擎 SQLite 发布的新行为准则,为何引众怒?

640?wx_fmt=gif

【CSDN编者按】SQLite是一个独立的、高可靠性、嵌入式的和功能齐全的公共域SQL数据库引擎。也是世界上使用最多的数据库引擎。

但是,最近它却因为一则规定,而引起了程序员们的争议!一起来看看到底怎么回事吧?

640?wx_fmt=jpeg

开源数据库SQlite告诉开发者们,希望他们追随耶稣、洁身自好、衣装得体、不要杀戮、偷窃或者与同事的老婆偷情。

这是一个非常流行的项目所发布的不寻常的行为准则。尽管大多数项目的行为准则都不会包含宗教性质的东西,只会要求人们尊重他人、友善相处,但SQLite却采用了1500多年前圣本笃的规程。

平心而论,这些规则在公元500年前后的确起到了重要作用,直至今日也一直是本笃会修士的行为基础,但是要求软件开发者“将耶稣作为唯一的真神”,并且“不酗酒”确实有点不寻常(不过却没有说不让喝咖啡或吃披萨)。

近日,这个行为准则引起了轩然大波,Twitter上愤怒和谴责的浪潮此起彼伏。“虽然说SQLite决定采用一种行为准则,这很好,”infosec bod的Darren Meyer指出,“但是他们决定采用一种不切实际的强制做法,并且将那些不信奉亚伯拉罕传统的人拒之门外。”

程序员James Hollingshead叹息道,“好吧,看起来可能是时候停止使用SQLite了,因为很明显我是那种不受欢迎的人。”

但请记住,这个行为准则出台已经八个月了,根据SQLite的原作者及其主要管理员D. Richard Hipp的说法,“在发布前,所有人都承诺100%支持。”

他承认在过去的八个月里,有一些撰稿人声称该行为准则有点“怪异”,但没有如此激烈的反应,直到最近。”他告诉The Register。

许多人认为这个文件是一个玩笑,虽然很奇怪,但是考虑到之前“有客户建议过SQLite采用一份书面的行为准则”,所以如今这个局面也不是不可理解。


640?wx_fmt=png

原谅


Hipp告诉我们,为了管理社区互动而制定行为准则的客户“似乎并不关心行为准则的内容是什么,只要有就行。”

但是他捍卫了该文件所代表的“基督教价值观”,并指出SQLite源代码每份文件的开头,本应放版权声明的地方,都放了一个“祝福”,并包括受耶稣启发的短语:“在为自己寻求宽恕的同时原谅他人。”

那么为什么他没有通过编辑删除出无关紧要的细节——例如“禁食”和“在你每天的行为中履行上帝的诫命”,并且只保留可以让社区更加健康的内容呢,例如“不要以眼还眼以牙还牙” “不要诅咒那些诅咒你的人”“不要骄傲”“不要抱怨”“不要贬低”?

“我本可以编辑这个列表,只保留与编程相关的内容,”Hipp告诉我们,“但感觉如此一来就等于是我在编辑圣本笃了,好似在前人面前班门弄斧。我考虑过这一点。但最后,我认为最好原封不动地把所有内容都加进来(只是将其翻译成了英语)。在前言中,我努力地想要表述清楚一些反省的地方可以安全地掩盖过去。“

面对近日引起的轩然大波,其中包括激进地指责Hipp的一些不符合基督教义的行为的回应,他告诉我们他更新了序言,强调了采用圣本笃的规则并不是想要排除任何人。

“没有人会因为生物类别或宗教信仰被排除在SQLite社区之外,”他告诉我们。“行为准则的序言应该明确了这一点。被踢出SQLite社区的唯一原因就是你大喊大叫,羞辱或不尊重其他人的行为。18年来,只有一个人被禁止进入邮件列表。


640?wx_fmt=png

文化


换句话说,Hipp决定采用一个开创性的基督教文本,而不是从其他地方获取一些千篇一律的行为准则,并且他认为,他所采用的行为准则反映了他的信念,以及那些免费为开源软件项目做出贡献的人的一般世界观。

虽然通常在一个促进相互尊重的世俗文件中,读到上帝和耶稣的教导,可能有点刺耳,但在美国这类的行为有悠久的历史,也许最著名的就是布朗博士的肥皂(Dr Bronner's soap,尽管印在该商品上的信息已经被缩减)。

虽然在维护软件的同时面对宗教的言辞可能会有些不舒服,但我们不得不说Linux内核的创建者Linus Torvalds曾在过去几十年中从类似的信息中受益。

640?wx_fmt=jpeg

本周,在结束了简短的敌对后,Torvalds又重新回到了Linux基金会,他承诺会为他的侵略性和滥用的行为负责。也许应该有人寄给他一份圣本笃,学习好好工作,或者将SQLite行为准则的链接发给他。

原文:https://www.theregister.co.uk/2018/10/22/sqlite_code_of_conduct/

作者:Kieren McCarthy

译者:弯月,责编:胡巍巍

推荐阅读:

640?wx_fmt=gif

640?wx_fmt=gif

展开阅读全文

fastCSharp 1.6 内存数据库引擎及代码生成实例 发布

02-26

如果你的服务器有大量空闲内存,会不会有一种可耻的感觉呢?如果内存不够大,应该花点钱买买这种感觉。rn大内存相比于硬盘,不仅仅是程序跑得更快,更重要的是有效利用大内存能让程序开发更快捷。长期来说,节省的开发人工成本,相比于内存价格还是很划算的。rn看看现在市面上出现了各种各样的内存数据库,忍不住凑了个热闹。花了一些时间写了个[url=http://www.51nod.com/upload/fastCSharp_part_1.6.rar]可嵌入的内存数据库物理引擎[/url],以及代码生成实例。由于本人与C#版主caozhy有过不愉快,所以发到这个版块来了。rnrn1.[b]支持嵌入模式[/b],也就是可以不需要服务端,直接本地函数调用。rn2.支持代码生成模式与反射模式,反射模式序列化性能相比于代码生成模式可能相差2倍以上。rn3.序列化采用[b]二进制序列化[/b],添加成员识别的二进制序列化性能相差在40%以下。rn4.客户端在通讯层实现了[b]并发请求合并处理[/b]。rnrn和[url=http://bbs.csdn.net/topics/390473468]以往的代码生成实例[/url]一样,采用自定义属性配置环境参数,比如[code=csharp][fastCSharp.setup.cSharp.memoryDatabase(CacheType = typeof(fastCSharp.memoryDatabase.cache.identityArray<,>), FileName = null, MinRefreshSize = 1, ClientType = typeof(fastCSharp.memoryDatabase.physicalClient), IsEmbed = false, IsIndexSerialize = true)][/code]对于代码生成模式,数据库操作代理就是 Model.memoryDatabase.Default,比如[code=csharp]private static memoryDatabase db = memoryDatabase.Default;[/code]对于反射模式,数据库操作代理需要自己创建。嵌入模式与远程模式的数据库代理分别如下[code=csharp]private static fastCSharp.setup.cSharp.memoryDatabase.localTable db = fastCSharp.setup.cSharp.memoryDatabase.table.Open(new setup.cSharp.memoryDatabase.localTable(new fastCSharp.memoryDatabase.cache.identityArray()));[/code][code=csharp]private static fastCSharp.setup.cSharp.memoryDatabase.remoteTable db = fastCSharp.setup.cSharp.memoryDatabase.table.Open(new setup.cSharp.memoryDatabase.remoteTable(new fastCSharp.memoryDatabase.PhysicalClient(), new fastCSharp.memoryDatabase.cache.identityArray()));[/code]性能测试,采用的数据定义如下[code=csharp] public abstract class datarn rn public bool Bool;rn public byte Byte;rn public sbyte SByte;rn public short Short;rn public ushort UShort;rn public int Int;rn public uint UInt;rn public long Long;rn public ulong ULong;rn public DateTime DateTime;rn public float Float;rn public double Double;rn public decimal Decimal;rn public Guid Guid;rn public char Char;rn public string String;rn public bool? BoolNull;rn public byte? ByteNull;rn public sbyte? SByteNull;rn public short? ShortNull;rn public ushort? UShortNull;rn public int? IntNull;rn public uint? UIntNull;rn public long? LongNull;rn public ulong? ULongNull;rn public DateTime? DateTimeNull;rn public float? FloatNull;rn public double? DoubleNull;rn public decimal? DecimalNull;rn public Guid? GuidNull;rn public char? CharNull;rn [/code]当成员String为null的时候,二进制序列化数据大概120+字节,成员识别二进制序列化数据大概350+字节。rn采用10W对象数据为单位做写入测试,总数据量100W单线程循环10次。rn对于远程模式分别测试了客户端单线程与多线程并发。rn测试机 Inter(R) Celeron(R) M CPU 520 1.60GHz,测试耗时包括 物理层处理 + 网络通讯处理 + 客户端对象创建与序列化处理 + 简单的缓存同步更新操作。rn代码生成模式+成员识别二进制序列化 [10W对象 + 序列化数据35M] 同步测试结果 / 异步测试结果[code=text]本地模式 1线程:平均耗时 0.7s,CPU 100%rn远程模式 1线程:平均耗时 5.3s / 6.7s,CPU 100%rn远程模式 2线程:平均耗时 3.4s / 5.5s,CPU 100%rn远程模式 5线程:平均耗时 2.4s / 3.6s,CPU 100%rn远程模式 10线程:平均耗时 2.1s / 2.6s,CPU 100%rn远程模式 20线程:平均耗时 1.8s / 1.9s,CPU 100%rn远程模式 25线程:平均耗时 1.8s / 1.9s,CPU 100%rn远程模式 40线程:平均耗时 1.9s / 1.8s,CPU 100%rn远程模式 50线程:平均耗时 2.2s / 1.8s,CPU 100%rn远程模式 80线程:平均耗时 2.3s / 1.8s,CPU 100%rn远程模式200线程:平均耗时 2.8s / 2.0s,CPU 100%rn远程模式500线程:平均耗时 3.5s / 2.9s,CPU 100%[/code]代码生成模式+普通二进制序列化 [10W对象 + 序列化数据12M] 同步测试结果[code=text]本地模式 1线程:平均耗时 0.53s,CPU 100%rn远程模式 1线程:平均耗时 4.9s,CPU 100%rn远程模式 2线程:平均耗时 3.1s,CPU 100%rn远程模式 5线程:平均耗时 1.9s,CPU 100%rn远程模式 10线程:平均耗时 1.5s,CPU 100%rn远程模式 20线程:平均耗时 1.4s,CPU 100%rn远程模式 25线程:平均耗时 1.4s,CPU 100%rn远程模式 40线程:平均耗时 1.3s,CPU 100%rn远程模式 50线程:平均耗时 1.3s,CPU 100%rn远程模式 80线程:平均耗时 1.4s,CPU 100%rn远程模式200线程:平均耗时 1.8s,CPU 100%rn远程模式500线程:平均耗时 2.8s,CPU 100%[/code]反射模式+成员识别二进制序列化 [10W对象 + 序列化数据35M] 同步测试结果[code=text]本地模式 1线程:平均耗时 2.9s,CPU 100%rn远程模式 1线程:平均耗时 8.4s,CPU 100%rn远程模式 20线程:平均耗时 4.3s,CPU 100%rn远程模式 40线程:平均耗时 4.3s,CPU 100%rn远程模式 80线程:平均耗时 4.6s,CPU 100%[/code]反射模式+普通二进制序列化 [10W对象 + 序列化数据12M] 同步测试结果[code=text]本地模式 1线程:平均耗时 3.1s,CPU 100%rn远程模式 1线程:平均耗时 8.4s,CPU 100%rn远程模式 20线程:平均耗时 4.2s,CPU 100%rn远程模式 40线程:平均耗时 4.2s,CPU 100%rn远程模式 80线程:平均耗时 4.4s,CPU 100%[/code] 论坛

没有更多推荐了,返回首页