Skip to content

Implementation#1

Open
aikonovalov wants to merge 39 commits intomainfrom
base
Open

Implementation#1
aikonovalov wants to merge 39 commits intomainfrom
base

Conversation

@aikonovalov
Copy link
Owner

No description provided.

Copy link
Collaborator

@DimaTrushin DimaTrushin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Обрати внимание, что я не повторял замечания. Если одна и та же ошибка всречалась несколько раз, я комментировал лишь единожды. Потому я ожидаю, что ты поправишь все аналогичные замечания всюду.

Набросал несколько замечаний. Там есть идейные длинные рассуждения с объяснением архитектуры и каких-то возможных решений. Постарайся прочитать их все прежде чем что-то менять.

set(CMAKE_CXX_STANDARD 20)

add_library(distsysenv
src/utils/utils.h
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не надо добавлять h файлы в add_executable или add_library. Они не дают единицу трансляции, они нужны только для подключения в cpp файлы. А вот cpp файлы дают единицы трансляции.

*.dwo

build/
.clang-format No newline at end of file
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

новая строка в том числе в конце gitignore

cmake_minimum_required(VERSION 3.14)
project(DistSysEnv LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавь строчку

set(CMAKE_CXX_STANDARD_REQUIRED True)

А то cmake разрешено откатиться на более низкий стандарт.

Или более новая версия

target_compile_features(target_name PRIVATE cxx_std_20)

using TOffset = int64_t;
using TTimerName = std::string;

using SimulationClock = float;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Глобально лучше вместо сырого using-га использовать простенький класс. В особенности для работы со временем. Плюс время может быть разным. И у него могут быть единицы измерения. Тут я так понимаю абстрактное время, и сырой тип вроде должен работать.

using Bytes = std::vector<Byte>;

using TOffset = int64_t;
using TTimerName = std::string;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Плохой using. Это супер специальный using явно относящийся к таймеру. Я бы еще понял, если бы у тебя была категория просто Name или Description или что-то в этом духе. А тут прям под конкретный класс. Это скорее всего означает, что этому using-гу тут не место, его место рядом с классом для таймера. А во-вторых, не ясно зачем для имени таймера вводить псевдоним для типа. Если ты хочешь не перепутать строки, например у тебя конструктор вида

Timer t("123", "abc");

и тебе надо пояснить смысл этих строк, то ты делаешь strong type aliases

template<class T, class Tag>
class Alias {
public:
  explicit Alias(const T& value) : value_(value) {}
  explicit Alias(T&& value) : value_(std::move(value)) {}
  operator T() const&  noexcept {
    return value_;
  }
  operator T() && noexcept {
    return std::move(value_);
  }
private:
  T value_;
};

using Name = Alias<std::string, struct name_tag>;
using Description = Alias<std::string, struct description_tag>;

И потом можешь писать

Timer t(Name{"123"}, Description{"abc"});

Но мне что-то подсказывает, что этому не место тут.

std::map<TKey, TVal> storage_;
};

} // namespace distsysenv No newline at end of file
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавь пустую строку в конце каждого файла. Дело в том, что гит на это ругается и пользователь твоего репозитория будет видеть сообщения об ошибках от гита. Не делай так.
Добавить в clang-format правило:
InsertNewlineAtEOF: true

return it->second;
}

enum class Status { Ok, Error };
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

не объявляй типы в случайных местах. Их фиг найдешь таким образом. Это вообще выглядит как супер общий тип для глобальных назначений. Ну либо его надо в начале этого класса в публичной части объявить.


namespace distsysenv {

struct EchoNode {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если что-то пределяешь или объявляешь в cpp файле, то обязательно дополнительно заворачивай в anonymous namespace!

NetworkSettings net_settings{
.drop_prob = 0.0f, .min_delay = 1, .max_delay = 5};
Network network(net_settings, 42);
manager.RegisterNetwork(std::move(network));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Плохое название. Имя говорит, что ты регистрируешь объект, а std::move говорит, что ты объект поглощаешь. И вот не ясно, то ли ты этот объект внутрь переместил, то ли название метода не верное.

Comment on lines +68 to +69
manager.Schedule(
Event::MessageSend(0, a, b, Message::FromDescription("hello", {})));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Желательно чтобы соединения между узлами можно было в коде тоже как-то отразить. Сейчас у тебя нет никакой топологии сети. У тебя просто каждый с каждым соединен как я понимаю (или точнее у тебя все с сетью соединены и еще какие-то там случайные соединения с логгером).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants