LINUX.ORG.RU

C++. Смотрю чужой код... как это называется?

 ,


1

2

Сабж, интересно ваше мнение, товарищи.

Смотрю код одного проекта (https://github.com/mockingbirdnest/Principia) и у меня от этого кода когнитивный диссонанс, т.к. написан он явно не глупыми людьми... но вот такое:

template<typename Tr4jectory, typename It3rator>
class ForkableIterator {
...
}
https://github.com/mockingbirdnest/Principia/blob/master/physics/forkable.hpp

и такое:

#define ADVANCE_ΔQSTAGE(step)                                              \
  do {                                                                     \
    Time const step_evaluated = (step);                                    \
    compute_velocity(p_stage, &v);                                         \
    for (int k = 0; k < dimension; ++k) {                                  \
      Position const Δq = (*Δqstage_previous)[k] + step_evaluated * v[k];  \
      q_stage[k] = q_last[k].value + Δq;                                   \
      (*Δqstage_current)[k] = Δq;                                          \
    }                                                                      \
  } while (false)
#endif
https://github.com/mockingbirdnest/Principia/blob/master/integrators/sprk_int...

Наводят на мысль, что писали его явно после принятия дозы ЛСД, как минимум.

Может быть я чего-то не понимаю?...

Не, для второго примеря я могу дать разумное объяснение - выглядит хорош и читабельно. (Но вот писать его... только греки могут, разве что)

★★★★★

Последнее исправление: invy (всего исправлений: 1)

template<typename Tr4jectory, typename It3rator>

Интересный способ избежать столкновений имён. Такое впечатление, что авторы любят писать СМСки.

#define ADVANCE_ΔQSTAGE(step)                                              \
  do {

Да... Классы, шаблоны, а вместо простенькой функции (помеченной inline, если уж так очень надо) - макрос. Точно, никуда не годится. Если это не contiki-os на Си для embedded.

(Но вот писать его... только греки могут, разве что)

Ну, греческий - ещё ничего. Благодаря математике практически все буквы известны: как пишутся, как читаются. А вот когда дальневосточные коллеги доберутся до этой фичи, вот тогда не завидую.

gag ★★★★★
()
Последнее исправление: gag (всего исправлений: 1)

Неглупые люди тоже могут писать плохой код, особенно если это не их профильная деятельность.

staseg ★★★★★
()
Ответ на: комментарий от aplay

Вообще-то ещё в ДОСовские времена было привычное дело: alt+177 (на калькуляторном блоке), чтобы получать спец-символы (многие из которых в зависимости от того, был ли загружен keyrus или нет, выглядели как у них, или как у нас).

gag ★★★★★
()
Ответ на: комментарий от aplay

Да и под ГНУ/Линуксом криворукости хватает. Вот новость про релиз Gtk+ 3.20 только вышла, а в ней:

Major new features include:

  • [...]
  • GTK+ now reads .XCompose files

Только сейчас наконец-то осилили.

gag ★★★★★
()

(Но вот писать его... только греки могут, разве что)

И это в то время, когда нормальные люди даже в строковых константах себе такого не позволяют. Дело не только в знании. У меня банально в шрифте может не быть этих символов.

Esteban_Garcia
()
Ответ на: комментарий от gag

У меня с незапамятных времён .XCompose в приложениях на gtk3 работает.

NeXTSTEP ★★
()
Ответ на: комментарий от NeXTSTEP

Ну давайте ещё APL вспомним. Там это изначально подразумевалось.

Меня другое интересует. Стандарт на кресты допускает создание имён объектов с символами за пределами Latin1? Нет, что это многие компиляторы и C++, и C допускают, я в курсе. Ещё в начале 90х была переделанная версия MS qc не то, что с переменными, а с русскими ключевыми словами. Но вот не запрещено ли это стандартами...

hobbit ★★★★★
()

а мне нравится

реально понравился этот код :)

Harald ★★★★★
()

Наводят на мысль, что писали его явно после принятия дозы ЛСД, как минимум.

На дворе XXI век, UTF8 и UTF16 уже давно в ходу.

var जावास्क्रिप्ट = «javascript»; // ok that's JavaScript in hindi

С точки зрения JS нормальное имя переменной.

robot12 ★★★★★
()
Ответ на: комментарий от anonymous

Это такой способ заставить писать точку с запятой после вызова макроса.

anonymous
()
Ответ на: комментарий от aplay

Криворукие вантузятники только не смогут.

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

anonymous
()
Ответ на: комментарий от hobbit

Меня другое интересует. Стандарт на кресты допускает создание имён объектов с символами за пределами Latin1? Нет

Да.

Physical source file characters are mapped, in an implementation-defined manner, to the basic source character set (introducing new-line characters for end-of-line indicators) if necessary. Trigraph sequences (2.3) are replaced by corresponding single-character internal representations. Any source file character not in the basic source character set (2.2) is replaced by the universal-character-name that designates that character. (An implementation may use any internal encoding, so long as an actual extended character encountered in the source file, and the same extended character expressed in the source file as a universal-character-name (i.e. using the \uXXXX notation), are handled equivalently.)

1 An identifier is an arbitrarily long sequence of letters and digits. Each universal-character-name in an identifier shall designate a character whose encoding in ISO 10646 falls into one of the ranges specified in Annex E. Upper- and lower-case letters are different. All characters are significant.20)

asaw ★★★★★
()
Последнее исправление: asaw (всего исправлений: 1)
Ответ на: комментарий от gag

Дурачек, раньше этим занимались X11/GSD, а щас сам GTK+ читает

mystery ★★
()
Ответ на: комментарий от pacify

Я сам знаю что может, вопрос не в этом.

И меня больше 1337 добил.

invy ★★★★★
() автор топика
Ответ на: комментарий от robot12

Найти в коде после этого что-либо становится невозможным. Особенно если там 1337 кругом.

invy ★★★★★
() автор топика
Ответ на: комментарий от aplay

Если что технически можно, не значит что оно нужно :) Криптопослания и смайлики в коде — моветон, т.к. читабельность не повышают, только работают детектором тараканов автора.

slackwarrior ★★★★★
()
Ответ на: комментарий от robot12

Мелко...

class ЭлектронноеСообщение a where
    идСообщения   :: Lens' a GUID
    датаСообщения :: Lens' a Date

instance ЭлектронноеСообщение ROO.Файл where
    идСообщения =
        lens ROO.идЭС
             (\файл идЭС -> файл{ROO.идЭС=идЭС})
    датаСообщения =
        lens (\файл -> ROO.датаПодп . ROO.решОтмена $ файл)
             (\файл датаПодп -> файл{ROO.решОтмена=(ROO.решОтмена файл){ROO.датаПодп=датаПодп}})

Реальный код. Жаль, что до конца довести не удалось.

Macil ★★★★★
()
Ответ на: комментарий от Esteban_Garcia

Плохое, негодное импортозамещение. Корни не славянские.

Это не ко мне. Это к разработчикам модели. Сделана ставка на максимальное соответствие идентификаторов.

Macil ★★★★★
()
Ответ на: комментарий от robot12

Не так то, что шрифта, поддерживающего UTF полностью не сущестует и если у вас завёлся хинди, это не означает, что он заведётся у читателя. И наоборот, какой-нибудь 𓁊𓁡𓁷𓀳𓂝𓀭𓁍𓁠 может отобразиться у читателя, но не у вас.

anonymous
()
Ответ на: комментарий от robot12

А это уже проблема системы отображения а не языка или стандарта. Верно ?

Наверное надо написать стандарт так, чтобы эти проблемы не всплывали?

matrixd
()
Ответ на: комментарий от NeXTSTEP

Да чоужтам, сырцы лора скаловские глянь

Deleted
()
Ответ на: комментарий от staseg

Не, ну код там в общем-то тоже сам по себе не плох, но вот эти места меня пугают :)

invy ★★★★★
() автор топика

Так если посмотреть на того, кто там больше всех коммитил - всё сразу становится ясно.
Хотя в некоторых случаях использовать греческие символы - наглядно, для deltaV, например.

Под оффтопиком можно делать всё, если поставить правильные костыли. Как и везде, впрочем.

wstorm ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.