Зато профит в высокой производительности и в том, что код с ошибками в типах нельзя скомпилировать. А в том же JavaScript нужно муторно отллаживать типовые ошибки.
Высокая производительность? Решается компиляцией на лету. Ты же не меняешь код на продакшене каждую минуту? Только первое обращение компилируется, остальные работают из компилированного кеша.
А про типовые ошибки это как я и сказал, половина извилины. Это реально просто. Тайпхинты опять же, каждая первая IDE поддерживает.
А про типовые ошибки это как я и сказал, половина извилины. Это реально просто. Тайпхинты опять же, каждая первая IDE поддерживает.
>Решается компиляцией на лету.
там by design проблема, питон в 40(!) раз медленне сишечки, с кешированием, да
там by design проблема, питон в 40(!) раз медленне сишечки, с кешированием, да
Ну давай еще с ассемблером сравним.
ни Python, ни C\С++ не подходят под картинку. python - strong, C - weak/ Но это все не важно на самом деле.
Ебать взяли заминусили чувака, мамкины программисты сильную типизацию и типизированный язык не различают, мда
это нормально, больше быдло-кодеров, меньше конкурентов :)
сейчас скорость разработки ценнее скорости выполнения.
плюс никто не запрещал писать критичные по скорости выполнения модули для питона на си.
плюс никто не запрещал писать критичные по скорости выполнения модули для питона на си.
Полностью согласен. Сейчас пишу сервак для кастомной хардвари, proof of concept с лёгкостью и изяществом написал за неделю на PHP (да-да, и не надо смеяться), потом собрали первые прототипы, пилили протокол, и не было ничего проще, чем добавлять новый функционал и экспериментировать с существующим. Более того, этот сервак более чем успешно несколько месяцев работал в продакшене, пока я писал замену на go. Но переписать, конечно, пришлось в угоду производительности. Да и go для таких вещей приспособлен куда лучше, нежели пхп, естественно. Но факт остаётся фактом: если бы я начал писать на go сразу, процесс разработки затянулся бы конкретно, и мы не смогли бы параллельно дорабатывать хардварную часть, были бы простои.
7 дней на пхп против 2-3 месяцев на го? Один и тот же функционал с применением одних и тех же библиотек? С трудом верится. Чем же было вызвано падения производительности более чем в 8 раз?
А теперь скажи мне, на кой хер тебе нужна динамическая типизация, если ты все равно грузишь интерпретатор/IDE тайпхинтами? Ты ещё расскажи про то, как можно защитить свой код от ошибок средствами утиной типизации. И давай ещё послушаем про то, как компиляция интерпретируемого языка "на лету" может соперничать с производительностью компилируемого языка. Фишка в том, что динамическая типизация реально нужна только для скриптовых языков, в которых нужно, чтобы заработало хоть как-то и хоть раз, и чтобы была минимальная задержка между написанием кода и первым запуском программы. Все. Остальные плюсы обращаются в ноль неудобством, неэффективностью и небезопасностью динамической типизации. Писать на динамически типизированном языке что-то сложнее скриптов просто глупо.
Насчёт джаваскрипта, раз его упомянули. Ты когда-нибудь прогонял фронтенд-код крупного проекта через блядский минифайер? Скажи, сильно быстрее выходит, чем компилировать проект соответствующего размера на плюсах (если не считать факториалы на темплейтах)? Я в рот ебал джаваскрипт и иже с ним, этот язык ущербен по своей сути. Посмотри, как извращаются вебдевы и разработчики браузеров уже хер знает сколько лет из-за того, что лентяи из нетскейпа сделали его интерпретируемым и динамически типизированным. Сраные динамические смерды...
Насчёт джаваскрипта, раз его упомянули. Ты когда-нибудь прогонял фронтенд-код крупного проекта через блядский минифайер? Скажи, сильно быстрее выходит, чем компилировать проект соответствующего размера на плюсах (если не считать факториалы на темплейтах)? Я в рот ебал джаваскрипт и иже с ним, этот язык ущербен по своей сути. Посмотри, как извращаются вебдевы и разработчики браузеров уже хер знает сколько лет из-за того, что лентяи из нетскейпа сделали его интерпретируемым и динамически типизированным. Сраные динамические смерды...
Динамика далеко не единственная его проблема. Там всё через жопу сделано. Даже не понятно откуда такая популярность.
Раз уж заговорили о JS и типизации, не могу не скинуть этот замечательный видос. Ржу с него каждый раз, но первый раз вообще натруально со стула падал.
https://www.destroyallsoftware.com/talks/wat
https://www.destroyallsoftware.com/talks/wat
html вообще был задумывался как язык разметки, вроде latex, с возможностью адаптироваться под разные задачи(например, просто прочитать статью на мониторе или вывести ее на проектор, где необходимы большие шрифты и это все настраивалось на стороне браузера). Или, например, с возможностью показать текст вместо картинки, если так хочет пользователь.
Потом на эту самую кастомизацию на стороне пользователя положили большой мпх. Потом их обмазали js и получилось то уродство, которое мы видим сейчас.
Сейчас уже нет возможности скачать страницу и посмотреть ее в оффлайне. То есть по факту сейчас уже не веб-страницы, а веб-приложения, которые не работают без удаленного сервака.
Короче, это легаси живет и будет еще долго жить. Остальные же попытки сделать среду для веб-приложений(java и flash), несмотря на годный концепт, были еще большим говном в реализации.
Потом на эту самую кастомизацию на стороне пользователя положили большой мпх. Потом их обмазали js и получилось то уродство, которое мы видим сейчас.
Сейчас уже нет возможности скачать страницу и посмотреть ее в оффлайне. То есть по факту сейчас уже не веб-страницы, а веб-приложения, которые не работают без удаленного сервака.
Короче, это легаси живет и будет еще долго жить. Остальные же попытки сделать среду для веб-приложений(java и flash), несмотря на годный концепт, были еще большим говном в реализации.
На картинке есть важный нюанс - СИЛЬНАЯ статическая типизация против СЛАБОЙ динамической. Высокопроизводительный и статически, но слабо типизированный С++ ничем не отличается от динамически типизированного JS ( на самом деле в С++ вариантов выстрелить в ногу когда больше чем в JS), если в JS и PHP можно складывать строки с числа, то в С++ можно приводить любые типы данных к любым и так же по ошибке складывать что угодно с чем угодно. А вот в таких языках как C# и Ruby типизация сильная и сложение чисел со строками выпадет в исключение.
> приводить любые типы данных к любым и так же по ошибке складывать что угодно с чем угодно.
Ой неправда. Кто тебе переопределил оператор '+' для типов, например, std::fstream и bool*? Пушкин? Я тебе больше скажу - в плюсах ты даже строку с числом не сможешь "сложить", нужно передавать число в std::to_string(int). А в шарпе, кстати, оператор + для строк и чисел переопределение, и их спокойно можно "складывать", это как синтаксический сахар для вызова to_string и конкатенация. И в обоих случаях - статическая проверка типов. По сравнению со сраным джаваскрипта, который скорее попытается вычесть число из строки, чем сразу хотя бы кинуть эксепшн, это небо и земля. Без обид, но плюсы хоть как-то знать надо...
Ах да, а ещё в шарпе есть вполне себе динамическая типизация с проверкой типа в рантайме. Пишешь у переменной вместо типа "dynamic" и вуаля.
Ой неправда. Кто тебе переопределил оператор '+' для типов, например, std::fstream и bool*? Пушкин? Я тебе больше скажу - в плюсах ты даже строку с числом не сможешь "сложить", нужно передавать число в std::to_string(int). А в шарпе, кстати, оператор + для строк и чисел переопределение, и их спокойно можно "складывать", это как синтаксический сахар для вызова to_string и конкатенация. И в обоих случаях - статическая проверка типов. По сравнению со сраным джаваскрипта, который скорее попытается вычесть число из строки, чем сразу хотя бы кинуть эксепшн, это небо и земля. Без обид, но плюсы хоть как-то знать надо...
Ах да, а ещё в шарпе есть вполне себе динамическая типизация с проверкой типа в рантайме. Пишешь у переменной вместо типа "dynamic" и вуаля.
Я может не так много работал с JS, но не помню проблем из-за того, что я ошибочно пытался отнять чисто от строки. А вот поебота с приколами браузера или с видимостью переменных (если работаешь с фреймворком) была. Так что спор ни о чем. Если в голове не говно, то проблемы с типизацией будут на третьем плане.
Хоть я и придерживаюсь мнения, что ЯПы всякие нужны, ЯПы всякие важны, но хочу заметить, что "если в голове не говно" как раз и является причиной, почему статика бывает лучше динамики. Ибо не говно, по статистике, далеко не у всех в голове. Да и когда не говно, ошибки случаются. И нормальные мозги от переработки порой в говно превращаются временно. А когда у тебя нет физической возможности ошибиться с типами, таки попроще. Однако скорость и удобство разработки часто оказывается важнее.
А так, если башка варит и знания есть, то хоть на чём пиши.
А так, если башка варит и знания есть, то хоть на чём пиши.
Типизация это давно уже вкусо срач, IDEA для динамических языков намного адекватнее помогает с типами и автодополнением, чем Eclipse/NetBeans/QtCreator/Старая студия для статических языков. А если за тебя кто-то проверяет, то какая разница? Сейчас все адекватные проекты обвешаны статическими анализаторами кода, IDE помогает динамически находить ошибки сразу, всякие штуки для соблюдения код стайлов, причем это абсолютно одинаково и для статических языков, тот же Решарпер и PVS, а казалось бы типизация. Не имеет она уже никакого значения.
Приведение указателей к void, смешение указателей и целочисленных типов данных (вроде только к С относится и старым стандартам), reinterpret_cast. Уверен гуру С++ знают еще тысячи способов баловаться с типами. И для С++ это как раз нормальное частое явление, а вот dynamic в шарпе это как раз редкая нерекомендуемая фича, которая в общем-то не очень давно появилась. Плюсо срач разводить не хочу, но из двух зол плюсов и жс, в плюсах тупо больше легаси и больше языковых возможностей для отстрела ног, в жс проблема это полифилы и this, остальное на уровне восприятия, раньше была еще проблема скудной стандартной библиотеки и отсутствие нормальных возможностей для структуризации проекта.
Что-то похожее актуально только для С++ и то лишь при полной рекомпиляции проекта.
что касается тестов, лучше, когда ошибка обнаруживается на самом раннем этапе
что касается тестов, лучше, когда ошибка обнаруживается на самом раннем этапе
Ну ебанётся твоё говно на этапе интерпретации? Что тогда?
Вообще какая связь между скоростью компиляции и видом типизации? О_О
FPC знаешь как охуенно быстро компилит? А Go или Rust?
FPC знаешь как охуенно быстро компилит? А Go или Rust?
Rust кстати отличный язык для выебонов, все языки обсирают, а Раст только за перлообразный-регэксповый синтаксис.
>И сидит такой MASTER RACE по половине рабочего дня в ожидании компиляции.
инкрементальная сборка
инкрементальная сборка
Это какой-то эльфийский юмор?
поздравляю тебя, Шарик, ты отстал от жизни лет на 30...
Молодой человек мне пожалуйста колу и чизбургер, да побыстрее!
а то надо до вечера критикал баги пофиксать и на продакшн задеплоить
Чтобы написать коммент, необходимо залогиниться