Тезаурус проекта
Feb. 20th, 2015 03:39 pmКакие самые частые слова в языке программирования С++?
Пишем скриптик (комментарии добавлены при публикации):
Перловый скриптик wordcnt таков:
В результате на треть миллиона строк живого кода (nocomments) выходит около 38 тысяч разных умных слов. Частотный словарь начинается так:
(i, it и mod - имена переменных, Expr - имя типа, но не того, которого обычно переменная с именем mod)
Пишем скриптик (комментарии добавлены при публикации):
find Code -name '*.cc' -o -name '*.h' | \ находим все файлы с исходным кодом
xargs cat | \ собираем вместе
tee allsource | \ сохраняем чтоб было
sed s/#/@/g | \ не даем работать препроцессору
cpp | \ теперь он только комментарии удаляет
sed '/#/d;/^$/d' | \ удаляем вставленные препроцессором номера строк и пустые строки
sed "s/'\"'/@/g" | sed 's/\\[\\"]/@/g; s/"[^"]*"/ /g' \ ликвидируем всё в двойных кавычках
> nocomments
wordcnt < nocomments | \ частотный словарь алфавитно-цифровых последовательностей
sort -r -n -k 2 | \ сортируем
grep -v '^ *[0-9]' \ выбрасываем числа
> fullcnts
Перловый скриптик wordcnt таков:
while (<>) {
@words=split(/[\W\s]+/, $_);
foreach $word (@words) {
$wordcnt{$word}++;
}
}
foreach $word (keys(%wordcnt)) {
printf "%20s %d\n", $word, $wordcnt{$word};
}
В результате на треть миллиона строк живого кода (nocomments) выходит около 38 тысяч разных умных слов. Частотный словарь начинается так:
if 27202
const 21901
return 20803
int 13856
void 13070
char 12530
bool 10847
this 8959
std 8399
else 8278
case 7021
NULL 6896
i 6767
false 6288
it 5855
unsigned 5396
include 5287
true 5158
Expr 5046
mod 4678
string 4480
name 4358
break 4043
for 3868
c_str 3804
class 3742
size 3670
public 3633
(i, it и mod - имена переменных, Expr - имя типа, но не того, которого обычно переменная с именем mod)
no subject
Date: 2015-02-21 12:42 am (UTC)no subject
Date: 2015-02-21 12:56 am (UTC)no subject
Date: 2015-02-21 01:19 am (UTC)no subject
Date: 2015-02-21 01:40 am (UTC)no subject
Date: 2015-02-21 01:28 am (UTC)no subject
Date: 2015-02-21 01:40 am (UTC)no subject
Date: 2015-02-21 01:39 am (UTC)тоталитарногонесегодняшнего режима!no subject
Date: 2015-02-21 01:41 am (UTC)no subject
Date: 2015-02-21 06:46 am (UTC)no subject
Date: 2015-02-21 07:04 am (UTC)no subject
Date: 2015-02-21 02:04 am (UTC)Покажи мне свой частотный анализ и я скажу какой код ты пишешь!
no subject
Date: 2015-02-21 02:14 am (UTC)Это я по мотивам code stylometry. Как в естественном языке автора можно с хорошей точностью установить по соотношению частот полудюжины самых частотных слов (союзов, предлогов, местоимений), так и в языке программирования должно быть можно.
В статье подход другой; он сложнее, но, по идее работает на более коротких образчиках: из ~630 строк много статистики о служебных словах не вытащить, приходится грамматику использовать. В крупном проекте индивидуальные особенности усредняются, и можно будет посмотреть, зависит ли распределение частот от предметной области, если кто-нибудь еще не поленится проанализировать.
no subject
Date: 2015-02-21 02:28 am (UTC)Язык тоже важен. На какой-нибудь Джаве около 60% кода вообще генерится средой. Что там можно нанализировать вопрос открытый. Вообще, я вижу что machine learning в последние годы стал модный тренд в computer sciences (за другие науки не скажу, не знаю). У нас на работе интерны тоже бросаются на амбразуру с machine learning наперевес. Результаты обычно так себе. Начинаю понимать Шкрёбиуса с его пессимистическим взглядом на современную науку. :)
П.С. Имя у девочки роскошное.
П.П.С Насчёт предметной области согласен. Большинство корпоративного кода это унылый boilerplate, такой же как и middle management и егойные кодеры. Никакой индивидуальности не обнаружишь.
no subject
Date: 2015-02-21 02:30 am (UTC)no subject
Date: 2015-02-21 03:11 am (UTC)no subject
Date: 2015-02-21 10:30 am (UTC)no subject
Date: 2015-02-21 05:01 pm (UTC)no subject
Date: 2015-02-21 03:31 am (UTC)no subject
Date: 2015-02-21 03:44 am (UTC)no subject
Date: 2015-02-21 06:34 am (UTC)no subject
Date: 2015-02-21 06:39 am (UTC)no subject
Date: 2015-02-21 06:48 am (UTC)no subject
Date: 2015-02-21 04:40 pm (UTC)no subject
Date: 2015-02-21 05:33 pm (UTC)auto* pObj = new QMyObject(this); // this is also QObject
Естественно QMyObject::QMyObject(QObject* parent = 0) : QObject(parent) {blah();}
А конструктор QObject вызывает что-то вроде if(parent) parent->addToChildList(this);
no subject
Date: 2015-02-22 02:44 am (UTC)if (this == NULL) return DEFAULT_VALUE;
no subject
Date: 2015-02-21 10:32 am (UTC)no subject
Date: 2015-02-21 04:39 pm (UTC)no subject
Date: 2015-02-21 04:48 pm (UTC)no subject
Date: 2015-02-21 05:03 pm (UTC)no subject
Date: 2015-02-22 02:40 am (UTC)no subject
Date: 2015-02-21 08:33 am (UTC)это же просто стихи!
no subject
Date: 2015-02-21 11:46 am (UTC)Ничто очернит дуальное эго!
ЗППП - другое дело! Ноль
Я неверный! И анонимный!
Включил правду! Выразил моду!
Нанизал имя! Послушал Кастро!
Класс! Масштаб! Вход свободный!
no subject
Date: 2015-02-21 05:06 pm (UTC)no subject
Date: 2015-02-22 09:01 am (UTC)no subject
Date: 2015-02-21 04:06 pm (UTC)no subject
Date: 2015-02-21 04:08 pm (UTC)no subject
Date: 2015-02-21 04:31 pm (UTC)no subject
Date: 2015-02-21 04:30 pm (UTC)no subject
Date: 2015-02-21 05:03 pm (UTC)no subject
Date: 2015-02-21 05:09 pm (UTC)no subject
Date: 2015-02-21 05:16 pm (UTC)no subject
Date: 2015-02-21 05:27 pm (UTC)no subject
Date: 2015-02-21 10:35 pm (UTC)no subject
Date: 2015-02-22 12:21 am (UTC)Also, more optimizations are possible when the compiler is allowed to assume that a value pointed to hasn't changed after a function call.