Comments 29
В Си хотя-бы статическая типизация (хотя и менее строгая чем хотелось бы).
Но при этом она там слабая aka неявная. Что при незнании чревато более трудноотлавливаемыми ошибками.
А в динамических языках никогда не знаешь что в переменной: строка, число или еще что-то.
А в C никогда не знаешь, что живёт в переменных типа void *
.
Ну и во многих динамических языках появляются type hints, а в статических — auto/dynamic, так что границы размываются.
Ну все же void * обычно не идет как основа работы, лишь ввод/вывод и подобное.
Да и auto это не динамический тип, а автовывод типа. Но итоговый тип все ещё типизирован.
Но ведь именно это и происходит в php/питоне/javascript…
Да, происходит. И нет, это не кошмар, это просто немного другой взгляд на вещи.
На языке со статической типизацией вполне можно выстрелить себе в ногу, причём в старом добром C это сделать куда легче, чем в ужасном динамическом питоне. В современных плюсах труднее, но тоже вполне можно.
И наоборот, на динамических языках вполне можно писать предсказуемые и понятные программы, даже с учётом того, что у переменных явно тип не определён. Крайне редко динамика вставляет палки в колёса, главное аккуратно ей пользоваться.
И я не топлю только за динамику, везде есть и плюсы и минусы. Плюсы типизации, какой бы она ни была, нужно использовать, а о минусах знать и стараться их избегать.
Ставить в плюс только лишь наличие статической типизации в языке (даже такой не очень хорошей, как в C), при этом ужасаясь любой динамической (даже такой хорошей, как в питоне) — извините, но это как-то однобоко.
Обычно там работают с интерфейсом объекта, а не с его типом) А интерфейс может быть реализован множеством типов.
Количество уязвимостей в проектах, часть которых была заброшена до открытия этих самых уязвимостей с безопасностью языка кореллирует примерно никак?
Ну уж конечно, лучше все писать на си, хотя о чем это я, сразу уж на ассемблере, чего мелочиться. Вот там реальный контроль, и реальное понимание, что делает с кодом процессор. Вот на них только тру программисты пишут) Я вам так скажу, каждой задаче — свой инструмент. Посмотрю я на вас, как вы в веб страницы на си писать будете)) или рабочий прототип веб сервиса 1 день, вместо 1 часа на питоне) Ну или кроссплатформенное приложение без перекомпиляции) Задачу можно решить разными способами, вопрос во времени и целесообразности использования конкретных инструментов)
Web-сервис на С написать за час реально, просто для начала нужно изучить ентот самый html/css дабы подсунуть браузеру строки в нужном порядке.
Но если вы html/css не знаете, то и а питоне у вас за час только hello world получится.
А уж кроссплатформенность ява-приложений лучше не упоминайте. Всегда выясняется что у реального приложения внезапно весьма платформозависимые корни. Будь то работа с hardware или банальные файловые операции. Да я лучше перекомпилирую приложение под платформу, зато получу значительный выигрыш в ресурсах.
Как я и писал, каждому инструменту своя ниша. И не обязательно знать си или ассемблер, чтобы писать качественные программы с хорошей архитектурой (ну и обратное тоже верно).
> Web-сервис на С написать за час реально, просто для начала нужно изучить ентот самый html/css дабы подсунуть браузеру строки в нужном порядке.
Никто не спорит) Но на питоне все равно будет быстрее, просто потому, что там нет заморочек с явным выделением памяти, ее освобождением, проверок на границы массива и целочисленного переполнения и т. д. и т. п. Разработчик языка уже позаботился об этом, предоставив разработчикам на питоне думать над задачей и не отвлекаться на решение низкоуровневых тривиальных нюансов.
> А уж кроссплатформенность ява-приложений лучше не упоминайте. Всегда выясняется что у реального приложения внезапно весьма платформозависимые корни.
Вы это JetBrains расскажите, а то они видимо не знают, что есть куча проблем и продолжают с ними отчаянно бороться, вместо того, чтобы переписать все на си) Так же намного быстрее и проще.
Кроме того у JetBrains платформозависимые разве что пути.
Когда я работал в Visual Studio, у меня эта софтина мало того, что тормозила жутко время от времени, так ещё иногда фризила компьютер на пару-тройку секунд. Чё он там делал, я не знаю, но работать в этой среде мне было очень некомфортно. Это же не говорит о том, что на чем он там написан (си++?) плохой язык) это говорит лишь о криворукости людей, его написавших.
После нахождения дыры в Openssl только ленивый не форкнул ее или не бросился реализовывать tls на своем языке, но через некоторое время посыпались новости вида «Продукт N вернулся на openssl после нахождения детских ошибок в собственной реализации tls»
Обычно веб-сервисы не предполагают html/css, а работают с json/xml.
Это вы прям за всех разработчиков скриптовых языков утверждаете? Смело однако) Да, когда не хватает скорости, берут и пишут части на си. И это замечательно, потому что там, где нужна простота и решение бизнес задач, может вполне подойти скриптовый простой язык, который дополняется более низкоуровневым при необходимости. Ну и пишется везде по-разному, не стоит вот так легко всех записывать в горе программисты только по личным наблюдениям пары-тройки своих коллег.
Насчет языков(не только скриптовых) использующих unsafe.
Python, java, go, perl, php и даже оплот безопасности rust используют.
Примерно так же можно утверждать «самым неграмотным языком является марсианский» — собрав статистику о том, что именно в доступных текстах на марсианском больше всего грамматических ошибок.
Язык — только инструмент. Ошибки совершает человек. Все эти перечисленные уязвимости — или в алгоритме (когда не имеет значения язык реализации), или в конкретном коде (который может быть равно опасным на множестве других языков).
Какие языки программирования наименее безопасны?