Skip to content

Instantly share code, notes, and snippets.

@FrankHB
FrankHB / 何勤《 轻松学习C程序设计 》简评.txt
Created August 31, 2013 16:54
应作者要求,阅《轻松学习C程序设计——揭开计算机与程序设计的奥秘(修订版)》(资源通过网络找到),评论如下。
版权声明:本文使用 CC-BY-SA 3.0 发表。
  应作者要求,阅《轻松学习C程序设计——揭开计算机与程序设计的奥秘(修订版)》(资源通过网络找到),评论如下。
(此处找到的材料的节标号可能有错乱,按页面顺序评论。因此也不保证分节评论。)
1 计算机的重要性和基本工作原理
·作者使用“理想厨房系统”作为计算机系统的比喻。有以下一些问题:
  难以估计对于初学者来说这个比喻是否得当,有助于真正理解。
  厨房中突兀地出现了“地址传送带”“控制传送带”“IR”“PC”“R0”等和喻体不直接相关的生造抽象。这些抽象是否真容易理解?后面虽然有比较详细的说明,但细节并不十分直观且篇幅不小,可能对读者造成负担。
  语言风格问题。虽然总体比较清晰,但一些名词并不十分浅显易懂(相反容易觉得很“专业”——某种意义上事实的确如此)。如“取指周期”——具体什么意思,并没有在此直接解释。
·《理想厨房系统与计算机系统术语对照表》中“内存(又称为主存,包含很多大小相等的基本存储单元)”——错误。
//#include <ystdex/variadic.hpp> // uncommitted, see file attached;
//#include <ystdex/type_op.hpp> // see YSLib/YBase::YStandardEx;
//#include <ystdex/functional.hpp> // ditto;
//#include <YSLib/Core/yevt.hpp> // for test;
//#include <YSLib/UI/ywidget.h> // ditto;
#include <YSLib/UI/ypanel.h> // all above included;
namespace ystdex
{
@FrankHB
FrankHB / 未开化案例研究5.txt
Created March 6, 2016 09:09
未开化案例研究5
2016-03-06 15:42
本系列几乎已成半年刊了。
不是什么大书特书的东西。关键字“原教旨主义”。
属于第一类族群,演化程度中等。
正文
@FrankHB
FrankHB / draft-text-encoding
Created August 23, 2013 12:53
Outline for introducing character and text encoding.
1.多语言字符集和编码相关的参考规范之中最重要的有两个,一个是ISO/IEC 10646,一个是 Unicode 。
前者是专家委员会起草的国际标准。(前身还有两个不同的草案,因为中国大陆等方面的反对而否决。)
后者是行业协会组织的规范。ISO/IEC 10646正式版采用Unicode方案,之后的版本也和 Unicode 有基本的对应关系(虽然不一一对应),对普通应用来说基本可以作为同一个方案。
2.Unicode 定义了通用字符集(Universal Character Set, UCS) ,其中以代码点(code point) 作为逻辑上区分字符的单位。
由于历史原因,各种同源字符可能有不同的代码点,这方面汉字( CJKV unified ideographs ,中日韩越统一表意文字)问题尤其突出(相关工作称为Han Unification)。代码点可以由 U+X 的方式表示,X是16进制的自然数。
3.现行 UCS 代码点范围 U+0~U+10FFFF ,划分为 17 个平面,编号 0~16 ,每个平面有 65536 个代码点。
其中最常用的代码点子集是 0 号平面(代码点 U+0~U+FFFF ):基本多文种平面(basic mutilingual plane, BMP) ,之后是第一辅助平面:多文种补充平面(supplementary multilingual plane, SMP) 和第二辅助平面:表意文字补充平面(supplementary ideographic plane, SIP) 。第三至十三辅助平面尚未使用。第十四辅助平面称为特别用途补充平面(supplementary special-purpose plane, SSP) ,其中是控制字符。剩下的两个平面是私人使用区(private use area) 。
一个平面内的代码点可以被两个八元组(octet) 表示,也就是 16 位二进制整数。一般 C/C++ 实现使用的一个字节正好有 8 位,但不总是保证。
4.以 UCS 为基础可以表示文本编码。
早期使用 UCS 限定于现在的一个平面内,可以用 16 位编码(两个八元组)表示任意的 Unicode 代码点,称为 UCS-2 。
@FrankHB
FrankHB / todo-reading.md
Created May 24, 2016 02:58
备选阅读列表

概要

长期坑。

PLT

【int32】帅气魔理沙<lolita@marisa.moe> 2015-09-12 13:47:57
http://web.cs.ucla.edu/~palsberg/tba/papers/nielson-nielson-csd99.pdf
http://lambda-the-ultimate.org/node/4768
@FrankHB
FrankHB / POSIX-bad-design.md
Last active August 15, 2016 15:48
UNIX/POSIX烂设计

糟糕的设计审计和接口设计质量

例如几乎没什么用的文件锁

综合示例

sem_open 允许 EINTR ,凭空制造 race condition ,根本没法确定打开时是不是同时创建了信号量。

而文件系统持久语义导致不 sem_unlink 就会在最后/进程挂掉以后遗留空的信号量(如果权限设置有问题后面访问/创建同名的信号量都麻烦)。

@FrankHB
FrankHB / 161109.md
Last active November 19, 2016 15:32
161109

http://tieba.baidu.com/p/4860024843

56L @福音战士01 :

这是典型地没学明白。

首先是没搞清楚语言的目的和应用领域,其次是不明白现在对语言的应用的一些常见外延。

一条条分析。

@FrankHB
FrankHB / 180110.txt
Created January 10, 2018 11:28
Traits
PHP的所谓traits是一种语言特性,可以算是一种弱化的mixin,能用于替代多继承的一部分常见使用;而C++核心语言特性并没有traits这种东西。C++原生支持多继承(先不评论设计得如何),不需要另外加特性模拟。
C++的traits或者说type traits不是语言特性,而是TR1那时候搞出来的一类翻译时的语用技巧,算是惯用法。
也有其它设计成语言特性的如Rust,和继承(一种inclusion subtyping)也没什么关系(和C++的concept一样都更像是Haskell的typeclasses),尽管可以实现类似的目的。区别是C++的这坨都是严格受限翻译时确定的,其它语言类似特性就没那么明显的限制(但有其它的破事)。
加上PHP,硬要说这些用法的共同点的话,就是和C++的traits依赖的模板名称查找一样都算是structrual typing的实例,只有用到了traits以后才做具体的名义类型检查。
考虑到可用特性的正交性,PHP的tratis应该是其中表达能力最弱的——只适合用于对付缺少继承的问题。
C++再烂,用SFINAE强行introspect的出来的起码在翻译时也能是个first-class value,允许让类类型用于实现足够多其它语言做不到的和面向对象没什么关系的玩意儿。
至于“实现”traits的语义——谁在乎呢?表达能力足够强的语言根本不需要包含这种特性,让用户随便自己糊就是了。
另一个事实是除了当年脑子进OOP水一股脑跟风设计的语言特性(包括C++的多继承和Java的interface之流,不过多继承在用途上不至于那么鸡肋)以外,现在没多少通用目的语言会像PHP一样专门搞一个基本没法正交的如此specific的特性出来糊弄用户的。
@FrankHB
FrankHB / 未开化案例研究6.txt
Created October 30, 2018 12:11
未开化案例研究6
2018-10-30 20:08
不是很值得浪费文字的代表性新种,但之前的实例没有直接涵盖,所以单列。
https://www.bilibili.com/video/av34518556/#reply1156391696
hugsidesick
手机双持的都知道苹果的人机交互比安卓舒服多少。买苹果的根本没多少人在乎我的手机配置能不能秒天秒地,系统用的舒服,软件生态好,这才是它最大的卖点。华为进步大有目共睹,不需要海军吹嘘。
#73 来自iOS客户端2018-10-26 11:0931回复