Genoil
9 years ago
7 changed files with 0 additions and 321 deletions
@ -1,240 +0,0 @@ |
|||||
0. Formatting |
|
||||
|
|
||||
GOLDEN RULE: Never *ever* use spaces for formatting. |
|
||||
|
|
||||
a. Use tabs for indentation! |
|
||||
- tab stops are every 4 characters. |
|
||||
- One indentation level -> exactly one byte (i.e. a tab character) in the source file. |
|
||||
- Never use spaces to line up sequential lines: If you have run-on lines, indent as you would for a block. |
|
||||
b. Line widths: |
|
||||
- Don't worry about having lines of code > 80-char wide. |
|
||||
- Lines of comments should be formatted according to ease of viewing, but simplicity is to be prefered over beauty. |
|
||||
c. Don't use braces for condition-body one-liners. |
|
||||
d. Never place condition bodies on same line as condition. |
|
||||
e. Space between first paren and keyword, but *not* following first paren or preceeding final paren. |
|
||||
f. No spaces when fewer than intra-expression three parens together; when three or more, space according to clarity. |
|
||||
g. No spaces for subscripting or unary operators. |
|
||||
h. No space before ':' but one after it, except in the ternary operator: one on both sides. |
|
||||
i. Space all other operators. |
|
||||
j. Braces, when used, always have their own lines and are at same indentation level as "parent" scope. |
|
||||
|
|
||||
(WRONG) |
|
||||
if( a==b[ i ] ) { printf ("Hello\n"); } |
|
||||
foo->bar(someLongVariableName, |
|
||||
anotherLongVariableName, |
|
||||
anotherLongVariableName, |
|
||||
anotherLongVariableName, |
|
||||
anotherLongVariableName); |
|
||||
|
|
||||
(RIGHT) |
|
||||
if (a == b[i]) |
|
||||
printf("Hello\n"); // NOTE spaces used instead of tab here for clarity - first byte should be '\t'. |
|
||||
foo->bar( |
|
||||
someLongVariableName, |
|
||||
anotherLongVariableName, |
|
||||
anotherLongVariableName, |
|
||||
anotherLongVariableName, |
|
||||
anotherLongVariableName |
|
||||
); |
|
||||
|
|
||||
|
|
||||
|
|
||||
1. Namespaces; |
|
||||
|
|
||||
a. No "using namespace" declarations in header files. |
|
||||
b. All symbols should be declared in a namespace except for final applications. |
|
||||
c. Preprocessor symbols should be prefixed with the namespace in all-caps and an underscore. |
|
||||
|
|
||||
(WRONG) |
|
||||
#include <cassert> |
|
||||
using namespace std; |
|
||||
tuple<float, float> meanAndSigma(vector<float> const& _v); |
|
||||
|
|
||||
(CORRECT) |
|
||||
#include <cassert> |
|
||||
std::tuple<float, float> meanAndSigma(std::vector<float> const& _v); |
|
||||
|
|
||||
|
|
||||
|
|
||||
2. Preprocessor; |
|
||||
|
|
||||
a. File comment is always at top, and includes: |
|
||||
- Original author, date. |
|
||||
- Later maintainers (not contributors - they can be seen through VCS log). |
|
||||
- Copyright. |
|
||||
- License (e.g. see COPYING). |
|
||||
b. Never use #ifdef/#define/#endif file guards. Prefer #pragma once as first line below file comment. |
|
||||
c. Prefer static const variable to value macros. |
|
||||
d. Prefer inline constexpr functions to function macros. |
|
||||
e. Split complex macro on multiple lines with '\'. |
|
||||
|
|
||||
|
|
||||
|
|
||||
3. Capitalization; |
|
||||
|
|
||||
GOLDEN RULE: Preprocessor: ALL_CAPS; C++: camelCase. |
|
||||
|
|
||||
a. Use camelCase for splitting words in names, except where obviously extending STL/boost functionality in which case follow those naming conventions. |
|
||||
b. The following entities' first alpha is upper case: |
|
||||
- Type names. |
|
||||
- Template parameters. |
|
||||
- Enum members. |
|
||||
- static const variables that form an external API. |
|
||||
c. All preprocessor symbols (macros, macro argments) in full uppercase with underscore word separation. |
|
||||
|
|
||||
|
|
||||
All other entities' first alpha is lower case. |
|
||||
|
|
||||
|
|
||||
|
|
||||
4. Variable prefixes: |
|
||||
|
|
||||
a. Leading underscore "_" to parameter names (both normal and template). |
|
||||
- Exception: "o_parameterName" when it is used exclusively for output. See 6(f). |
|
||||
- Exception: "io_parameterName" when it is used for both input and output. See 6(f). |
|
||||
b. Leading "c_" to const variables (unless part of an external API). |
|
||||
c. Leading "g_" to global (non-const) variables. |
|
||||
d. Leading "s_" to static (non-const, non-global) variables. |
|
||||
|
|
||||
|
|
||||
|
|
||||
5. Error reporting: |
|
||||
|
|
||||
- Prefer exception to bool/int return type. |
|
||||
|
|
||||
|
|
||||
|
|
||||
6. Declarations: |
|
||||
|
|
||||
a. {Typename} + {qualifiers} + {name}. |
|
||||
b. Only one per line. |
|
||||
c. Associate */& with type, not variable (at ends with parser, but more readable, and safe if in conjunction with (b)). |
|
||||
d. Favour declarations close to use; don't habitually declare at top of scope ala C. |
|
||||
e. Always pass non-trivial parameters with a const& suffix. |
|
||||
f. If a function returns multiple values, use std::tuple (std::pair acceptable). Prefer not using */& arguments, except where efficiency requires. |
|
||||
g. Never use a macro where adequate non-preprocessor C++ can be written. |
|
||||
h. Make use of auto whenever type is clear or unimportant: |
|
||||
- Always avoid doubly-stating the type. |
|
||||
- Use to avoid vast and unimportant type declarations. |
|
||||
- However, avoid using auto where type is not immediately obvious from the context, and especially not for arithmetic expressions. |
|
||||
i. Don't pass bools: prefer enumerations instead. |
|
||||
j. Prefer enum class to straight enum. |
|
||||
|
|
||||
|
|
||||
(WRONG) |
|
||||
const double d = 0; |
|
||||
int i, j; |
|
||||
char *s; |
|
||||
float meanAndSigma(std::vector<float> _v, float* _sigma, bool _approximate); |
|
||||
Derived* x(dynamic_cast<Derived*>(base)); |
|
||||
for (map<ComplexTypeOne, ComplexTypeTwo>::iterator i = l.begin(); i != l.end(); ++l) {} |
|
||||
|
|
||||
|
|
||||
(CORRECT) |
|
||||
enum class Accuracy |
|
||||
{ |
|
||||
Approximate, |
|
||||
Exact |
|
||||
}; |
|
||||
double const d = 0; |
|
||||
int i; |
|
||||
int j; |
|
||||
char* s; |
|
||||
std::tuple<float, float> meanAndSigma(std::vector<float> const& _v, Accuracy _a); |
|
||||
auto x = dynamic_cast<Derived*>(base); |
|
||||
for (auto i = x.begin(); i != x.end(); ++i) {} |
|
||||
|
|
||||
|
|
||||
7. Structs & classes |
|
||||
|
|
||||
a. Structs to be used when all members public and no virtual functions. |
|
||||
- In this case, members should be named naturally and not prefixed with 'm_' |
|
||||
b. Classes to be used in all other circumstances. |
|
||||
|
|
||||
|
|
||||
|
|
||||
8. Members: |
|
||||
|
|
||||
a. One member per line only. |
|
||||
b. Private, non-static, non-const fields prefixed with m_. |
|
||||
c. Avoid public fields, except in structs. |
|
||||
d. Use override, final and const as much as possible. |
|
||||
e. No implementations with the class declaration, except: |
|
||||
- template or force-inline method (though prefer implementation at bottom of header file). |
|
||||
- one-line implementation (in which case include it in same line as declaration). |
|
||||
f. For a property 'foo' |
|
||||
- Member: m_foo; |
|
||||
- Getter: foo() [ also: for booleans, isFoo() ]; |
|
||||
- Setter: setFoo(); |
|
||||
|
|
||||
|
|
||||
|
|
||||
9. Naming |
|
||||
|
|
||||
a. Collection conventions: |
|
||||
- -s means std::vector e.g. using MyTypes = std::vector<MyType> |
|
||||
- -Set means std::set e.g. using MyTypeSet = std::set<MyType> |
|
||||
- -Hash means std::unordered_set e.g. using MyTypeHash = std::unordered_set<MyType> |
|
||||
b. Class conventions: |
|
||||
- -Face means the interface of some shared concept. (e.g. FooFace might be a pure virtual class.) |
|
||||
c. Avoid unpronouncable names; |
|
||||
- If you need to shorten a name favour a pronouncable slice of the original to a scatterred set of consonants. |
|
||||
- e.g. Manager shortens to Man rather than Mgr. |
|
||||
d. Avoid prefixes of initials (e.g. DON'T use IMyInterface, CMyImplementation) |
|
||||
e. Find short, memorable & (at least semi-) descriptive names for commonly used classes or name-fragments. |
|
||||
- A dictionary and thesaurus are your friends. |
|
||||
- Spell correctly. |
|
||||
- Think carefully about the class's purpose. |
|
||||
- Imagine it as an isolated component to try to decontextualise it when considering its name. |
|
||||
- Don't be trapped into naming it (purely) in terms of its implementation. |
|
||||
|
|
||||
|
|
||||
|
|
||||
10. Type-definitions |
|
||||
|
|
||||
a. Prefer 'using' to 'typedef'. e.g. using ints = std::vector<int>; rather than typedef std::vector<int> ints; |
|
||||
b. Generally avoid shortening a standard form that already includes all important information: |
|
||||
- e.g. stick to shared_ptr<X> rather than shortening to ptr<X>. |
|
||||
c. Where there are exceptions to this (due to excessive use and clear meaning), note the change prominently and use it consistently. |
|
||||
- e.g. using Guard = std::lock_guard<std::mutex>; ///< Guard is used throughout the codebase since it's clear in meaning and used commonly. |
|
||||
d. In general expressions should be roughly as important/semantically meaningful as the space they occupy. |
|
||||
|
|
||||
|
|
||||
11. Commenting |
|
||||
|
|
||||
a. Comments should be doxygen-compilable, using @notation rather than \notation. |
|
||||
b. Document the interface, not the implementation. |
|
||||
- Documentation should be able to remain completely unchanged, even if the method is reimplemented. |
|
||||
- Comment in terms of the method properties and intended alteration to class state (or what aspects of the state it reports). |
|
||||
- Be careful to scrutinise documentation that extends only to intended purpose and usage. |
|
||||
- Reject documentation that is simply an English transaction of the implementation. |
|
||||
|
|
||||
|
|
||||
|
|
||||
12. Include Headers |
|
||||
|
|
||||
a. Includes should go in order of lower level (STL -> boost -> libdevcore -> libdevcrypto -> libethcore -> libethereum) to higher level. Lower levels are basically dependencies to the higher levels. For example: |
|
||||
|
|
||||
#include <string> |
|
||||
#include <boost/filesystem.hpp> |
|
||||
|
|
||||
#include <libdevcore/Common.h> |
|
||||
#include <libdevcore/CommonData.h> |
|
||||
#include <libdevcore/Exceptions.h> |
|
||||
#include <libdevcore/Log.h> |
|
||||
#include <libdevcrypto/SHA3.h> |
|
||||
#include <libethereum/Defaults.h> |
|
||||
|
|
||||
b. The only exception to the above rule is the top of a .cpp file where its corresponding header should be located. |
|
||||
|
|
||||
13. Logging |
|
||||
|
|
||||
Logging should be performed at appropriate verbosities depending on the logging message. |
|
||||
The more likely a message is to repeat (and thus cuase noise) the higher in verbosity it should be. |
|
||||
Some rules to keep in mind: |
|
||||
|
|
||||
- Verbosity == 0 -> Reserved for important stuff that users must see and can understand. |
|
||||
- Verbosity == 1 -> Reserved for stuff that users don't need to see but can understand. |
|
||||
- Verbosity >= 2 -> Anything that is or might be displayed more than once every minute |
|
||||
- Verbosity >= 3 -> Anything that only a developer would understand |
|
||||
- Verbosity >= 4 -> Anything that is low-level (e.g. peer disconnects, timers being cancelled) |
|
@ -1,38 +0,0 @@ |
|||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
||||
<plist version="1.0"> |
|
||||
<dict> |
|
||||
<key>CFBundleDevelopmentRegion</key> |
|
||||
<string>English</string> |
|
||||
<key>CFBundleExecutable</key> |
|
||||
<string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string> |
|
||||
<key>CFBundleGetInfoString</key> |
|
||||
<string>${MACOSX_BUNDLE_INFO_STRING}</string> |
|
||||
<key>CFBundleIconFile</key> |
|
||||
<string>${MACOSX_BUNDLE_ICON_FILE}</string> |
|
||||
<key>CFBundleIdentifier</key> |
|
||||
<string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string> |
|
||||
<key>CFBundleInfoDictionaryVersion</key> |
|
||||
<string>6.0</string> |
|
||||
<key>CFBundleLongVersionString</key> |
|
||||
<string>${MACOSX_BUNDLE_LONG_VERSION_STRING}</string> |
|
||||
<key>CFBundleName</key> |
|
||||
<string>${MACOSX_BUNDLE_BUNDLE_NAME}</string> |
|
||||
<key>CFBundlePackageType</key> |
|
||||
<string>APPL</string> |
|
||||
<key>CFBundleShortVersionString</key> |
|
||||
<string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string> |
|
||||
<key>CFBundleSignature</key> |
|
||||
<string>????</string> |
|
||||
<key>CFBundleVersion</key> |
|
||||
<string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string> |
|
||||
<key>CSResourcesFileMapped</key> |
|
||||
<true/> |
|
||||
<key>LSRequiresCarbon</key> |
|
||||
<true/> |
|
||||
<key>NSHumanReadableCopyright</key> |
|
||||
<string>${MACOSX_BUNDLE_COPYRIGHT}</string> |
|
||||
<key>NSHighResolutionCapable</key> |
|
||||
<true/> |
|
||||
</dict> |
|
||||
</plist> |
|
@ -1,13 +0,0 @@ |
|||||
{ |
|
||||
"title": "Ethereum", |
|
||||
"icon": "appdmg_icon.icns", |
|
||||
"background": "appdmg_background.png", |
|
||||
"icon-size": 55, |
|
||||
"contents": [ |
|
||||
{ "x": 242, "y": 240, "type": "link", "path": "/Applications" }, |
|
||||
{ "x": 145, "y": 125, "type": "file", "path": "${ETH_ALETHZERO_APP}" }, |
|
||||
{ "x": 339, "y": 125, "type": "file", "path": "${ETH_MIX_APP}" } |
|
||||
] |
|
||||
} |
|
||||
|
|
||||
|
|
@ -1,11 +0,0 @@ |
|||||
style=allman |
|
||||
indent=force-tab=4 |
|
||||
convert-tabs |
|
||||
indent-preprocessor |
|
||||
min-conditional-indent=1 |
|
||||
pad-oper |
|
||||
pad-header |
|
||||
unpad-paren |
|
||||
align-pointer=type |
|
||||
keep-one-line-blocks |
|
||||
close-templates |
|
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 34 KiB |
@ -1,19 +0,0 @@ |
|||||
#!/bin/bash |
|
||||
|
|
||||
opwd="$PWD" |
|
||||
br=$(git branch | grep '\*' | sed 's/^..//') |
|
||||
|
|
||||
n=cpp-ethereum-src-$(date "+%Y%m%d%H%M%S" --date="1970-01-01 $(git log -1 --date=short --pretty=format:%ct) sec GMT")-$(grep "Version = " libdevcore/Common.cpp | sed 's/^[^"]*"//' | sed 's/".*$//')-$(git rev-parse HEAD | cut -c1-6) |
|
||||
|
|
||||
cd /tmp |
|
||||
git clone "$opwd" $n |
|
||||
cd $n |
|
||||
git checkout $br |
|
||||
rm -f package.sh |
|
||||
cd .. |
|
||||
tar c $n | bzip2 -- > $opwd/../${n}.tar.bz2 |
|
||||
rm -rf $n |
|
||||
cd $opwd |
|
||||
|
|
||||
echo "SHA1(${n}.tar.bz2) = $(shasum $opwd/../${n}.tar.bz2 | cut -d' ' -f 1)" |
|
||||
|
|
Loading…
Reference in new issue