Re: Качество кода open-source
От: Programador  
Дата: 17.06.08 19:37
Оценка: :))
Здравствуйте, Lonely Dog, Вы писали:

LD>Привет!


LD>Сразу же хочу сказать, что я свои выводы я сделал на основании просмотра одной open-source программы под названием PuTTY.


босяки одним словом
Re[10]: фото
От: Cyberax Марс  
Дата: 17.06.08 20:28
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Добрался до книжки.

Ну и? Как ни странно, но виртуальные вызовы идут через таблицу виртуальных вызовов. Следующая новость: вода — мокрая, небо — голубое, трава — зелёная.

Как ни странно, но в С++ прекрасно можно жить без виртуальных вызовов (например, их почти нет в STL). Точно так же как и в С можно использовать вызовы через vtbl.
Sapienti sat!
Re[10]: фото
От: jazzer Россия Skype: enerjazzer
Дата: 18.06.08 01:01
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Добрался до книжки.


У тебя, похоже, проблемы с логикой.
На основании того, что виртуальные вызовы идут через vtbl, ты делаешь вывод, что все вызовы идут через vtbl.

Более того, вот тебе задача:
struct A1 { virtual void f(){} };
struct A2: A1 { virtual void f(){ A1::f(); } };
...
struct A100: A99 { virtual void f(){ A99::f(); } };
int main()
{
  A100 a100;
  a100.f();
}

А теперь посчитай, сколько здесь виртуальных вызовов, и нужно ли их все делать через vtbl, или компилятор может принять решение на этапе компиляции (и принимает, если нормальный компилятор)?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[10]: фото
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.06.08 04:16
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

S>Добрался до книжки.

Нда. Шеридан, очень смешно видеть человека, который оценивает производительность программы по книге, посвященной языку.
Ты не обратил внимание, что Бьярни везде пишет "вот как могла бы выглядеть..."? Это потому, что он пишет про синтаксис и семантику, а не про использование регистров и такты процессора.
Он даже не пишет про возможные оптимизации — надо полагать потому, что даже без их упоминания плюсы достаточно тяжелы для изучения.

Для того, чтобы хоть как-то рассуждать о производительности и ресурсопотреблении, нужно читать не "Язык С++", а "Разработка оптимизирующего компилятора для С++".
Ну или регулярно пользоваться реальным компилятором, профайлером и дизассемблером.

В целом, язык С++ допускает более широкий класс оптимизаций, чем С — благодаря более выразительной семантике. Специальные усилия были потрачены на то, чтобы обеспечить возможности по инлайнингу, иначе, к примеру, перегруженные операторы работали бы существенно хуже встроенных.

Кроме того, есть масса техник по устранению виртуальности. Один пример уже привели. Более хитрые компиляторы даже умеют выполнять спекулятивный инлайнинг.
Вот, почитай доклад парней, которые ближе к мартену, чем Мастер Цеха Страуструп: http://blogs.msdn.com/apardoe/attachment/1685578.ashx
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[13]: Качество кода open-source
От: shrecher  
Дата: 18.06.08 04:39
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I> Я перешел на дотнет.

Я тоже дотнет очень уважаю, но там платят хуже чем c++, а это ключевой момент.

I>Программа кушает около полуторагигабайт памяти. лишние lpVtbl дают и вовсе выход за границы процесса, в виндовсе это 2гб и планками памяти это не лечится.


Если программа нуждается около полуторагигабайт оперативной памяти, то возможно ей на X86 уже делать нечего, нужно 64 бита внедрять. Пытаться оптимизировать путем перехода на С, это только отягивать себе конец, в любой момент нужно будет масштабировать и тут все упрется в ограничения процессора. А для x64 проблем с адресации в данную эру еще не существует.
Re[13]: Качество кода open-source
От: shrecher  
Дата: 18.06.08 04:50
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:
I>Программа кушает около полуторагигабайт памяти. лишние lpVtbl дают и вовсе выход за границы процесса, в виндовсе это 2гб и планками памяти это не лечится.

Кстати, около полуторагигабайт памяти вероятнее всего занимают данные. А они будут везде едины, что на С, что на С++ или C#. lpVtbl возможно и прибавит насколько мегабайт к исполняемому коду, но на размер данных это не скажется.
Re[14]: Качество кода open-source
От: Sergey Россия  
Дата: 18.06.08 07:38
Оценка:
shrecher пишет:

> Если программа нуждается около полуторагигабайт *оперативной* памяти, то

> возможно ей на X86 уже делать нечего, нужно 64 бита внедрять. Пытаться
> оптимизировать путем перехода на С, это только отягивать себе конец, в
> любой момент нужно будет масштабировать и тут все упрется в ограничения
> процессора. А для x64 проблем с адресации в данную эру еще не существует.

Для x64 к сожалению существует проблема с корпоративными клиентами,
которые не хотят менять операционку.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[14]: Качество кода open-source
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.06.08 08:47
Оценка:
Здравствуйте, shrecher, Вы писали:

S>Если программа нуждается около полуторагигабайт оперативной памяти, то возможно ей на X86 уже делать нечего, нужно 64 бита внедрять.


Это не я решаю, а корпоративные клиенты.

>Пытаться оптимизировать путем перехода на С, это только отягивать себе конец, в любой момент нужно будет масштабировать и тут все упрется в ограничения процессора. А для x64 проблем с адресации в данную эру еще не существует.


Никто и не пытается переходить на С. Вместо этого перешли на дотнет.
Re[14]: Качество кода open-source
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.06.08 09:00
Оценка:
Здравствуйте, shrecher, Вы писали:

S>Здравствуйте, Ikemefula, Вы писали:

I>>Программа кушает около полуторагигабайт памяти. лишние lpVtbl дают и вовсе выход за границы процесса, в виндовсе это 2гб и планками памяти это не лечится.

S>Кстати, около полуторагигабайт памяти вероятнее всего занимают данные. А они будут везде едины, что на С, что на С++ или C#. lpVtbl возможно и прибавит насколько мегабайт к исполняемому коду, но на размер данных это не скажется.


Так да не так. lpvtbl при множественном наследовании не один на объект, а несколько штук.

для этого, кстати, придумана оптимизация если дерево наследования огромное, __declspec(novtable)

Основная проблема, когда объекты мелкие и их очень много.
Re[15]: Качество кода open-source
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.06.08 09:04
Оценка:
Здравствуйте, Ikemefula, Вы писали:

S>>Здравствуйте, Ikemefula, Вы писали:

I>>>Программа кушает около полуторагигабайт памяти. лишние lpVtbl дают и вовсе выход за границы процесса, в виндовсе это 2гб и планками памяти это не лечится.

S>>Кстати, около полуторагигабайт памяти вероятнее всего занимают данные. А они будут везде едины, что на С, что на С++ или C#. lpVtbl возможно и прибавит насколько мегабайт к исполняемому коду, но на размер данных это не скажется.


I>Так да не так. lpvtbl при множественном наследовании не один на объект, а несколько штук.


I>для этого, кстати, придумана оптимизация если дерево наследования огромное, __declspec(novtable)


I>Основная проблема, когда объекты мелкие и их очень много.


И основная проблема кстати говоря, не размер, а управление памятью. На дотнете памяти стало расходоваться немного больше, но пропала необходимость искать утечки памяти, утечки интерфейсов и тд.
Re[15]: Качество кода open-source
От: shrecher  
Дата: 18.06.08 10:02
Оценка:
Здравствуйте, Sergey, Вы писали:

S>shrecher пишет:


>> Если программа нуждается около полуторагигабайт *оперативной* памяти,


S>Для x64 к сожалению существует проблема с корпоративными клиентами,

S>которые не хотят менять операционку.


Понимаешь, тут либо 1.5 Gb либо лицензия на 64-bit. Можно ESX поставить и как к терминалу коннектится если что-то жутко большое.

Да, отвлеклись от темы. Язык программированния тут имеет малое значение. Использование чистого С проблему не решит, а сделает только хуже — будет больше security проблем, всякие strcpy вылезут.
Re[11]: фото
От: Sheridan Россия  
Дата: 18.06.08 19:01
Оценка: :)
Sinclair однажды (18 июня 2008 08:16) писал:

Синклер, я тоже говорил о том, что "не всегда, но бывает".
В целом же я за с++, он дает нааамного больше свободы чем С, и возможные затраты времени исполнения — ничто по сравнению с удобством.
А затраты времени на компилирование — это фигня. Компилируется 1 раз.

--
...belive in the matrix...
Posted via RSDN NNTP Server 2.1 beta
Matrix has you...
Re[12]: фото
От: Константин Б. Россия  
Дата: 19.06.08 01:09
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Sinclair однажды (18 июня 2008 08:16) писал:


S>А затраты времени на компилирование — это фигня. Компилируется 1 раз.


http://xkcd.com/303/
Re[12]: фото
От: Cyberax Марс  
Дата: 19.06.08 04:21
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

S>Синклер, я тоже говорил о том, что "не всегда, но бывает".

"Но бывает" нужно в тех случаях, где потребуется аналог vtbl и в чистом C.
Sapienti sat!
Re[13]: фото
От: Sheridan Россия  
Дата: 19.06.08 05:11
Оценка: -1
Константин Б. однажды (19 июня 2008 [Четверг] 05:09) писал:

> S>А затраты времени на компилирование — это фигня. Компилируется 1 раз.

> http://xkcd.com/303/
Видел, ага. В таких случаях имхо лучше купить многопроцессорный комп и компилировать в несколько потоков.


--
...belive in the matrix...
Posted via RSDN NNTP Server 2.1 beta
Matrix has you...
Re[2]: Качество кода open-source
От: Константин Черногория  
Дата: 09.07.08 23:00
Оценка: 2 (2)
Здравствуйте, Cyberax, Вы писали:

LD>>3. Мой любимый пример. Функция term_out из файла terminal.c. Она занимает 1830 строк. Там реализован какой-то офигенный конечный автомат. С какими-то вложенными состояниями и метками case вида:

C>Используется подход с С coroutines, описаный вот здесь: http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html

Fibers в WinAPI уже лет 15 — появились в Windows NT Workstation 3.51 и Win98: в отличие от этих.. хмм.. макросов , код остаётся весьма читабельным.
Лишний раз убеждаюсь, шо без Windows жизни нет
Re[5]: putty paste patch
От: jazzer Россия Skype: enerjazzer
Дата: 14.04.09 03:07
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, Cyberax, Вы писали:


C>>А что за патч?

J>Сейчас он пэйстит при нажатии средней кнопки мыши.
J>А должен пэйстить при ее отпускании, иначе оно нифига не работает с Exceed, который копирует иксовое содержимое в буфер при потере фокуса, которое как раз при нажатии и происходит.
J>Т.е. PuTTY в результате вставляет предыдущее содержимое, а если кликнуть еще раз, то уже вставит новое.
J>Выглядит это феерически.

J>В этом патч и состоит.


В общем, год с лишним прошел, эффекта нет.

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

файл terminal.c, строка 5800, выглядит так:
    } else if (bcooked == MBT_PASTE
               && (a == MA_CLICK           //  <-- this is the line 5800
#if MULTICLICK_ONLY_EVENT
                   || a == MA_2CLK || a == MA_3CLK
#endif
                   )) {
        request_paste(term->frontend);
    }

надо заменить этот код на
    } else if (bcooked == MBT_PASTE && a == MA_RELEASE) {
        request_paste(term->frontend);
    }

тестировал под виндой, с одиночными и мультикликами — никаких проблем.

Если у кого есть энергия общаться с разработчиками — велкам.
Мне моего локального билда с патчем хватает.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
putty paste-on-release patch middle click вставка
Re[7]: �������� ���� open-source
От: byleas  
Дата: 14.04.09 04:56
Оценка:
Здравствуйте, max779, Вы писали:

M>вот ты пишешь программу и пользуешься этими магическими YIELD и т.д. Потом ты увольняешься, на твое место приходит другой кодер и он не знаком с этим делом...

Если не индус, то либо будет иметь представление об этом, либо разберётся. Иначе — зачем вам ещё одна обезьянка?
Re: Качество кода open-source
От: gdm Голландия http://smartmobilelab.com
Дата: 14.04.09 10:07
Оценка: 3 (1)
LD>Мне интересно, весь open-source написан так же или это мне так повезло?
LD>Как при таком качестве кода они умудряются что-то разумное делать?

Вот [url=http://savesources.com/index.html]тут[url] можно увидеть, что количество например использования strlen в условии циклов в опен соурс проектах около 50 000, что тоже говорит об низком качестве. Но это средняя тепмература по палате у популярных проектов думаю все ок с понятностью кода.
Да и потом, в закрытом коде можно такое увидеть ....


Dmytro Gorbunov
http://savesources.com
Dmytro Gorbunov
Re[7]: Качество кода open-source
От: vladimir.vladimirovich США  
Дата: 16.04.09 00:31
Оценка:
Здравствуйте, Ikemefula, Вы писали:

> I>А вот в более серьезных проектах обычно есть контроль за качеством кода. И здесь девелоперы приучаются писать не для себя одного.


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