You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@mesos.apache.org by "Michael Park (JIRA)" <ji...@apache.org> on 2015/08/10 08:03:46 UTC

[jira] [Created] (MESOS-3246) Replace C-style variadic arguments with C++11 variadic templates.

Michael Park created MESOS-3246:
-----------------------------------

             Summary: Replace C-style variadic arguments with C++11 variadic templates.
                 Key: MESOS-3246
                 URL: https://issues.apache.org/jira/browse/MESOS-3246
             Project: Mesos
          Issue Type: Task
            Reporter: Michael Park


With the introduction of variadic templates, it's possible to write type-safe n-ary functions. Aside from the lack of type-safety, varargs also come with subtle pitfalls. For example, as pointed out in [r25735|https://reviews.apache.org/r/25735/],

{quote}
N3797: 18.10 Other runtime support \[support.runtime\]

The restrictions that ISO C places on the second parameter to the va_start() macro in header <stdarg.h>
are different in this International Standard. The parameter parmN is the identifier of the rightmost parameter
in the variable parameter list of the function definition (the one just before the ...). *If the parameter parmN is of a reference type,* or of a type that is not compatible with the type that results when passing an argument for which there is no parameter, *the behavior is undefined.*
{quote}

Currently, the following files have instances of varargs.

{noformat}
3rdparty/libprocess/3rdparty/stout/include/stout/format.hpp
3rdparty/libprocess/3rdparty/stout/include/stout/windows/format.hpp
3rdparty/libprocess/3rdparty/stout/include/stout/os/posix/shell.hpp
3rdparty/libprocess/3rdparty/stout/include/stout/os/windows/shell.hpp
src/jvm/jvm.hpp
src/jvm/jvm.cpp
{noformat}

For {{format.hpp}}, we can simply use {{asprintf}} rather than {{vasprintf}}. An additional task here is to add {{asprintf}} in {{windows/format.hpp}}, but this can simply delegate to {{vasprintf}} which is already implemented.

The transformation for {{shell.hpp}} is trivial since all it only depends on {{format.hpp}}.

The JVM parts are likely to be the biggest undertaking, this needs further investigation.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)