- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
typedef deque<uint8_t> bn;
#define cat2(b,e) b##e
#define cat(b,e) cat2(b,e)
#define fsi(i,s,e) for(size_t i(s), cat(i,cat(_fsi_end_,__LINE__))(e); i<cat(i,cat(_fsi_end_,__LINE__)); ++(i))
void ml10(bn& n){
n.push_front(0);
}
uint8_t ni(const bn& n, size_t i){
if(n.size()<=i)
return 0;
else
return n[i];
}
size_t ms(const bn& n1, const bn& n2){
return (max) (n1.size(), n2.size());
}
void pb(uint8_t b1, uint8_t b2, uint8_t lc, uint8_t& r, uint8_t& c){
uint8_t tr = (b1+b2+lc);
r = tr & 1;
c = !!(tr & 2);
}
bn bi(bn n){
reverse(n.begin(), n.end());
return n;
}
bn pl(const bn& n1, const bn& n2){
bn r;
uint8_t c=0,br=0;
fsi(i,0,ms(n1, n2)){
pb(ni(n1,i),ni(n2,i),c,br,c);
r.push_back(br);
}
if (c)
r.push_back(c);
return r;
}
bn ml(bn n1, const bn& n2){
bn r;
fsi(i,0,n2.size()){
if(n2[i])
r=pl(r,n1);
ml10(n1);
}
return r;
}
У меня к вам вопрос парни.
В нашем отделе взяли олимпиадника. За ним не следили. Он написал много кода и ушел в гугл.
Как бы за ним теперь код поправить? Хотябы конструкции языка типа for вернуть вместо например fsi?
Код не из проекта. но его. В проекте похожий и даже хуже.
Нужно типа утилиты препроцессор крестов для части макросов (все разворачивать макросы или инклудить хедеры очевидно нельзя).
laMer007 23.11.2014 01:26 # 0
Сложение и умножение двочиных чисел.
http://ideone.com/6ZeIkX
Пост для привлечения внимания
codemonkey 23.11.2014 01:55 # +2
defecate-plusplus 23.11.2014 02:08 # +4
3.14159265 23.11.2014 02:38 # +2
Вот это настораживает и в то же время многое объясняет.
wvxvw 23.11.2014 02:43 # +1
О, кстати, это ж корпорация зла как раз такой инструмент и разрабатывает! Может быть поэтому?
laMer007 23.11.2014 12:09 # 0
wvxvw 23.11.2014 21:24 # 0
Заменяет:
на
Можно и остальные макросы так же запилить, но мне влом :)
Анонимус 23.11.2014 15:50 # 0
wvxvw 23.11.2014 20:47 # 0
bormand 23.11.2014 20:55 # 0
Т.е. достаточно искать "fsi(", соответствующую ")" и заменять их.
Анонимус 23.11.2014 21:30 # 0
Мне почему-то кажется что парсер бы споткнулся и умер о такое (а препроцессор работает)
"gcc -E" прекрасно отрабатывает же.
[/code]
wvxvw 23.11.2014 21:33 # 0
gost 23.11.2014 09:10 # +3
ОМГ, что это?!
bormand 23.11.2014 09:34 # +6
1024-- 23.11.2014 09:57 # +5
Pythoner 23.11.2014 10:22 # +6
laMer007 23.11.2014 12:01 # 0
Ну а нам то что теперь делать с результатами его гениальности?
Ладно функции мы конечно переименуем заменой.
А вот с этим как?
Может регексами как-то в преобразовать? Или лучше даже в ?
bormand 23.11.2014 12:11 # 0
- запускаем gcc с опциями -E и -include (с файлом, в котором описаны только упрощенные версии fsi и прочей херни);
- выносим нахер все строки, начинающиеся с #
- раскомменчиваем закоммеченное на первом шаге;
???
- профит!
bormand 23.11.2014 12:14 # +1
Xom94ok 23.11.2014 12:28 # 0
комментарии можно, наверное, обезопасить, заменив регулярочкой на что-то вроде /-+/ и /-+* *-+/, чтобы потом легко было вернуть их обратно
осталось только необходимые для разворачивания макросы вернуть к первоначальному валидному варианту и уже прогонять через препроцессор
но ИМХО всё равно не вариант, т.к. потом слишком много ручной работы по возвращению исходников к, кхм... исходному состоянию
UPD: ОК, это всё питушня
всё тлен
bormand 23.11.2014 12:29 # +2
Из недостатков - если в коде встречается //# - он его раскомментит. Можно вылечить более сложной защитой директив, к примеру //----#
bormand 23.11.2014 12:18 # +1
cpp -E -C -P -nostdinc -include fsi.h some.cpp
laMer007 23.11.2014 12:20 # 0
Что это? Подключить хедер из командной строки?
О вы выше ответили.
Ну и если честно так не хотелось бы, тк в коде есть и вполне вменяемые макросы (насколько такое возможно), которым лучше ими и остаться. Например кодогенерация с BOOST_PP_REPEAT или паттерн матчинг аля:
bormand 23.11.2014 12:21 # 0
laMer007 23.11.2014 12:28 # 0
Ну и адский результат cat(i,cat(_fsi_end_,__LINE__)) останется. Впрочем просто fsi поправлю заменив там это на кот(i##_end)
bormand 23.11.2014 12:30 # 0
Ага.
> Это не сработает со всеми адскими макросами гения, что юзают буст к сожалению.
Ну тут х.з. Разве что руками замакросить их на что-то более простое и понятное...
laMer007 23.11.2014 12:35 # 0
Вот если бы тут замену fsi делать регекспами на то, чем я хочу заменить или ещё чем-то кроме регекспов, то этой бы проблемы конечно не было бы, тк мог бы избирательно раскрывать макросы не раскрывая, а заменяя. Может boost::wave что-то такое может? Ну или хотябы избирательно может раскрывать?
bormand 23.11.2014 12:23 # +1
1024-- 23.11.2014 16:19 # 0
Но может, флаги Борманда для компилятора помогут вместе с -E получить на выходе меньше питушни.
http://pastebin.com/5vBwLXph
0. Сохраняем код в preproc.js, бэкапим файлы олимпиадника
1. Берём файл file.cc с кодом олимпиадника
2. node preproc info file.cc options.txt
3. удаляем из вновь созданного options.txt всё то, что следует заинклюдить/раскрыть. Т.е. оставляем в options.txt все макросы/файлы, которые написал не Царь он.
4. node preproc comment file.cc file1.cc options.txt
5. gcc -E <ещё какие флаги> file1.cc > file2.cc
6. node preproc uncomment file2.cc file3.cc
7. удаляем из file3.cc лишнюю питушню. file3.cc - новый файл с раскрытыми макросами.
LispGovno 23.11.2014 21:35 # +1
О кстати. Я придумал. Пойду в фрланс. Буду фигачить там код этими макросами. Затем методом бормонда если заказчику не понравится - рамкрывать макросы. А если понравиться, то и черт с ним. Главное быстро.
bormand 23.11.2014 21:37 # 0
1024-- 23.11.2014 21:45 # 0
И правда, мой код вызовет сущий ад на ровном месте, если автор написал
Первая строка закомментируется, вторая останется.
bormand 23.11.2014 21:46 # +1
1024-- 23.11.2014 21:50 # 0
LispGovno 23.11.2014 21:46 # +1
Прикинь в код после раскрытия эта байда с do while говном встанет? Это явно заказчик одобрит, что по всему коду разбросан такой ад
bormand 23.11.2014 22:02 # 0
P.S. Хотя... тогда придется ревьювить все точки, в которых раскрыт макрос :( Этот do while все-таки не от хорошей жизни втыкали.
Так что с такими макросами считерить не выйдет ;(
laMer007 23.11.2014 12:13 # 0
Тк теперь в макросне 3 запятых вместо двух. То есть таким макросом возможно будет поправить только простые случаи. Хотя конечно их большинство должно быть, так что уже хотябы часть проблем решим и не придется делать это вручную.
Qwertiy 23.11.2014 14:10 # 0
Вполне можно? если там чего хтирого не понапихано, с запятыми в вызовах fsi :)
laMer007 23.11.2014 12:07 # +1
Должно быть тогда ib. У него везде глагол вначале идет по вашей задумке. Единственное что радует это наличие коротких функций, по телу которых хотябы понятно что они делают.
1024-- 23.11.2014 17:41 # +1
* или я грешный посмел толковать волю Высшего Разума и сделал это неправильно
LispGovno 23.11.2014 12:55 # +1
bormand 23.11.2014 13:02 # 0
А смысл? Мути уж тогда через какие-нибудь uint8_t или даже uint32_t...
LispGovno 23.11.2014 13:04 # 0
LispGovno 23.11.2014 21:48 # +2
bormand 23.11.2014 22:49 # +2
Фу-фу-фу
LispGovno 24.11.2014 01:30 # +1
http://govnokod.ru/17155
>Фу-фу-фу
А судьи кто?
bormand 24.11.2014 10:26 # +1
Мизулина.
someone 23.11.2014 14:44 # +4
LispGovno 23.11.2014 14:56 # −3
DlangGovno 24.11.2014 10:39 # +1
Любой из этих пунктов решил бы проблему в зародыше.
bormand 24.11.2014 10:48 # +3
roman-kashitsyn 24.11.2014 11:00 # +4
Главное - взять в команду побольше олимпиадников, и успех обеспечен! У Дурова же "получилось"!
Vasiliy 24.11.2014 12:34 # 0
Анонимус 24.11.2014 12:36 # +1
3.14159265 24.11.2014 12:40 # 0
Стопудов. Как и выбранные языки разработки. Вот все говнят рнр и js, но вк они приносят деньги.
Но всё же я что-то сомневаюсь что Дуров лично рулил именно это самой важной бизнес-составляющей.
Там же сначала совершенно не было никакой монетизации, даже реклама отсутствовала, а мощности и траффик требовались громаднейшие. И что он годами, себе в убыток финансировал проект на этапе начальной раскрутки.
Анонимус 24.11.2014 12:43 # 0
3.14159265 24.11.2014 12:49 # 0
Это какая-то кулстори для прессы. Про историю успеха простого русского пацана, который упорным трудом осуществил свою мечту и всё такое.
Казалось бы глава Роснефти и один узбекский вор тут совершенно непричем...
Анонимус 24.11.2014 13:04 # +1
На самом деле я не вижу ничего постыдного в привлечении крупных денег в свой стартап. Ну Гейтс ведь тоже с контракта с IBM начинал;)
Хотя конечно компании вроде Яндекса, поднявшиеся изначально на качественных продуктах и своих ноу-хау -- такие компании вызывают у меня больше симпатии)
roman-kashitsyn 24.11.2014 13:11 # +3
А компания и правда хорошая.
3.14159265 24.11.2014 13:30 # 0
Там мутная история. Никто ж вам правду не скажет.
Может сначала его финансировали грузинский вор и один еврей.
Судить можно только по косвенным фактам - видя как быстро и умело пашу выперли на мороз можно догадаться какая его роль во всём этом.
Да и судя по тому что контакт не закрывали за пиратство и распространение прона у него явно были высокие покровители.
roman-kashitsyn 24.11.2014 12:53 # +2
7 марта бывший замгендиректора «ВКонтакте» Илья Перекопский обвинил Дурова в предательстве, заявив, что тот «увёл в Telegram 15 лучших программистов-олимпиадников»
ок, в следующий раз буду писать зелёным, раз без него не понятно.
3.14159265 24.11.2014 12:56 # 0
roman-kashitsyn 24.11.2014 12:59 # +1
Анонимус 24.11.2014 13:09 # +1
Проблема не в том что он увел олимпиадников, а в том что весь вконтакте состоит из тысяч маленьких программок на сях примерно такого вот уровня читаемости. И каждую програмку поддерживал ее автор (олимпиадник).
Теперь авторы ушли, и вконтакнт проще переписать, чем разобраться с существующим кодом_)
Анонимус 24.11.2014 13:05 # 0
--Набираешь олмпиадников
--PROFIT
Vasiliy 24.11.2014 15:18 # 0
Они уходят в Гугл
?????
PROFIT
3.14159265 24.11.2014 15:21 # +3
>Они уходят в Гугл
Гугл объявляет банкротство и ты скупаешь их активы за бесценок?
guest 28.11.2014 21:40 # +2
Сами виноваты, code review для чего придумали?