JavaScript и динамическая типизация #тред Image
Если предпосылки слабой типизации в JavaScript были туманны, то решение сделать JavaScript динамическим языком было изначально. Это решение вдохновлено Self, Scheme и испытало на себе влияние Java, C.

Подробнее об этом:
JavaScript: The First 20 Years. dl.acm.org/doi/pdf/10.114…
Тяжело дать однозначное трактование динамической типизации, но можно через сравнение со статической. Переменные связываются с типов в момент объявления переменной - статическая типизация, при присваивании значения - динамическая типизация.
Говоря другими словами при динамической типизации у переменной нет типа, тип есть у значения этой переменной. Изменив значение переменной мы изменим ее тип.
Может наивно показаться, (я как-то попался на этом), что компилируемые языки это как правило статически типизированные, но это не так, пример тому язык Julia, julialang.org Image
У NodeJS (libuv + v8 - JS движок) есть возможность экспортировать созданный байт код при запуске скрипта. Не знаю можно ли встроенными средствами его снова запустить, но +1 один камень преткновения, чтобы поставить = м/у компилируемые и статическими ЯП

medium.com/dailyjs/unders…
Динамическая типизация не заставляет думать разработчика о типах? И да и нет

Думают:

Опытные разработчики использующие динамически типизированные ЯП, документируют типы в сигнатурах функций. Явно имеют желание "статических типов".
В JavaScript - JSDoc jsdoc.app
JSDoc даже думали ввести на одних JavaScript курсах, чтобы подготовить морально/интеллектуально учащегося к статической типизации. Image
Минус динамической типизация, который также заставляет думать в сторону статической, это постоянная необходимость обладание контекстом о проекте, помнить что делает код. Приходится больше тратить времени, чтобы вкатиться в проект. Особенно с незнакомой доменной областью.
В своей книге "Типы в языках программирования" Бенджамин Пирс на первых страницах приводит доводы зачем нужны типы:

- Выявление ошибок
- Абстракция
- Документация
- Безопасность языков
- Эффективность
В JavaScript
- Выявление ошибок происходит в runtime
- ES6+ классы как какой-то способ описания абстракций в ЯП
- для документирования нужны как минимум сигнатуры функций, хотя бы на уровне JSDoc, а это сторонний инструмент
- эффективность - вопрос JS-движков, их обработки кода
Немного сравню JavaScript с TypeScript

Во втором после описания кода и запуска компилятор, тот начинает выводить типы (ru.wikipedia.org/wiki/Вывод_тип…), вывод типов гарантирует корректность программы.

Корректность во многом нас уберегла бы от ошибок типа undefined is not a function
Отсюда есть два разных по своей природе способа проверять корректность своих программ.

- покрывать код тестами:
для избежания runtime ошибок

- "покрывать код типами":
вывод типов сделает свою работу

На практике, конечно, лучше совмещать эти два подхода, не иначе
Про типы думают не только разработчики, которым без нее больно, но JavaScript-движки, например v8, который думает о типах постоянно.

В v8 есть такое понятие как hidden classes и inline cache. mathiasbynens.be/notes/shapes-i…

Грубо говоря объекты с одной структурой, являются один классом
Тоесть с точки зрения v8: чем больше будет объектов с одинаковой структурой, тем производительней будет код.
Если в гонке за производительность, оперироваться исключительно на этот факт и ни на какой больше, то напрашивается использование статической типизации как решения
Те, кто глядя на JavaScript не думают о типах внутри этого ЯП, это те люди, кто серьезно занимаются Computer Science: динамически типизированные ЯП, особенно JavaScript, наименее интересны.
Для меня это было показательно при изучении вопроса полиморфизма medium.com/devschacht/pol…
Так ли плоха динамическая типизация?
eax.me/dynamic-typing/

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with jsunderh00d

jsunderh00d Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @jsunderhood

15 Oct
JavaScript и функциональное программирование #тред Image
Как известно, JavaScript мультипарадигменный ЯП, позволяет писать код в различных стилях:

* событийно-ориентированный - обработка DOM-событий
* объектно-ориентированный - благодаря прототипному наследованию
* императивный - переменные, выражения, условия, циклы

Что насчет ФП?
Из лекции: Лямбда-исчисление
Image
Read 16 tweets
14 Oct
JavaScript и Браузер #тред Image
За 30 лет с момента появления 1ого браузера многое изменилось. Браузеры сегодня это очень сложное прикладное ПО. Об этом можно даже судить в 1ом приближении по кол-ву строк кода

How Many Millions of Lines of Code Does It Take (February 8, 2017)
visualcapitalist.com/millions-lines… Image
Ни для кого не станет открытием, если я напишу, что на текущий момент браузер Google Chrome, является самым популярным, более того, он занимает около 2/3 рынка.

Read 16 tweets
4 Jul
Давайте попробуем старую практику как мир: лайк этому посту от вас, факт про эффектор, его историю и концепции от меня. Посмотрим насколько меня хватит!
Изначально effector был миддлварой для ридакса и разрабатывался для высоконагруженного клиента реалтайм чата, вроде Телеграм.
Пока флоу не умер, имелась его первоклассная поддержка. Сейчас типы затачиваются под TypeScript.
Read 33 tweets
4 Jul
Каким боком @effectorjs помогает выстроить архитектуру приложений? Очень просто: он является языком описания бизнес-логики. А еще и помогает связать логику с представлением.
К чему мы привыкли? Встраиваем управление состоянием внутрь React. И после этого продолжаем называть REACT библиотекой, хотя он уже давно ФРЕЙМВОРК.
Мне не нравится такое положение. Из-за возраста React нам приходится очень долго ждать ConcurrentMode, терпеть издевательства StrictMode и наглости memo.
Read 18 tweets
29 Jun
Давайте начнем с вопроса. Что такое архитектура фронтенда? Это как директории называются? Правила взаимного импорта? Какой стек используется?
Почему меня вообще беспокоит архитектура и структура проекта? Начну с того, что "хорошая" структура вносит ясность. Где искать конкретный код. Куда положить новый. Как писать код командой не внося изменения одновременно в один файл.
С архитектурой сложнее, ведь она про отношение сущностей вашего проекта. Как выстроить зависимости между сущностями и модулями так, чтобы добавление нового кода не требовало внесения изменений в существующий код.
Read 6 tweets
15 Apr
Байка: когда-то я считал, что эти психологии - лишь выдумки соплежевателей, которые придумали себе что-то там. И проблемы бывают только объективные - ногу сломал, или отравился. Кстати, тогда я был бекендером, и считал фронтендеров соплежуями. Видимо это связано с типизацией 🤔
Это отлично укладывается в характеристику ригидной психики. Люди ригидного склада ума чётко знают, что и как происходит вокруг и с ними самими. Чаще всего это военные, немцы, бекендеры. И быть ригидным неплохо - меньше переживаешь, есть план и ты его придерживаешься
Но вот в случае непредвиденных обстоятельств, когда ваша картина мира рушится - трагедия, пандемия, или оказалось, что С++ не лучший в мире язык, а за JS платят больше - ригидным людям крайне тяжело подстроиться, они продолжают держаться за свои убеждения и планы. А мир в труху.
Read 21 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!