История изменений
Исправление byko3y, (текущая версия) :
Покажите мне адекватных людей, которые будут считать двухбуквенные макросы в нижнем регистре нормой. И для которых нормой будут рукописные (не сгенерированные автоматом) функции на 350 строк
Этот макрос — тупо мусор, который я внес для бенчей и не выкинул обратно. Функция на 350 строк на самом деле намного меньше 350 строк, потому что большая часть ее состоит из мертвого кода и комментариев — я специально посчитал, там 133 строки живого кода.
Далее ты не понял, что такой код вообще ни на какой стандартной либе не напишется, поскольку это lock-free код, да еще и в разделяемой памяти, а большая часть стандартной либы C++ в таком режиме работать не умеет в принципе. Более того, у lock-free кода есть такая особенность, что изменение одной строчки логики приводит не к изменению поведения, а к полному отказу системы. Потому разбросать цельный lock-free алгоритм по модулям — это худшее, что можно сделать в плане читаемости и поддерживаемости. Да, это одна из самых больших функций в проекте, я тут не спорю.
На ваш код достаточно бегло взглянуть и увидеть кусочки, которые должны быть вынесены во вспомогательные функции для того, чтобы уменьшить объем основной портянки (раз, два)
Это называется «у меня есть DRY — зачем мне мозг?». Ты снова и снова прилипаешь к вещам с ничтожной значимостью — это дублирование дает плюс-минус ничего в плане читаемости, не всякий дублированный код является злом, и просто не стоит того, чтобы вообще об этом дублировании париться, когда дублируются пять строчек в двух местах.
Во-первых, const был добавлен в язык только в 1989-ом, т.е. сильно позже появления Cfront 1.0
В заголовках Cfront 1.0 куча упоминаний const char *
:
http://www.softwarepreservation.org/projects/c_plus_plus/cfront/release_1.0/s...
1984 год. Я еще раз подчеркиваю, что в Си того времени никакого const не было аж до 1988 года. Потому const 100% произошел от Струструпа, о чем он и пишет в мемуарах.
Во-вторых, мы обсуждаем тот const, который есть сейчас
Внезапно, у C++ до сих пор есть широко используемый стандарт C++11, в котором copnst и constexpr имеют значение, несколько отличное от C++14.
byko3y имеет право обзывать людей как ему вздумается, но в адрес byko3y по правилам LOR-а высказать такую же оценку его умственных способностей низзя
Я просто делаю достаточно очевидные выводы, подкрепляя их отдельными фактами. Дуглас Крокфорд, например, очень много намекает на умственную неполноценность некоторых кодеров, коучей. авторов книг, и представителей комитетов — он просто не называет кретинов кретинами. А я называю — вот и вся наша разница. Вроде пока что меня не забанили и травить не начали.
Ну как ты сделаешь иначе список const char *?
На самом примитивном уровне:
struct list_node {
const char * m_payload;
list_node * m_prev;
list_node * m_next;
};
И в чем проблема?
Да. хорошо, сделали. Теперь как его скормить функции, у которой сигнатурка аргумента list<char *>
? Она не изменяет значение, просто у нее сигнатура такая, потому что обычно принято не делать контейнеры из константных объектов. Выхода два: копировать объект в рантайме или копипастить функцию. Что и требовалось доказать.
Исправление byko3y, :
Покажите мне адекватных людей, которые будут считать двухбуквенные макросы в нижнем регистре нормой. И для которых нормой будут рукописные (не сгенерированные автоматом) функции на 350 строк
Этот макрос — тупо мусор, который я внес для бенчей и не выкинул обратно. Функция на 350 строк на самом деле намного меньше 350 строк, потому что большая часть ее состоит из мертвого кода и комментариев — я специально посчитал, там 133 строки живого кода.
Далее ты не понял, что такой код вообще ни на какой стандартной либе не напишется, поскольку это lock-free код, да еще и в разделяемой памяти, а большая часть стандартной либы C++ в таком режиме работать не умеет в принципе. Более того, у lock-free кода есть такая особенность, что изменение одной строчки логики приводит не к изменению поведения, а к полному отказу системы. Потому разбросать цельный lock-free алгоритм по модулям — это худшее, что можно сделать в плане читаемости и поддерживаемости. Да, это одна из самых больших функций в проекте, я тут не спорю.
На ваш код достаточно бегло взглянуть и увидеть кусочки, которые должны быть вынесены во вспомогательные функции для того, чтобы уменьшить объем основной портянки (раз, два)
Это называется «у меня есть DRY — зачем мне мозг?». Ты снова и снова прилипаешь к вещам с ничтожной значимостью — это дублирование дает плюс-минус ничего в плане читаемости, не всякий дублированный код является злом, и просто не стоит того, чтобы вообще об этом дублировании париться, когда дублируются пять строчек в двух местах.
Во-первых, const был добавлен в язык только в 1989-ом, т.е. сильно позже появления Cfront 1.0
В заголовках Cfront 1.0 куча упоминаний const char *
:
http://www.softwarepreservation.org/projects/c_plus_plus/cfront/release_1.0/s...
1984 год. Я еще раз подчеркиваю, что в Си того времени никакого const не было аж до 1988 года. Потому const 100% произошел от Струструпа, о чем он и пишет в мемуарах.
Во-вторых, мы обсуждаем тот const, который есть сейчас
Внезапно, у C++ до сих пор есть широко используемый стандарт C++11, в котором copnst и constexpr имеют значение, несколько отличное от C++14.
byko3y имеет право обзывать людей как ему вздумается, но в адрес byko3y по правилам LOR-а высказать такую же оценку его умственных способностей низзя
Я просто делаю достаточно очевидные выводы, подкрепляя их отдельными фактами. Дуглас Крокфорд, например, очень много намекает на умственную неполноценность некоторых кодеров, коучей. авторов книг, и представителей комитетов — он просто не называет кретинов кретинами. А я называю — вот и вся наша разница. Вроде пока что меня не забанили и травить не начали.
Ну как ты сделаешь иначе список const char *?
На самом примитивном уровне:
struct list_node {
const char * m_payload;
list_node * m_prev;
list_node * m_next;
};
И в чем проблема?
Да. хорошо, сделали. Теперь как его скормить функции, у которой сигнатурка list<char *>
? Она не изменяет значение, просто у нее сигнатура такая, потому что обычно принято не делать контейнеры из константных объектов. Выхода два: копировать объект в рантайме или копипастить функцию. Что и требовалось доказать.
Исходная версия byko3y, :
Покажите мне адекватных людей, которые будут считать двухбуквенные макросы в нижнем регистре нормой. И для которых нормой будут рукописные (не сгенерированные автоматом) функции на 350 строк
Этот макрос — тупо мусор, который я внес для бенчей и не выкинул обратно. функция на 350 строк на самом деле намного меньше 350 строк, потому что большая часть ее состоит из мертвого кода и комментариев — я специально посчитал, там 133 строки живого кода.
Далее ты не понял, что такой код вообще ни на какой стандартной либе не напишется, поскольку это lock-free код, да еще и в разделяемой памяти, а большая часть стандартной либы C++ в таком режиме работать не умеет в принципе. Более того, у lock-free кода есть такая особенность, что изменение одной строчки логики приводит не к изменению поведения, а к полному отказу системы. Потому разбросать цельный lock-free алгоритм по модулям — это худшее, что можно сделать в плане читаемости и поддерживаемости. Да, это одна из самых больших функций в проекте, я тут не спорю.
На ваш код достаточно бегло взглянуть и увидеть кусочки, которые должны быть вынесены во вспомогательные функции для того, чтобы уменьшить объем основной портянки (раз, два)
Это называется «у меня есть DRY — зачем мне мозг?». Ты снова и снова прилипаешь к вещам с ничтожной значимостью — это дублирование дает плюс-минус ничего в плане читаемости, не всякий дублированный код является злом, и просто не стоит того, чтобы вообще об этом дублировании париться, когда дублируются пять строчек в двух местах.
Во-первых, const был добавлен в язык только в 1989-ом, т.е. сильно позже появления Cfront 1.0
В заголовках Cfront 1.0 куча упоминаний const char *
:
http://www.softwarepreservation.org/projects/c_plus_plus/cfront/release_1.0/s...
1984 год. Я еще раз подчеркиваю, что в Си того времени никакого const не было аж до 1988 года. Потому const 100% произошел от Струструпа, о чем он и пишет в мемуарах.
Во-вторых, мы обсуждаем тот const, который есть сейчас
Внезапно, у C++ до сих пор есть широко используемый стандарт C++11, в котором copnst и constexpr имеют значение, несколько отличное от C++14.
byko3y имеет право обзывать людей как ему вздумается, но в адрес byko3y по правилам LOR-а высказать такую же оценку его умственных способностей низзя
Я просто делаю достаточно очевидные выводы, подкрепляя их отдельными фактами. Дуглас Крокфорд, например, очень много намекает на умственную неполноценность некоторых кодеров, коучей. авторов книг, и представителей комитетов — он просто не называет кретинов кретинами. А я называю — вот и вся наша разница. Вроде пока что меня не забанили и травить не начали.
Ну как ты сделаешь иначе список const char *?
На самом примитивном уровне:
struct list_node {
const char * m_payload;
list_node * m_prev;
list_node * m_next;
};
И в чем проблема?
Да. хорошо, сделали. Теперь как его скормить функции, у которой сигнатурка list<char *>? Она не изменяет значение, просто у нее сигнатура такая, потому что обычно принято не делать контейнеры из константных объектов. Выхода два: копировать объект в рантайме или копипастить функцию. Что и требовалось доказать.