8 / 8 / 7
Регистрация: 21.08.2015
Сообщений: 90
|
|
1 | |
Чем C++ отличается от C# и других языков семейства C?05.10.2015, 22:03. Показов 1807. Ответов 17
Метки нет (Все метки)
0
|
05.10.2015, 22:03 | |
Ответы с готовыми решениями:
17
Чем так отличается язык с++ от других языков программирования Чем отличается TurboPascal от других версий? Чем отличается правило недопущения провалов от других Чем отличается процессора Intel Xeon X5560 BOX (От других?) |
7796 / 6562 / 2985
Регистрация: 14.04.2014
Сообщений: 28,699
|
|
05.10.2015, 22:08 | 2 |
Как можно ответить на это кратко? Открой книжку и почитай.
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
|
|
06.10.2015, 08:46 | 6 |
Так забавно, когда C# или Java (а в худшем случае ещё и JS с PHP) называют "языком семейства Си".
0
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
06.10.2015, 08:57 | 7 |
korvin_
А разве Java -- это не C++ для JVM? Чем больше вижу исходников на Java, тем больше в этом убеждаюсь. PHP -- это вообще квинтэссэнция ошибок C++ и Java.
0
|
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
|
07.10.2015, 13:13 | 8 |
0
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
07.10.2015, 16:32 | 9 |
nullxdth
Если учесть тот факт, что какого-либо "дизайна" у PHP просто нет, то, конечно, и ошибок дизайна у PHP тоже нет.
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
|
|
07.10.2015, 21:12 | 10 |
Нет, от слова совсем. От С++ в Java только некоторые элементы синтаксиса, не более. А по семантике это, в основном, Simula 67 для JVM.
См. выше. Только к Simula примешивается ещё и значительная часть Perl'а.
0
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
07.10.2015, 21:31 | 11 |
korvin_
Не соглашусь. Насколько я понимаю: и C++, и Java в одинаковой степени далеки от Simula, но именно методика внедрения абстракций "симульная". Друг на друга, особенно по проектным и конструктивным решениям, они похожи значительно больше. Чуть более, чем ничего. Если до четвёртой версии, там что-то было, сейчас это просто "химера" из C++ и Java.
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
|
|
07.10.2015, 22:39 | 12 |
Нет. Их объектные модели почти прямо копируют Simula. С++ дальше из-за Сишного наследия.
Опять нет. Кроме синтаксиса (и то не везде), у них мало общего. Ну допустим. Но где ты там C++ и Java увидел? Только не говори про синтаксис.
0
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
07.10.2015, 23:19 | 13 |
Понятно, что C++ и Java заимствовали много из Simula, это их объединяет. Но их объединяет нечто, что они НЕ заимствовали. Конструкторы, уровни доступа и исключения, кажется.
А есть такие моменты, которые в C++ совершенно не воспроизводят Simula. И в Java есть такие же. Если Java и ближе к Simula, то исключительно сборкой мусора и некоторыми аспектами переопределяемых функций. Там столько всего намешано, что я даже затрудняюсь выделить конкретные моменты, про которые можно было бы сказать: "это заимствованно отсюда". Здесь и интерфейсы, и функторы, и анонимные функции. Здесь и C-style библиотеки, которые соседствуют с переписками JDBC. А как прыгала семантика объектов? В четвёртой версии всё копировалось и были ссылки похожие на С++, а в пятой версии объекты стали указателями. Тут даже вести разговор не о чем. Здесь нет ни предков, ни дизайна. Просто фарш. Добавлено через 3 минуты Если бы у них было мало общего, то проектные решения существенно различались бы. Однако это не так. Проектные решения переходят друг в друга с минимальными переделками. Полагаю, что при миграции проекта с Simula на любой из этих двух языков потребовалось бы куда больше усилий. Добавлено через 9 минут * * * Я готов согласиться, что, возможно, мой опыт в этих языках (C++ и Java) был "специфическим". Но если они столь различны, можно указать хотя бы пару-тройку различий, которые не позволяют бесшовный проект для одного языка реализовать на другом? Лично я их не вижу. Может быть я ошибаюсь.
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
|
|
08.10.2015, 00:15 | 14 |
Допустим. Но способы их использования в C++ и Java несколько отличаются из-за разной модели памяти. Тем более в современном C++ с его copy- и move-конструкторами.
Только в Java нет спецификатора virtual. https://en.wikipedia.org/wiki/... ng#History 1) Модель управления памятью, со всеми вытекающими: RAII, ссылки, указатели, создание объектов на стэке отсутствуют в Java (ссылочное устройство объектов в Java --- это не то же самое, что ссылки или указатели в C++). 2) Система типов: однозначно строгая (с некоторыми косяками, правда) в Java и относительно (относительно чистого Си) строгая, но легко поддающаяся грязным хакам --- в С++, возможность легко манипулировать любым значением, как массивом байт. 3) Дженерики Java и шаблоны C++ --- сильно разные вещи. Не всё, что можно делать шаблонами, возможно (или хотя бы достаточно легко) сделать дженериками и наоборот. 4) Пакеты Java vs заголовочные файлы C++. Надеюсь, тут разницу объяснять не нужно? 5) Спецификатор const в C++ имеет некоторые возможности, которых нет у final в Java, например: константные методы, которые не изменяют состояние объекта, и такие же неизменяемые параметры процедур. Более-менее близкий аналог в других языках (Python, Ruby) --- метод freeze. 6) Статически проверяемые исключения в Java отсутствуют в C++ (да и вообще, вроде, нигде их нет). 7) Отсутствие virtual (в Java виртуальность метода определяется автоматически по остальным модификаторам метода) и множественного наследования в Java. Тут нужно подробней смотреть, все эти каши из комбинаций различных модификаторов. 8) Собственно отсутствие свободных функций в Java и модификатора static-переменных для них. В принципе, это ложится на static-члены класса, но тут я с ходу не вспомню, какие могут вылезти подводные камни. 9) Отсутствие synchronized в C++ и, как следствие, необходимость в для каждого варианта использования synchronized в Java подбирать аналог синхронизации в C++. 10) Отсутствие Top-типа объектов в C++. Допустим, для собственного кода его можно создать, но сторонние библиотеки классов могут не иметь аналогов. Опять же классовые типы в C++ находятся на более равных правах с примитивными типами, чем в Java: их можно использовать в параметрах шаблонов, в отличие от. Автоматический боксинг/анбоксинг в Java не всегда правильно разруливается в перегруженных методах. 11) Перегрузка операторов в C++. 12) Модификатор доступа friend в C++. 13) Оператор goto в C++. 14) Динамическая кодогенерация в рантайме в Java. 15) Нестандартизованный name mangling в C++.
0
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
08.10.2015, 08:05 | 15 |
korvin_
3 и 1 действительно могут дать проектные различия. Тем не менее, мне не приходилось видеть решений, где бы подобные различия существовали. Хотя и видел и настольные Java приложения, и web-интерфесы, и enterprise по. Добавлено через 20 минут * * * По поводу швов. Мультиметоды, они одинаково невыразимы в Java и C++. Можно говорить о рефлекции, но опора в проекте на мультиметоды даст толстый шов и в Java, и, тем паче, в C++. Язык, опирающийся на мультиметоды, будет действительно другим языком по отношению к C++ и Java, так как мультиметоды не являются продолжением или антагонистом одиночной диспетчеризации, это что-то существенно иное.
0
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
09.10.2015, 01:58 | 16 |
korvin_, по каким критериям Вы определяете принадлежность языка к "семейству"? Для меня критерий всегда был один -- синтаксис. Так, например, pascal вырос из algol'a, eiffel и oberon из pascal'я, ada -- реализация многих известных методик своего времени с алгол-подобным синтаксисом. Эти языки можно отнести к алгол семейству?
Не по теме: кастати, java растет из oberon'a, только сишный синтаксис. А вообще абсолютное большинство методик впервые появилось в lisp и далее заимствовалось дизайнерами новых языков. Можно ли сказать что все современные языки принадлежат семеству lisp? <trololo>Конечно исключая какацкель.</trololo> Добавлено через 1 минуту или "семейство" -- это диалекты одного 'абстрактного языка с минимумом уточнений'? Добавлено через 1 минуту как например различные реализации prolog, lisp, forth, которые имеют 'общий стержень', а детали и правила пользования могут варьироваться в зависимости от реализации
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
|
|
09.10.2015, 08:29 | 17 |
Синтаксис --- лишь фасад; вычислительная модель, примитивы, средства абстрагирования и комбинирования --- вот что важно, т.к. код пишется на основе этого, а не на основе синтаксиса. Ты же сам заметил про Java/Oberon/C. Другой пример: синтаксис Erlang'а очень похож на Prolog, но на этом сходства заканчиваются, семантика у них разная. Си тоже многое взял от Алгола, а также от Фортрана. Давайте называть Джаву языком семейства Алгол/Фортран (первое ещё достаточно верно, ничем не хуже, а то ещё и корректней, семейства Си, второе явно перебор).
0
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
09.10.2015, 23:03 | 18 |
korvin_, т.е. ваша тэчека: вопрос принадлежности к семейству -- это вопрос семантики. Так? Но я не знаю что такое "семейство".
Добавлено через 42 секунды точнее знаю. Например семейство lisp. Это никак не относится к тому о чем тут говорится.
0
|
09.10.2015, 23:03 | |
09.10.2015, 23:03 | |
Помогаю со студенческими работами здесь
18
Linux Mint — Чем она отличается от других Linux/Unix-подобных и для чего предназначена в первую очередь, Чем отличается Cisco Radius Client от других Radius Client? О целях c++ и других языков Поддержка других языков в командной строке Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |