nlib
過去のChangelogs

一覧

2016-12-22

  • Visual Studio 2017 RC用にコンパイルしたライブラリをパッケージに追加しました。
  • Visual Studio用のサンプルのビルドに関して、PowerShellからcmakeでVisual Studioのソリューションファイルを作成するスクリプト(gen-sln.ps1)を追加しました。
  • CAFE,CTR用のサンプルのビルドに関して、PowerShellからcmakeでninja用のビルドスクリプトを作成するスクリプト(cmake_cafe_ninja.ps1, cmake_ctr_ninja.ps1)を追加しました。
  • 今回のリリースからVisual Studio 2012用にコンパイルしたライブラリがパッケージに含まれません。
  • nlib_pause()関数が新たに追加されました。
  • その他細かい変更と修正

2016-11-29

  • 次回以降のリリースで、Visual Studio 2012用にコンパイルしたライブラリはパッケージに含まれないようになります。
  • Fedora 25での動作確認を開始しました。これに伴いFedora 24での動作確認を終了しました。
  • NLIB_TLS_INVALIDマクロが新たに定義されました。
  • nlib_atomic_exchangeptr()関数が新たに追加されました。
  • SIGLO-41003: 大きなサイズのメモリを確保した後にヒープの状態をダンプするとクラッシュすることがある不具合を修正しました。
  • NXBTS-8006: msgpackライブラリでmsgpackの符号付き64bit整数値のパースを間違うことがある不具合を修正しました。
  • Windows用ライブラリのDllMainの実装の問題により、稀にクラッシュすることがある不具合を修正しました。
  • nlib_tryonce()がdeprecatedになりました。この関数は将来のリリースで削除されます。
  • Visual Studioでのコンパイルに/sdlオプションが設定されるようになりました。
  • その他細かい変更と修正

2016-10-25

2016-09-20

  • FreeBSD 11.0での動作確認を開始しました。これに伴いFreeBSD 10.3での動作確認を終了しました。
  • ossライブラリに収録されているSQLiteをバージョン3.14.1にアップデートしました。
  • nlib_bitreverse32()nlib_bitreverse64()が実装されました。
  • nlib_fd_open()O_EXCL(NLIB_FD_O_EXCL)の指定が可能になりました。
  • 既にファイルが存在する場合にはnlib_fd_create()が失敗するように変更しました。
  • nlib_strcplen2()nlib_strcplen()にリネームされました。nlib_strcplen2()は暫くのあいだマクロとして提供された後に削除されます。
  • nlib_popcnt()nlib_popcnt32()にリネームされました。nlib_popcnt()は暫くのあいだマクロとして提供された後に削除されます。
  • nlib_clz()nlib_clz32()にリネームされました。nlib_clz()は暫くのあいだマクロとして提供された後に削除されます。
  • nlib_ctz()nlib_ctz32()にリネームされました。nlib_ctz()は暫くのあいだマクロとして提供された後に削除されます。
  • deprecatedとなっていたファイルや関数を削除しました。
  • その他細かい変更と修正

2016-08-23

  • Bash on Ubuntu on Windowsでの動作確認を開始しました。コンパイル済みのライブラリはPC版のパッケージに含まれます。
  • heap::CentralHeap::FreeWithSize(), heap::CentralHeap::GetAllocSize(), heap::CentralHeap::Realloc()が追加されました。
  • nmalloc_query()のクエリにNMALLOC_QUERY_SET_COLOR, NMALLOC_QUERY_GET_COLOR, NMALLOC_QUERY_SET_NAME, NMALLOC_QUERY_GET_NAMEを追加しました。割り当てられた4096バイト以上の任意の領域に対して24bit整数値や文字列を関連付ける機能です。 利用方法はheapライブラリのobject_trackingサンプルを参考にしてください。
  • NMallocDumpModeNMALLOC_DUMP_PAGESUMMARYを追加しました。
  • TLSインデックスの割当に失敗した場合のnmalloc等の動作の不備を改善しました。
  • nmalloc_setmark1(), nmalloc_setmark2(), nmalloc_getmark(), nmalloc_getobjptr()がdeprecatedとなりました。将来のリリースで削除されます。
  • NMALLOC_HEAPOPTION_CHECK_0, NMALLOC_HEAPOPTION_CHECK_1がdeprecatedとなりました。将来のリリースで削除されます。
  • その他細かい変更と修正

2016-07-26

2016-06-29

2016-05-31

  • 次回リリースよりPC版で提供されるcygwin用のビルドは64bitとなり、ライブラリのディレクトリはlib/cmake/gccからlib/cmake/cygwinに変更されます。
  • nlib_remove(), nlib_thread_getname()が追加されました。
  • heapライブラリのheap::CentralHeap(nmalloc)の動作を改善しました。
    • 大きなサイズ(1MB以上)のメモリを割り当てた場合のフラグメンテーション問題を緩和しました。
    • 割り当てられるメモリアドレスの範囲が必要以上に大きくなっている問題を緩和しました。
  • その他細かい変更と修正

2016-04-26

  • Alpine Linux 3.3での動作確認を開始しました。
  • Ubuntu 16.04LTSでの動作確認を開始しました。これに伴いUbuntu 15.10での動作確認を終了しました。
  • Free BSD 10.3での動作確認を開始しました。これに伴いFree BSD 10.2での動作確認を終了しました。
  • heapライブラリのheap::CentralHeap(nmalloc)で比較的大きなサイズ(4KB以上)のメモリを割り当てた場合のフラグメンテーション問題を緩和しました。
    • 1MBytesまでの割り当てはフリーリスト内の区間にベストフィットするようにしました(従来は512KBytes)。
    • アライメントつき割り当ての場合にフラグメンテーションが発生しやすくなる問題を修正しました。
  • ossライブラリに収録されているSQLiteをバージョン3.12.2にアップデートしました。また、テンポラリファイルが削除されるようになりました。
  • CAFE版およびCTR版のnlib_fd_pwrite()およびnlib_fd_pread()において、ファイルサイズより大きいオフセットを指定した場合の動作を修正しました。
  • simd::I64がdeprecatedになりました。
  • Crc32クラスがdeprecatedになりました。nlib_crc32()またはnlib_crc32c()を利用してください。
  • その他細かい変更と修正

2016-03-29

2016-02-23

  • CAFE/CTR以外においてossライブラリがnmallocではなくnlib_mallocを利用するようになりました。
  • heapライブラリのnmalloc_query()の引数に、NMALLOC_QUERY_UNIFY_FREELISTを指定できるようになりました。
  • heapライブラリのCentralHeapが保持するヒープ内のメタデータの断片化を緩和しました。
  • simdライブラリにsimd::I128::PopCntMask8(), simd::I128::ClzMask8(), simd::I128::CtzMask8()を追加しました。
  • いくつかのヘッダファイルが抜け落ちていた問題を修正しました。
  • Windows版のDLLでnlib_malloc_size()が利用できない問題を修正しました。
  • その他細かい変更と修正

2016-01-26

  • CentOS 7.2での動作確認を開始しました。これに伴いCentOS 7.1での動作確認を終了しました。
  • Fedora 23での動作確認を開始しました。これに伴いFedora 22での動作確認を終了しました。
  • nlib_is_error()関数が追加されました。errno_tboolの戻り値に対して、エラー判定の記述を紛らわしくない形で行うことができます。
  • nlib_getenv()関数がCAFE及びCTRに対応しました。
  • 各クラスのIsOk(), IsError()関数がdeprecatedになりました。nlib_is_error()関数かoperator bool()関数を利用してください。
  • miscライブラリのUtf16InputStream, Utf32InputStream, WcharInputStream, Base64InputStream, Base64OutputStreamInit()メンバ関数が追加されました。
  • miscライブラリのTextReader, TextWriter, BinaryReader, BinaryWriterクラスの初期化がInit()Open()の2段階に分割されました。
  • exiライブラリ内のクラスのIsOk(), IsError(), Initialize(), GetErrorValue()メンバ関数がdeprecatedになりました。
  • heapライブラリ内のクラスのInitialize()メンバ関数がdeprecatedになりました。
  • msgpackライブラリのCsvReaderクラスの初期化がInit()Open()の2段階に分割されました。
  • nmalloc_aligned()で4096バイトより大きいアラインメントでメモリを割り当てると、クラッシュする場合がある不具合を修正しました。
  • nmalloc_query(NMALLOC_QUERY_MAX_ALLOCATABLE_SIZE, ...)が実際に割り当てられるサイズよりも大きいサイズを返す場合がある問題を修正しました。
  • simdライブラリのF128::StoreLoA4(), F128::StoreHiA4()がARM プロセッサ上での実行時にクラッシュする場合があるという問題を修正しました。
  • その他細かい変更と修正

2015-12-08

  • nlib用のNatvis視覚化ルールを作成しました。これによりVisual Studioのデバッガの表示が改善されます。utilitiesディレクトリ下のnlib.natvisファイルをプロジェクトに含めてください。それに伴い以下の視覚化サポート用のクラスも追加されます。
    • ErrnoTオブジェクトにerrno_tを代入すると、デバッガ上でエラー名を表示させることができます。
    • Utf8PtrオブジェクトにUTF-8文字列へのポインタを代入すると、デバッガ上でUTF-8文字列を確認することができます。Utf8Arrayはその配列版です。
  • miscライブラリにBase64Encoder, Base64Decoderクラスを追加しました。Base64の各種変形版のエンコード及びデコードを行うことができます。
  • msgpackライブラリにmsgpack::JsonStreamGeneratorクラスを追加しました。JSON又はmsgpackを同じコードで出力することができます。
  • msgpackライブラリのmsgpack::JsonWriter, msgpack::MpWriterクラスをdeprecatedにしました。msgpack::JsonStreamGeneratorを利用してください。
  • msgpackライブラリのmsgpack::JsonReader, msgpack::MpReaderクラスをdeprecatedにしました。msgpack::JsonStreamParserを利用してください。
  • msgpackライブラリのMpObjectがmsgpackの2013-08以降の仕様に対応しました。いくつかの関数が追加され、いくつかの関数がdeprecatedになりました。
  • CMake 3.4でビルドが失敗することがある問題を修正しました。
  • InputStream::Read(ptr, nbytes)がある程度大きなサイズのデータを読む場合に正しく読み込みバッファに書き込まないことがある問題を修正しました。
  • その他細かい変更と修正

2015-11-10

  • Visual Studio 2015用にコンパイルしたライブラリをパッケージに追加しました。
  • Visual Studio 2008, 2010用にコンパイルしたライブラリをパッケージから削除しました。
  • Ubuntu 15.10での動作確認を開始しました。これに伴いUbuntu 15.04での動作確認を終了しました。
  • miscライブラリにCurlInputStreamクラスを追加しました。libcurlを利用してダウンロードしたデータをストリームで扱うためのクラスです。
  • miscライブラリにKeyIdxSortN(), KeyIdxSort()を追加しました。オブジェクトから取り出した32bitのキーをソートすることでオブジェクトのソートをより高速に行うことができます。
  • heapライブラリにnmalloc_query()を追加しました。ヒープの各種状態の問い合わせや設定を行うことができます。同時にnmalloc_query()に代替されるいくつかの関数がdeprecatedになりました。
  • msgpackライブラリにmsgpack::JsonStreamParserクラスを追加しました。JSON又はmsgpackをプル形式でパースすることができます。
  • ossライブラリに収録されているSQLiteをバージョン3.9.0にアップデートしました。
  • InputStream, OutputStreamがクローズされる際にストリームのエラー状態をリセットするように変更しました。
  • その他細かい変更と修正

2015-10-13

  • miscライブラリにthreading::LockFreeThreadPoolクラスを追加しました。細粒度のタスクに向いたスレッドプールです。
  • miscライブラリにGroupVarInt32クラスを追加しました。32bit整数の高速なエンコードとデコードを実現します。
  • miscライブラリにnlib_malloc_size()を追加しました。
  • nmalloc()でアロケートされるメモリのアライメントを、std::max_align_tのアライメントに合わせるように変更しました。
  • その他細かい変更と修正

2015-09-08

  • FreeBSD 10.2での動作確認を開始しました。これに伴いFreeBSD 10.1での動作確認を終了しました。
  • miscライブラリにDynamicAlignedStorageクラスを追加しました。
  • miscライブラリにLockFreeUnitHeapクラスを追加しました。
  • miscライブラリにLockFreePipeクラスを追加しました。
  • miscライブラリにLockFreeStackクラスを追加しました。
  • miscライブラリにLockFreeQueueクラスを追加しました。
  • miscライブラリにLockFreeInit()関数を追加しました。
  • miscライブラリにLockFreePriorityQueueクラスを追加しました。
  • miscライブラリにLockFreeBroadcastQueueクラスを追加しました。
  • nmalloc_aligned()で4096より大きいアライメントを指定できるようになりました。
  • nmalloc(), nrealloc()で大きすぎるサイズを指定した場合にNULL以外を返すことがある問題を修正しました。
  • Crc32クラスの計算速度の改善を行いました。
  • 優先度つきのメッセージキューをロックフリーで利用した場合にデストラクタが適切に実行されないバグを修正しました。
  • deprecatedとなっていたファイルや関数を削除しました。
  • その他細かい変更と修正

2015-07-28

  • スレッド間でのオブジェクトの通信に対応した優先度つきのメッセージキューを追加しました。nlib_mq_open(), nlib_mq_send(), nlib_mq_receive()等の関数が追加されていて、ブロッキングキュー、ノンブロッキングキュー、ロックフリーキューに対応しています。
  • リードライトロック用の条件変数として、nlib_condrwlock型と関数群を追加しました。リードロック、ライトロックのどちらか一方をアンロックして待つことができます。C++用のクラスはnn::nlib::threading::CondVarForSharedCriticalSectionとなります。
  • 新たにnlib_atomic_compare_exchange32(), nlib_atomic_compare_exchange64(), nlib_atomic_compare_exchangeptr()等のアトミック操作関数を追加しました。メモリオーダーの指定に対応しています。
  • 今まで存在していた、nlib_atomic32_xxxxx(), nlib_atomic64_xxxxx()等のアトミック操作関数をdeprecatedとしました。
  • nlib_nsを名前空間nn::nlibのエイリアスとして定義しました。
  • その他細かい変更と修正

2015-06-26

  • Fedora 22に対応しました。gcc 5.1を用いたビルドに対応しています。
  • FreeBSD 10.1での動作確認を開始しました。これに伴いFreeBSD 10.0での動作確認を終了しました。
  • ossライブラリに含まれるLZ4をバージョン1.7.0にアップデートしました。
  • ossライブラリにnn::nlib::oss::Lz4InputStream及びnn::nlib::oss::Lz4OutputStreamを追加しました。
  • LZ4を利用したコマンドライン圧縮ツールlz4_nlibを追加しました。
  • miscライブラリにHandleMakerクラスを追加しました。ハンドル(32bit整数値)と何らかのオブジェクトの関連付けの実装をサポートするためのクラスです。
  • miscライブラリにnlib_spinlock_init(), nlib_spinlock_lock(), nlib_spinlock_trylock(), nlib_spinlock_unlock()関数を追加しました。
  • miscライブラリにnlib_thread_exit(), nlib_thread_exit_cpp()関数を追加しました。
  • miscライブラリにnlib_thread_attr_setstack(), nlib_thread_attr_getstack()関数を追加しました。それに伴い、NLIB_THREAD_ATTR_KEY_STACKADDRマクロは削除されています。
  • miscライブラリにnlib_error_string()関数を追加しました。
  • miscライブラリのthreading::ThreadSettingsクラスの仕様が変更になり、nlib_thread_attrをラップするようになりました。ソースコードレベルの互換性が失われるので関連するコードの修正が必要となります。
  • nmallocの動作を環境変数NLIB_NMALLOC_DISABLE_TLSCACHE, NLIB_NMALLOC_HEAPSIZE, NLIB_NMALLOC_MODEでカスタマイズできるようになりました。
  • nmalloc_aligned()が指定されたアライメントのメモリを割り当てないことがある問題を修正しました。
  • nmalloc_heaphash()のハッシュの品質を改善しました。
  • 2015-05-26版でtestingライブラリのサンプルがXMLをファイルに出力しなくなった問題を修正しました。
  • nlib_strerror()がdeprecatedとなりました。
  • threading::CondVar::Init()がdeprecatedとなりました。
  • 各プラットフォーム用コードにおける様々な改良及びバグ修正
  • その他細かい変更と修正

2015-05-26

2015-04-21

  • CentOS 7.1に対応しました。gccを用いたビルドに対応しています。
  • リファレンス・マニュアル(英語版)のレイアウトの改善を行いました。
  • その他細かい変更と修正

2015-03-31

  • リファレンス・マニュアルのレイアウトの改善を行いました。
  • Visual Studio 2012用の64bitスタティックライブラリをパッケージに追加しました。
  • Visual Studio 2012, 2013用の64bit DLLをパッケージに追加しました。
  • ossライブラリのライブラリファイルがOSS毎に分割されました。 スタティックライブラリではなく、DLLやシェアードライブラリではリンク時のデッドコードストリップという手段では該当OSSのバイナリを取り除くことができないことが理由となります。
  • デバッグビルドのライブラリファイルの基底名(basename)の末尾に'_d'がつくようになりました。意図しないDLLやシェアードライブラリをダイナミックリンクしてしまう間違いを避けるための措置です。
    • ただし、CAFE及びCTRのライブラリファイルは例外となります。
  • ライブラリのデバッグビルドとリリースビルドを同一のディレクトリに格納するように変更しました。デバッグビルドとリリースビルドのファイル名が同一ではなくなったからです。
    • ただし、CAFE及びCTRのライブラリファイルは例外となります。
  • Visual Studio用のビルドの場合、ライブラリファイルの基底名の後方にバージョンとビルド設定を表現する文字列が追加されます。それに伴い、バージョンとビルド設定ごとのディレクトリは作成されず、msvcというディレクトリに統一されます。
    • 例えば、Visual Studio 2013(32bit, static library)のライブラリファイルはnx_misc-vc120.lib, nx_misc-vc120_d.libのように命名されます。
  • RPATHを設定できる環境ではコマンドラインツールは相対パスによりシェアードライブラリを参照するようになりました。この変更によりLD_LIBRARY_PATHの設定が不要になります。
  • DateTimeクラスがasctime形式の読み書きに対応しました。
  • その他細かい変更と修正

2015-02-23

  • リファレンス・マニュアル(このドキュメント)に英語版が追加されました。
  • OS Xに対応しました。xcode(clang)を用いたビルドに対応しています。
  • PC版のパッケージにCAFE/CTR用にコンパイルされたライブラリが追加されました。
  • nlib_mlock(), nlib_munlock()を追加しました。
  • msgpack::MpObject がC++11標準ライブラリのarray, unordered_map, tupleの読み書きに対応しました。
  • NLIB_VIS_HIDDEN , NLIB_VIS_PUBLIC マクロを追加しました。
  • Visual Studio 2010以降のビルドにおいて、CRTをDLL版を利用するよう変更しました。
    • /MT, /MTd オプションがそれぞれ、 /MD, /MDd オプションに変更されました。
  • cygwin環境以外のgcc/clangでのライブラリのコンパイルに-fvisiblity=hidden, -fvisibility-inlines-hidden オプションを追加しました。 これによりライブラリが公開するシンボルの数が減少しています。
    • 一般にシェアードライブラリのロード時間を改善するとされています。
  • cmakeを利用する場合は、3.1.0以降のバージョンが必要となります。
  • nn::nlib::threading::CondVarFallbackがdeprecatedになりました。将来のリリースにおいて削除されます。
  • その他細かい変更と修正

2015-01-14

2014-12-10

  • FreeBSD 10.0(64bit)に対応しました。clang及びlibc++を用いたビルドに対応します。
  • nlib_clz(), nlib_clz64(), nlib_ctz(), nlib_ctz64() を追加しました。
  • nlib_popcnt(), nlib_popcnt64(), nlib_popcnt16() を追加しました。
  • nn::nlib::simd::I128::AlignR() を追加しました。
  • SSE4.1で記述されたコードの性能改善を行いました。
  • CAFE版の nlib_ticktime() の実装をOSGetTick()ではなくOSGetSystemTime()を利用するよう修正しました。
  • heapライブラリ(DLL/shared libraryの場合)の終了(アンロード)処理を改善しました。
  • その他細かい変更と修正

2014-11-18

  • testing ライブラリの改良を行いました。
    • --gtest_filter, --gtest_shuffle, --gtest_random_seed, --gtest_print_time オプションをサポートするようになりました。
    • --help オプションをサポートするようになりました。
  • heapライブラリにおいて、特定の状況でメタデータが破壊されることがあるバグを修正しました。
  • その他細かい変更と修正

2014-11-07

  • Readme-ja.htmlの追加
  • その他細かい変更と修正

2014-11-04

  • heapライブラリの性能を改善しました。
  • nmalloc_get_settings() を追加しました。
    • nmallocを利用の場合にg_NMallocSettingsを設定する代わりにnmalloc_get_settings()を利用してください。
  • nlib_gen_random() を追加しました。
  • nn::nlib::succinct::AhoCorasickBuilder の性能を改善しました。
  • nn::nlib::threading::ThreadPool の性能を改善しました。
  • ossライブラリに収録されているSQLiteをバージョン3.8.7にアップデートしました。
  • PC版の nrealloc() において物理メモリが適切に割り当てられないことがあるバグを修正しました。
  • SIMD最適化された nlib_strcplen_ex() でエラーが検出されないことがあるバグを修正しました。
  • その他細かい変更と修正

2014-10-01

  • CTR版の nlib_tls_alloc() でデストラクタ関数の指定が可能になりました。
    • 今回のリリースからCTR-SDK10.0以降が必要となります。
  • heapライブラリのサンプルにgameheapサンプルを追加しました。
    • オブジェクト毎、モジュール毎、スレッド毎に別個のメモリ空間にヒープを構築して利用するサンプルです。
    • 異なる複数のヒープを利用することにより、メモリ関連のバグのリスクを減らすことが可能かもしれません。
    • 各ヒープはスレッドセーフかつフラグメンテーションの発生を抑制して動作します。
    • ゲームプログラム用のヒープとして実装されがちなI/Fをheapライブラリのヒープを用いて実装しています。
  • heapライブラリのnmallocのスレッドキャッシュの領域がリークすることがあるバグを修正しました。
    • スレッド終了時にnlib_tls_getvalue()がNULLを返す環境においてこのバグは発生していました。
  • nmalloc_thread, nmalloc_realloc, nmalloc_malicious, speeddemoサンプルを削除し、各サンプルの内容をnmalloc_simpleサンプルに統合しました。
  • exiライブラリのテキストのXMLパーサー利用時に、テキストノードの文字列がアロケータの削除以前に無効となる動作を修正しました。
    • バイナリのXMLパーサーと同様にアロケータの削除時まで各テキストノードの文字列が有効となるよう修正。
  • exiライブラリのXmlStreamEventLogger を削除しました。
  • その他細かい変更と修正

2014-09-03

  • PC環境におけるマクロ定義のチェックの改善。独自のMakefileやプロジェクトファイルでコンパイルしたときのトラブルを軽減します。
    • Windows版において、コンパイル時に以下のマクロが設定されていない場合に警告メッセージを表示します。
      • WIN32_LEAN_AND_MEAN, NOMINMAX, _USE_MATH_DEFINES
    • Windows版/Cygwin版/Linux版において、コンパイル時に以下のマクロが設定されていない場合に警告メッセージを表示します。
      • __STDC_LIMIT_MACROS, __STDC_CONSTANT_MACROS, __STDC_FORMAT_MACROS
  • Windows環境において、nlib_sockのtypedefをSOCKET型からint型に変更しました。
  • simdライブラリのNEON用コードを実際のARMアーキテクチャ用クロスコンパイラ(gcc 4.9)でビルドできるようにしました。
    • 現在のところ動作テストにはIntel社より配布されているNEONvsSSE_6.hを用いています。
  • simdライブラリのコードにAArch64向けのコードを追加しました。
  • nlibのセットアップについての説明を改善しました。
  • FAQを追加しました。
  • nn::nlib::unicode名前空間内のいくつかの関数をdeprecatedにしました。将来のリリースで削除されます。
    • nn::nlib::unicode::ToUtf32(), nn::nlib::unicode::ToUtf16(), nn::nlib::unicode::ToUtf8()
    • nn::nlib::unicode::Utf32ToUtf8(), nn::nlib::unicode::Utf16ToUtf8(), nn::nlib::unicode::WideToUtf8()
    • nn::nlib::unicode::Utf8ToUtf32(), nn::nlib::unicode::Utf8ToUtf16(), nn::nlib::unicode::Utf8ToWide()
  • いくつかのヘッダファイルや関数等の削除
    • miscライブラリからnn/nlib/threading/SimpleRingBuffer.hを削除しました。
    • miscライブラリからnn/nlib/threading/Interlocked.hを削除しました。今後はnlib_atomic32_increment()等のCリンケージの関数を直接ご利用ください。
    • miscライブラリからnn/nlib/threading/CallOnce.hを削除しました。
      • nn::nlib::threading::CallOnce(), nn::nlib::threading::TryCallOnce()等を削除しました。今後は nlib_once(), nlib_tryonce()等のCリンケージの関数を直接ご利用ください。
    • NLIB_PRINTFマクロ, NLIB_VSNPRINTFマクロ, NLIB_VSNWPRINTFマクロを削除しました。
    • NLIB_ATTRIBUTE_ALIGNマクロを削除しました。今後はNLIB_ALIGNASマクロに統一されます。
    • nn::nlib::StrEqual(), nn::nlib::StrNEqual()を削除しました。strcmp(), nn::nlib::StrCmp()等を直接ご利用ください。
  • いくつかのサンプルの見直し
  • NLIB_MEMORY_ORDER_RELEASE, NLIB_MEMORY_ORDER_ACQUIRE, NLIB_MEMORY_ORDER_ACQ_REL の更新
    • C++11が利用できる場合、atomic_thread_fence()を利用します。
    • Win32版で_WriteBarrier()等の最適化バリアが追加されました。最適化による一部不具合を解消します。
    • CTR版では DataSynchronizationBarrier() と最適化バリアを組み合わせたものを実行します。
  • その他細かい変更と修正

2014-08-04

  • simdライブラリがCAFEのpaired singleに対応しました。単精度浮動小数点数を用いる計算にpaired singleが用いられるようになりました。
    • 4次元ベクトル等の128bitデータを値返しするI/FのためCAFE-SDKの行列計算等の関数より「かなり」遅いことに注意してください。
    • SSE4.1/NEONでは128bitデータはXMMレジスタ等の128bitレジスタに格納されて値返しされるため最適な方法となります。
  • simdライブラリにクラスと関数が追加されました。
    • Frustumクラスの追加。
    • Frustumとジオメトリの交差判定・包含判定の追加。
  • CTRでnlib_init_ctrsample()がRomFs用のバッファを動的に確保するように変更しました。
  • exiライブラリ(Text xml parser)のトークナイザがXML属性用に確保するバッファの初期サイズを調整しました。
  • Win32環境でUNICODE, _UNICODEマクロの定義を行わないように変更しました。nlibはこれらのマクロ定義の有無に依存しません。
  • Win32環境でWINVERマクロの値をチェックするように変更しました。
  • リファレンス・マニュアルにビルド環境等の構築の自動化手法についての紹介を追加しました。
    • Windows用のパッケージ管理ツール「chocolatey」についての説明を追加しました。chocolateyを用いることによってWindowsプログラム開発のためのビルド環境の整備をある程度自動化することができます。
    • cygwin用のパッケージ管理ツール「apt-cyg」についての説明を追加しました。apt-cygを用いることによってcygwinプログラム開発のためのビルド環境の整備をある程度自動化することができます。
  • Windows, cygwinでnlibを利用するための環境設定方法の説明を改善しました。
  • nlib_strcplen(), nlib_strcplen_ex()のSIMD命令を利用するバージョンで、文字列がページ境界(4096バイト境界)直前で終端する文字列の場合に正しく動作しないあるバグの修正。
  • その他細かい変更と修正

2014-07-07

  • simdライブラリにクラスと関数が追加されました。いずれもSSE4.1とNEON及び一般的なアーキテクチャに対応しています。
    • Sphere, AxisAlignedBox, OrientedBox クラスの追加。それぞれ球, AABB, OBBに対応します。
      • 球,AABB,OBBの3D変換
      • 点の集合を包含する球,AABBの作成
    • 距離計算関数のサポート
      • 点, 線, 半直線, 線分, 平面, 球, AABB間の距離の計算
    • 交差判定関数のサポート
      • 線, 半直線, 線分, 平面, 三角形, 球, AABB, OBB間の交差判定
    • 包含判定関数のサポート
      • 球, AABB, OBB, 点, 三角形の包含判定
    • その他関数の拡張や改良等
  • NLIB_ASSUME()(__assume()又は__builtin_unreachable()を利用)を利用したコードの最適化(主にswitch文)を行いました。
  • いくつかの関数引数に対して__restrictによる修飾を追加しました。
  • CAFE/CTRでsimdライブラリ内のいくつかの定数がリンクされない不具合の修正。
  • Vector3::Rotate(), Vector3::InvRotate()のバグを修正。
  • その他細かい変更と修正

2014-06-06

  • simdライブラリに関数が追加されました。いずれもSSE4.1とNEON及び一般的なアーキテクチャに対応しています。

    • 4x4行列のサポート
      • 行列の乗算,転置,逆行列,行列式,各種回転,透視投影行列,平行投影行列,射影行列,反射行列,視野変換行列,SRTへの分解
      • 4x4行列, 3x4行列, 4x3行列, 3x3行列形式のメモリ上のデータのロード・ストア
    • 3次元ベクトルのサポート
      • 比較,内積,外積,正規化,長さ,長さの逆数,角度,反射,行列による各種変換,クォータニオンによる回転
      • 3次元ベクトル形式のメモリ上のデータのロード・ストア
    • 4次元ベクトルのサポート
      • 比較,内積,正規化,長さ,長さの逆数,角度,反射,行列による各種変換
    • 平面のサポート
      • 各種内積,点と法線からの平面作成,3点からの平面作成,平面と線との交差,平面と平面の交差,正規化,行列による変換
    • クォータニオンのサポート
      • 共役,乗算,内積,球面線形補間,指数,対数,SQUAD,重心座標,各種回転,回転行列からの変換
    • 数値計算関数の追加
      • F128::Exp2(), F128::ExpE()の追加
      • F128::SinH(), F128::CosH(), F128::TanH()の追加
      • F128::Tan()の追加
      • F128::Log2(), F128::LogE()の追加
    • SIMDを利用した高速なマージソート(nn::nlib::simd::MergeSortUint32A16())が追加されました。
      • 最大でstd::sort()の10倍を超える性能(Visual Studio 2013のリリースビルドにおいて32要素のソートでの計測)
      • 要素は32bitの符号なし整数で、要素数は16の倍数である必要があります。
      • 何らかのオブジェクトの集合を高速にソートしたい場合、優先度とオブジェクトのIDを合成した32bit数の配列を用意してそれをソートするようにします。
    • リファレンス・マニュアルにユーザーによる独自サーチインデックス作成用のXML(searchdata.xml)を含めるようにしました。
      • 主に複数のマニュアルを検索できるサーチエンジンを構築するための生データです。
      • 詳しくはこちらを参考にしてください。
    • LibClangを利用したツールである、clang-formatclang-checkの利用に対応しました。詳しくは下記を御覧ください。
    • nlibのコーディングルールに関する記述をより明確にしました。
      • Google C++ Style Guide との差異を記述しました。
      • nlibのコーディングスタイルに対応するclang-formatでの変換設定が記述された .clang-formatを新たに収録しました。
      • cmakeを用いてMakefileを作成した場合、compile_commands.jsonというファイルが作成されるようになります。これを利用してclang-checkを利用することができます(http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html)。
    • Visual StudioのIDE上でユーザーコード上に記述されたnlibのAPIをマウスホバーすることにより、APIの簡単な説明を見られるようにしていきます。現時点では以下のAPIで可能です。
      • simdライブラリのAPI
    • Visual Studioでのコンパイルオプションに/Oiが追加されました。
    • その他細かい変更と修正

2014-05-09

  • SSE4.1及びNEONに対応した、整数と浮動小数点数のSIMD演算をサポートするsimdライブラリが追加されました。
    • nn::nlib::simd名前空間に実装されています。
    • 同じC++のコードを記述することでSSE4.1とNEONの両方に対応したプログラムの開発が可能です。
    • 一般にsimdを利用しないコードに比べて最大10倍程度、通常は2-3倍程度の性能改善を見込むことが可能です。
    • 浮動小数点数の演算に関してはSSE4.1及びNEONに対応していない環境でも利用可能です。
    • 今後のリリースで各種関数等が追加されます。
      • 3次元及び4次元の行列・ベクトル演算
      • 一般的なアルゴリズムをSIMD演算で高速化したもの
  • 各バージョンのVisual Studio向けのプログラムが、/bigobjオプションが追加されてビルドされるようになりました。
  • Windows版でNflags::GetStringCommaList()strList にローカルスタックへのポインタを格納するバグを修正しました。
  • 2014-03-24 のリリースにおいてdeprecationされたAsciiReader, AsciiWriterが削除されました。
  • その他細かい変更と修正

2014-04-07

  • PC版に64 bitバージョンのライブラリが追加されました。
    • Visual Studio 2013でコンパイルされたものが収録されています。
  • NativePathMapperクラスを追加しました。
    • URIで記述したパス文字列をネイティブのパス文字列に変換するためのクラスです。このクラスを利用することにより、パス文字列等を機種依存の文字列で記述せず、全機種共通のURIで記述することができるようになります。
  • Windows版(Visual Studio版)で標準出力をリダイレクトした場合に、nlib_printf()等がリダイレクト先に出力をしないバグの修正。
  • Cygwin版のtestingライブラリで出力をリダイレクトした場合に、コントロール文字列が出力される不具合の修正。
  • CAFE/CTR版のtestingライブラリのサンプルがテスト結果のファイル出力を失敗する不具合の修正。
    • NativePathMapperを利用してパス文字列をプラットフォーム毎に適切に設定するように改良。
  • ossライブラリに収録されているSQLite3をバージョン3.8.4.3に更新しました。
  • stringutilsサンプルコードにおいてヌル文字を末尾に追加していなかったバグの修正。
  • その他細かい変更と修正

2014-03-24

  • nlib_utf16cplen_ex()を追加しました。
  • nlib_skipws()を追加しました。
  • 各種関数のSIMDを利用した最適化
  • nlib_swapendian_16(), nlib_swapendian_32(), nlib_swapendian_64()を追加しました。
  • テキストXMLパーサーの高速化
    • Base64等の長いテキストデータが含まれるXMLのパース速度改善
    • 属性値のパース速度改善
    • メモリ消費量が若干量増加していることに注意してください。
  • nn::nlib::msgpack::JsonReaderクラスの高速化
    • パーサー内部の文字列走査アルゴリズムをSIMD命令と相性のよいものに変更しました。
    • その他の改善も含まれます。
  • nn::nlib::msgpack::MpObjectクラスの処理速度改善を行いました。
    • 文字列のボックス化処理の速度改善。
  • BinaryReader, BinaryWriterクラスの処理速度改善を行いました。
  • nn::nlib::msgpack::MpWriterクラスの処理速度改善を行いました。
  • PC版の実行にSSE4.1が必須となりました。
    • SIMDコードのNEONへの将来的な移植性を改善するため。
  • TextReader::ReadUntil()の引数仕様を変更
    • 仕様に不備が存在したため。
  • TextReaderクラスが継承可能になりました。
    • バッファへの読み込みのタイミングでエラーチェック等の処理を追加することが可能になりました。
  • ヘッダnn/nlib/utility.h, nn/nlib/time.h, nn/nlib/uriparser.hが削除されました。
  • AsciiReader, AsciiWriter クラスがdeprecatedになりました。次回リリース以降のいつかの時点で削除されます。
    • TextReader, TextWriterクラスの処理速度改善と高機能化により、ASCII文字列専用のクラスが存在する必要がなくなったと判断しました。
  • その他細かい変更と修正

2014-02-12

2014-01-20

  • CAFE/CTRにおいてもcmake(cygwinのもの)を利用したサンプルのビルドが可能になりました。
    • ライブラリだけではなく、ビルドのためのシステムもクロスプラットフォーム化された形になります。
    • samples/cmake/ディレクトリ内のシェルスクリプトから起動できます。
  • C++03ベースでのムーブセマンティクスへの対応しました。
    • 一部のクラスや関数で末尾の引数にnn::nlib::move_tag()を与えると、引数オブジェクトがムーブ(オブジェクトのswapメンバ関数を利用)されるようになります。
  • Threadクラスの引数受け渡し方法の改善しました。
    • 末尾にnn::nlib::move_tag()を引数として渡すことで、引数オブジェクトがムーブされるようになります。
    • Thread::StartRef()関数が削除されています。
  • Platform APIに関数を追加しました。
  • nn::nlib::msgpack::JsonWriterの速度を改善しました。
  • CAFE版のnlib_memcpy(), nlib_memmove()においてSDKが提供する高速版を利用するよう修正しました。
  • nlib_strlen(), nlib_wcslen()を追加しました。プラットフォームによっては標準のものより高速になることがあります。
  • cygwin版のnmallocの動作速度がmallocに比べて遅い問題の修正
  • cygwin版のPlatform APIの実装の改良
  • BinaryReaderで浮動小数を読もうとした場合のバグの修正
  • heapライブラリ内のdeprecatedされたクラスやファイルの削除やクラスの整理
    • HeapBase, FixedMemoryHeap, FixedMemoryHeapSetが削除されました。
    • UnitHeap, FrameHeapはシングルスレッド専用に変更されました。
  • リファレンスドキュメントの導線、項目の分類等の改善
  • その他細かい変更と修正

2013-12-16

  • heapライブラリの改良
    • CentralHeapでdouble freeの検出を行う仕組みを実装しました。また、メタデータ内のポインタの書き換えや不正書き換えが難しくなるようにしました。
    • CachedHeap内にキャッシュされている再割当て用メモリのリストを構成するポインタをマングルしてメモリの意図しない書き換えや不正書き換えが難しくなるようにしました。
    • nfree()後のメモリ書き換えによるCentralHeap内部への影響を軽減する仕組みを実装しました。
    • 大きなサイズのメモリをメモリの後部、小さなサイズのメモリをメモリの前部から切り出すようにしました。フラグメンテーションがより発生しにくくなることが期待されます。
    • NMALLOC_HEAPOPTION_CHECK_1オプションを利用してCentralHeap/CachedHeapを立ち上げることによって、アロケートしたメモリに16bitの付加情報を2つ記述することが可能になりました。
      • 応用例として、heapライブラリのobject_trackingサンプルではメモリリークしたオブジェクトに対し、オブジェクトの型に対応したデストラクタを呼び出しメモリを解放するコードを示しています。
    • speeddemoサンプルを追加しました。
      • nmalloc()の速度と速度面の理由でカスタムアロケータを利用すべきケースが理解できるようになっています。
    • HeapBase::HEAPOPTION_ZEROCLEAR, HeapBase::DUBUGFILLの機能は、CentralHeap, CachedHeapからは削除されています。
  • nn::nlib::msgpack::JsonReaderの速度を改善しました。
  • nn::nlib::oss::BsDiffZ(), nn::nlib::oss::BsPatchZ()関数を利用した場合のみ、bsdiffを利用しているという識別子がCAFE/CTRの実行バイナリに含まれるように修正しました。
  • nlib_debug_backtrace(), nlib_debug_backtrace_gettext()関数を追加しました。
  • nlib_getenv()関数を追加しました。
  • Win32版のnlib_mutexの実装を改善しました。CRITICAL_SECTIONを利用できる場合には利用するようになります。
    • これによりWin32版のnmallocのパフォーマンスが(特にシングルスレッド環境において)改善
  • グローバル名前空間にUTF-16/UTF-32関連の関数が定義されました。Platform.hを参照してください。
  • SizedEnum1, SizedEnum2, SizedEnum4がdeprecated指定されました。次回リリース以降のいつかの時点で削除されます。
    • C++11の強い型つけのenum型を利用するべきですし、C++03でもこれらを利用するメリットはあまりありません。
  • nn::nlib::heap::FixedMemoryHeapSetがdeprecated指定されました。次回リリース以降のいつかの時点で削除されます。
  • HeapBase::AllocV(), HeapBase::FreeV(), HeapBase::HasPtr()がdeprecated指定されました。次回リリース以降のいつかの時点で削除されます。
    • 将来的に、heapライブラリに定義されているStackHeap, FrameHeap, UnitHeap, CentralHeapnn::nlib::heap::HeapBaseクラスやFixedMemoryHeapクラスを継承しないクラスとなります。
    • nn::nlib::heap::FixedMemoryHeapクラスは将来的に削除される予定です。
    • nn::nlib::heap::UnitHeap, nn::nlib::heap::FrameHeapはマルチスレッド対応版が削除され、クラステンプレートでないシングルスレッド専用版が代わりに提供される予定です。スレッドセーフなUnitHeap, FrameHeapを利用するより、nmalloc()CachedHeap/CentralHeapを利用した方が汎用的で効率もよいことが多いためです。
  • ヘッダnn/nlib/utility.h, nn/nlib/time.h, nn/nlib/uriparser.hがdeprecated設定されました。次回リリース以降のいつかの時点で削除されます。
  • Win32/cygwin/LinuxでのビルドにおいてSSE2コード生成が有効に設定されました。
  • __builtin_expectが利用可能なコンパイラにおいてコンパイラの分岐予測に対する最適化を追加しました。
  • nlib Platform APIの関数に対して、コンパイル時の不正なNULL引数や戻り値の未チェックに対する警告を行うように設定しました。
  • その他細かい変更と修正

2013-11-18

  • ossライブラリを追加しました。カテゴリIなので利用の際には必要な手続きにご注意ください。
  • nlib内部のメモリアロケーションを、nlib_malloc(), nlib_free()等の関数経由にして、メモリアロケーションの処理を切り替えることを可能にしました。
    • 具体的な方法はheapライブラリのreplace_mallocサンプルを御覧ください。
    • デフォルトではnlib_malloc()malloc()nlib_free()free()等になります。
    • cygwin版では切り替えることができません。ELFではないためweak symbolを使えないからです。
  • 新たにVisual Studio 2013でコンパイルされたバイナリを収録しました。
  • ビルドを行うLinuxをUbuntu 13.10に変更しました。
  • cygwin版のビルドを行うgccをgcc 4.8.2に変更しました。
  • UniquePtrのデリーターオブジェクトがデータメンバを持つことが可能になりました。
  • ReallocVecが内部で利用するアロケータ(reallocと同様の関数)を指定できるようになりました。
  • ReallocOutputStreamが内部で利用するアロケータ(reallocと同様の関数)を指定できるようになりました。
  • ZlibInputStream/ZlibOutputStreamが内部で利用するアロケータ(reallocと同様の関数)を指定できるようになりました。
  • heapライブラリにnn::nlib::heap::nmalloc_size()を実装しました。
  • nlib_thread_setaffinity()関数を追加しました。
  • nlib_thread_setname()関数を追加しました。
  • nrealloc()で、物理ページを割り当てないことがある不具合の修正を行いました。
  • Platform.h及びNMalloc.hがCコンパイラではコンパイルできない不具合の修正を行いました。
  • その他細かい変更と修正

2013-10-16

  • 新たにVisual Studio 2013RCでコンパイルされたバイナリを収録しました。
  • ファイル操作関連の関数を追加しました。
  • testingライブラリのコマンドライン引数に、--ntest_prefixが追加されました。
  • uriサンプルにnn::nlib::UriTemplateクラスを使うサンプルコードが追加されました。UriTemplateクラスを利用するとURI Template(RFC6570)を利用することができます。
  • コンソールへの低レベル出力関数であるnlib_write_stdout(), nlib_write_stderr()が追加されました。
  • vsnprintf()をより安全に扱うための関数である、nlib_vsnprintf()が追加されました。
  • strcpy_s()等に相当するnlib_strcpy()等の関数が追加されました。
  • nlib_debug_break()関数が追加されました。
  • msgpackライブラリ内のグローバルのSimpleCriticalSectionのコンストラクタが不正なタイミングで初期化されてしまうかもしれない問題を修正しました。
  • クラス型のスタティック変数やグローバル変数を除去しました(testingライブラリ以外)。
  • C++11でスレッドを起動する際、引数の値が適切にmoveされていない問題を修正しました。
  • その他細かい変更と修正

2013-09-12

  • 社内への公開を開始。
  • PC版において、Boostをリンクすることなしに利用が可能になりました。
  • CAFE版において、nn::nlib::g_FSClientが削除されました。ファイルI/Oを初めて利用する際に内部でクライアントが作成されるようになります。
  • CAFE版において、利用されるミューテックスがOSMutexからOSFastMutexに、条件変数がOSCondからOSFastCondに変更されました。
  • socketライブラリが削除されました。socketに関しては、Win32/Linux/Cygwinにおいてwinsock2又はbsd socketをラップしたものがPlatform.hに定義されます。
  • Win32版のNLIB_PRINTFが内部でUTF-8をSJISに変換してから表示するように変更されました。
  • datetimeサンプルが追加されました。nn::nlib::DateTimeクラスの豊富な機能が例示されています。
  • stringutilsサンプルが追加されました。nn::nlib::StringViewやユニコード文字列の正規化機能の利用方法が示されています。
  • nflagsサンプルが追加されました。nn::nlib::Nflagsを利用することによってコマンドラインツールのオプション文字列の処理を簡単に行うことができます。
  • その他細かい変更と修正

2013-09-03

  • PC版のsocketライブラリ以外のライブラリはBoostを利用せずに利用が可能になった。
  • スレッド, ミューテックス, セマフォ, TLS, 条件変数, アトミック変数をCベースのAPIを定義して、C++のコードはそれを利用するようにした。
    • Platform.hに定義されている。
    • ミューテックスと条件変数は静的初期化(遅延初期化)をサポートした。
  • nn::nlib::unicode::Utf8ToUtf32(), nn::nlib::unicode::Utf8ToUtf16() の動作速度を改善した。
    • 内部でTextReaderを利用していた実装を見なおして直接変換するようにした。
  • nn::nlib::unicode::Utf16ToUtf8(), nn::nlib::unicode::Utf32ToUtf8() の動作速度を改善した。
    • 内部でTextWriterを利用していた実装を見なおして直接変換するようにした。
  • 2013-08-01, 2013-08-07版にて、改行にCRLFを含むXMLでパースが正常に行われないことがある不具合の修正
  • deprecatedだったThreadArg1, ThreadArg2, ThreadArg3, ThreadArg4, ThreadArg5を削除
  • その他細かい変更と修正

2013-08-07

  • CAFE(PPC)版のXMLパーサーのプログラミングI/Fをcharからwchar_tに戻した。

2013-08-01

  • exiライブラリの改良とバグフィックス
    • XML読み込みの一部高速化
    • ExiCharchar型の場合、要素名がアスキー文字のみでない場合にパースが間違って失敗するかもしれないバグの修正
    • メモリが不足してエラーになった場合に、適切にエラーを返せないことがあるバグの修正
      • メモリが不足しているケースで、空のNlistbegin()end()が一致しないことがあるバグの修正
  • その他細かい変更と修正

2013-07-24

  • exiライブラリの改良
    • XmlStreamReader/XmlStreamWriterの各インスタンス毎にアロケータを設定することが可能になった。
      • ExiAllocatorExオブジェクトを作成し、XmlStreamReader/XmlStreawmWriterCreate()関数に渡すことでインスタンス専用のアロケータが利用されるようになります。今までのアロケータとの併用も可能です。
  • heapライブラリ(nmalloc, nfree等)の改良

    • weakシンボルをサポートする環境では、デフォルトのmalloc/freeを簡単に置き換えることができるようになった。
      • ユーザープログラムの.cppファイルのどれか1つで NLIB_USE_NMALLOC_AS_MALLOCマクロを記述することで、malloc等の実装をnmallocのものに置き換えることが可能(MSVC以外)
    • 仮想メモリをサポートする環境において、VirtualAlloc, mmap等を用いたメモリ確保を実装。
      • Windows, Linuxでのサポート。
      • CAFE(PPC)においては、仮想メモリの代わりにデフォルトヒープが利用されている。
      • CTRにおいては、仮想メモリの代わりにnn::os::MemoryBlockが利用されている。
    • LinuxではLD_PRELOAD環境変数を設定して、既存のプログラムのmallocを動的にnmallocの呼び出しに置き換えてnmallocの信頼性と性能に関するテストを行なっている。
      • cmake, clang, gcc, make等の内部で実行されるmallocをnmallocで置き換えてnlibをビルド
      • avconvでの動画の変換
      • その他各種UNIXコマンドやmalloc用ベンチマークプログラムの実行
    • その他細かい変更と修正

2013-07-05

  • heapライブラリのnmalloc/nfreeの改善
    • プログラム開始時のnmalloc_initの呼び出しが不要になった。
    • プログラム終了時のnmalloc_finalizeの呼び出しが不要になった。
    • nmalloc_finalize_tls()の呼び出しが、win32, linux, CAFE(PPC)においては不要になった(呼び出しても問題ない)。
  • スレッドプールを実装した。
  • 非同期ファイルI/Oを扱うためのクラスを実装した。
    • nn::nlib::threading::AsyncFileIo. 内部実装で非同期I/Oを利用しているかしていないかに関わらず同じAPIを提供している。
    • Windows, Linux, CafeではそれぞれOSが提供する非同期I/Oを使用して実装されている。
    • それ以外では裏スレッドで同期ファイルI/Oを発行しユーザースレッドからは非同期に見えるように実装されている。
  • PC版のMSVC11用のライブラリにおいてboostが必須ではなくなるように変更
    • MSVC11においてはsocketライブラリ以外はboostがなくても動作するようになった。
  • succinctライブラリからstd::vector, std::stringの使用を取り除いた。
  • StringViewの実装。
  • ReallocVec, ReallocQueue, ReallocCstringVecを実装
    • realloc(又は同様の関数)でメモリ確保を行う、POD専用のベクタやキュー
  • Nqueueを実装。内部でNlistを利用している。
  • C++11のムーブコンストラクタの部分的なサポート
  • CAFE(PPC)版のXMLパーサーのプログラミングI/Fをwchar_tからcharに変更した。
  • ScopedPtr, ScopedArrayを削除した。
  • CAFE(PPC)版からsocketライブラリを削除した。
  • cygwinでのビルドをgcc4.5.3からgcc4.7.3に変更した。
  • その他細かい変更と修正

2013-06-03

  • __STDC_LIMIT_MACROS, __STDC_CONSTANT_MACROS, __STDC_FORMAT_MACROSが定義されていない場合、Config.hで定義されるようになった。
    • INT32_MAX, PRIu64等の定義を標準ヘッダstdint.h内の定義を使うようになった。
    • makefile内のコンパイルスイッチで上記のマクロを事前に定義しておくのが望ましい。
  • PC版において、MSVC10, MSVC11用にコンパイルされたライブラリを新たに提供するようになった。
    • 現在のところExpress版でコンパイルされている。
  • リーダーライターロックを実装した。クラス名はnn::nlib::threading::SharedMutex
  • 条件変数のフォールバック実装を追加した。
    • nn::nlib::threading::CondVarFallbackクラス
    • Alexander Terekhovのアルゴリズムを実装。Semaphoreを2つとSimpleCriticalSectionを1つ使う。
    • 条件変数を持たない環境ではnn::nlib::threading::CondVarの実装として使われる。
  • 再入ロックのフォールバック実装を追加した。
  • nn::nlib::threading::TimedCriticalSectionを実装し、nn::nlib::threading::Mutexを削除した。
    • タイムアウト付き再入ロックを持たない環境では、nn::nlib::threading::TimedCriticalSectionFallbackが利用される。
  • nn::nlib::threading::Futureに対する機能強化。詳しくは、http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3558.pdf を参照のこと。
    • Then()メンバ関数を追加した。これは複数の非同期実行を順番に連結していく仕組みで、別スレッドでの実行から複数の戻り値を取り出すのに使うことができる。
    • WhenFutureCompleteクラスを追加した。これは複数のFutureの全て又は一部に値が設定された場合に設定されるFutureを作成するためのクラスで、複数の非同期処理を束ねる用途に使うことができる。
    • GetError() 関数でエラー状態を取得できるようになり、非同期処理が明示的にエラー状態を返すことができるようになった。
    • MakeReadyFuture() 関数を追加した。
  • nn::nlib::threading::Threadから関数オブジェクトやラムダなどの関数ポインタ以外でスレッドを起動できるように変更した。
    • ラムダを使う場合はC++コンパイラがラムダをサポートしている必要がある。
  • nn::nlib::threading::ThreadArg<T1...>を新設して、ThreadArg1, ThreadArg2, ThreadArg3, ThreadArg4, ThreadArg5をdeprecatedにした。近い将来のリリースで削除される予定。
  • cmake 2.8.11でのboostライブラリ認識に対応するためのcmakeスクリプトの修正
  • その他細かい変更と修正

2013-04-30

  • msgpackライブラリにJSON-RPC 2.0のサポート(client/server)を追加
  • ソケットのラッパライブラリの追加
    • PC及びCAFE版のみ
    • TCPのみ
  • AsciiReader, AsciiWriterを実装。ASCIIテキストの場合は、TextReader, TextWriterを利用するよりも効率よく動作させることができる。
  • ThreadSettingsdetachedフィールドを追加した。trueの場合、スレッドの開始時にデタッチされた状態になる。
    • IOP環境において、スレッド立ち上げ時のみ可能なデタッチを実装。
    • IOP環境におけるnn::nlib::threading::Asyncの動作を改善。
  • testingライブラリの改善
    • --gtest_repeatコマンドラインオプションの追加
    • --gtest_break_on_failureの動作タイミングの改善
  • XMLパーサーがある特定の場所でメモリ不足になった場合に、エラーを返さずクラッシュする問題の修正
  • ThreadSettingsを設定した場合の誤動作の修正。
  • StringOutputStream, VectorOutputStreamが削除された。
  • ScopedPtr, ScopedArrayをdeprecatedにした。近い将来のリリースで削除される予定。
  • IOP環境で利用されるsysPrintfsysPrintfNoTimeStampに変更
  • nn::nlib::CodePointCount() 関数の追加
  • その他細かい変更と修正

2013-03-15

  • nullptrの衝突問題への対処。nullptrの定義をnn::nlib名前空間に移し、nullptrがマクロ定義されている場合はマクロ定義を利用するようにする。

2013-03-14

  • future機能に関するサンプルを追加
  • MpObjectの利用時に14バイト以下のバイト列(文字列)はオブジェクト内のフィールドに畳み込まれるように変更(以前は8バイト以下)
  • StrTo()関数のフォールバック実装である StrToFallback()を追加した。
    • 内部でstrtol等を利用しない実装
  • SnPrintf()関数のフォールバック実装である SnPrintfFallback()を追加した。
    • 内部でvsnprintf, vsnwprintf等を利用しない実装
  • IOP環境で nn::nlib::threading::this_thread::Sleep()が動作するようにした。
  • IOP環境で nn::nlib::threading::Semaphore の定義をIOPのシステムソフトウェアに合わせてアップデートした。
  • IOP環境でBarrierが動作するように変更。
  • IOP環境でのStrTo()関数の動作を改善。浮動小数点型も含め利用可能になった。
  • IOP環境でのSnPrintf()関数の動作を改善
  • IOP環境でワイド文字のSnPrintf()関数が利用できるように変更
  • IOP環境で nn::nlib::DateTime::GetNow()の実装を行った。
  • IOP環境で new T[0]が必ず失敗することに起因する不具合の修正。succinctライブラリに影響。
  • マクロ, NLIB_HAS_SSCANF, NLIB_SSCANFを削除
  • マクロ, NLIB_HAS_VSNWPRINTFを削除
  • その他細かい変更と修正

2013-02-22

  • nn::nlib::threading::Future, nn::nlib::threading::Promise, nn::nlib::threading::PackagedTask, nn::nlib::threading::Asyncが追加された。それぞれ、C++11標準ライブラリの、future, promise, packaged_task, asyncに類似した機能を持っていて、スレッドの実行結果を安全に出力及び取得できるようにしている。
  • nn::nlib::threading::Thread::Start()関数のオーバーロードを追加した。
  • JSONのパース失敗時に、途中までのパース結果をMpObjectに格納しておくように変更。
  • msgpackのパース失敗時に、途中までのパース結果をMpObjectに格納しておくように変更。
  • nn::nlib::DateTime::ToRfc2822()で2000年1月1日以前の曜日を正しく出力できないバグの修正
  • nn::nlib::DateTime::ToW3cDtf()の文字列変換のバグを修正
  • nn::nlib::Nlistiterator, const_iteratorの実装の改善
  • Cafeにおいて nn::nlib::DateTime::GetNow()が正しく動作しないバグの修正。
  • Cafeにおいて、nn::nlib::threading::Threadにおいて、デタッチ後かつスレッド終了前にデストラクタが呼ばれた場合、不正に(早期に)メモリがシステムに返却されていたバグを修正。
  • MpObjectに8バイト以内の小さなバイトデータ(文字列等)を代入する場合に、MpObjectに既にデータが入っているケースにおいてメモリリークの恐れがあるバグの修正。
  • その他細かい変更と修正

2013-02-04

  • ReallocOutputStreamが実装された。
    • 例外が無効な環境においても可変長バイト列を安全に(メモリが足りない場合にエラーを返せるという意味で)作成することができる。
  • VectorOutputStream, StringOutputStreamをdeprecatedにした。利用した場合は警告が発生する。
    • 例外が無効な環境において問題があるため。
  • nn::nlib::threading::UniqueLockが新たに実装され、nn::nlib::threading::ScopedLockはごく単純な実装に変更された。
  • UniquePtrが配列データ(new[]で作成されたオブジェクト)に対応した。例えば、UniquePtr<char[]> ptr(new char[1024])のようにして利用することができる。
    • UniquePtrScopedPtrの機能を全て含むので、ScopedPtrは将来においてdeprecatedになるかもしれない。
  • バイナリXMLの書き込み時にXmlStreamWriterのクローズの際にベースストリームを一緒に閉じてしまう動作の修正(nn::nlib::exi::XmlStreamWriterはベースストリームを所有していないので、ベースストリームはXmlStreamWriterから切り離されるだけである必要がある)
  • nn::nlib::msgpack::MpWriterのクローズの際にベースストリームを一緒に閉じてしまう動作の修正
  • ストリームを閉じてからストリームのデータを取得しようとするコードの動作が変更された。
    • 例えばストリームを閉じてからPos()を実行すると0が戻るように変更された。
  • ScopedLock, SimpleCriticalSection, CriticalSectionのメンバ関数名等が一部変更された。
    • C++11環境への移行をスムーズにするため
  • 以下の型はC++11環境ではC++11標準ライブラリの型と同一(typedef又はtemplate aliasで定義)になるよう変更
  • 以下の型はC++11標準ライブラリの型を継承している。
    • nn::nlib::threading::Mutexstd::recursive_timed_mutex
  • Nlistの例外安全性の改善
  • その他細かい変更と修正

2013-01-11

  • メモリに読み込まれたMessagePackデータに高速アクセスすることができる nn::nlib::msgpack::MpWalkerクラスを実装した。
  • nn::nlib::msgpack::JsonReader / nn::nlib::msgpack::JsonWriterに読み書きオプションを追加
  • nn::nlib::msgpack::MpObject, nn::nlib::msgpack::MpReader, nn::nlib::msgpack::MpWriternn::nlib::Nlistコンテナとしてサポート
  • リファレンス・マニュアルのディレクトリをdocuments-ja/API/に変更
  • C++11への対応。C++11の以下のフィーチャーについて、コンパイラが対応している場合は利用するようにした。
    • Null pointer constant
    • Static assertions
    • Defaulted and deleted functions
    • New character types(char16_t, char32_t)
    • Explicit conversion operators
    • Explicit virtual overrides
    • Template aliases
    • Extern templates
  • clang++でのビルドに対応。
  • strcpy(), memcpy(), strcat(), isdigit()等の標準関数をより安全に使うためのラッパー関数をCstring.hに定義
  • その他細かい変更と修正

2012-12-07

  • 内部でout of memoryに遭遇してもクラッシュしない、コピーコンストラクタを持たないクラスでも格納できる、std::vector<T>に似たコンテナクラス(nn::nlib::Nlist<T>)を実装した。
    • 内部でオブジェクトの再配置を行わない
    • オブジェクトのコピーコンストラクタをコンテナ内部で利用しないので、コピーコンストラクタを持たないクラスを要素として格納可能
    • out of memoryの場合でも内部では失敗(ヌルポインタ参照等)せずにエラーを返す
    • 単純なアロケータを用いた場合でもメモリ効率がよい(オブジェクトの追加の際に再配置が不要なため)
    • push_back()操作に関してはstd::vector並かそれ以上(インプレイスでの初期化が可能なため)の速度
    • Forward Iteratorをサポート
    • 前向きのシーケンシャルアクセスの場合はiteratorを利用する場合はstd::vector並のアクセス速度
    • operator[](size_t idx)は、 \(O(\log idx)\)時間で動作
  • Binary XML Parser, Text XML Parserの改善
    • XMLのパース時やXML作成時に内部で利用しているコンテナの効率を改善
    • 内部文字列型をwchar_t(UTF-16/UTF-32)又はchar(UTF-8)で選択可能にした。
      • 今まではwchar_tのみだった。
      • 内部文字列型はExiCharという型にtypedefされている。
      • 内部文字列型はnlibのビルド時に選択可能
  • msgpack::JsonReaderの改善
    • JSONの配列や連想配列の読み込み時に内部で利用しているコンテナの動作効率を改善
    • double型のオーバーフローとアンダーフローがエラーになるように変更
  • msgpack::CsvReaderの改善
    • double型のオーバーフローとアンダーフローがエラーになるように変更
  • STR37-C(https://www.jpcert.or.jp/sc-rules/c-str37-c.html)への対処。以下の部分のコードが修正された。
  • INT01-C(https://www.jpcert.or.jp/sc-rules/c-int01-c.html)への部分的な対処。以下の部分のコードが引数として受け取るsize_t型の値をチェックするように変更。
  • その他細かい変更・修正
    • 各種エラーチェックの抜けの修正等

2012-10-31

  • 分散定義型コマンドラインパーサーnn::nlib::Nflagsを実装した。
    • 各cppファイルにコマンドラインオプションの定義を分散して記述可能で、main関数の記述を変更することなく、コマンドラインオプションの追加が可能。
    • コマンドラインツールac, nexiconvのコマンドラインオプションの仕様を変更。
    • コマンドラインツールwfを追加。検出語と検出除外語のリストからnn::nlib::succinct::WordFilterオブジェクトのバイナリを作成。
    • コマンドラインツールacmatchを削除。
  • UriTemplateの実装。RFC6570(https://tools.ietf.org/html/rfc6570)のLevel3をサポート。
  • InputConverterStream, OutputConverterStreamの実装
    • 内部でデータ変換を行うストリームがこれらのクラスを継承するようになった。
  • Utf32InputStream, Utf16InputStream, WcharInputStreamの実装
    • ワイド文字列のデータをUTF-8に変換するストリーム
  • InputStream, OutputStreamの内部を最適化等
  • TextReaderから現在読み込んでいる行と桁を取得できるように変更。
  • テキストXMLパーサーを利用した場合のメモリ利用効率の改善。
    • 大きなテキストノード等を読み込んだ場合のメモリ割り当ての改善。
  • C標準関数strtol(), strtoul(), strtoll(), strtoull(), strtod()を統一的なコードで安全に利用するためのラッパである、 StrTo()関数の実装
  • その他細かい変更・修正

2012-10-05

  • DateTime, TimeSpanを再実装して置き換えた。
    • 西暦1年1月1日から西暦9999年12月31日までをサポートできるようになった。
    • W3C-DTF, RFC2822の日付形式の文字列をパースして、DateTimeを設定できるようになった。
    • DateTimeからW3C-DTF, RFC2822の日付形式の文字列を生成できるようになった。
    • その他月の加算等の機能が追加された。
  • Base64文字列を読み書きできるストリームを追加した。
  • StringInputStreamの実装。std::stringに出力するストリームクラス。
  • サンプルのディレクトリ構成を改善。
  • 本リファレンスのHTMLヘルプ(nlib.chm)バージョンを追加。
  • その他細かい変更・修正

2012-09-07

  • unicode名前空間を新たに作成し、ユニコード関連の機能を追加した。
  • msgpack::CsvReaderの実装。RFC4180(https://www.ietf.org/rfc/rfc4180.txt)に準拠
  • StringOutputStreamの実装。std::stringに出力するストリームクラス。
  • TextWriterの仕様変更
    • 出力される改行コードをCRLFからLFに 変更した。CR, CRLFLFに変換されて出力される。
    • コンソール出力の場合はラインバッファリング、それ以外の場合はブロックバッファリングを行うように変更。
  • UTF-16の文字(utf16_t), UTF-32の文字(utf32_t) のtypedefを追加
    • それぞれuint16_t, uint32_ttypedefされている。C++11ではchar16_t, char32_ttypedefされる予定
  • TextWriterの機能追加
    • Writeメンバ関数の引数型にutf16_t, utf32_t型のオーバーロードを追加。UTF-16とUTF-32のキャラクタを渡すことができる。
  • SmartBitmapクラスをnn::nlib名前空間へ移動, succinctライブラリからmiscライブラリに移動した。
  • exiライブラリのバグフィックス
    • バイナリXMLでテキストノード内の改行にCRが含まれる場合、読み込み時に失敗する問題の修正
    • テキストノード内の改行は読み書き時にLFに変換されるよう修正
  • その他細かい変更・修正

2012-08-02

  • testingライブラリを追加
    • googletest(https://code.google.com/p/googletest/)のテスト用マクロ(ASSERT_EQ等)の多くが同じように動作
    • JUnit形式のXML(Jenkinsで読み取るとグラフになる)を出力することが可能
    • main関数前にnewを利用することのできない環境や、std::ostreamが利用できない環境でも利用可能
  • succinctライブラリの機能追加及び修正
  • miscライブラリへのクラスの追加
    • ScopedArrayクラスの追加。ScopedPtrの配列対応版。
    • UniquePtrクラスの追加。release()のついたScopedPtr
  • Unicode関連関数のエラーチェックの強化。
  • std::auto_ptrを利用しないように変更(for C++11)
  • exi/multithreadサンプルを追加
  • miscライブラリからAlarmクラス、及びmisc/alarmサンプルの削除
  • その他細かい変更・修正

2012-06-22

  • MessagePackとJSONパーサーライブラリを追加
  • TextReader, TextWriterのエラー値をerrno_t型に変更
  • BinaryReader, BinaryWriterのエラー値をerrno_t型に変更
  • nn::nlib::Utf8ToUtf32, nn::nlib::Utf8ToUtf16, nn::nlib::Utf32ToUtf8, nn::nlib::Utf16ToUtf8を追加
  • TextWriterでマルチバイト文字列を書けるように変更
  • リファレンスマニュアル記述の改善
  • その他細かい変更・修正

2012-05-30

  • テキストXMLパーサーのXML1.0標準準拠の向上
    • DTDを検出した場合、エラーとするのではなく読み飛ばすように修正
    • EntityRefはエラーとするのではなく空文字列に展開
    • XML宣言内の構文チェックを実装
    • XML宣言の前にスペースがあった場合エラーに
    • 属性同士の間にスペースがない場合をエラーに(e.g. <e a0 = "b"a1="c"/>)
    • その他、 http://www.w3.org/XML/Test/ の各種テストデータに対する結果の改善
  • TaggedTextParserクラス(XML風タグ付きテキスト用パーサー)の実装

2012-05-18

2012-05-11

  • IOP向けにXMLパーサーサンプルのscript, serializer, simple1, xml-rpcが動作するようになった。
  • heapライブラリにnmallocを実装するヒープを直接扱うためのcachedheapサンプルを追加。
  • UTF8<->UTF16 or UTF32変換関数の追加。それぞれ nn::nlib::Utf8ToWide , nn::nlib::WideToUtf8 関数
  • Crc32の計算を行うnn::nlib::Crc32クラスの追加。
  • FileOutputStreamに追記モードを追加。エラーの戻り値のリファイン。
  • TextWriterクラスに書式付き出力メンバ関数(WriteFormat)を追加。
  • IOPでreallocを独自実装(遅い)。heapライブラリのnmalloc_reallocサンプルのため。
  • TextWriterが改行でベースストリームをFlushするように修正
  • ConsoleOutputStreamでClose時にFlushされない不具合の修正
  • readfile/writefileサンプルのリファレンス追加
  • その他細かい修正

2012-05-02

  • IOPでFileInputStream, FileOutputStreamが動作するようになった。
  • misc/readfileサンプルとmisc/writefileサンプルの追加
  • IOPでsuccinct/detectionサンプルとsuccinct/ngcサンプルが動作するようになった。
  • その他細かい修正・変更

2012-04-27

  • Win32用のライブラリファイルとコマンドラインツールが追加された
  • FileOutputStreamの実装とPcFileOutputStreamの廃止(IOPではまだ動作しません)
  • FileInputStreamを実装とPcFileInputStreamの廃止(IOPではまだ動作しません)
  • OutputStreamのエラー値の型をerrno_tに変更
  • InputStreamのエラー値の型をerrno_t型に変更
  • InputStream / OutputStreamで配列データを読み書きする際のエンディアン対応バグの修正
  • ScopedPtrが不完全な型に対してエラーになるように修正
  • mallocの置き換え方法をnmalloc_simpleサンプルに記述
  • その他細かい修正・変更