Сегодня был на собеседовании по C++.
Спросили чего такого принципиального нельзя сделать на C но можно на C++.
Я сказал, что фактически, все возможно.
Перебрал все стандартные варианты вроде наследования, виртуальных функций.
Поведение шаблонов с допущениями тоже можно реализовать с помощью макросов. В крайнем случае в рантайм реализовать.
В конце концов, C обладает полнотой по Тьюрингу.
Нет говорят, все не то.
Re: Чего принципиально не может C по сравнению c C++.
Здравствуйте, more, Вы писали:
M>Спросили чего такого принципиального нельзя сделать на C но можно на C++. M>Нет говорят, все не то.
Само-собой. Затрахать собеседника вопросами по Си, существенно сложнее чем вопросами по Плюсам. Так что правильный ответ: вынести мозг кандидату дурацкими вопросами.
Re: Чего принципиально не может C по сравнению c C++.
Здравствуйте, more, Вы писали:
M>Сегодня был на собеседовании по C++. M>Спросили чего такого принципиального нельзя сделать на C но можно на C++. M>Я сказал, что фактически, все возможно. M>Перебрал все стандартные варианты вроде наследования, виртуальных функций. M>Поведение шаблонов с допущениями тоже можно реализовать с помощью макросов. В крайнем случае в рантайм реализовать. M>В конце концов, C обладает полнотой по Тьюрингу. M>Нет говорят, все не то.
не уверен. может исключения?
Re: Чего принципиально не может C по сравнению c C++.
Здравствуйте, more, Вы писали:
M>Поведение шаблонов с допущениями тоже можно реализовать с помощью макросов. В крайнем случае в рантайм реализовать. M>В конце концов, C обладает полнотой по Тьюрингу. M>Нет говорят, все не то.
Шаблоны "обладают полнотой по Тьюрингу" во время компиляции. Аналога в C нет.
Re: Чего принципиально не может C по сравнению c C++.
Здравствуйте, more, Вы писали:
M>Сегодня был на собеседовании по C++. M>Спросили чего такого принципиального нельзя сделать на C но можно на C++. M>Я сказал, что фактически, все возможно. M>Перебрал все стандартные варианты вроде наследования, виртуальных функций. M>Поведение шаблонов с допущениями тоже можно реализовать с помощью макросов. В крайнем случае в рантайм реализовать. M>В конце концов, C обладает полнотой по Тьюрингу. M>Нет говорят, все не то.
забавно у меня был противоположный случай )))
бежать от такой команды надо, как от огня...
Re: Чего принципиально не может C по сравнению c C++.
Здравствуйте, more, Вы писали:
M>Сегодня был на собеседовании по C++. M>Спросили чего такого принципиального нельзя сделать на C но можно на C++. M>Я сказал, что фактически, все возможно. M>Перебрал все стандартные варианты вроде наследования, виртуальных функций. M>Поведение шаблонов с допущениями тоже можно реализовать с помощью макросов. В крайнем случае в рантайм реализовать. M>В конце концов, C обладает полнотой по Тьюрингу. M>Нет говорят, все не то.
Деструкторы не может.
Re: Чего принципиально не может C по сравнению c C++.
Здравствуйте, more, Вы писали:
M>Спросили чего такого принципиального нельзя сделать на C но можно на C++.
Вопрос неоднозначный. В смысле результата — можно всё.
M>Я сказал, что фактически, все возможно.
Правильно сказали.
M>Перебрал все стандартные варианты вроде наследования, виртуальных функций. M>Поведение шаблонов с допущениями тоже можно реализовать с помощью макросов. В крайнем случае в рантайм реализовать.
Это всё никак не сказывается на результате, по крайней мере положительно. Тут вопрос в том, насколько для программиста удобно реализовывать алгоритмы. Можно делать списки, деревья, стеки; работать с указателями. Что ещё надо?
Re: Чего принципиально не может C по сравнению c C++.
Здравствуйте, more, Вы писали:
M>Сегодня был на собеседовании по C++. M>Спросили чего такого принципиального нельзя сделать на C но можно на C++. M>Я сказал, что фактически, все возможно. M>Перебрал все стандартные варианты вроде наследования, виртуальных функций. M>Поведение шаблонов с допущениями тоже можно реализовать с помощью макросов. В крайнем случае в рантайм реализовать. M>В конце концов, C обладает полнотой по Тьюрингу. M>Нет говорят, все не то.
Шаблоны, исключения, перегрузка функций, параметры по умолчанию и т.д. если еще подумать. В принципе то и полноценное ООП на С не сделать, ну или это будет очень геморно и монстрообразно, макросы там курят и ничего не решают, нужен рантайм с хэшами, строковыми именами и прочей лабудой.
Если вопрос про конечный результат, то на С сделать можно все то же что и на С++, но затратнее.
Re[2]: Чего принципиально не может C по сравнению c C++.
I>Шаблоны "обладают полнотой по Тьюрингу" во время компиляции. Аналога в C нет.
То есть по вашему, препроцессор C не обладает полнотой по Тьрингу? Ну-ну.
Re: Чего принципиально не может C по сравнению c C++.
Здравствуйте, more, Вы писали:
M>Сегодня был на собеседовании по C++. M>Спросили чего такого принципиального нельзя сделать на C но можно на C++. M>Я сказал, что фактически, все возможно. M>Перебрал все стандартные варианты вроде наследования, виртуальных функций. M>Поведение шаблонов с допущениями тоже можно реализовать с помощью макросов. В крайнем случае в рантайм реализовать. M>В конце концов, C обладает полнотой по Тьюрингу. M>Нет говорят, все не то.
Смартпоинтеры? ну и т.д. Т.е. не может автоматизировать симметричные операции. Да и вообще не корректно сравнивать Си и Си++, так как языки совершенно разные и подходы в программировании у них разные.
Re: Чего принципиально не может C по сравнению c C++.
Здравствуйте, more, Вы писали:
M>Сегодня был на собеседовании по C++. M>Спросили чего такого принципиального нельзя сделать на C но можно на C++.
Зависит от набора ограничений. Ведь в предельном случае можно на C написать компилятор/интерпретатор другого языка, превосходящего C++, и исполнить программу на нем из строковой переменной.
Re: Чего принципиально не может C по сравнению c C++.
Здравствуйте, more, Вы писали:
M>Спросили чего такого принципиального нельзя сделать на C но можно на C++. M>Нет говорят, все не то.
Функциональщину нельзя, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Чего принципиально не может C по сравнению c C++.
Здравствуйте, night beast, Вы писали:
NB>Здравствуйте, more, Вы писали:
M>>Сегодня был на собеседовании по C++. M>>Спросили чего такого принципиального нельзя сделать на C но можно на C++. M>>Я сказал, что фактически, все возможно. M>>Перебрал все стандартные варианты вроде наследования, виртуальных функций. M>>Поведение шаблонов с допущениями тоже можно реализовать с помощью макросов. В крайнем случае в рантайм реализовать. M>>В конце концов, C обладает полнотой по Тьюрингу. M>>Нет говорят, все не то.
NB>не уверен. может исключения?
Реализуется через longjmp()
Re[3]: Чего принципиально не может C по сравнению c C++.
Здравствуйте, more, Вы писали:
M>То есть по вашему, препроцессор C не обладает полнотой по Тьрингу? Ну-ну.
Ну да, не обладает.
Потому что программа препроцессируется только один раз и рекурсивных раскрытий макросов просто не получится.
Однако, если программа будет #include-ть себя саму, можно получить, к примеру, решение ханойской башни.
См. это сообщение: http://mail.szabgab.com/pipermail/perl/2003-July/002701.html
и, в частности, этот код: http://www0.us.ioccc.org/1995/vanschnitz.c
Re: Чего принципиально не может C по сравнению c C++.
Здравствуйте, more, Вы писали:
M>Сегодня был на собеседовании по C++. M>Спросили чего такого принципиального нельзя сделать на C но можно на C++. M>Я сказал, что фактически, все возможно. M>Перебрал все стандартные варианты вроде наследования, виртуальных функций. M>Поведение шаблонов с допущениями тоже можно реализовать с помощью макросов. В крайнем случае в рантайм реализовать. M>В конце концов, C обладает полнотой по Тьюрингу. M>Нет говорят, все не то.
Когда увидел это сообщение, почти сразу вспомнил про метапрограммирование.
Например, вычисление факториала (самый популярный пример для начинающих осваивать тему) на шаблонах.
Или класс N-мерной таблицы, размерность которой задается параметром шаблона.
Такие вещи на препроцессоре не сделать. Так что правильный ответ тут уже написали.
Re[3]: Чего принципиально не может C по сравнению c C++.
Здравствуйте, okman, Вы писали:
O>Такие вещи на препроцессоре не сделать. Так что правильный ответ тут уже написали.
Это не может быть хорошим ответом.
Если допускается заменять вычисления в compile-time вычислениями в рантайме, то метапрограммирование и все что угодно остальное не проблема.
Если такого не допускается, то подходит любая языковая фича C++, которой нет в C — перегрузка операторов, полиморфизм, наследование, шаблоны, потому что ее делает компилятор во время компиляции, а мы выбрали, что симулировать выполняемое в compile-time действиями в рантайме запрещено.
Re[2]: Чего принципиально не может C по сравнению c C++.
Здравствуйте, okman, Вы писали:
O>Когда увидел это сообщение, почти сразу вспомнил про метапрограммирование. O>Например, вычисление факториала (самый популярный пример для начинающих осваивать тему) на шаблонах. O>Или класс N-мерной таблицы, размерность которой задается параметром шаблона. O>Такие вещи на препроцессоре не сделать. Так что правильный ответ тут уже написали.
Да ладно, посмотри order-pp и chaos-pp, там в примерах вычисляется факториал и преобразуется
в строку из 100 или даже 200 цифр. Такие вещи на С++ препроцессоре не сделать, нужен C99.
Re[3]: Чего принципиально не может C по сравнению c C++.
Здравствуйте, alnsn, Вы писали:
A>Здравствуйте, okman, Вы писали:
O>>Когда увидел это сообщение, почти сразу вспомнил про метапрограммирование. O>>Например, вычисление факториала (самый популярный пример для начинающих осваивать тему) на шаблонах. O>>Или класс N-мерной таблицы, размерность которой задается параметром шаблона. O>>Такие вещи на препроцессоре не сделать. Так что правильный ответ тут уже написали.
A>Да ладно, посмотри order-pp и chaos-pp, там в примерах вычисляется факториал и преобразуется A>в строку из 100 или даже 200 цифр. Такие вещи на С++ препроцессоре не сделать, нужен C99.
Только вот код на этом хаосе нечитабельный совсем
Здравствуйте, Viper_Craft, Вы писали:
V_C>забавно у меня был противоположный случай )))
Это легко. На С++ нельзя операционки писать, и пример тому Симбиан
V_C>бежать от такой команды надо, как от огня...
Это точно.