Fost 5 release 5.17.03.45018 now out

Created 28th March, 2017 03:47 (UTC), last edited 28th March, 2017 04:06 (UTC)

We've started to push through a few things that will, in the longer term, allow a number of performance improvements. Firstly is that all of the parsers have been changed from Boost Spirit Classic to the new version of Boost Spirit.

The new parsers are smaller and easier to understand than the old ones and this has also allowed us to drop the use of the parser lock which worked around a multi-threading problem in Boost Spirit Classic.

We have also change the internal structure of fostlib::json to alter where the shared pointer to the arrays and objects are handled. This will make copying of fostlib::json instances much cheaper, as they were always intended to be. The JSON parsers have also been changed so they can work from a number of array or string views. This removes a number of places where we used to have to allocate new strings to do conversions to UTF-16 which is what the parsers want to work with. This is now done on the fly inside the string view iterators.

We've also been working through and removing various old Boost functionality that is now in the C++ standard libraries along with general tidying up — adding move constructors and making things properly variadic where applicable.

Building on Linux

You will need a C++14 compiler. Recent versions of either gcc or clang are suitable.

git clone --branch=5.17.03.45018 --recursive git@github.com:KayEss/fost-hello.git
cd fost-hello
Boost/build
hello/compile
dist/bin/hello-world-d

Download locations

Applications

  • beanbag — Stand alone transactional JSON database server — git@github.com:KayEss/beanbag.git
  • beanbag-seed — Seed project for giving you a starting point to develop web applications using Beanbag — git@github.com:KayEss/beanbag-seed.git
  • fost-hello — Sample seed project — git@github.com:KayEss/fost-hello.git
  • mengmon — Stand alone web server — git@github.com:KayEss/mengmom.git
  • wright — Experimental build system — git@github.com:KayEss/wright.git

Libraries

  • f5-cord — First version of a new string library with compile time string and Unicode support — git@github.com:KayEss/f5-cord.git
  • f5-threading — Preview of the first Fost 5 library which includes help for threading — git@github.com:KayEss/f5-threading.git
  • fost-aws — Amazon AWS and OpenStack — git@github.com:KayEss/fost-aws.git
  • fost-android — Eclipse project for Android that allows Fost 4 and Beanbags to be used on mobile devices — git@github.com:KayEss/fost-android.git
  • fost-android-ndk — The native code for Android. Includes required parts of Boost configured to use the standard Android build system.
  • fost-beanbag — Transactional JSON database — git@github.com:KayEss/fost-beanbag.git
  • fost-base — Build system and core libraries — git@github.com:KayEss/fost-base.git
  • fost-internet — Internet protocols, servers & clients — git@github.com:KayEss/fost-internet.git
  • fost-meta — All libraries in one wrapper — git@github.com:KayEss/fost-meta.git
  • fost-orm — Object/Relational mapping — git@github.com:KayEss/fost-orm.git
  • fost-postgres — PostgreSQL — git@github.com:KayEss/fost-postgres.git
  • fost-py — Python (2.x) bindings — git@github.com:KayEss/fost-py.git
  • fost-web — Web server libraries — git@github.com:KayEss/fost-web.git
  • fost-wright — Experiment in a build system — git@github.com:KayEss/fost-wright.git

Detailed change log

cord

  • Add in iterators for converting between some combinations of UTF encodings.

fostgres

  • Added support for file uploads. JSON base 64 encoded only.
  • Update for new internal structure of fostlib::json.
  • Removed the old parser_lock which is no longer needed.
  • Fix the matcher so it properly decodes the file spec parts from their URL encoding.
  • Switch to the new version of Boost Spirit. Drop support for Boost version prior to !.59.

fost-base

  • Improve the way that the JSON atomic type can be constructed from integral types.
  • Allow us to move the underlying string out of a tagged string rvalue.
  • Make the object logging functions properly variadic.
  • Add a time profile for generating a histogram of timing results.
  • Make the performance counter movable.
  • Add better support for "dynamic" modules.
  • Log messages can be created directly from JSON.
  • Add support for stderr to the stdout logger.
  • Removed last uses of boost::bind.
  • Fix bug in the stdout logger when logging objects and arrays.
  • Remove Boost bind from CLI implementation.
  • Refactor the logging code to no longer use Boost function, lambda or bind.
  • Refactor atexit so it no longer uses Boost function.
  • Refactor the logging messages to do fewer allocations.
  • Refactor the JSON parser to make it more composable.
  • Go back to the C++14 compatible int64_t to string implementation.
  • Refactored the location of the shared_ptr in the json implementation.
  • Removed the old parser_lock which is no longer needed.
  • Allow access to the data buffer within the utf8_view.
  • Switch to the new version of Boost Spirit. Drop support for Boost version prior to !.59.
  • Construct the default logger sinks configuration rather than parse it from an embedded string.
  • Improve the types in the fostlib::string::const_iterator so they better model the InputIterator concept.

fost-internet

  • Removed the old parser_lock which is no longer needed.
  • Switch to the new version of Boost Spirit. Drop support for Boost version prior to !.59.

fost-postgres

  • Removed the old parser_lock which is no longer needed.
  • Switch to the new version of Boost Spirit. Drop support for Boost version prior to !.59.

fost-py

  • Update for new internal structure of fostlib::json.

fost-web

  • Log better information about failed HTTP requests to the server.

fost-wright

  • Capture proper timing data for job execution times.
  • Allow setting of the simulated work times.

Categories: