﻿/*
	© 2009-2016 FrankHB.

	This file is part of the YSLib project, and may only be used,
	modified, and distributed under the terms of the YSLib project
	license, LICENSE.TXT.  By continuing to use, modify, or distribute
	this file you indicate that you have read the license and
	understand and accept it fully.
*/

/*!	\file Dependencies.txt
\ingroup Documentation
\brief 依赖说明。
\version r1143
\author FrankHB <frankhb1989@gmail.com>
\since build 519
\par 创建时间:
	2014-07-15 03:14:24 +0800
\par 修改时间:
	2016-06-11 01:26 +0800
\par 文本编码:
	UTF-8
\par 模块名称:
	Documentation::Dependencies
*/


/*

@0 体例和适用范围：
引用标记参见 [Documentation::CommonRules @@0.1] 。
引用标记参见 [Documentation::CommonRules @@0.1] 。
项目范围参见 [Documentation::ProjectRules @@1] 。
本文档用于描述 YSLib 的外部依赖([Documentation::CommonRules @@1]) 。

@1 实现环境和库部署：
基准实现要求参见 https://bitbucket.org/FrankHB/yslib/wiki/Development.zh-CN.md ；
使用的标准特性参见 https://bitbucket.org/FrankHB/yslib/wiki/StandardUsing.en-US.md 。
除非另行约定，使用同基准实现要求的默认配置的 ABI 。
本章内列出的构建环境经过测试并用于发布。可能有其它可用兼容环境，不在此列出。
未来可能会提升实现的最低支持版本要求，并移除针对特定版本的变通(workaround) 代码。

@1.1 具体实现支持：
当前仅经过实际验证支持的实现包括 G++ 4.9 或以上版本； 其它版本当前未测试，也不作为特定编译器选项的优化目标。
一般地，仅有 YBase.LibDefect 保持提供对旧版本具体实现的支持；对其它代码，除上述(@1) 要求外，不保证未来版本保持支持；不符合标准实现的变通可能在之后逐渐移除。
YBase.YDefinition 检查特性对应的实现版本。
除以上列出外的其它实现不保证支持。

@1.1.1 支持实现的已知问题：
以下问题提供有限变通：
G++ 5 之前未完整实现 C++11 特性标准库； 4.9 之前的变通已移除。

@1.1.2 非支持实现的历史问题：
以下问题不提供变通：
G++ 4.8.2(4.8.2-17ubuntu1) ：
在启用 -flto 时，仅使用 std::thread 而不显式使用 pthread 的代码无法链接 pthread 导致运行时出错；
编译器问题导致 CHRLib SFINAE 得到错误的例程，运行时访问空指针。

@1.2 YBase ：
YBase 版本 b452-b589 （包括若干变通） 非正式支持 Microsoft Visual C++ 2013 ：
仅保证编译成功；
已知 ystdex::pod_storage::operator= 等使用递归重载会被错误地递归调用因此导致相关接口如 ystdex::any 不可用；
b590 起开始依赖 std::integral_constant 实例的 constexpr 成员函数 operator() ，放弃支持。

@1.3 Windows 构建宿主公共环境：
使用 MSYS 作为 Windows 上版本的基础构建环境。
build 458 前：
使用 devkitPro 附带的实现。
2013-11-22(build 458) 起：
对 MinGW32 ，使用 http://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/msys%2B7za%2Bwget%2Bsvn%2Bgit%2Bmercurial%2Bcvs-rev13.7z 。
2014-04-12(build 493) 起：
使用 http://sourceforge.net/projects/msys2/files/Base/i686/msys2-base-i686-20140216.tar.xz 作为基础环境。
同时使用 "Tools/msys2-update-pacman.sh" 更新包。
每次主分支版本前同步 MSYS 环境（ @1.5 中明确提到的除外）至最新版本，但保证只依赖对基础环境向后兼容的特性，因此应可直接升级到更新版本使用，除非基础环境的根目录布局有改变（此时应该使用最新版本的基础环境后更新，或至少同步目录布局）。

@1.3.1 文档工具：
build 170 前：
不使用外部工具。
2010-11-12(build 170) 起：
Doxygen 1.7.2 （安装映像安装 x64 版本，同时使用 doxywizard 生成 Doxyfile ，下同。） / Graphviz 2.27.20101111.0545 。
2012-12-21(build 365) 起：
Doxygen 1.8.2 / Graphviz 2.28.0 （需自行添加 bin 目录路径到 PATH 环境变量，下同）。
2014-05-29(build 500) 起：
Doxygen 1.8.7 。
2014-08-28(build 627) 起：
Doxygen 1.8.10 / Graphviz 2.38.0。

@1.4 DS 平台工具链和标准库实现：
目标平台 DS ，实现环境参见 @5.1 。
系统库：使用 devkitPro（参见 http://devkitpro.org ） 中的 devkitARM 工具链及库文件的非 debug 版本。
目标为 arm-eabi （ devkitPro r41 前）或 arm-none-eabi （ devkitPro r41 起）。
依赖 devkitARM / libnds / default arm7 / libfat 版本：
build 132 前：
未指定。可使用 devkitARM release 26 - 29 。
2009-09-20 起：
libnds 1.3.7 / default arm7 0.5.6 。
2009-09-22 起：
devkitARM release 26 / libnds 1.3.8 / libfat 1.0.4 。
2009-12-12 起：
devkitARM release 27 / libnds 1.4.0 / default arm7 0.5.8 / libfat 1.0.6 。
2010-03-25 起：
devkitARM release 29 / libnds 1.4.3 / default arm7 0.5.12 / libfat 1.0.7 。
2010-04-06 起：
devkitARM release 30 。
2010-05-09 起：
集成 ARM7 代码，不再依赖 default arm7 。
2010-08-08(build 139) 起：
devkitARM release 31 / libnds 1.4.5 。
2010-11-18(build 171) 起：
devkitARM release 32 / libnds 1.4.8 。
2011-01-06(build 180) 起：
libnds 1.4.9 。
2011-02-16(build 192) 起：
libnds 1.5.0 / libfat 1.0.9 。
2011-06-24(build 221) 起：
devkitARM release 33 。
注：文件系统目录访问接口变化，需要使用 devkitARM release 33 或自行配置所需的 POSIX API 。
2011-07-03(build 223) 起：
libnds 1.5.1 。
2011-07-05(build 223) 起：
devkitARM release 34 。
2011-08-27(build 236) 起：
libnds 1.5.4 。
2011-10-13(build 252) 起：
devkitARM release 35 / libfat 1.0.10 。
2012-03-06(build 291) 起：
devkitARM release 37 。
2012-04-12(build 300) 起：
devkitARM release 38 / libnds 1.5.5 。
2012-05-03(build 306) 起：
devkitARM release 39 / libnds 1.5.7 。
2012-05-14(build 308) 起：
devkitARM release 40 / libfat 1.0.11 。
2012-06-29(build 321) 起：
devkitARM release 41 。
2014-04-06(build 492) 起：
devkitARM release 42 / libnds 1.5.8 / libfat 1.0.12 。
2014-04-13(build 493) 起：
在 Windows 上使用 MSYS2 环境的包 make 代替 devkitPro/msys 。参见 @1.3 。
2014-12-06(build 558) 起：
devkitARM release 43 / libnds 1.5.9 / libfat 1.0.13 。
2015-05-25(build 600) 起：
devkitARM release 44 / libnds 1.5.10 / libfat 1.0.14 。
2015-07-01(build 611) 起：
集成 DSIO 实现 FAT ，不再依赖 libfat 。
2015-12-22(build 662) 起：
devkitARM release 45 / libnds 1.5.12 。

@1.4.1 DS 平台构建说明：
需要使用宏 DEVKITARM 指定 devkitARM 的路径。
使用 devkitPro 的 make 规则，还需要使用宏 DEVKITPRO 指定 devkitPro 的路径。
路径使用 / 作为分隔符。

@1.4.2 历史源代码说明：
初始发布使用 GNU GPLv2 发布的 VNDS 代码，原仅适用于 DS 平台；在撤换 GNU GPLv2 许可证前移除。
关于 VNDS ，参见：
http://weeaboo.nl/projects/
http://digital-haze.net/projects/vnds.html

@1.5 MinGW32 平台工具链和标准库实现：
目标为 i686-w64-mingw32 ，操作系统 Windows XP/Windows Server 2003 （对应 Windows SDK 版本宏 WINVER 值 0x0501 ）及以上。
系统库：使用 MinGW 间接依赖的 Win32 API 相关库（如 user32 和 gdi32 ）以及 MSVCRT(Microsoft Visual C++ Runtime Library) 的特定版本。
build 299 前：
无（不支持的平台）。
2012-04-09(build 299) 起：
使用 http://code.google.com/p/mingw-builds 的 i686-mingw32-gcc-4.7.0-release-c,c++,fortran-sjlj 。
2012-06-21(build 319) 起：
使用 http://sourceforge.net/projects/mingwbuilds/files/windows-host/4.7.1/release/i686-mingw-w64-gcc-4.7.1-release-c,c++,fortran-sjlj.7z 。
此版本于 2012-10-06 确认已被移除。
此版本于 2013-01-20 确认已被重命名为 x32-4.7.1-release-posix-sjlj-rev0.7z 。
2012-10-06(build 346) 起：
使用 http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.7.2/32-bit/threads-posix/sjlj/x32-4.7.2-release-posix-sjlj-rev0.7z 。
2013-03-23(build 392) 起：
使用 http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.8.0/32-bit/threads-posix/sjlj/x32-4.8.0-release-posix-sjlj-rev0.7z 。
2013-06-03(build 411) 起：
使用 http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.8.1/32-bit/threads-posix/sjlj/x32-4.8.1-release-posix-sjlj-rev0.7z 。
2013-07-20(build 431) 起：
增加依赖项 NASM 2.07 ： http://sourceforge.net/projects/nasm/files/Win32%20binaries/2.07/nasm-2.07-installer.exe/download 。
当前不直接用于构建 YSLib ，仅用于构建依赖项。
2013-10-20(build 453) 起：
使用 http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/4.8.2/threads-posix/dwarf/i686-4.8.2-release-posix-dwarf-rt_v3-rev0.7z 。
mingw-builds 已被合并至 mingw-w64 官方仓库。改变异常模型以兼容 i686 的 LLVM/Clang++ 工具链，这导致二进制兼容性不被保持。
注意之前由于 mingw-w64 的 bug （参见 http://sourceforge.net/mailarchive/message.php?msg_id=31045447 ），即使不改变异常模型也不能保持二进制兼容性。
2014-01-04(build 465) 起同时支持 MinGW.org 工具链，但由于实现质量等原因，不用于日常测试和默认发布。
2014-04-15(build 493) 起：
基础环境更改参见 @1.3 。
使用包 mingw32/mingw-w64-i686-gcc 和 mingw32/mingw-w64-i686-gcc-libs 版本 4.8.2-7 。
使用包 mingw32/mingw-w64-i686-headers-svn 版本 4.0.0.6558-1 。
使用包 mingw32/mingw-w64-i686-crt-svn 版本 4.0.0.6568-1 。
使用包 mingw32/mingw-w64-i686-winpthreads-svn 和 mingw32/mingw-w64-i686-libwinpthread-svn 版本 4.0.0.6486-1 。
使用的工具链版本、线程模型和异常模型及外部库的依赖和之前保持一致，因此二进制兼容。
2014-05-28(build 499) 起：
使用以下版本 4.0.0.4044.502c720-1 的包：
使用包 mingw32/mingw-w64-i686-headers-git 代替包 mingw32/mingw-w64-i686-crt-svn 。
使用包 mingw32/mingw-w64-i686-crt-git 代替包 mingw32/mingw-w64-i686-headers-svn 。
使用包 mingw32/mingw-w64-i686-winpthreads-svn 代替包 mingw32/mingw-w64-i686-winpthreads-svn 。
使用包 mingw32/mingw-w64-i686-libwinpthread-svn 代替包 mingw32/mingw-w64-i686-libwinpthread-svn 。
2014-07-19(build 520) 起：
升级包 mingw32/mingw-w64-i686-gcc 和 mingw32/mingw-w64-i686-gcc-libs 版本 4.9.1-1 。
升级包 mingw32/mingw-w64-i686-headers-git 、 mingw32/mingw-w64-i686-crt-git 、 mingw32/mingw-w64-i686-winpthreads-git 和 mingw32/mingw-w64-i686-libwinpthread-git 版本 4.0.0.4091.09564a0-1 。
使用包 mingw32/mingw-w64-i686-nasm 版本 2.11.02-1 代替外部依赖项 NASM 。
2014-10-01(build 539) 起：
去除了 -ffat-lto-objects 编译选项（默认 GCC 4.9 不包括此选项），启用 -flto 时要求 ar 支持插件。
需要使用 MSYS2 的 mingw-w64-i686-binutils-git 带插件支持的链接器（已测试包 mingw32/mingw-w64-i686-binutils-git 版本 2.24.78559.d43808f-1 的 GNU ar 2.24.0.20140810 可用），参见 http://sourceforge.net/p/msys2/tickets/62/ 。
2014-12-19(build 560) 起：
升级包 mingw32/mingw-w64-i686-headers-git 版本 4.0.0.4374.811484d-1 。
升级包 mingw32/mingw-w64-i686-crt-git 版本 4.0.0.4376.d6916b1-1 。
升级包 mingw32/mingw-w64-i686-winpthreads-git 和 mingw32/mingw-w64-i686-libwinpthread-git 版本 4.0.0.4370.d008dc5-1 。
2015-01-11(build 565) 起：
升级包 mingw32/mingw-w64-i686-headers-git 、 mingw32/mingw-w64-i686-crt-git 、 mingw32/mingw-w64-i686-winpthreads-git 和 mingw32/mingw-w64-i686-libwinpthread-git 版本 4.0.0.4402.95c900f-1 。
2015-04-30(build 595) 起：
升级包 mingw32/mingw-w64-i686-winpthreads-git 和 mingw32/mingw-w64-i686-libwinpthread-git 版本 5.0.0.4497.4254261-1 。
2015-05-07(build 596) 起：
升级包 mingw32/mingw-w64-i686-headers-git 和 mingw32/mingw-w64-i686-crt-git 版本 5.0.0.4501.4421b4a-1 。
使用包 mingw32/mingw-w64-i686-binutils 版本 2.25-3 代替包 mingw32/mingw-w64-i686-binutils-git （测试可用 LTO 插件支持）。
2015-05-25(build 600) 起：
升级包 mingw32/mingw-w64-i686-gcc 和 mingw32/mingw-w64-i686-gcc-libs 版本 4.9.2-5 。
升级包 mingw32/mingw-w64-i686-binutils 版本 2.25-4 。
使用包 mingw32/mingw-w64-i686-yasm 版本 1.3.0-1 代替包 mingw32/mingw-w64-i686-nasm 。
2015-08-08(build 622) 起：
之前 pacman 仓库为 MINGW ，升级 GCC 后批量升级包。旧仓库最终迁移至 MINGW_GCC_4_9 ： http://sourceforge.net/projects/msys2/files/REPOS/MINGW_GCC_4_9/i686/ 。
升级包 mingw32/mingw-w64-i686-gcc 和 mingw32/mingw-w64-i686-gcc-libs 版本 5.2.0-3 。
升级包 mingw32/mingw-w64-i686-headers-git 和 mingw32/mingw-w64-i686-crt-git 版本 5.0.0.4531.49c7046-1 。
升级包 mingw32/mingw-w64-i686-winpthreads-git 和 mingw32/mingw-w64-i686-libwinpthread-git 版本 5.0.0.4538.78dca70-1 。
升级包 mingw32/mingw-w64-i686-binutils 版本 2.25.1-1 。
2015-06-11(build 700) 起：
升级包 mingw32/mingw-w64-i686-gcc 和 mingw32/mingw-w64-i686-gcc-libs 版本 5.4.0-1 。
升级包 mingw32/mingw-w64-i686-headers-git 和 mingw32/mingw-w64-i686-crt-git 版本 5.0.0.4671.1b12b90-1 。
升级包 mingw32/mingw-w64-i686-winpthreads-git 和 mingw32/mingw-w64-i686-libwinpthread-git 版本 5.0.0.4670.00cda6f-1 。
升级包 mingw32/mingw-w64-i686-binutils 版本 2.25.1-5 。

@1.5.1 MinGW32 库部署：
YSLib 内部使用固定的相对路径，不依赖库的部署。
用户程序依赖 YSLib 库（注意静态库可包括第三方库）时，可以复制库文件或建立直接的符号链接，使用以下方法：
静态库文件（文件名形如 'lib$(LIB).a' ，其中 $(LIB) 是可能带有 d 后缀表示调试版本的库名，下同）置于链接器的搜索路径指定的目录内；
动态库文件（文件名形如 '$(LIB).dll' ）置于链接器的搜索路径指定的目录内，但重命名为 $(LIB).dll.a ；
动态库文件（文件名形如 '$(LIB).dll' ）在 PATH 环境变量内或直接依赖的文件所在的目录以便被搜索。
在链接器命令行中引用 $LIB 指定库。静态库链接时同时需要在之前使用 -Wl,-dn 选项以避免链接至动态库（默认链接器优先链接 $(LIB).dll.a 而不是 lib$(LIB).a ）。
以上部署方式中链接器搜索路径中的静态库和动态库的调试版本和非调试版本可以在一个目录内，不产生冲突。
MinGW32 的 FreeType 可能使用动态链接编译的 DLL 。

@1.5.2 最小外部运行依赖：
当前示例程序只依赖 MinGW 运行时的以下 3 个动态库文件：
libstdc++-6.dll （ libstdc++ ，标准库的主要实现），
libgcc_s_dw2-1.dll （ libgcc ， GCC 运行时环境，实现一部分标准库），
libwinpthread-1.dll （ libwinpthread ，在 Windows 环境下提供 POSIX 线程接口）。
注意 libgcc_s_dw2-1.dll 使用 Dwarf2 异常模型。使用其它异常模型的 DLL 后缀相应不同。
libstdc++-6.dll 依赖其余的文件。使用不同异常模型的文件名相同但底层接口不同，因此不兼容。
如果需要打包文件，需保证这些库文件版本对应以免兼容性问题。
因为许可证原因，以上文件不随项目文件分发。

@1.6 Android 平台工具链和标准库实现：
build 492 前：
无（不支持的平台）。
2014-04-07(build 492) 起：
构建平台 Windows x64 。
依赖项：
Oracle JDK 8u5 x64 / Android SDK / Android SDK Build-tools 19.0.3 / Android NDK r9d x86_64。
使用 API level 9 和 G++ 4.8 。
独立工具链目标三元组 arm-linux-androideabi ，构建脚本参见 Tools/make-clang-android.sh 。
2014-07-14(build 518) 起：
Android SDK Build-tools 20.0.0 。
注意 zipalign 工具自 19.1.0 起已被移入 Build-tools 。
2014-11-15(build 554) 起：
Oracle JDK 8u25 x64 / Android NDK r10c x86_64 / Android SDK Build-tools 21.1.1 。
重新构建独立工具链。使用 G++ 4.9 （版本 4.9 20140827 (prerelease) ）；使用 gcc-ar 代替 ar 。

@1.7 MinGW64 平台工具链和标准库实现：
除非以下说明，配置同 MinGW32(@1.5) 。
目标为 x86_64-w64-mingw32 ，操作系统 Windows XP x64/Windows Server 2003 x64 （对应 Windows SDK 版本宏 WINVER 值 0x0501 ）及以上。
2014-07-22(build 520) 起非正式支持：
使用包 mingw64/mingw-w64-x86_64-gcc 和 mingw64/mingw-w64-x86_64-gcc-libs 版本 4.9.1-1 （对 YFramework 仅支持静态链接）。
使用包 mingw32/mingw-w64-i686-headers-git 、 mingw32/mingw-w64-i686-crt-git 、 mingw32/mingw-w64-i686-winpthreads-git 和 mingw32/mingw-w64-i686-libwinpthread-git 版本 4.0.0.4091.09564a0-1 。
使用包 mingw64/mingw-w64-x86_64-FreeImage 3.16.0-3 和 mingw64/mingw-w64-x86_64-freetype 2.5.3-2 未另行编译并静态链接至 YFramework 内。

@1.8 Linux x86 平台工具链和标准库实现：
除非以下说明，配置同 Linux x64(@1.9) 。
目标为 i686-linux-gnu 。
build 562 前：
无（不支持的平台）。
2014-12-16(build 560) 起：
非正式支持。
仅用于构建 stage 1 SHBuild （未测试）。
2014-12-24(build 562) 起：
非正式支持。
仅用于构建 FreeImage （未测试）。

@1.9 Linux x64 平台工具链和标准库实现：
目标为 x86_64-linux-gnu ，操作系统 Linux 2.6 及以上，使用 GNU C Library 2.0 及以上。
build 560 前：
无（不支持的平台）。
2014-12-16(build 560) 起：
新增非正式支持。
构建平台 Arch Linux x86_64 。
使用包 core/binutils 版本 2.24-8 。
使用包 extra/clang 版本 3.5.0-2.1，包括以下依赖：
直接依赖： extra/llvm 版本 3.5.0-2.1；
间接依赖： extra/llvm-libs 版本 3.5.0-2.1 、 core/gcc 版本 4.9.2-1 和 core/gcc-libs 版本 4.9.2-1。
仅用于构建 stage 1 SHBuild 。
包 gcc-4.9.2-1 会导致段错误，当前不被支持。
2014-12-26(build 562) 起：
使用包 extra/nasm 版本 2.11.06-1，仅用于构建 FreeImage 。
使用包 gcc 测试构建 stage 1 SHBuild 以外的项目。
2015-05-27(build 601) 起：
升级包 core/binutils 版本 2.25-5 。
升级包 extra/clang 版本 3.6.1-1，包括以下依赖：
升级包 extra/llvm 和 extra/llvm-libs 版本 3.6.1-1 ；
升级包 core/gcc 和 core/gcc-libs 版本 5.1.0-4 。
升级包 extra/nasm 版本 2.11.08-1 。

@1.6.1 Android 平台构建说明：
需要使用宏 ANDROID_SDK 指定 Android SDK 的路径。
路径使用 / 作为分隔符。
构建 YSTest 主目标时不依赖 NDK ，仅需 JDK 、 Android SDK 和独立工具链。
构建脚本会对生成的包签名，因此需要需要准备私钥。用 Tools/create-android-debug-keystore.sh 可生成默认私钥。
构建脚本接受 APK_KEYSTORE 宏指定私钥路径，默认值为 ~/.android/debug.keystore 。可在环境中覆盖。

@1.6.2 Android 测试程序运行附加说明：
使用 Tools/create-android-debug-keystore.sh 创建或更新密钥存储。
安装不同签名的程序需先卸载旧程序，否则出现 INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES 错误，安装失败。
YSTest 历史更新记录如下。
2014-05-12(build 498) 起：
使用同一认证。
2014-10-07(build 543) 起：
使用 Tools/create-android-debug-keystore.sh 更新认证。

@2 外部库依赖：
本章按引入版本顺序记录历史版本使用的外部非系统库。系统库参见 @1 。

@2.1 Loki ：
build 207 前使用 Loki 库的智能指针实现句柄。
之后已移除。

@2.2 FreeType2 ：
使用 FreeType2（参见 http://www.freetype.org ） 实现向量字体光栅化支持。
历史记录、版本信息和构建方法详见 "3rdparty/freetype/Readme.en-US.txt" 。

@2.2.1 使用版本：
以下的修改若之前版本已存在，除非另行约定，保持不变。
除非另行约定，使用当时 devkitPro(@1.4) 自行编译 DS 库文件，使用当时 MinGW32(@1.5) 自行编译 MinGW32 库文件。

@2.2.2 DS 库配置：
build 185 前：
头文件版本： 2.3.12 。
库文件版本：在 VNDSx-1.5.3 源代码中提取的 2.3.6 。
build 185 起：
头文件版本： 2.4.4 。
按构建命令行编译库文件。
配置 "modules.cfg" 的有效行和使用的构建命令参见 "3rdparty/freetype/Readme.en-US.txt" 中的历史记录。
2011-07-03(build 223 rev 31) 起：
头文件版本： 2.4.5 。
对配置 "modules.cfg" 的修改参见 "3rdparty/freetype/Readme.en-US.txt" 中的历史记录。
build 224 rev 34 起：
使用 FreeType 2.4.5 。
对原始版本的修改参见 "3rdparty/freetype/Readme.en-US.txt" 中的历史记录。
重新编译库文件。
2011-12-01(build 266) 起：
使用 FreeType 2.4.8 。
对原始版本和配置 "modules.cfg" 的修改参见 "3rdparty/freetype/Readme.en-US.txt" 中的历史记录。
重新编译库文件。
2012-03-11(build 292) 起：
使用 FreeType 2.4.9 。
撤销对原始版本的修改，参见 "3rdparty/freetype/Readme.en-US.txt" 中的历史记录。
重新编译库文件。

@2.2.3 DS 和 MinGW32 库配置：
2012-03-29(build 296) ：
准备添加 MinGW32 库文件版本，预备 modules.cfg 配置不变。
2012-04-06(build 299) 起：
添加 MinGW32 库文件版本，使用 mingw32-make 直接构建默认提供的 makefile 。
2012-06-17(build 318) 起：
使用 FreeType 2.4.10 。
2012-12-21(build 366) 起：
使用 FreeType 2.4.11 。
2013-05-18(build 405) ：
测试发现 2.4.12 库在 DS 上的性能显著降低，因此决定暂不升级；仅重新编译减小二进制文件大小。
2013-05-19(build 406) 起：
库配置和 DS 库构建文件已添加至版本库，参见 "3rdparty/freetype/builds/ds/modules.cfg" 。
对配置 "modules.cfg" 的构建命令行修改参见 "3rdparty/freetype/Readme.en-US.txt" 中的历史记录。
DS 库文件： 2.4.11 按新的构建命令行重新编译。
MinGW32 库文件：按新的构建命令行重新编译。
2013-07-01(build 420) 起：
使用 FreeType 2.5.0.1 ，但部分文件使用 2.4.11 版本替换，参见 b420 $workaround(#19) 和 [Documentation::Workflow::Annual2016 $2016-06] 。
对原始版本和配置 "modules.cfg" 的修改参见 "3rdparty/freetype/Readme.en-US.txt" 中的历史记录。
重新编译 DS 库文件。
使用上一版本 "modules.cfg" 重新编译 MinGW32 库文件。
2013-11-30(build 459) 起：
使用 FreeType 2.5.1 ，替换文件同上，除路径 "include/freetype/config/ftoption.h" 变更为 "include/config/ftoption.h" 。
对配置 "modules.cfg" 的修改参见 "3rdparty/freetype/Readme.en-US.txt" 中的历史记录。
使用一致的 "modules.cfg" 重新编译 DS 和 MinGW32 库文件。
2013-12-24(build 462) 起：
使用 FreeType 2.5.2 ，替换文件同上。
重新编译 DS 和 MinGW32 库文件。
2014-04-13(build 493) 起：
使用 FreeType 2.5.3 ，替换文件同上。
MinGW32 库文件的构建使用命令行显式设置，参见 "3rdparty/freetype/Readme.en-US.txt" 中的历史记录。
重新编译 DS 和 MinGW32 库文件。

@2.2.4 DS 、 MinGW32 和 Android 库配置：
2014-05-11(build 497) 起：
添加 Android 库文件：使用 POSIX shell 命令行配置和编译，参见 "3rdparty/freetype/builds/ds/modules.cfg" 。
2014-07-19(build 520) 起：
重新编译 MinGW32 库文件。

@2.2.4 DS 、 MinGW32 、 Android 和其它平台外部库配置：
2014-12-26(build 562) 起：
YSLib 实现对所有平台的 FreeType2 库添加检查。
仅对 2.5.0 及以上版本（官方版已不支持并移除此宏）同时包含宏 FT_CONFIG_OPTION_OLD_INTERNALS  时使用修正，以便使用外部编译发行的库和头文件。
因为未使用新的 API ，外部编译的库支持最早使用的 2.3.12 及以上版本，可能支持更早的 API 兼容版本（均未另行测试）。
2014-12-29(build 563) 起：
移除对未使用 FT_CONFIG_OPTION_OLD_INTERNALS 时 FreeType 内部头文件依赖。
新增 Linux 支持。在 Arch Linux x86_64 上使用包 extra/freetype2 版本 2.5.4-3 （依赖包 extra/libpng 版本 1.6.16-1 和 extra/harfbuzz 版本 0.9.37-1）测试通过。
2015-05-27(build 601) 起：
在 Arch Linux x86_64 上升级包 extra/freetype2 版本 2.5.5-1 （依赖包 extra/libpng 版本 1.6.16-1 和 extra/harfbuzz 版本 0.9.40-2）。
2016-06-11(build 700) 起：
使用 FreeType 2.6.3 ，但部分文件使用 2.4.11 版本替换。
对原始版本和配置 "modules.cfg" 的修改参见 "3rdparty/freetype/Readme.en-US.txt" 中的历史记录。
DS 库文件： CFLAGS 加入以下配置 "-DFT_CONFIG_OPTION_OLD_INTERNALS" 重新编译。
此配置迁移自 "freetype/config/ftoption.h" 中的宏定义，而其它修改未影响当前使用的特性，因此不再需要替换此文件。
因为缺少 TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 宏的默认定义，构建之前的一些版本可能还需在 CFLAGS 加入 -DTT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES=1000000L 。
重新编译 MinGW32 和 Android 库文件。

@2.3 Anti-Grain Geometry ：
图形库：修正的 Anti-Grain Geometry 库 V2.4 。
2011-01-19(build 187) 起移除。

@2.4 FreeImage ：
图像库使用 FreeImage 。
历史记录、版本信息和构建方法详见 "3rdparty/FreeImage/Readme.en-US.txt" 。

@2.4.1 使用版本：
以下库配置若之前版本已存在，除非另行约定，保持不变。
除非另行约定，使用当时 devkitPro(@1.4) 自行编译 DS 库文件，使用当时 MinGW32(@1.5) 自行编译 MinGW32 库文件。
2013-06-26(build 417) 起：
使用裁剪的 FreeImage 3.15.4 。对原始版本的修改参见 "3rdparty/include/FreeImage.h" 和 "3rdparty/FreeImage/" 。
2013-07-21(build 431) 起：
使用裁剪的 FreeImage 3.15.4 ，并使用 libjpeg-turbo-1.3.0 替换 libjpeg-8d ，更新 zlib 和 libpng 。
对原始版本的修改参见 "3rdparty/include/FreeImage.h" 和 "3rdparty/FreeImage/" 。
注意增加的 libjpeg SIMD 代码在 MinGW32(@1.5) 和 Linux(@1.9) 平台依赖 NASM 兼容的汇编器构建。
2013-10-21(build 453) 起：
在上一版本的基础上更新 libpng ，并重新编译 MinGW32 库文件。
2014-07-19(build 520) 起：
使用 3.16.0 ，在此基础上合并上一版本的修改，更新 libjpeg-turbo 和 libpng 。
重新编译 MinGW32 库文件。
2014-05-24(build 562) 起：
添加 Linux 支持。在 Arch Linux x86_64 编译。
2015-05-25(build 600) 起：
使用 3.17.0 ，在此基础上合并上一版本的修改，更新 libjpeg-turbo 和 libpng 。
重新编译 DS 和 MinGW32 库文件。
2016-06-11(build 700) 起：
更新 libjpeg-turbo 和 libpng ，并重新编译 DS 和 MinGW32 库文件。

@3 可选外部依赖：

@3.1 JNI ：
要求版本 1.2 或以上。

@3.2 XCB ：
对 Linux 构建 YFramework 是必要的依赖。
要求版本 1.11 或以上。
要求实现支持 X11R7.7 核心协议和 ICCCM 2.0 。
具体规范参照： http://www.x.org/releases/X11R7.7/doc/ 。

@3.2.1 使用的版本：
2015-05-27(build 601) 起：
在 Arch Linux x86_64 使用包 libxcb 版本 1.11-1 。

@4 避免依赖：
在特定平台实现上 YSLib 项目在避免使用特定的外部依赖。
语言和语言实现（如标准库实现）相关的依赖规则见 [Documentation::Project @@1.2] 和 [Documentation::Base @@2.1.2] 。
一般外部依赖规则参见 [Documentation::YFramework @@2.1.2.1] 。
特定平台依赖规则参见 [Documentation::YFramework @@2.1.3.1] 。

@5 历史发布注记整理：
本章整理来源于 Readme.zh-CN.txt 的原历史发布注记，其中运行时配置内容被移除，参见 [Documentation::Test @@5] 。

@5.1 PreAlpha 1 ：
2011-04-09 ：
修复前述优化选项相关问题。
发现新的 DeSmuMe 的 release 已在两个月前发布，但测试环境仍使用更新的 SVN 版。
2011-03-20 ：
发现优化 -O0 以上除了 -Os （二进制映像大小差异 1 KiB ）外出问题（控件状态混乱），排除优化选项问题。
原因不明。
2011-01-21 ：
补遗：使用新版本 DeSmuME 可以运行。
因为测试环境不定期更新 SVN 版，之前并没有注意 devkitPro.org 提及最近 libnds 无法在最新的 DeSmuMe 的 release 版（0.9.6；这个版本还有关于 FAT 访问的 bug ）中运行。
删除了 makefile 里面的 DLDI patch 命令行（使用的模拟器会自动打补丁）。
2011-01-19 ：
为继续减少重复编译的工作量，拆分 ARM9 和 ARM7 目标文件为不同的项目。
依赖存在问题，导致在更新被依赖的库的时候导致生成的 .nds 不是最新版本（因为 ARM9/ARM7 的目标文件都是最新的）；
需手动仅用于项目→仅清除，选择清理 ARM9 目标文件的项目才可以保证生成最新的 .nds 。
另外 Microsoft Visual Studio 可能会把配置 debug 作为 Debug （注意这里区分大小写）导致构建错误的配置或失败。
因为 makefile 中定义了 NDEBUG 宏，可能会导致不同的行为。关闭 Visual Studio 重新打开解决方案应可解决。
安全做法是手动分别调用 make 。测试环境（硬件配置： Intel Core 2 Duo P8600 + 2GiB RAM ）构建需要约 5 分钟。
2011-01-16 ：
为减少重复编译的工作量，自制的库改用 Microsoft Visual Studio 2010 项目。
清理项目删除不掉VS生成的 .log 文件。
2010-10-27 ：
Visual Studio 项目添加 debug/release 配置。
2010-10-09 ：
补 Loki 的 MIT License 。
2010-09-29 ：
迁移至 Visual Studio 2010 。
自动转换解决方案和工程文件（保留了旧版本）。
环境变量 NDSEmulator 去除引号，例如 F:\devkitPro\PALib\emulators\DeSmuME\DeSmuME.exe 。
模拟器命令行：
$(NDSEmulator) $(ProjectDir)$(NMakeOutput) --cflash-path=H:\NDS\efsroot
2010-05-09(PreAlpha 1 @ yayabo.cn) ：
以配合 PALibAppWizard 创建的 Microsoft Visual Studio 2008 项目的形式发布，生成文件使用基于 devkitPro 的 makefile ，可自行 make 。
使用 DLDIrc ，若不需要，在 makefile 中找 dlditool 所在的命令行修改。
开发环境变量：
DEVKITARM = /F/devkitPro/devkitARM
DEVKITPPC = /F/devkitPro/devkitPPC
DEVKITPRO = /F/devkitPro
DEVKITPSP = /F/devkitPro/devkitPSP
DKP_HOME = F:\devkitPro
NDSEmulator = "F:\devkitPro\PALib\emulators\DeSmuME\DeSmuME.exe"
模拟器命令行：
$(NDSEmulator) $(TargetPath) --cflash-path=H:\NDS\efsroot

@5.2 PreAlpha 2 ：
2012-04-09 ：
完善框架实现：
基础架构和核心抽象实现调整；
增加各种语言层次上的优化；
增加高精度计时器；
消息类型调整和消息队列实现；
增加事件类型优先级支持；
微调块传输贴图算法；
部分完成 MVC 分离；
增加允许在运行时调整渲染策略的部件渲染支持；
增加基于无效矩形算法实现的部分渲染……
完善示例程序：
release 版本对某些字体来说效率上可以基本适应实际需要，但仍然无法使用带有位图的字体（显示错误，疑似 freetype 的 bug ）。
文本阅读器修正若干文件读取和布局渲染 bug （重新实现缓冲算法）；增加菜单和设置界面；增加进度显示和随机定位功能；增加背景色和文本色调整、字体调整、字体大小调整；增加阅读历史记录（前进/后退）；增加自动（可选以文本或像素行作为单位）滚屏；增加编码自动识别。
增加十六进制浏览功能。
主界面增加可选的 FPS 显示（伪；实际上是消息循环速率）。
增加 IDE 支持：
可使用 Code::Blocks 。
增加生成平台：
Build 299 起支持 MinGW(g++4.7.0) 编译生成 Win32 本机程序。 MinGW 下载： http://code.google.com/p/mingw-builds 。
使用 Code::Blocks 打开工作空间文件直接生成（暂不支持 Visual Studio 生成）。
其它注意事项：
已确认 DeSmuMe SVN r4030 起有 bug 打开 .nds 后无法正确读取文件。
配置文件默认路径仍然是硬编码的（见YSLib/Helper/Initialization），根目录为 "H:\\NDS\\EFSRoot" ，所以运行的时候可能有些麻烦……
“本机程序←→×”等无法显示（大概也是 freetype 问题），于是有些按钮没文本看起来是空的。
2011-04-11(PreAlpha 2) ：
PreAlpha 2(Build 200) 发布。
维护地址： http://code.google.com/p/yslib  。源码可以在那边下载。
界面完善了点。其它么……没什么对最终用户而言特别突出的特性。当作阅读器而言仍然很不完善，书签啥的都没有。唯一一个显著的进步是效率（界面响应在 release 版本下比较流畅）。此外就是细节上（但实现起来比较麻烦）的东西了，像是连续响应输入之类。
代价……重构掉的代码少说也是之前的 5 倍。
增加的特性除了以上内容外，主要是只对开发而言有用的：
自定义宏（缩减代码长度用，否则光是写getter就会疯掉）；
多播委托模板；
事件映射表（只是用来压缩接口个数……）；
字符光栅化模板和渲染器（我真的只是重复发明轮子没刻意山寨M$- -，即使类名类似也不要脑补有相同的功能）；
依赖事件（同上）；
事件路由（同上）。
注释文档可以用 Doxygen 编译（我用的好像是 1.7.2 ）。
还是集成测试代替单元测试，所以版本号不表示实际编译次数。 Build 是全编译版本号，每次预定平均增量编译64次。
测试基本完全语句覆盖，不过应该还有很多 bug 。

@5.3 PreAlpha 3 ：
2012-07-10 ：
更改了 CHRLib 载入非 Unicode 编码（目前只有 GBK ）的方式，由纯静态链接改为数据从路径 /Data 中的编码表文件读入。当前 GBK 对应的编码表文件为 cp113.bin 。
需要在初始化时保证载入正确，否则可能引起断言失败（ debug 配置下）或未定义行为（ release 配置下）。
2012-04-12(PreAlpha 3) ：
增加 MinGW 动态链接库。
增加配置文件生成，文件名为 config.txt ，编码为 UTF-8 （默认生成的有 BOM ，不过读取的不限，反正没 BOM 全 ASCII 按 ANSI 读也一样，有非 ASCII 字符一般能自动猜出来……）。
当前配置文件内容只有三行路径，依次为程序工作目录（初始化完毕后getcwd()取得的目录），矢量字体路径（会优先读取此路径的字体文件），矢量字体目录（会读取此目录下所有字体文件）。路径长度不超过 80 字节（多了会被截断）。
默认配置内容硬编码于 YSLib/Helper/Initialization.cpp 。

@5.4 PreAlpha 4 ：
2013-10-12(build 449) ：
build 449 起使用 2-Clause BSD 许可证风格的条款进行基本授权。
[Config]
外部依赖库移至 "/3rdparty" ，其中 FreeType 需要在头文件中显式依赖。（需要对显式依赖项指定搜索包含路径 "/3rdparty/include" 。）
[YBase]
增加容器适配器和序列容器适配器模板。
增加路径类模板 ystdex::path 。
[YFramework]
用户 Shell 可以设置延时；
使用 MinGW 的 ::dirent 和 ::opendir 等。
BufferedRenderer 支持更换缓冲区。
一些命名调整，便于配合标准库使用（ Swap → swap ）以及和 YBase 保持一致性（ Clone → clone ）。
调整 YCLib 文件系统接口。
重新设计 Path 类（使用ystdex::path）。
清理 YSLib 文件系统接口。
[MinGW] COM通用代码（需要自行增加链接库）。
修复非 255 阶灰度字符位图（包括矢量字体的内嵌位图）渲染错误。
增加图像读取支持（使用 FreeImage 实现）。
不使用 FreeType Cache Subsystem 重新实现字体缓存（减少大小并提高加载效率）。
支持渲染粗体和斜体字形位图。
TouchEventArgs 重命名为 CursorEventArgs 。
TouchMove 事件合并至 TouchHeld 事件。原逻辑固定。
支持新的 UI 事件 CursorOver 和 CursorWheel （在 DS 无法自动产生但可以由用户程序触发）。
[MinGW] 修复 GUI 响应坐标转换。
按键绑定自动生成复合事件，不需要单独绑定 KeyPress 到 Click 。
滚动条和列表框控件支持滚轮事件。
增加 DS 屏幕切换功能。
[MinGW] 允许设置顶层窗口透明性或使用 Alpha 位图。
增加简单的动态界面加载。
增加像素格式模板。
扩展 Alpha 组合算法为模板。
增加用于部件调整大小的边框（支持宿主窗口）。
修复圆光栅化算法实现。
增加填充圆绘制。
事件处理器支持省略末尾部分参数的可调用类型。
NPLA1 配置增加读写多个未命名节点项。
[YReader]
更改界面：缩减背景，增大文件选择区域。
2013-04-24(PreAlpha 4) ：
更明确的许可证说明；
显式导出符号的 DLL （便于直接比较事件处理器函数指针等）。
YBase 中增加以下内容：
变参模版和一些元编程接口；
libdefect，当前仅修正 (MinGW32) libstdc++ 4.8 以下字符串函数（ std::stoi 等）缺失；
YTest，当前仅测试计时；
C/C++ 标准库 I/O 参数转换；
一些实现支持的特性（ C++11 关键字等）判断和替代宏；
constexpr 字符串操作；
动态泛型值 any 类和动态泛型输入迭代器 any_input_iterator ；
nonmovable 类。
YFramework 中增加以下内容：
按钮色调；
值节点ValueNode类；
部分 YCLib 接口；
NPL（用于配置的语言的简单实现）；
默认框架配置文件；
部件遍历迭代器；
GUI 子部件接口；
菜单部件映射；
MinGW32 简单宿主窗口控制（传递输入、改变宿主窗口大小、宿主窗口客户区为目标的部件渲染器）；
支持指针设备传递按键状态（区分是否有键同时按下、右键等）；
GUI 应用程序和 Shell 基类。
YFramework 中移除以下内容：
部件透明性（直接修改背景代替）。
YFramework 中修正以下内容：
文本渲染边距计算；
MinGW32 下的一些线程安全问题；
若干资源泄漏。
YFramework 中修改以下内容：
改进值对象ValueObject类的可扩展性；
单选框外观；
消息实现、输入分发、主消息循环性能优化；
测试界面（增加关于窗口）；
文本渲染剪切接口和算法优化；
使用不可转移和复制的 GUI 状态；
用户界面命名空间： YSLib::Components → YSLib::UI ；
Core 不依赖 Desktop 类。
YReader 改进：
增加保存设置配置；
修正那个设置颜色改变后取消无效；
修改设置中上屏幕直接显示背景色；
修正设置下屏幕背景色后按钮角落遗漏重绘；
MinGW32 下文本阅读界面增加右键显示上下文菜单；
增加书签界面；
增加书签保存和读取。

@5.5 PreAlpha 5 ：
2014-05-30(PreAlpha 5) ：
更改输出目录结构：目标文件和源代码分离。
添加 MinGW.org 支持（不用于发布）。
添加非正式的 Android 支持（ YBase 外未完成）。
更新 Doxygen 文档忽略列表，启用短文件名设置以避免含有制表符的文件名导致生成失败。
[YBase]
添加 Microsoft Visual Studio C++ 2013 支持。
[YFramework]
添加 MIME 类型和扩展名映射。
修整光栅化接口和实现，修复未显示右下边界线段和矩形右下角的点。
限制部件渲染区域保证绘制区域被渲染一次而正确显示。
调整消息宏命名风格。
添加基于界面无效化的简单逐帧动画支持。
添加多页面图像读取支持（基于 FreeImage 独立实现）。
添加 MRU 缓存并应用于字形缓存的实现。
在包含中使用模块标识宏代替文件名的直接使用。
添加 MinGW.org 运行时支持。
按钮和单选框增加悬停控件状态并修改对应状态的外观。
单选框禁用时渲染为灰色外观。
添加视觉样式支持。
添加图像缓冲区转换和保存为文件。
未启用或隐藏的部件不响应键盘焦点。
添加级联焦点缓冲（通过多级容器和部件的焦点确定键盘焦点）。
添加本机按键编码分类和相关操作；支持更多虚拟按键。
添加 TextBox 和 TabControl 控件。
增强日志输出接口。
[MinGW32]
修复终止时栈溢出。
本机窗口增加消息映射。
[YReader]
更改部分按键。
添加界面风格设置。
更改项目目录结构。
添加界面动画、文本框和标签页测试。
阅读器设置界面使用标签页。

@5.6 V0.6 ：
2015-05-25(V0.6) ：
添加简易测试框架 [Test] 。
[Test]
添加 YBase 的部分测试用例 [Test.YBase] 。
[Tools]
添加 sysroot 构建工具脚本 [Sysroot] 。
添加 SXML 到 XML 文档转换工具 [SXML2XML] 。
添加项目文件生成 [ProjectGenerator] 。
[Tools.SHBuild]
支持并行构建和文件时间戳检查。
及构建脚本支持控制台彩色输出。
支持按等级和分组过滤输出消息。
Stage1 SHBuild 支持 Linux 。
[Tools.Scripts]
添加部署环境 Sysroot 。
[YBase]
[YBase.YStandardEx]
添加部分 ctype 替代实现以避免某些标准库实现的 bug 。
从 YFramework 转移通用 MRU 缓存模板 used_list_cache 。
添加标准库异常扩展接口。
添加原型迭代器模板 prototyped_iterator 。
添加临时暂存对象支持模板 swap_guard 。
添加若干算法和容器操作函数模板。
添加链式调用模板 chain_apply 。
添加函数复合模板 compose 。
添加单线程标准库兼容锁接口支持。
变长参数序列兼容 C++14 std::integer_sequence 等的接口。
[YBase.YTest]
添加测试支持 API 。
[YFramework]
[YFramework.YSLib]
[YFramework.YSLib.Core]
ValueNode 允许子节点和值共存；添加若干相关接口。
移除事件宏。
[YFramework.YSLib.UI]
修复若干列表框滚动条显示及断言失败问题。
完善 TextBox 支持。
移除 Widget 及派生类中不必要的前景色数据成员。
重构 TextList ，抽取实现为 AMUnitList 和 AMUnitControlList ，使用共享部件代替直接渲染。
Enter 事件和 Leave 事件支持共享部件对象。
添加 TreeList 和 TreeView 控件。
简化菜单相关的接口，移除 MenuHost 对 Menu 的所有权以及菜单标识。
添加连续点击支持。
控件保存特定事件的启用状态。
支持基于 CursorOver 事件的悬停菜单。
明确 CursorOver 引起的 Leave 事件的发送者和订阅者。
GotFocus 和 LostFocus 可被所在的直接或间接容器部件焦点的改变引发。
[YFramework.YSLib.Service]
添加 HSV 和对应 RGB 转换支持。
添加图像缓存和辅助的像素块传输模板。
修复块传输算法在转置时的一个剪切边界计算错误。
[YFramework.NPL]
添加 NPLA1 变换映射，支持用户指定节点映射方法。
修复 NPL 转义序列写入。
修复 NPL 词法分析器的断行连接转义并允许配置其它反转义算法。
添加 SXML 解析转换到 XML 的基本支持。
[YFramework.YCLib]
移除旧调试接口（如 yprintf ）。
YCLib 添加命令缓存和终端接口，非 Win32 控制台支持通过 tput 输出彩色文本。
添加执行 Shell 命令的接口（当前仅适用于 Win32 ）。
[YFramework.CHRLib]
添加解码 UTF-16 文本支持（但上层 API 仍然只使用 UCS-2 ）。
添加 UCS-4 中间代码支持和相关接口。
修复编码转换操作的容错性。
使用非包装的迭代器实现字符串转换接口，显著提升性能。
UTF-8 解码默认使用新算法，显著提升性能。
[YFramework.Helper]
宿主窗口线程支持自定义进入/退出操作。
默认以宿主桌面代替顶级窗口作为视图树根部件（当前仅适用于 Win32 ）。
非前景宿主窗口响应非键盘输入（当前仅适用于 Win32 ）。
添加宿主工具提示和菜单相关接口（当前仅适用于 Win32 ）。
[Win32]
添加文本框调整输入法候选窗口位置的支持（部分输入法可能因为 bug 无法实现）。
修复因 MSVCRT 的 bug 导致部分字符无法正确显示。
添加控制台接口。
扩大屏幕相关整数类型的取值范围。
允许读取 cp113.bin 失败时使用系统 NLS 代码页数据用于 GBK 编码转换。
优化窗口绘制实现，允许使用无效区域。
[Android]
添加宿主支持。
[Linux]
添加工具和 YBase 支持。
[YReader]
修复保存设置崩溃及破坏配置文件。

@5.7 V0.7 ：
2016-06-?(V0.7) ：
[Test]
[Test.YBase]
添加 YBase 的部分测试用例。
[Tools]
[Tools.SHBuild]
[Sysroot]
修复构建脚本对 FreeType2 的 pkgbuild 检查失败后直接退出。
[YBase]
[YBase.YStandardEx]
添加缓冲区中按布局读写整数的接口。
添加对齐特征和基于对齐检查的显式转换。
添加兼容非特定字符类型转换的接口。
添加作用域守护接口。
线程池修复直接调用 wait 无限等待。
添加只读字符串视图 string_view 等。
扩展和修复部分字符串操作。
固定 path 状态，使用特征代替状态对象。
添加 optional 相关的扩展接口。
公开代理调用接口 expand_proxy 。
更新 any 接口以符合正式的 ISO/IEC TS 19568:2015 C++ Extensions for Library Fundamentals ，并另行添加使用不可复制构造对象初始化和原地构造扩展。
添加关联容器 mapped_set 。
添加 observer_ptr 。
修复 examiner 。
完善关联容器搜索通用模板，支持类似 set 的类型和迭代器提示参数；添加 try_emplace 和 insert_or_assign ，支持 ADL 定制插入。
添加不依赖 RTTI 的 std::type_info 轻量级替代 type_id_info ；支持通过宏 YB_Use_LightweightTypeID 配置 type_info 选用 type_id_info 或 std::type_info 。
any 使用 type_info 代替 std::type_info 。
[YFramework]
重命名 ysbuild.h 为 YSBuild.h 。
[YFramework.CHRLib]
移除单独的字符类型和对应的字符串类型，使用 char16_t 和 char32_t 和相关类型代替。
完善编码转换接口，提供独立的使用默认编码的转换接口，提升性能。
[YFramework.YCLib]
添加 FAT 公共接口。
添加支持 UTF-8 路径的文件缓冲和流替代标准库的对应 API 。
完善文件输入/输出接口，提供链接、复制以及文件时间的支持。
添加基于标签分派的接口，强化平台模拟支持。
[YFramework.YSLib]
[YFramework.YSLib.Adaptor]
头文件不包含 FreeType2 头文件。
[YFramework.YSLib.Core]
移除过时的函数对象模板。
修复 ValueObject 和 GHEvent 的比较操作。
提供 ValueObject 原地构造，减少不必要的冗余初始化。
扩充 ValueNode 接口，使用 observer_ptr 代替内建指针；使用 ystdex::mapped_set 代替标准库容器以改善 const 类型检查；添加原地构造和插入支持。
GEvent 支持通过调用器模板参数指定不同的调用逻辑。
Application 使用守护对象栈代替退出回调。
ValueObject 使用 type_info 代替 std::type_info 。
[YFramework.YSLib.Service]
简化路径实现，默认只使用 UTF-8 作为外部编码。
[YFramework.YSLib.UI]
修复 TreeList 和 TreeView 关于绑定节点和展开节点相关行为。
[YFramework.NPL]
扩展 NPLA1 API 。
分离 NPLA 公共实现。
添加 NPLA1 规约实现。
[YFramework.Helper]
分离环境和 GUI 宿主，调整初始化实现。
[DS]
使用自定义 FAT 和缓存实现替换 libfat ，以修复 POSIX 兼容性。
在 DS 平台上默认构建配置启用 YB_Use_LightweightTypeID 以减小二进制映像大小。
[Win32]
使用基于程序映像路径的目录定位配置。
[Android]
[Linux]
[YReader]
调整关于界面：使用对话框和粗体标题，关闭按钮改为系统信息界面按钮。
移除的 TreeView 测试（使用关于界面代替）。

*/
////

