Здравствуйте, DMitay, Вы писали:
DM>Здравствуйте, Сергей Губанов, Вы писали:
DM>Сергей, у меня к Вам вопрос! В каком учебном заведении вы защищали свою кандидатскую?
Я откроя вам тайну, уважаемые незаигнорившие эту ветку из раздела "Коллеги, улыбнитесь"
Сергей Губанов — видный и перспективный учёный в области психологии IT-специалистов.
Сейчас он затеял новое исслендование, создал этот топик и наблдает
за разнообразными реакциями отвечающих. Иногда подогревая спор своими репликами,
в случаях, когда хочет поподробнее какой нибудь заинтересовавший его феномен.
А также для маскировки истинной цели своего исследования.
Здравствуйте, moudrick, Вы писали:
M>Здравствуйте, DMitay, Вы писали:
DM>>Здравствуйте, Сергей Губанов, Вы писали:
DM>>Сергей, у меня к Вам вопрос! В каком учебном заведении вы защищали свою кандидатскую?
M>Я откроя вам тайну, уважаемые незаигнорившие эту ветку из раздела "Коллеги, улыбнитесь"
M>Сергей Губанов — видный и перспективный учёный в области психологии IT-специалистов.
M>Сейчас он затеял новое исслендование, создал этот топик и наблдает M>за разнообразными реакциями отвечающих. Иногда подогревая спор своими репликами, M>в случаях, когда хочет поподробнее какой нибудь заинтересовавший его феномен. M>А также для маскировки истинной цели своего исследования.
Угу, конечно... тогда этот видный и перспективный ученый в области психологии просто напросто присвоил себе звание кфмн.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Socrat, Вы писали:
S>>Там мы дождемся перевода данного или похожего кода на Оберон?
СГ>Не понял, я что ли должен за Вас чего-то переводить? А самим слабо что-ли? Кому это нужно, мне или Вам? Переведите, подсчитайте служебные слова, возьмите калькулятор, разделите два полученных числа друг на друга. Ну?
Ладно. Берем выражение:
while (str1[i++] = str2[j++]);
Получаем:
* * str1 * i * * * str2 * j * * * *
Теперь паскаль (оберан не знаю):
repeat
str1[i] := str2[j];
i := i+1;
j := j+1
until str1[i-1] = 0
Получаем:
* str1 * i * * str2 * j * * i * i * 1 * j * j * 1 * str1 * i * 1 * * 0
Теперь: в С каждая переменная используется по одному разу. Заменяем повторные использования идентификаторов и числа (в С их нет) на звездочки:
Здравствуйте, Mamut, Вы писали:
M> Дебагить его тоже невозможно
Похоже для всех Си-образных программистов сидение в дебагере — это основное времяпрепровождение.
А Вы вообще в курсе, что есть класс программ, которые в принципе нельзя дебажить?
(например, системы реального времени нельзя дебажить по определению)
Лично я, например, в дебагере не сижу вообще:
1) Использую математически доказуемые алгоритмы.
2) Если не могу выполнить пункт (1), то делаю так что программа сама сообщает где ошибка.
M> На более-менее реальных примерах Оберон в десятки раз проигрывает в читаемости.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Не понял, я что ли должен за Вас чего-то переводить? А самим слабо что-ли? Кому это нужно, мне или Вам? Переведите, подсчитайте служебные слова, возьмите калькулятор, разделите два полученных числа друг на друга. Ну?
Ну никто тебя за язык не тянул...
Имеем :
C/C++ (не используя адресной арифметики):
while (str1[i++] = str2[j++]);
Лексемы: 11
Строки: 1
Символы: 30;
C/C++ (с адресной арифметикой):
while (*str1++ = *str2++);
Лексемы: 9
Строки: 1
Символы: 26;
OBERON:
continue := TRUE;
WHILE continue DO
inc(i);
inc(j);
str1[i] = str2[j];
IF str[j] == #0 THEN continue := FALSE END;
END;
Лексемы: 26
Строки: 7
Символы (не считая отступов): 113;
Здравствуй, Mamut.
M> MODULE FigureList; (* tlozza@student.ethz.ch *) M> TYPE M> Figure = OBJECT M> name : System.String; M> next : Figure; (* Reference to the next figure. *) M> END Figure; M> VAR M> FigureList, MyFigure, Iterator : Figure; M> BEGIN M> NEW(MyFigure); (* Create new figure object/instance. *) M> MyFigure.name := "my favorite";
Здравствуйте, Сергей Губанов, Вы писали:
СГ>В данном случае BEGIN END — это не самостоятельный блок, а часть составной инструкции PROCEDURE или MODULE.
СГ>А еще есть MODULE ... BEGIN ... CLOSE ... END
СГ>В данном случае BEGIN END — это не самостоятельный блок, а часть составной инструкции PROCEDURE или MODULE.
и видим, что если не BEGIN, то END присутствует в Обероне повсюду. Так, если быстренько посчитать разницу между [BEGIN + ]END ([пять + ]три символа, написанных заглавными буквами) и комбинацию {} (два символа, выделяющих группу), то увидим, что лексемы — побоку, главное — читаемость.
Здравствуйте, DMitay, Вы писали:
DM>Здравствуйте, Сергей Губанов, Вы писали:
DM>Сергей, у меня к Вам вопрос! В каком учебном заведении вы защищали свою кандидатскую?
Ни в каком учебном заведении я ее не защищал. Я ее защищал в одном из самых престижных институтов РАН по теоретической физике. Но к программированию она отношения не имеет. Тема диссертации "Квантовая групповая редукция XXZ модели Гейзенберга".
Здравствуйте, Mamut, Вы писали:
СГ>>А еще есть MODULE ... BEGIN ... CLOSE ... END
СГ>>В данном случае BEGIN END — это не самостоятельный блок, а часть составной инструкции PROCEDURE или MODULE.
и видим, что если не BEGIN, то END присутствует в Обероне повсюду. Так, если быстренько посчитать разницу между [BEGIN + ]END ([пять + ]три символа, написанных заглавными буквами) и комбинацию {} (два символа, выделяющих группу), то увидим, что лексемы — побоку, главное — читаемость.
Я все понял. Чтобы С победил Оберон, надо просто упразднить {
СГ>Похоже для всех Си-образных программистов сидение в дебагере — это основное времяпрепровождение. СГ>А Вы вообще в курсе, что есть класс программ, которые в принципе нельзя дебажить? СГ>(например, системы реального времени нельзя дебажить по определению)
СГ>Лично я, например, в дебагере не сижу вообще: СГ>1) Использую математически доказуемые алгоритмы. СГ>2) Если не могу выполнить пункт (1), то делаю так что программа сама сообщает где ошибка.
Это программы для калькулятора можно математически доказывать Есть работы по доказательству C-программ, в статьях начала 90-х видел.
Хочу увидеть математическое доказательство правильности:
1. Отрисовки ГУИ-элементов.
2. Взаимодействия с API (про разные грабли все наслышаны).
3. Средних размеров приложения, класса ICQ (движок в расчёт не берём).
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Лично я, например, в дебагере не сижу вообще: СГ>1) Использую математически доказуемые алгоритмы. СГ>2) Если не могу выполнить пункт (1), то делаю так что программа сама сообщает где ошибка.
Похоже ты не занимался реальным программированием... Теоретик? Тогда понятно — в сад.
M>> На более-менее реальных примерах Оберон в десятки раз проигрывает в читаемости.
СГ>А вот тут как на счет читаемости: СГ>
Здравствуйте, moudrick, Вы писали:
СГ>>2) Если не могу выполнить пункт (1), то делаю так что программа сама сообщает где ошибка.
M>С указанием (номера строки) / (номера символа) начала и конца ошибочной инструкции?
M>Или как? Можно поподробнее, желательно с примером, приближенным к реальности.
Да. И распечатывает все глобальные переменные и локальные переменные функции.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Mamut, Вы писали:
M>> Дебагить его тоже невозможно
СГ>Похоже для всех Си-образных программистов сидение в дебагере — это основное времяпрепровождение. СГ>А Вы вообще в курсе, что есть класс программ, которые в принципе нельзя дебажить? СГ>(например, системы реального времени нельзя дебажить по определению)
СГ>Лично я, например, в дебагере не сижу вообще: СГ>1) Использую математически доказуемые алгоритмы. СГ>2) Если не могу выполнить пункт (1), то делаю так что программа сама сообщает где ошибка.
Теоретически, нет разницы между теорией и практикой. Практически же, разница есть.
Реалтайм можно дебажить — начиная от хардверных стендов и кончая самыми разными чисто софтверными инструментами (журнал обращений к ОС, отладочный вывод, а то и пошаговое выполнение отдельных задач).
Пример: умело расставляя приоритеты нескольким задачам, ввели систему в жуткие тормоза. Журнал показал, что идёт битва за один системный мутекс (в менеджере памяти), а расстановка меток выявила участки кода, где захват этого мутекса приводил к дребезгу.
Дальше было тонкое колдовство над временной диаграммой...