- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
typedef void Start1(void);
struct Kernel
{
Start1 Start;
} kernel;
void Kernel::Start(void)
{
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 223
+11
typedef void Start1(void);
struct Kernel
{
Start1 Start;
} kernel;
void Kernel::Start(void)
{
}
Как всегда оттуда.
+16
void keyStart(int key,void (*func)())
{
while(SDL_PollEvent(&keyEvent))
{
switch(keyEvent.type)
{
case SDL_KEYDOWN:
switch(keyEvent.key.keysym.sym)
{
/*Выход*/
case SDLK_ESCAPE:
func();
break;
case SDLK_w:
func();
break;
case SDLK_q:
func();
break;
default:
break;
}
break;
default:
break;
}
}
}
Функция высшего порядка, мужики. Сами знаете откуда.
+68
public ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel) {
if (initialCapacity < 0)
throw new IllegalArgumentException();
- unsigned?
- ЖАБАПРОБЛЕМЫ.
А ещё это не портируется на 64хбитные платформы с 32хбитным intом.
+129
public Match(source:SourceLexemes, namedLinkDictionary:NamedLinkDictionary, settings:MatchSettings):MatchResult
def endMatchingBlockLexemesByType = settings._endMatchingBlockLexemesByType;
def endMatchingBlockLexemesByValue = settings._endMatchingBlockLexemesByValue;
assert([_beginOfMatchBlock, _endOfMatchBlock].ForAll(excludedItem => !endMatchingBlockLexemesByValue.Contains(excludedItem)));
def matchLexeme(amountOfEntryBlock=0, matchedLexemes=[], sourceTail=source)
|(0, _::_, _) => Some(matchedLexemes, sourceTail)
|(_, _, lexeme_::_) when endMatchingBlockLexemesByType.Contains(lexeme_._type) => None()
|(_, _, lexeme_::lexemes_) =>
match(lexeme_._value, amountOfEntryBlock)
|(value_, _) when endMatchingBlockLexemesByValue.Contains(value_) => None()
|(_beginOfMatchBlock, _) => matchLexeme(amountOfEntryBlock+1, lexeme_::matchedLexemes, lexemes_)
|(_endOfMatchBlock, 0) => None()
|(_endOfMatchBlock, _) => matchLexeme(amountOfEntryBlock-1, lexeme_::matchedLexemes, lexemes_)
|(_, 0) => None()
|(_, _) => matchLexeme(amountOfEntryBlock, lexeme_::matchedLexemes, lexemes_)
|_ => None()
|_ => None()
match(matchLexeme())
|None => MatchResult.Failure(source, namedLinkDictionary)
|Some((matchedLexemes_, unmatchedLexemesTail_)) => MatchResult.Success(unmatchedLexemesTail_, updateNamedLinkDictionary(matchedLexemes_, namedLinkDictionary))
Вчера заглянул в свой код.
Есть один язык, так вот в нем паттерн-матчинг задается на уровне сигнатур функций.
В связи с тем, что я каждую ночь читал книгу по кулХацкелу, то то что там было написано - вьелось мне в подкоррку и я этого даже не заметил.
По ночам когда читаешь что-то, оно проникает в незащищенное подсознание. Я даже не ожидал, что напишу такой код. Но я его написал и только опосля понял, что с кодом что-то не так.
Беда пришла оттуда, откуда её не ждали.
Ещё я больше не могу без таких функций, как id или ($) или (.) или стрелочка\рыбка. Меня все это конечно раздражает... Мне кажется, что меня держут в клетке и не дают пользоваться правильными функциями.
Я всегда считал, что зашквар и профессиональная деформация может быть только от крестов.
Похоже я очень сильно ошибался и поплатился за это.
Что посоветуете?
+23
#include <iostream>
#include <stdlib.h>
#include <typeinfo>
using namespace std;
#define ololo for(volatile register int i=0;i<10;++i);
struct VB
{
virtual void f() const =0;
};
class V1: public VB
{
void f() const {ololo}
};
class V2: public VB
{
void f() const {ololo}
};
struct TU1
{
inline void f() const {ololo}
};
struct TU2
{
inline void f() const {ololo}
};
struct TUB
{
const type_info* type;
union
{
TU1 tu1;
TU2 tu2;
};
template<class T>
void ctor()
{
this->type=&typeid(T);
}
template<class T>
inline void call(const T& f)
{
if(this->type==&typeid(TU1))
f(this->tu1);
else
f(this->tu2);
}
};
enum {N=1000, N2=N*50};
int main() {
cout<<"ok"<<endl;
{
VB*v[N];
for(int i=0;i<N;++i)
if(rand()%2)
v[i]=new V1;
else
v[i]=new V2;
volatile clock_t a=clock();
for(int j=0;j<N2;++j)
for(int i=0;i<N;++i)
v[i]->f();
volatile clock_t b=clock();
cout<< (double)(b - a) / CLOCKS_PER_SEC<<endl;
}
cout<<"ok"<<endl;
{
TUB v[N];
for(int i=0;i<N;++i)
if(rand()%2)
v[i].ctor<TU1>();
else
v[i].ctor<TU2>();
struct Continuation
{
inline void operator()(const TU1& a) const {a.f();}
inline void operator()(const TU2& a) const {a.f();}
} cps;
volatile clock_t a=clock();
for(int j=0;j<N2;++j)
for(int i=0;i<N;++i)
v[i].call(cps);
volatile clock_t b=clock();
cout<< (double)(b - a) / CLOCKS_PER_SEC<<endl;
}
cout<<"ok"<<endl;
return 0;
}
http://ideone.com/plFaLM
Тут в соседней теме разгорелся спор, что быстрее - полиморфизм виртуальных функций или полиморфизм tagget union. По сути последнее - выбор по if нужной виртуальной функции. Говорят в Java быстрее второе.
Тема родилась из http://govnokod.ru/12025#comment158188
Получилось по результатам измерений:
Виртуальные функции: 1.8 секунд.
tagget union: 1.94 секунд.
Притом это всего 2 полиморфных типа в tagget union, а если рост числа полиморфных классов будет расти, то разрыв между виртуальными функциями и tagget union только увеличится. Притом производительность tagget union будет только падать.
Тема поднята ещё со взглядом на функциональные языки. Это ведь там так модны ADT с постоянным внутри ifподобным паттернматчингом по ним.
Жду указания на косяки или способы поднять производительность tagget union.
+128
[Record] variant ItemPatternMatched: PatternMatchedBase, IPatternMatched
_matchByLexemeValue:option[string]
public Match(source:SourceLexemes, namedLinkDictionary:NamedLinkDictionary):MatchResult
match(source)
|[] => MatchResult.EndOfLexemes(source, namedLinkDictionary)
|lexeme_::lexemes_=> def updatedNamedLinkDictionary = updateNamedLinkDictionary(lexeme_::[], namedLinkDictionary);
def failure = MatchResult.Failure(source, namedLinkDictionary);
def success = MatchResult.Success(lexemes_, updatedNamedLinkDictionary);
match(_matchByLexemeValue)
|None | Some(lexemeValue_) when (lexemeValue_==lexeme_._value) =>
match(this, lexeme_._type)
|(Symbol, SourceLexeme.Type.Symbol) | (Identificator, SourceLexeme.Type.Identificator) | (Number, SourceLexeme.Type.Number) =>
success
|_ =>
failure
|_ =>
failure
|Symbol
|Identificator
|Number
Начальник, посмотрев на код, сказал, что NemerleGovno. Я не знаю, что ему ответить?
+26
std::RAII_File(fileName, moda, [&](std::IOHandle fHandle)
{
//...
});
Паrни. Что-за код мне достался? Какой наркоман это написал? У него же ЛГМ лямбда головного мозга.
О std-инъекциях я даже молчу.
+137
using System;
class TLockCriticalSystemResource : IDisposable
{
public TLockCriticalSystemResource(){Console.WriteLine("Acquire critical system resource");}
public void Dispose(){Console.WriteLine("Release critical system resource");}
public bool Property1{private get{return true;}set{throw new Exception();}}
}
public class Test
{
public static void Main()
{
using (var file = new TLockCriticalSystemResource()
{
Property1=true
})
{
// Делаем чего-то с ресурсом
}
}
}
Ололо. using не даёт гарантию безопасности с точки зрения исключений:
http://ideone.com/nHDIJ
Системный ресурс остался захваченным.
+22
#include <iostream>
using namespace std;
auto fw(int i)->bool
{
return cout<<"Привет станция мир"<<i<<"!"<<endl, true;
}
auto ff()->bool
{
return cout<<"Это должно быть последние выполненное подвыражение."<<endl, false;
}
auto ft()->bool
{
return cout<<"Хьюстон, у нас КРЕСТОПРОБЛЕМЫ. Нарушен порядок вычисления и ленивость логических операторов. Мы падаем!!!!1111"<<endl, true;
}
struct TBabylonBug
{
bool a=true;
TBabylonBug(){}
TBabylonBug(bool a):a(a){}
const TBabylonBug operator&&(const bool ophui) const
{
return a&&ophui;
}
const TBabylonBug operator&&(const TBabylonBug& ophui) const
{
return a&&ophui.a;
}
};
int main() {
cout<<"кo"<<endl;
true&&fw(1)&&fw(2)&&ff()&&ft();
cout<<"кo ко"<<endl;
cout<<"TBabylonBug().a = "<<boolalpha<<TBabylonBug().a<<endl;
TBabylonBug()&&fw(1)&&fw(2)&&ff()&&ft();
cout<<"кo ко ко"<<endl;
return 0;
}
http://liveworkspace.org/code/efffb5204b0f69a2725b7d9f4ba0d570
+140
var actions = new List<Action>();
foreach (var i in Enumerable.Range(1, 3))
{
actions.Add(() => Console.WriteLine(i));
}
foreach (var action in actions)
{
action();
}
Внезапно:
http://ideone.com/RaiHr
http://ideone.com/EMQBA