Здравствуйте, Lonely Dog, Вы писали:
LD>Т.е., пришли в функцию, что-то сделали, и вышли, сохранив номер строки из которой мы вышли. В следующий раз мы продолжим выполнение с этого же места. Этот код не компилируется в студии если установлен режим сохранения отладочной информации Edit and continue. Выводится ошибка "case label not a constant" или типа того. Меняем эту настройу на что-нибудь другое, и все работает.
LD>Как это поддерживать? Какой смысл в открытости кода, если поддерживать его могут только авторы?
Нормально его поддерживают. Я вот Putty на GTK2 под Линукс помог перенести, сейчас пакет делаю (
https://launchpad.net/putty2).
LD>2. В файле window.c приведена функция TranslateKey длиной в 800 строк! Это же убиться можно.
LD>3. Мой любимый пример. Функция term_out из файла terminal.c. Она занимает 1830 строк. Там реализован какой-то офигенный конечный автомат. С какими-то вложенными состояниями и метками case вида:
Используется подход с С coroutines, описаный вот здесь:
http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html
Об этом, кстати, в их доке по разработке сказано.
LD>4. Также советую посмотреть на то, какое количество статических и глобальных переменных используется в этом коде.
Об этом там тоже сказано.