JavaScript

В чем разница C++ и Java-Script

В чем разница? С С++ знаком достаточно хорошо, но вот на днях начал знакомиться с Java-Script и понял что он практически ничем от плюсов не отличается. Пока только нашел разницу в том что в JS нет типов данных, как таковых. Так в чем же все-таки разница еще?
Разница огромная. В JavaScript с данными можно творить что угодно, а C++ -строго типизированный (а по современным меркам - строжайше). В JS можно легко div-у добавить любое свойство и функцию.
В JS нет многопоточности (хотя планируют)
В JS не надо выделять память
JS - интерпритируемый, а C++ -компилируемый
C++ -ООП, а где ООП в JS - я ХЗ (классов вообще нет), и реализована прототипно-ориентированная парадигма. Да и прототипы там достаточно вольные (так как нестрогая типизация данных)
В JS все работает по ссылкам, this зависит от контекста исполнения.
Нет областей исполнения программы (как в C# и новых php)
Нет функции main, выполнение начинается по мере загрузки и наступления событий
JS работает в виртуальной машине, а не во всей ОС
и т. д. и т. п.
Алексей Плаксин
Алексей Плаксин
4 226
Лучший ответ
Николай Гражданкин Ну, а что Вы называете классом и ООП? В JS - функция строго говоря это функциональный объект, т. е. функции наследуют свойства объекта. Другими словами, функции JS это функторы. Дальше, функциональные объекты содержат в себе код и связанные с ним данные. Это просто напросто инкапсуляция. Основы ООП - это инкапсуляция, полиморфизм и наследование. Это тоже есть в JS. Т. е. JS - это полноценный ООП язык с сильным акцентом на динамическую типизацию и функциональную составляющую.
Николай Гражданкин Дальше, претензией ООПшников является отсутствие множественного наследования. Но, указывая на это, они забывают, что множественное наследование приводило к серьезным проблемам с разработкой софта. В результате была осознана Diamond problem и рекомендовано использовать mixins и interfaces (архитекторами с именем вроде Хейльсберга). А в JS это есть, как и механизм рефлексии, когда мы методы у объекта можем получить (и даже заменить в runtime).
Николай Гражданкин Вы так говорите, будто бы в С++ уже pointers/references убрали. В Ecma6 есть модули, есть блоки выполнения и блочные переменные и т. п. OS - сервис управления задачами и ресурсами, приложение в любом случае выполняется в среде OS, так же как сценарии JS или байткод Java внутри VM. Или MS перестала EPM / App Sandboxes поддерживать? А может быть IL/JIT/HAL нельзя с С++ совмещать? Да вроде совмещают. В Церне с их бешенными информационными потоками.
Николай Гражданкин А распределение памяти в js доступно для критических нагрузок. Есть Static memory management, low level struct types, object pooling, preallocating и т. п. Если Вы с этим не сталкивались, это не значит, что оптимизаций нет. А про потуги сделать удобной динамическую типизацию с помощью templates - ну и что получилось, что-то человекочитаемое? Чем оно яснее машинного кода? Оно на декларации похоже? Так что без слез на функторы с++ посмотреть нельзя.
Проще сказать, что у них общего, потому что совершенно разные языки и применение. JavaScript это скриптовой язык для web страниц (не путать с java). C++ это объектно-ориентированный язык для того, чтоб писать полноценные программы и компилировать в машинный код.
Хоть бы ту же википедию прочли https://ru.wikipedia.org/wiki/JavaScript , как раз с С сравнивается, хотя раз он у вас "практически не отличается", то, может и не помочь.
А разницу в том, что эти языки реализованы под совсем разные платформы и для совсем разных целей, и библиотеки поэтому совсем разные, - вы вообще не замечаете?

И да, JavaScript, а не Java-Script. С Java у него такое же сходство, как у барабанной перепонки с барабаном.
IR
Iso Rahmatov
26 662
Сергей Калинин тащемта, если судить по принципу действия, то у барабанной перепонки с барабаном сходства больше
не думаю, что вы хорошо знаете плюсы, если задаете такие вопросы... Даже уверен.
JavaScript очень легкий, но на нем слишком сложно делать огромные проекты или приложения работающие с системой. С++ очень сложный, но на нем можно сделать все что угодно