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