The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Доступна платформа Deno 2.0, развиваемая автором Node.js

10.10.2024 10:54

Опубликован выпуск платформы Deno 2.0, предназначенной для обособленного выполнения серверных приложений на языках JavaScript и TypeScript с использованием движка V8, применяемого в браузерах на основе Chromium. Проект Deno развивает Райан Даль (Ryan Dahl), создатель Node.js, с целью предоставления более защищённого окружения и устранения концептуальных ошибок, допущенных в архитектуре Node.js. Для повышения безопасности обвязка вокруг движка V8 написана на языке Rust, а для обработки запросов в неблокирующем режиме применяется платформа Tokio. Код проекта распространяется под лицензией MIT. Сборки подготовлены для Linux, Windows и macOS.

При подготовке новой ветки основное внимание было уделено совместимости со старой инфраструктурой JavaScript и расширению спектра поддерживаемых JavaScript-проектов без ущерба обеспечению безопасности. Среди изменений:

  • Реализована обратная совместимость с Node.js и npm, позволяющая запускать немодифицированные приложения, созданные для Node.js. Поддержка Node.js также даёт возможность постепенно переводить существующие проекты с Node.js на использование Deno или подключать к Deno-проектам зависимости из NPM через указание спецификатора "npm:" при импорте пакетов в deno.json.
  • Добавлена встроенная поддержка файла package.json и каталога с модулями node_modules, применяемых в Node.js.
  • Обеспечена поддержка приватных NPM-репозиториев, определённых через файлы ".npmrc".
  • Добавлена поддержка популярных JavaScript-фреймворков, таких как Next.js, Astro, Remix, Angular, SvelteKit и QwikCity.
  • Добавлена поддержка рабочих пространств npm (workspace) и моно-репозиториев (monorepo) с раздельной обработкой зависимостей.
  • Добавлены новые команды управления пакетами: "deno install" для установки зависимостей, "deno add" для добавления пакетов в package.json или deno.json, "deno remove" для удаления пакетов. Отмечается, что "deno install" работает примерно на 15 быстрее npm при отсутствия пакетов в кэше и на 90% быстрее при наличии пакета в кэше (поддерживается как node_modules, так и собственный глобальный кэш).
  • Стабилизирована стандартная библиотека.
  • Обеспечен длительный цикл поддержки (LTS).
  • Представлен JSR - репозиторий с JavaScript- и TypeScript-библиотеками, которые можно использовать в различными JavaScript Runtime.
  • В команде "deno fmt" появилась возможность форматирования контента в форматах HTML, CSS и YAML.
  • В команду "deno lint" добавлена поддержка специфичных для Node.js правил и исправлений.
  • В команде "deno test" реализована возможность запуска тестов, созданных с использованием node:test.
  • В команде "deno task" реализована поддержка запуска скриптов через package.json.
  • В команде "deno compile" появилась возможность заверения кода цифровой подписью.
  • В команде "deno serve" реализовано распараллеливания операций HTTP-серверов с задействованием нескольких ядер CPU.
  • В команде "deno coverage" появилась поддержка сохранения отчётов в формате HTML.
  • Проведена оптимизация производительности.




Основные особенности Deno:

  • Ориентация на безопасность в конфигурации по умолчанию. Обращения к файлам, сетевые возможности и доступ к переменным окружения по умолчанию блокированы и требуют явного включения. Приложения по умолчанию запускаются в изолированных sandbox-окружениях и не могут получить доступ к системным возможностям без предоставления явных полномочий;
  • Встроенная поддержка языка TypeScript помимо JavaScript. Для проверки типов и генерации JavaScript задействован штатный компилятор TypeScript, что приводит к проседанию производительности по сравнению с разбором JavaScript в V8;
  • Runtime поставляется в форме одного самодостаточного исполняемого файла ("deno"). Для запуска приложений при помощи Deno достаточно загрузить для своей платформы один исполняемый файл, размером около 40 МБ, не имеющий внешних зависимостей и не требующий какой-то особой установки в систему. При этом deno не является монолитным приложением, а представляет собой коллекцию crate-пакетов на Rust (deno_core, rusty_v8), которые могут использоваться по отдельности;
  • При запуске программы, а также для загрузки модулей можно использовать адресацию через URL. Например, для запуска программы welcome.js можно использовать команду "deno https://deno.land/std/examples/welcome.js". Код с внешних ресурсов загружается и кэшируется на локальной системе, но никогда автоматически не обновляется (для обновления требуется явно запустить приложение с флагом "--reload");
  • Эффективная обработка в приложениях сетевых запросов по HTTP, платформа рассчитана на создание высокопроизводительных сетевых приложений;
  • Возможность создания универсальных web-приложений, которые могут выполниться как в Deno, так и в обычном web-браузере;
  • Наличие стандартного набора модулей, использование которых не требует привязки к внешним зависимостям. Модули из стандартной коллекции прошли дополнительный аудит и проверку на совместимость;
  • Кроме runtime платформа Deno также выполняет роль пакетного менеджера и позволяет внутри кода обращаться к модулям по URL. Например, для загрузки модуля можно указать в коде "import * as log from "https://deno.land/std/log/mod.ts". Файлы, загруженные с внешних серверов по URL, кэшируются. Привязка к версиям модулей определяются через указания номеров версий внутри URL, например, "https://unpkg.com/[email protected]/dist/liltest.js";
  • Ориентация на использование Web-стандартов, поддержка Promise, fetch и ECMAScript-модулей.
  • Совместимость с пакетами, размещёнными в репозитории NPM и созданными для платформы Node.js.
  • В состав интегрирована система инспектирования зависимостей (команда "deno info") и утилита для форматирования кода (deno fmt);
  • Все скрипты приложения могут быть объединены в один JavaScript-файл.




  1. Главная ссылка к новости (https://deno.com/blog/v2.0...)
  2. OpenNews: В JavaScript-платформе Bun добавлена поддержка вызова кода на языке Си
  3. OpenNews: В Node.js добавлена экспериментальная поддержка языка TypeScript
  4. OpenNews: Доступна серверная JavaScript-платформа Bun 1.0, более быстрая, чем Deno и Node.js
  5. OpenNews: В JavaScript-платформе Deno обеспечена совместимость с модулями NPM
  6. OpenNews: Автор Node.js представил защищённую JavaScript-платформу Deno 1.0
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/62024-deno
Ключевые слова: deno, nodejs
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (70) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (2), 11:56, 10/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +14 +/
    Даже местным экспертам с самого начала было понятно что без поддержки npm в этом дено нет никакой необходимости. И вот на авторов снизошло озарение и они сделали нормально. Зачем нужно было 4 года упираться решительно не понятно.
     
     
  • 2.94, Аноним (94), 06:07, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что npm та ещё дыра.
     
  • 2.95, Бывалый Смузихлёб (ok), 10:26, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Но ведь, но как же их суперфича, когда каждый пакет предлагалось добавлять просто прямой ссылкой на репозиторий( в т.ч на проект в гитхабе ) без всяких просто пакетов и их версий
     

  • 1.4, Вы забыли заполнить поле Name (?), 12:05, 10/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > Ориентация на безопасность в конфигурации по умолчанию
    > Кроме runtime платформа Deno также выполняет роль пакетного менеджера и позволяет внутри кода обращаться к модулям по URL.

    Взаимоисключающе пункты.

     
     
  • 2.7, Аноним (7), 12:14, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    всё будет норм, если в URL запретить http://, а для “безопасности” будет достаточно https://

    ты что, не шаришь за безопасность?

     
     
  • 3.28, Вы забыли заполнить поле Name (?), 15:44, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > всё будет норм, если в URL запретить http://, а для “безопасности” будет
    > достаточно https://
    > ты что, не шаришь за безопасность?

    Ну будешь ты по https скачивать трояны. Какая разница? Я вообще о другом говорю: о том, что модули сами тянутся из интернета по урлу. Дичь. Пакетный менеджер, который их скачает еще более менее, но автоматом... Завтра сломают твой дено, будут тебе отдавать хз пойми что, а ты скачаешь при первом запуске.

     
     
  • 4.96, Бывалый Смузихлёб (ok), 10:28, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    но качать-то будут безопасно и, можно быть уверенным, что конечному пользователю попадёт именно тот троян, который для него предназначен, безо всяких промежуточных манипуляций с содержимым
     
  • 3.53, YetAnotherOnanym (ok), 16:40, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >  всё будет норм, если в URL запретить http://, а для “безопасности” будет достаточно https://

    Эх, зачем же ты слово "безопасность" в кавычки взял! Всю тонкость утратил...

     
  • 3.99, Анон1110м (?), 11:02, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А почему сразу HTTP? А если я хочу по FTP?
     
  • 2.13, Admino (ok), 12:50, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Там ещё и npm.
     
  • 2.17, Аноним (17), 14:26, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Думаю, вы передергиваете, утрируете Учитывая это Обращения к файлам, сетевые ... большой текст свёрнут, показать
     
     
  • 3.75, Вы забыли заполнить поле Name (?), 17:46, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Думаю, вы передергиваете, утрируете.
    > Учитывая это:
    > "Обращения к файлам, сетевые возможности и доступ к переменным окружения по умолчанию
    > блокированы и требуют явного включения. Приложения по умолчанию запускаются в изолированных
    > sandbox-окружениях и не могут получить доступ к системным возможностям без предоставления
    > явных полномочий;"

    По хорошему ты должен прочитать код или хотя бы пробежаться по нему. Если там походы на другой сервер неявные, то проблема в голове, а не наличии изоляции.

    > Да и вообще, при наличии:
    > "Наличие стандартного набора модулей, использование которых не требует привязки к внешним
    > зависимостям. Модули из стандартной коллекции прошли дополнительный аудит и проверку на
    > совместимость; "

    Эти модули скачивают при первом использовании? Если да, то это дыра в безопасности. В ноде той же или питоне стандартные модули поставляются сразу, не надо ничего качать. И точно также аудит проходят. Так что этот лозунг - просто дешевая реклама.

    > можно "искаропки" "запиливать" свой собственный, без обращений вовне, защищенный салон
    > с шахматами и поэтессами, с тщательно вручную отобранными тобою в локальный
    > репозирторий модулями, как ты, конечно же крайне скрупулезно, отбираешь C++ библиотеки
    > в свои Проекты.

    Внимание вопрос: как мне указать нужную версию компилятора и библиотек с++? А никак. Ни npm, ни другие языковые пакетные менеджеры этот вопрос не решают. Предлагают качать уже собранные бинари, создавая дыру безопасности. А вот Nix или guix позволяют такие зависимости указать.

     
  • 3.83, Аноним (83), 18:00, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >"Обращения к файлам, сетевые возможности и доступ к переменным окружения по умолчанию блокированы и требуют явного включения. Приложения по умолчанию запускаются в изолированных sandbox-окружениях и не могут получить доступ к системным возможностям без предоставления явных полномочий;"

    А как это сделано? А то будет как в андроиде - доступ сразу ко всем файлам, сразу ко всему интернету.

     
     
  • 4.84, Аноним (-), 18:57, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Как-то так docs.deno.com/api/deno/permissions

    Ты можешь перечислить куда можно лезть или куда нельзя:
    Deno.ReadPermissionDescriptor
    path: string | URL
    An allow-read or deny-read permission can be scoped to a specific path (and if the path is a directory, any sub paths).


    Deno.NetPermissionDescriptor
    Optional host string of the form "<hostname>[:<port>]". Examples:
    "github.com"
    "deno.land:8080"

     

  • 1.5, Аноним (5), 12:07, 10/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Обеспечена поддержка приватных NPM-репозиториев, определённых через файлы ".npmrc".

    Как я понимаю, именно через NPM и планируют взламывать серваки, установившие этот ваш deno.
    Вопрос лишь, оно самостоятельно будет тянуть пакеты из публичных, а теперь и приватных(лол) репозитариев, или все таки надо будет руками набивать что то типа "npm update all -F --no-check-hash --no-check-cert --allow-all"? (Или у этого движка есть gui-frontend где вообще есть только кнопка "обновить", а думать не надо?)

     
     
  • 2.8, Аноним (2), 12:18, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Раньше deno не поддерживал npm и тянул напрямую с github безопасности как ты понимаешь это не прибавляет.
     
     
  • 3.11, Аноним (7), 12:22, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    согласен, а надо тянуть напрямую из мозга разработчика
     
     
  • 4.18, 1 (??), 14:40, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Но только не из мозгов хакира
     

  • 1.19, Аноним (17), 14:43, 10/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    В недавней нововсти про Bun (https://www.opennet.me/opennews/art.shtml?num=61915)

    писАли:
    "...По производительности Bun заметно обгоняет Deno и Node.js (в тестах на базе фреймворка React платформа Bun в 2 раза опережает Deno и почти в 5 раз Node.js)..."

    В текущей же новости уже Дено неоспоримый красавчик. Возникает вопрос. Это зависит от того, кто, что и чем измеряет (и откуда берутся новости) или Дено таки сильно улучшили (т.к. в этом релизе "...Проведена оптимизация производительности...") и, значит, в предыдущих версиях он был дном в плане производительности?

     
     
  • 2.23, Аноним (23), 15:03, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это зависит от того, кто, что и чем измеряет
     
  • 2.24, morphe (?), 15:20, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > платформа Bun в 2 раза опережает Deno и почти в 5 раз Node.js

    При том что React исключительно CPU-bound, а JIT/Runtime в Deno и Node.js один и тот же - V8

    У Bun крайне странные бенчмарки были, и чаще всего их гоняли на MacOS, где Bun более оптимизирован (он использует JS движок Apple), а V8 не особо, потому что кому макось сдалась.

     
     
  • 3.97, Бывалый Смузихлёб (ok), 10:38, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Там неоднозначно. Вебкит в среднем хуже работает с обилием данных чем в8. Даже Реакт-натив порой пытались перевести на кусок последнего

    Само сравнение было странным - на серверной штуке, у которой свои серверные задачи, на кой-то чёрт, гоняли именно библиотеку для клиента( да, типо серверная отрисовка и прочее, но это очень специфическое применение, которое последние годы едва ли активно растёт и развивается )

    Там ещё нюансы могли быть с исходными параметрами. У жс-движков многоуровневая оптимизация. Первые десятки запусков, функции вообще запускаются как обычная интерпретация кода( даже без предварительной минификации ). После энного количества, пройдя энные этапы, код всё-таки прогоняется через Джит и работает сильно быстрее.
    Вот эти пороги( количество вызовов функций в жс, сверх которых можно переходить к след. этапу их оптимизации, можно менять, в числе прочего, аргументами запуска хромиумных да и вебкитовых поделий вроде бы )
    Манипулируя этим, можно добиться чтобы функции почти сразу Джит-ились и работали как полноценно-скомпилированные, безо всяких интерпретаторов и прочего

     
  • 2.27, НяшМяш (ok), 15:31, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вот это в том числе могло повлиять на результаты: https://github.com/denoland/deno/pull/25806
     
  • 2.104, Аноним (104), 16:19, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    "Главное не как голосуют, главное кто считает" (с)
     

  • 1.20, Аноним (20), 14:45, 10/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ничеси, на 20мс быстрее, вот те раз…
    Срочно переписываем все под него!
     
     
  • 2.22, Аноним (2), 14:58, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Наоборот дено переписали чтобы под ним все что есть работало как есть.
     

  • 1.30, Вы забыли заполнить поле Name (?), 15:47, 10/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Бенчмарк на fs.existsSync...

    На кого это расчитано? Потом жалуются почему про джеесеров говорят плохо.

     
  • 1.31, Вы забыли заполнить поле Name (?), 15:49, 10/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Пакетные менерджеры, автоматическое скачивание по урлу из кода. Вы что там употребляете? Есть nix и конвертер npm to nix. Пользуйтесь на здоровье.  
     
     
  • 2.39, Golangdev (?), 16:02, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Есть nix и конвертер npm to nix

    Нет, спасибо.

    Пакетный менеджер должен быть дефолтный, что идёт вместе с node. Всё остальное - от лукавого. Все эти приблуды имеют свойство либо умирать / отставать / терять совместимость по мере угасания интереса их автора. А также безрукое или никакое коммьюнити, которое не сможет "подхватить" разработку.

    Много вы видели реальных js проектов / энтерпрайзов, использующих этот nix ?

    В pet - пожалуйста, это лучшее место для экспериментов.

     
     
  • 3.42, Вы забыли заполнить поле Name (?), 16:07, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >> Есть nix и конвертер npm to nix
    > Нет, спасибо.
    > Пакетный менеджер должен быть дефолтный, что идёт вместе с node. Всё остальное
    > - от лукавого. Все эти приблуды имеют свойство либо умирать /
    > отставать / терять совместимость по мере угасания интереса их автора. А
    > также безрукое или никакое коммьюнити, которое не сможет "подхватить" разработку.

    Первый релиз nix был 21 год назад, если что.

    > Много вы видели реальных js проектов / энтерпрайзов, использующих этот nix ?

    google idx использует nix

    > В pet - пожалуйста, это лучшее место для экспериментов.

    В nix и guix есть то, что нет во всех этих пакетных менеджерах для кажлого языка. Плюс тебе надо системные зависимости ставить (компилятор, например) и все это можно поставить через 1 пакетный менеждер, атомарно обновлять.

     
  • 3.49, Вы забыли заполнить поле Name (?), 16:33, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >> Есть nix и конвертер npm to nix
    > Много вы видели реальных js проектов / энтерпрайзов, использующих этот nix ?

    Ну и джеесеры слабы откровенно говоря. Очень много сомнительных решений у них. Автоматически обновляют зависимости, дробят модули по одной строке, используют монорепозитории там где они не нужны. Волосы дыбом становятся от такого. Куда им до nix. Они системных пакетным менеджером воспользоваться то не смогут. В браузере пусть сидят, но ведь они на сервер лезут, а потом показывают бенчмарки на fs.existsSync или вот частоту запросов sqlite. Совершенно оторванные от жизни.

     
     
  • 4.56, Golangdev (?), 16:56, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > много сомнительных решений

    Тут я с вами соглашусь

     
  • 3.81, Аноним (83), 17:58, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Пакетный менеджер должен быть дефолтный, что идёт вместе с node.

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

     

  • 1.32, Golangdev (?), 15:50, 10/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    > Для проверки типов и генерации JavaScript задействован штатный компилятор TypeScript, что приводит к проседанию производительности по сравнению с разбором JavaScript в V8

    Что говорит о ненужности TypeScript. Это грубо говоря, как Kotlin для JVM, только хуже. Гуглим "37signals type gymnastics"

    > поддержка популярных JavaScript-фреймворков, таких как Next.js, Astro, Remix, Angular, SvelteKit и QwikCity

    Первый раз слышу про Remix, QwikCity. Много ли реальных проектов / энтерпрайзов на этом ? Вопрос риторический.

     
     
  • 2.36, Вы забыли заполнить поле Name (?), 15:57, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Гуглим "37signals type gymnastics"

    Пфф. Они не рассказывают, где взять столько железа, чтобы их руби не тормозил?

     
  • 2.37, Вы забыли заполнить поле Name (?), 15:58, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +6 +/
    > Что говорит о ненужности TypeScript.

    Гошник говорит о ненужности нормальной системы типов? Ну все сходится.

     
     
  • 3.40, Golangdev (?), 16:03, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Именно. TypeScript - это худшая система типов, разработка ради разработки.
     
     
  • 4.44, Вы забыли заполнить поле Name (?), 16:11, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > разработка ради разработки.

    Копипастить код под разные типы и упорно откзываться от джеренирков, а потом сделать фигню - это другое понимать надо?

     
     
  • 5.48, Golangdev (?), 16:29, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Хоть одно реальное применение дженерикам на фронте ?
     
     
  • 6.50, Вы забыли заполнить поле Name (?), 16:36, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Хоть одно реальное применение дженерикам на фронте ?

    Пропсы и стейт в компонента реакта

     
  • 6.51, Вы забыли заполнить поле Name (?), 16:37, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Хоть одно реальное применение дженерикам на фронте ?

    Описать тип результата промиса.

     
     
  • 7.55, Golangdev (?), 16:49, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Промис без этого не будет работать ?

    Как и писал выше - разработка ради разработки.

     
     
  • 8.61, Вы забыли заполнить поле Name (?), 17:32, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Будет Но мы же добиваемся облегчения разработки, чтобы ошибка была до запуска, ... текст свёрнут, показать
     
     
  • 9.67, Golangdev (?), 17:37, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    вот для облегчения как разработки, так и отладки мы же с вами знаем что sourcem... текст свёрнут, показать
     
     
  • 10.70, Вы забыли заполнить поле Name (?), 17:39, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Судя по тенденциям наоборот все перешли на TS, а типы хотят добавить в специфика... текст свёрнут, показать
     
     
  • 11.78, Golangdev (?), 17:50, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    вот это хорошая идея, если когда это поддержат в браузерах, будет прям неплохо, ... текст свёрнут, показать
     
  • 10.71, Вы забыли заполнить поле Name (?), 17:40, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Сраведливости ради у них лозунг просто js , поэтому прям сильных трансформаций ... текст свёрнут, показать
     
  • 6.73, Аноним (83), 17:44, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Довольно символично, что про дженерики спрашивает гошник. Дженерики нужны буквально для всего, в частности для работы с коллекциями. Но в го иная традиция, там каждый раз код пишут заново, словно гошники - машинистки, у которых зарплата зависит от количества символов.
     
     
  • 7.85, qrKot (?), 19:09, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >> Довольно символично, что про дженерики спрашивает гошник.

    Ирония "с душком". В Go дженерики уже 3 года тому как...

    >> Дженерики нужны буквально для всего

    А вот это уже перебор. Для какого-такого "всего" они нужны? о_О
    Не, инструмент, безусловно, очень полезный, прям в некоторые места очумительно ложится. Но "для всего"... Это у вас ООП головного мозга, очевидно.

    >> в частности для работы с коллекциями

    Ну вот в основном для работы с коллекциями. В случае универсальных хендлеров/обработчиков преимущество над интерфейсами уже не так очевидно. Собственно, кроме сохранения информации о типе, и нет его, преимущества этого.

    >> Но в го иная традиция, там каждый раз код пишут заново,

    Вы, очевидно, на Go давно пишете? Прям в курсе всех традиций?)

     
     
  • 8.88, Аноним (83), 20:41, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Нет никакого душка, достаточно сравнить дату релиза го, и дату появления дженери... текст свёрнут, показать
     
     
  • 9.98, Golangdev (?), 10:57, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Это не аргумент Это не промышленный язык программирования, это лишь очередное... текст свёрнут, показать
     
     
  • 10.102, Аноним (102), 14:48, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Если вы не знаете, какие вещи пишут на каком языке, то это не повод рассказывать... текст свёрнут, показать
     
  • 4.54, Аноним (54), 16:44, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    оно для девелоперов, которые не в состоянии в голове удержать контекст или не умеют использовать jsdoc, чтобы правильно использовать возвращаемые значения. это типа придурков, которые не в курсе, как работает "2"+2 в js. короче обгашенные индусы - это ЦА тупоскрипта. он прям в IDE кричит и подчёркивает если не совпадает тип.

    другое дело, что для js обычная ситуация когда принимаются/возвращаются переменные разных типов в зависимости от каких-то условий. поэтому типичный ts - это нагромождение дженериков из дженериков. всплывающий автодок превращается в БСЭ, который невозможно быстро распарсить.

    ну и плюс такая нужная корпоратам фишка, как отделение объявления от реализации - очень удобно "открытые" исходники зажимать

     
     
  • 5.60, Вы забыли заполнить поле Name (?), 17:29, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > возвращаются переменные разных типов в зависимости от каких-то условий
    > это нагромождение дженериков из дженериков

    Вернуть несколько значений - это норма (с). Но по факту возвращаемый тип то один всегда - объединение типов. Тут и приходят дженерики.

     
  • 5.64, Вы забыли заполнить поле Name (?), 17:35, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > не умеют использовать jsdoc

    jsdoc - это просто строка-комментарий. Писать любую метаинформацию в комментариях - это плохое решение: ни распарсить, не извлечь нормально. Кстати, ts вроде умеет извлекать типы из jsdoc и проверять их. Но если речь идет про строки документации, который пишется чисто для документирования, то ошибки несоответствия (а точно не забудешь поправить тип? точно ли этот тип будет соответстовать типу в момент исполнения) неизбежны.

     
  • 5.69, Аноним (83), 17:37, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >другое дело, что для js обычная ситуация когда принимаются/возвращаются переменные разных типов в зависимости от каких-то условий. поэтому типичный ts - это нагромождение дженериков из дженериков. всплывающий автодок превращается в БСЭ, который невозможно быстро распарсить.

    Это прямое следствие того, что типизацию в js завезли столько лет спустя. Писали бы они изначально на типизированном языке, кучи проблем бы не было.

     
  • 5.86, qrKot (?), 19:12, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >> другое дело, что для js обычная ситуация когда принимаются/возвращаются переменные разных типов в зависимости от каких-то условий.

    Вот это выглядит как явный признак говно-архитектуры. Если на фронте в этом есть смысл, то на беке - брррр.

    Впрочем, с тем, что TS на беке тоже (как и JS) нафиг не нужен - абсолютно согласен. Его на бек только криворукие фронтендеры, не способные в освоение более 1 языка, и тащат.

     
     
  • 6.101, Аноним (102), 14:32, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Вот это выглядит как явный признак говно-архитектуры.

    Это следствие динамической типизации. Непример есть $(sel).attr('name') и $(sel).attr('name', 'val'). Если один аргумен - возвращает текущее значение, если два устанавливает новое значение. И подобная магия на каждом шагу

     

  • 1.62, Аноним (83), 17:34, 10/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Понадобилось всего лишь около двух десятков лет, что яваскриптеры признали необходимость типизации. Но вместо Ocaml/ReasonML/ReScript, у них получился TypeScript.
    >Встроенная поддержка языка TypeScript помимо JavaScript. Для проверки типов и генерации JavaScript задействован штатный компилятор TypeScript, что приводит к проседанию производительности по сравнению с разбором JavaScript в V8;

    Мало того, что js сам по себе тормозной и требует прогрева, так ещё запуск приложений будет ещё медленнее, так как каждый запуск будет отдельная новая трансляция. Яваскриптеры утеряли технологию запуска компиляторов.

     
     
  • 2.66, Вы забыли заполнить поле Name (?), 17:36, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > что яваскриптеры признали необходимость типизации

    Не только. Можно еще вспомнить python с аннотациями типов или Dart.

     
  • 2.68, Вы забыли заполнить поле Name (?), 17:37, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > так как каждый запуск будет отдельная новая трансляция

    Ну там же инкрементальная сборка должа быть? Зачем транслировать модули, которые не поменялись?

     
     
  • 3.79, Аноним (83), 17:52, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Ну там же инкрементальная сборка должа быть?

    Её для начала нужно осилить. Я разворачивал несколько проектов на реакте, каждый запуск этого проекта - компиляция с нуля. Если запускать сборку в дев режиме, то компилятор будет висеть в фоне и при изменении файлов сразу же пересобирать проект. Даже если проект небольшой, и поменялся один единственный файл, то сборка будет длится где-то около полминуты. Если проект большой, то поднимать дев нужно первым делом, так как подниматься он будет минут пять, если не больше.

     
     
  • 4.82, Вы забыли заполнить поле Name (?), 17:58, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >>Ну там же инкрементальная сборка должа быть?
    > Её для начала нужно осилить. Я разворачивал несколько проектов на реакте, каждый
    > запуск этого проекта - компиляция с нуля. Если запускать сборку в
    > дев режиме, то компилятор будет висеть в фоне и при изменении
    > файлов сразу же пересобирать проект. Даже если проект небольшой, и поменялся
    > один единственный файл, то сборка будет длится где-то около полминуты. Если
    > проект большой, то поднимать дев нужно первым делом, так как подниматься
    > он будет минут пять, если не больше.

    Печально. Процесс в фоне с отслеживанием изменений и инкрементальная сбока - это про разное в моем понимании. Хочется 2-го, хотя бы как в mypy.

     
     
  • 5.89, Аноним (83), 20:45, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Процесс в фоне с отслеживанием изменений и инкрементальная сбока - это про разное в моем понимании

    Да, это разное, но в случае реактом фоновый процесс - это следствие того, что реакт нужно собрать перед отправкой в браузер. Таким образом, файл достаточно сохранить и подождать, без ручного запуска компиляции после каждой правки.

     
  • 4.87, Аноним (87), 20:36, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Походу у вас древний проект созданный в 2014-2017 годах. Сейчас даже мой не очень современный рабочий проект в dev поднимается менее секунды, правки кода применяются к странице моментально, сборка в прод за 40 секунд.
     
     
  • 5.90, Аноним (83), 20:47, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Походу у вас древний проект созданный в 2014-2017 годах

    Что там за магия такая позже произошла, что новые собираются быстро, а старые - нет?

     
     
  • 6.91, Аноним (87), 21:00, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    В основном начали выкидывать жуткое легаси (webpack 4, CRA), переписывать узкие места тулинга на WASM, часто многопоточно, сокращать граф зависимостей. Работа идет постоянно, но конечно в проде с отставанием, ну а многие проекты просто застревают в прошлом потому что их разработчикам нет дела даже явные вещи оптимизировать (без обновлений).
     
     
  • 7.92, Аноним (83), 23:09, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >переписывать узкие места тулинга на WASM

    Все js проекты оптимизируются одинаково...

     
  • 2.103, Имя (?), 15:41, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Как насчёт bytenode?
     

  • 1.105, Аноним (104), 16:28, 11/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Приятно видеть что команда работает над Deno чтобы догнать Bun. Конкуренция - двигатель прогресса.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру