View 180110.txt
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的特性出来糊弄用户的。
View test.txt
$def! $redef $def!;
$def! $rem $vau . #ignore "";
$defv! $unspecified ((x .)) env eval x env;
$def! $defu! $vau (x .xs) env eval (list $set! env x $unspecified xs) env;
$defl! putss (.xs) puts (apply ++ xs);
$defl! dlog (x) (display x; x);
$defl! xlog (s x) (puts s; dlog x);
$rem $defl! reverse (l) foldr1 snoc () l;
View 161109.md

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

56L @福音战士01 :

这是典型地没学明白。

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

一条条分析。

View POSIX-bad-design.md

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

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

综合示例

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

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

View todo-reading.md

概要

长期坑。

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
View tieba-res.md
View 未开化案例研究5.txt
2016-03-06 15:42
本系列几乎已成半年刊了。
不是什么大书特书的东西。关键字“原教旨主义”。
属于第一类族群,演化程度中等。
正文
View 150422.cc
// LICENSE: MIT
// Based on: https://github.com/9chu/minicodecvt/blob/master/TestCpp/main.cpp
// Depends on:
// rapidjson: https://github.com/miloyip/rapidjson .
// minicodecvt: https://github.com/9chu/minicodecvt
// YSLib: https://github.com/FrankHB/YSLib
// MCF: https://github.com/lhmouse/MCF
// Prerequisite:
// *-w64-mingw32-g++ supports '-std=c++14'.
// Run Tool/install-sysroot.sh in YSLib repo dir to install Sysroot
View daze_player.cc
// http://tieba.baidu.com/p/3172996151
struct daze_player : player
{
state s;
virtual state play( std::size_t milisecond_left, const std::vector< state > & self_history, const std::vector< state > & opponent_history )
{
s = (((millisecond_left + std::size_t('d')) * self_history.size() / (opponent_history.size() + std::size_t('a')) + std::size_t('z')) + std::size_t('e') * (self_history.size() ^ opponent_history.size())) % 3;
return s;
}
};