Вячеслав Юрьевич кстати, и слава богу, вот буквально пару недель назад наконец внедрили TS в проект. Надеемся, хорошо приживается с существующей кодовой базой, а главное - в голове у разработчиков). Главное донести до всех, что статическая типизация и .d.ts для существующих модулей - это хорошо)
Максим Иванов в заключение скажу, что главная проблема JS, имхо, это даже не совместимость. Главная проблема в том, что JS - это одновременно и язык разработки, и target-язык платформы. Нет почти никаких стоящих причин, по которым код, написанный программистом, должен как есть распространяться пользователям приложения. Target-язык должен быть простым и формальным. Это язык для машины (железной или виртуальной вроде .net или java). Это полнейший технологический идиотизм - минифицировать JS вместо того, чтобы скомпилировать его в форму, пригодную для поедания машиной и не требующую парсинга. И опять - что?? - совместимость.
Искренне надеюсь, что WebAssembly - это начало новой эры, где "веб-приложения" просто станут очередной платформой для доставки логики. Как это НЕ получилось с ActiveX, и частично получилось с Flash.
Максим Иванов выбор между логикой и совместимостью это как белая и черная сторона. И это ад инженера, причем не только в IT. Рай инженера - когда выбирать не надо, и логика и совместимость идут бок-о-бок.
Раз вы столкнулись с C++, отмечу, что я считаю нужно быть крайне интеллектуальным, хладнокровным и последовательным человеком, чтобы развивать сейчас этот язык и отвечать за нововведения в стандарте. Да, язык сильно усложняется, да, уже и правда не каждому его посоветуешь, т.к. его изучение это какое-то путешествие на "ту сторону". Но на нём еще хочется разрабатывать. Вот даже вам захотелось. И это тоже язык совместимости, похлеще чем JS. Только в этот язык изначально вкладывалось столько инжереного ума, что он и сегодня вполне себе на плаву.
"Ранний пример этого — использование браузером Internet Explorer строки User-Agent, начинающейся с «Mozilla/ (compatible; MSIE …», для получения контента, предназначенного для Netscape Navigator, его главного конкурента в 1990-х.
.......................
Такой формат строки User-Agent с тех пор использовался и другими браузерами; в частности, из-за того, что доминировать стал Internet Explorer."
Это же просто блеск! IE мимикрировал под Нетшкаф, а потом все стали косить под IE. Т.е. это не просто совместимость там, где есть стандарт де-юре или хотя бы де-факто в виде популярной реализации. Это конкретно адаптация под условия окружающей среды. Как у богомола.
А всё почему? Потому что, как уже выше ответил Вячеслав Юрьевич , веб-технологии начинались с домашних страничек с часиками и бегущей строкой (которая, что характерно, была на marquee сначала :D ). К C++ никогда не было такого наивного и "детского" отношения, с самого момента появления. К Си тем более. К Джаве не было такого отношения. А к JS было. Тогда вообще был еще и VBScript, и году эдак в 2002-2003 не так просто было выбрать, на чём лучше скрипт написать на страничку - все равно все на Осле сидели)).
Теперь приложения превратились из часиков в самолёты, браузеры превратились из песочниц в аэродромы, которые запускают, черт возьми, несколько процессов в системе, чтобы повысить отказоустойчивость браузера. Среда веб-браузера, хоть и осталась довольно ограничена по API и производительности, оказалась феноменально удобной в плане деплоя логики приложения. Никаких exe, msi, rpm, и прочих инсталлеров. Адрес вбил - и вперёд. Ну и конечно сыграл своё дело невероятный рост скоростей каналов передачи данных. На модемном соединении даже с нынешними CPU люди бы не хотели прогружать 2-3 мегабайта одних только скриптов.
Черт, да каждый день на Тостере спрашивают - "а какую мне технологию использовать, чтобы под все мобилки разом сделать приложение на HTML+JS?". Даже если приложение получается трешевое и тормозное - это ж какой соблазн. Не нужно по 1-2 человека нанимать на каждую платформу (плюс еще, о боже, десктоп), все решается разом (пусть и качество не очень, главное чтоб роллы можно было заказать! Потом перепишем нормально.).
А язык остался. Да, он развивается, особенно в последние несколько лет, но даже баги старые еще остались. А куча библиотек для совместимости с реализациями?. Мы вот в сложнейшем фронтэнд-проекте буквально 2 недели назад отказались от IE9 наконец. IE6 вообще хоронили всем миром, сами прекрасно знаете. Вы представляете, какая нагрузка на язык для часиков и бегущих строк?
Stasgar
> Но при чем здесь php? Он же имеет динамическую типизацию.
..и этот факт мешает вам понять полезность этой возможности. Надо сказать, что в этом большой парадокс PHP - хотя язык изначально создавался как динамический, в него сейчас пытаются добавить возможности типизации и проверки типов. В Python например (также язык с динамической строгой типизацией) абстрактные классы и методы реализованы в виде модуля, но не на уровне языка.
Причина таких добавлений по типизации - попытка адаптировать PHP для разработки крупных проектов.
Stasgar когда вы поймёте, зачем нужны типы и интерфейсы, вы поймете самое главное - важность контрактов в коде. Т.е. важность того, что определенные конструкции в языке гарантируют определенные свойства или структуру системы. Вот в вашем примере наличие абстрактного метода в абстрактном классе гарантирует, что он будет в наследниках (иначе наследник просто невозможно будет инстанциировать). Указание типов параметров функции гарантирует, что будут переданы значения именно указанных типов, а не каких либо других (не будет передана строка вместо числа).
Это всё контракты. Это когда один программист пишет в одном месте одну вещь, а следуют ей все программисты в команде.
Вы главное разбирайтесь, это все вещи, как говорится, для крупного многоэтажного строительства. Сложно проникнуться их полезностью, когда строишь конуру). Но понять нужно, чтобы быть готовым к тому самому многоэтажному строительству.
Stasgar
> Просто вывести ошибку, если метод в подклассе не задействован?
> дать понимание другому программисту, что использовать наследование нужно обязательно с такими-то методами
Тогда вы сами ответили на свой вопрос, чего ж вам непонятно? Да, дать понимание другому программисту. Большая часть высокоуровневых языков создавалась с целью дать понимание кода другому программисту, а не только тому, кто его писал. Ну или тому же, кто писал, спустя полгода-год.
Еще раз говорю, я не случайно это написал в первом предложении: вам нужно понять, зачем программисту статическая типизация. Иначе вы еще миллион подобных вопросов зададите. Вам нужно понять, почему в классах важны ИНТЕРФЕЙСЫ, а не только реализация. Кстати, вы про интерфейсы читали или не дошли еще?
Stasgar вам нужно понять, зачем программисту статическая типизация. Вы вообще сейчас смотрите на язык как на врага, в том смысле, что вы сделали что-то, что допустил интерпретатор, и не понимаете, зачем другие варианты, если "и так работает".
Языки изобретают не для того, чтобы программист потом с ними боролся. Языки призваны помогать решать определенный круг задач.
In practice a user might typically perceive this approach as follows:
The user logs into their local PC (as they typically would when commencing work in the morning).
The user needs to obtain information on a partner company's extranet website - for example to obtain pricing or product details.
The user navigates to the partner-company extranet site - for example: example.com.
The partner website now does not require any password to be typed in - instead, the user credentials are passed to the partner extranet site using AD FS.
The user is now logged into the partner website and can interact with the website "logged in".
akass да, я про них, но это если бы у вас наоборот было - что у вас есть условно говоря база пользователей, и вам надо залогинить человека, пользуясь этой базой, при этом стандартными механизмами вроде домена вы пользоваться не хотите.
Как я теперь понимаю, вы наоборот, хотите залогиниться в обычную учетку в домене, но пройти также и авторизацию на внешнем сервисе.
Если этот сервис внешний по отношению к вашей компании, то вам бы не помешали Federation Services. Но этот внешний сервис должен уметь в SAML, да и вам придётся поднять на сервере эту роль. Внешний сервис достаточно умён для таких вещей?
Просто в Семерке и выше есть нормальные API для поставщиков учетных данных (в Семерке первая версия этого API, в Восьмерке и выше - вторая), а GINA это что-то из времён XP, имхо.
> Требуется получить имя файла в формате \Device\HarddiskVolumeNN (NN - номер раздела)\path\to\file.ext по полному имени файла.
Хочу попробовать упростить описание задачи. Вам нужно букву диска превратить в путь к устройству?
Не стоит экран ноутбука сравнивать с телевизором. У теликов совсем другие параметры яркости и контрастности, т.к. они ориентированы на другие применения и у них другие приоритеты (например, более яркие и контрастные цвета за счёт менее точной цветопередачи).