spamsink: (lenin)
[personal profile] spamsink
Какие самые частые слова в языке программирования С++?

Пишем скриптик (комментарии добавлены при публикации):
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)

Date: 2015-02-21 04:40 pm (UTC)
From: [identity profile] sab123.livejournal.com
Передается параметром в туче мест?

Date: 2015-02-21 05:33 pm (UTC)
From: [identity profile] fatoff.livejournal.com
В Qt есть базовый класс QObject, как гордый праотэц большинства библиотечных классов. Если вы создаёте новый объект, то можете передать ему this от текущего, и более не заботиться о явном освобождении ресурсов того объекта.

auto* pObj = new QMyObject(this); // this is also QObject

Естественно QMyObject::QMyObject(QObject* parent = 0) : QObject(parent) {blah();}

А конструктор QObject вызывает что-то вроде if(parent) parent->addToChildList(this);
Edited Date: 2015-02-21 05:36 pm (UTC)

Date: 2015-02-22 02:44 am (UTC)
From: [identity profile] sab123.livejournal.com
Ну, значит логично, передается параметром. Из других полезных применений - идиома для методов, которые можно вызывать с нулевым объектом:

if (this == NULL) return DEFAULT_VALUE;
Page generated Mar. 7th, 2026 07:45 pm
Powered by Dreamwidth Studios