JavaScript vs TypeScript: якій мові надаєте перевагу ви?

💡 Усі статті, обговорення, новини про Front-end — в одному місці. Приєднуйтесь до Front-end спільноти!

Спільното, після публікації рейтингу мов програмування 2024 помітили дискусію щодо TypeScript (яка, до речі, в трійці лідерів мов цього року) і JavaScript. Думки розділилися:

«Не зовсім зрозумів з TypeScript — особливо щодо його успіху відносно JavaScript... це ж мабуть всім зрозуміло, що не існує TypeScript без JavaScript, це тільки його суперсет — іншими словами кожен, хто працює з TypeScript — автоматично працює і з JavaScript, але не навпаки.. і тому TypeScript ні в якому разі не мав би мати можливість обігнати JS, навіть близько до нього наближатись в силу того, що далеко не всім він (TS) заходить», — коментує Robert Rogovich.

«TypeScript — це окрема мова програмування, і те що, наприклад, ваш код, в результаті, компілюється у JavaScript не означає, що ви пишете на ньому», — коментує Misha Losyk.

«Але якщо я правильно розумію, то цей тренд — це збільшення кількості людей, які пишуть на тайпскрипті і при цьому ніяк не відносять себе до тих, хто пише на джаваскрипті? У цікаві часи живемо...
Особисто я вважаю, що кожен +1 голос по тайпскрипту автоматично має додавати +1 голос по джаваскрипту», — коментує Robert Rogovich.

«Наврядчи у людини вийде вивчити TypeScript на такому рівні, щоб практично його застосовувати, не звертаючись до ресурсів, які створені для JavaScript девелоперів... TypeScript якраз що працює як суперсет, розширюючи JavaScript... на відміну від того ж самого CoffeeScript, який структурно відрізняється від JavaScript — і девелопер, який звик писати на CoffeeScript, обʼєктивно відчуває труднощі при переключенні на синтаксис JS», — додає Robert Rogovich.

А ви вже перейшли на TypeScript? Скільки у вашій роботі лишилося JavaScript?

Choose your fighter

73%
27%
347 голосів  ·  показати результати
👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn

Найкращі коментарі пропустити

Як писав Діоген:

Хочеш рухатися швидко використовуй JavaScript, якщо далеко — Typescript

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

То Діоген вже знав про існування avaScript і Typescript

колись давно, років 10 тому, я дуже скептично був налаштований щодо ТС, бо протягом років на мої очах народилися та померли такі дивні звірятка, як ClojureScript, EasyScript, CoffeeScript..
але після того, як МС міцно вклався у розвиток ком’юніті та засобів розробки на ТС, то мені, старому консерватору, стало вочевидь що професійна командна веб-розробка з використанням ТС є сучасною базовою необхідністю.
залишилося дочекатися натівної підтримки ТС у браузерах, а у 22 Ноди це вже є як експериментальна фіча

Дуже символічне порівняння!
TypeScript — це фактично на 90% C#, а не якась окрема мова програмування.
JavaScript — якщо брати оригінал, то це взагалі неповноцінна мова програмування (про що каже сама назва «Script»).
Тобто уся ця довготривала історія існує з двох причин:
1) З якогось переляку «тонкі клієнти» стали не модними, а пішла тенденція зробити з браузера повноцінного «товстого клієнта» і напхати туди усю логіку аплікейшина.
2) Стандартом в браузері була не повноцінна мова програмування, а простенький «скрипт» для обробки івентів.
Усякий досвідчений девелопер розуміє що написати великий аплікейшин без повноцінної ООП-мови (Java, C# чи хочаб С++) на якомусь «скрипті» без типізації, інтерфейсів і структур даних — це буде просто купа лайно — кода у якому вже не третій місяць розробки не знайдеш кінців.
Тому з одного боку прийняли HTML 5 і у браузер почали пхати купу функціоналу аби зробити з нього «товстого клієнта».
З іншого боку спочатку вигадали купу «милиців», аби зробити JavaScript ООП мовою. Згодом з’явилася можливість міняти стандарт — і відразу у JavaScript «прилетіло» усе, що було у повноцінних мовах програмування.
Сучасний JavaScript у порівнянні з оригіналом — це як VB.Net у порівнянні з Basic для ZX Spectrum.
Ще декілька редакцій — і JavaScript фактично перетвориться на TypeScript.
А може браузери нарешті отримають підтримку C# та Java — і тоді JavaScript стане історією, як Паскаль.
Або маятник почне рухатись у зворотному напрямку — і важкі веб-аплікейшини знову вийдуть із моди. Бо якщо потрібен повноцінний аплікейшин — то можна зробити мобільну приложуху. А веб-браузер має робити саме те, для чого задуманий: показувати форматований HTML документ.

А може браузери нарешті отримають підтримку C# та Java — і тоді JavaScript стане історією, як Паскаль.

Не стане й тоді — бо мова з статичною типізацією не взмозі витіснити мову з дінамічною.
а в TS типізація — опціональна. Та навіть з нею — він не витіснив JS і не витіснить.
Та ще й в нього структурна типізація, а це багато чого спрощує при програмуванні.

Або маятник почне рухатись у зворотному напрямку — і важкі веб-аплікейшини знову вийдуть із моди

Вже виходять. Повністю не вийдуть, бо для внутрішніх продуктів розмір бандла не критичний, але без Next, Nuxt, ... проєкт вже якось несерйозно виглядає

Сучасний JavaScript у порівнянні з оригіналом — це як VB.Net у порівнянні з Basic для ZX Spectrum.

Саме так. І з PHP так. І в ньому теж все більш потужний тайп-хінтінг.
І тому ані JS/TS ані PHP мови с статичною типізацією не загрожують.

А веб-браузер має робити саме те, для чого задуманий: показувати форматований HTML документ.

А UI як робити тоді?

то можна зробити мобільну приложуху

Для великого дісплея?

Ті ж корпоративні аплікації колись чимало були з UI на Adobe Flash.
Чому недостатньо просто форматового HTML або мобільної аплікухі?

Та навіть з нею — він не витіснив JS і не витіснить.

после появляния TS внезапно в стандарт JS стали вводить десятки фичеров, которые до этого годами были в статусе «proposal» — совпадение? :)

Так все ЯП так — тянут все что полезно, востребовано.
Опциональная типизация — крутая штука. Я давно за возможность(!) типизирования но против — принуждения. Выбор за программистом, командой, адекватно размеру, сложности, требованиям проекта.
И структурная типизация — более гибкая чем номинативная.
«Суть важнее названия»

А JS от обогащения — не станет статически типизированным.

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

TypeScript — це фактично на 90% C#, а не якась окрема мова програмування.

F# вы хотели сказать?

Між JavaScript та TypeScript я обираю Elm.

Чи можна назвати TS окремою мовою, думаю що так можна)
Чи може TS працювати не в екосистемі JS, поки що не бачив такого, але ж JS використовується в node, а node використовує під капотом C++, компілює JS в C++... В такому випадку, можна зробити парсер який буде компілити в іншу мову, але чи потрібно це? І для чого? Це вже інше питання

> node... компілює JS в C++

А можна приклад такого?

Нісенітниця звісно, Node це відокремлений від бруаузера інтерпретатор JavaScript та віртуальна машина V8, була ще експериментальна версія з JavaScript движком MS Chakra . Node може або інтерпретувати JavaScript, або виконувати WebASM байт код, так само як і браузери. TypeScript потрібно компілювати в JavaScript для того щоб він виконувався Node, за допомогою компілятора npx, аля npx tsc foo.ts або безпосередньо в WebASM наприклад через компілятор github.com/...​mblyScript/assemblyscript (код має бути чітко тіпізованим, наче це код С — тобто ніяких ворнінгів в WebShtorm наприклад). І далі запустити вже за допомогою nodejs.org/...​d/nodejs-with-webassembly
Так само JavaScript в цілому і Node окремо, відносно інших скриптових мов дуже лаконічно може використовувати нативні функції, власне для цього і був зроблений JavaScript в 1995, бо движок браузера Nestscape Navigator — Gecko (тепер зветься Mozilla Firefox хоча це та сама компанія і той самий браузер) переважно був написаний на С++. У Node існує механізм Addons nodejs.org/api/addons.html

Нісенітниця звісно

на цьому можна було завершувати в принципі

Javascript придумал какой то любитель за пару недель, чтобы успеть выкатить что-то и презентовать на конференции. Ессна ж там были банальные ошибки в спецификации, которые лет 20 никто не правил — и так сойдет©.
Typescript придумал и написал маститый дядька, который до этого придумал и написал турбо-паскаль 5.5-7.0, делфи, C#.
Если надо обработать onclick, то наверное JS лучший выбор. А если делать большой и сложный SPA, то TS без вариантов.

Это кто Брендан Эйх типа любитель ? А ну тогда и Rust видимо так себе язык, любительский.
Язык у него был в разработке еще с работы в SeliconGraphics, котором он проработал 7 лет к тому моменту, кодовое название было Mocha
Как по мне : Андерс Хейлсберг, Брендан Эйх, Джеймс Гослинг, Бйорн Страуструп это про равно-великих.
Еще старшей школы как то Денис Ричи и Никлаус Вирт уже с нами нет.
Но была школа и еще старше : Джон Бэкус, Грейс Хоппер, Джон Маккарти и Эдсгер Вибе Дейкстра.
В общем пойду перечитывать Книгу Дракона.

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

Да с двумя языками у него как-то «просто». В действительности это не просто, это у фирмы и у него лично очень хороший маркетинг. Как-то JetBrains рассказывали что промоушен языка ничем не отличается от промоушена любого другого программного продукта, главное его сделать модным, что они собственно и провернули с Kotlin. А классных языков которыми никто не пользуется типа : Jancy или Pixilang полным полно. Никто их не ругает потому что ими мало кто пользуется и они относительно плохо изучены, в отличие от С++ и JavaScript. А модным язык, на сегодняшний момент делает наличие к нему хороших средств разработки. Это как раз про Хейлсберга — гуру IDE.

Мені подобається Typescript, але блін, він інколи заставляє страждати, через типізацію)

Ну ось ми й дожили до того часу, коли редакція DOU називає TypeScript окремою мовою. Тепер чекаю на нативну підримку TS у Edge (сарказм).

У цілому розумні люди вже все написали нижче, лише повторю, що TypeScript — це надбудова над JavaScript. Називайте як хочете: суперсет, препроцесор тощо, але факт у тому, що код на TypeScript транслюється не в рантаймі в JavaScript, ви навіть вказуєте в конфізі в яку версію JS треба транслювати. І сюрприз: ви в файлах TS можете писати на JS, бо синтаксис збігається. Чому? Бо TS — це JS із додатковими фічами, які поступово приходять у JS. А писати на TS не знаючи JS — це як оті фронтендери, що замість використання нативних форм ліплять купу useEffect на реакті.

Головне, що TS дає, це валідацію типів. У довгостроковій перспективі з великою командою ця валідація врятує купу часу.

Ну ось ми й дожили до того часу, коли редакція DOU називає TypeScript окремою мовою.

А це немає ніякого значення, багато мов реалізовані як транслятори з однієї мови на іншу. Наприклад, перша реалізації С++ була як раз транслятором у Сі. Але щось ніхто не каже, що C++ це надбудова над Сі.

Взагалі, браузери підтримують стандартно одну мову програмування: JavaScript. Це можна назвати асемблером web-програмування. Тому усі мови, що хочуть бути використані у веб-застосунках, мають транслюватися у JavaScript.

Наприклад, Elm транслюється у JavaScript. Чи будемо ми вважати його теж надбудовою над JavaScript? Ніби-то так, але... якщо подивитися на сирцевий код some elm example, то... несхоже на надбудову.

Але щось ніхто не каже, що C++ це надбудова над Сі.

На жаль, досі у багатьох вакансіях саме так і шукають, розробників на неіснуючій мові «С/С++».

розробників на неіснуючій мові «С/С++».

Скоріше за усе потребують Сі та С++, просто так пишуть.

Але ж ніхто не пише наприклад «С++/С#» розробників, хоча ніші у них теж можуть перетинатись.

Не пише не означає що таких нема. На колишній роботі я наприклад був JNI, а це одразу і Java і C++. Так само скажімо із : Kotlin, Groovy, Scala. Коли це пишуть зовсім не про мову програмування пишуть — це пишуть про розробку певного типу програм, під певний бізнес домен — де та чи інша технологія зайняла нішу. Скажімо якщо зараз подивитись на вакансії із Java або C# там переважно буде розробка бекенду та CRUD тобто по факту робота із базами данних.

Там в 99 % воно так і є. Знайти людину яка знається на одній і не знається на іншій мові останні років 20 складно. Я навіть коли першу програму писав на другому курсі в 2001 році, то вже воно звалось Borland C++.

Років 19 тому, коли починав вчити C, то бачив багато топіків, які намагались пояснити, що C++ це не надбудова над C :)

Згоден з вашими думками, тільки офіційна позиція розробників TS про те, що це JS із додатковими фічами. Плюс я ще не бачив реалізації TS окремо від JS при тому, що на TS і бек пишуть.

Це навіть не позиція, це абсолютно вірна маркетингова ідея яка спрацювала. За великим рахунком коли скрипти не доходили до складності сучасних фреймверків як то : React, Angular та Vue із їх Virtual DOM і цілими бібліотеками компонентів для RAD розробки — JavaScript вистачало. А тепер оскільки усе більше йде туде де давно вже був десктоп із Visual Basic, Delphi, MFC, QT тощо — стала потреба в мові ближчої за ідеєю C++. Скажімо Google пішли у свій Small Talk — Dart, із аналогічним результатом до Small Talk. А TypeScript якраз стрельнув.
Цікаво що розробляють компілятори із Java до WebASM, та навіть вставлять туди з коробки доступ до DOM (що не трівіально). developer.fermyon.com/wasm-languages/java

Мене стригерило «асемблер веб». Це зовсім не так, є справжній асемблер для веб: webassembly.org
За допомогою якого, можна писати для браузера на справжніх мовах програмування, таких як С++ або rust.

уже лет наверное 5-7 можно, но в массы не зашло, увы но факт.

Десь зайшов, але проблема полягає у тому, то не часто виникає проблема у швидкодії, яку можна відокремити від DOM.

тоесть проблема что иногда с перфомансом сложности — ну такое бывает:) Думаю
основная пробоема — инерция рынка и неготовность 100500 индусов учить хоть что нить. Ну а если и так работает — то и ок

Проблеми з перформансом у більшості випадків зав’язані на DOM, тому WebAssembly не може їх вирішити. Інерція ринку не вирішує в даному випадку нічого. Навіщо перевчати спеціалістів? Невже на ринку немає вже готових С++, Rust та інших розробників?

На одного С++ мидла сотни тысяч JS индусов

Так, я знаю що є. Але проблема web assembly полягає у тому, що він не дає головного: доступ до DOM. Тому якщо тобі треба окремо перемолоти байти, і ти впираєшся у швидкодію, то так, це опція. А я наводив у якості прикладу Elm, це мова програмування для створення Frontend GUI. І тут немає великого вибору, окрім компілитися у JavaScript.

Тому я не можу погодитися, що можна писати для браузера. Можна писати щось окреме, що може бути викликано з браузера.

Ну вот мы и дожили до того, что называем фактически любой язык программирования отдельным языком программирования. Любой язык програмирования — это надстройка над ассемблером. Называйте его как хотите: суперсет, препроцессор и тд, но факт в том что почти любой язык программирования компилируется не в рантайме( с оговорками про среды исполнения) в ассемблер. Вы можете указать хардварную платформу(т.е. «версия ассемблера»), под которую которую вы хотите скомпилировать свое поделие. И сюрприз: вы даже можете делать ассемблерные вставки в большинстве языков программирования(опять таки, с оговорками про среды исполнения). почему? Потом что любой язык программирования это ассемблер с дополнительными фичами.
Блин, до слез.

Людина складається на 70% з води, а кава з 90%, тому людина складається з кави ;)

— Комиссар. Говорят в академии мне какую-то логику изучать придётся. Это
что такое ?
— А это, Василий Иванович, наука такая великая. Один вопрос задал и всё
про человека знаешь.
— Это как ?
— Ну вот к примеру: у тебя дома аквариум есть ?
— Есть.
— Значит детки у тебя любят с рыбками играть.
— Любят.
— Значит у тебя жена есть.
— Есть.
— Вот и выходит Василий Иваныч, что ты не голубой. Понял ?
— Понял. Петька, Петька, иди сюда. Тут меня Фурманов логике научил.
— А чего это такое ?
— А это, Петька, наука такая великая. Один вопрос задал и всё про
человека знаешь.
Вот к примеру: у тебя дома аквариум есть ?
— Не, Василий Иваныч, нету.
— А ну значит ты Петька голубой.

Ох, недолюблюю я ці анекдоти про Василь Іванича. У них самі лайки та висміювання інших націй і геєв.

Це був анекдот про софізим. Ладно проїхали — а то знову понабігають модератори з тим, що ми тут «із вилами» ображаємо.

ви в файлах TS можете писати на JS, бо синтаксис збігається

Ні, не можете.

Цікаво, є якісь конструкції JS які не можна відтворити в TS?

Код зверху перестав бути валідним джаваскріптом?

Моє питання було про те на що ви своїм прикладом хочете вказати? Якщо на no-var, то це опція лінтера js, яка валідна й для ts. Вона існує через те, що на сьогодні використовувати var небезпечно, але якщо ви пишете супер оптимізований або для старого обладнання код, то вам необхідно буде використовувати var і цю опцію не використовувати.

Якщо мова про заборону зміни типів змінних, то це конфігурація транслятора ts і також залежить від вашого проєкта. Але скоріш за все, це буде якийсь лайнокод.

У будь якому випадку наведений вами приклад коду обробиться транслятором і буде працювати.

Ще раз. Це валідний JS код і недопустимий код в TS. Кінець історії.
> Type ’string’ is not assignable to type ’number’.

JavaScript це мова з динамічною слабкою типізацією, TypeScript зі статичною строгою. Це різні мови.

Якби в ts була строга типізація, то не було б ніяких any, не було б приводу типу через as тощо. По факту ts дає валідацію типів через що ми, навіть, свої валідації можемо писати.

Наведений вами приклад коду валідний для ts, він буде працювати. Єдине, що ви будете отримувати оці ворнінги та щоб їх прибрати в вас є кілька варіантів:
— вимкнути перевірку типів для певного рядка коду
— вимкнути перевірку для певних файлів
— заздалегідь вказати тип any змінній, а потім працювати з нею за допомогою приведення до типу через as.

Я щойно взяв два ваші рядки коду, зберіг як index.ts, виконав yarn tsc index.ts і отримав index.js з тим самим кодом.

Якщо мова про заборону зміни типів змінних, то це конфігурація транслятора ts

Підкажіть, будь ласка, яка саме це конфігурація?

Подивіться на опції strict, checkJs, skipLibCheck. У strict є додаткові опції, їх легко нагуглити. Якщо правильно памʼятаю, то ще мають бути опції для превірки json.

Type ’string’ is not assignable to type ’number’

Як не крути.

Просто визнайте, що не праві, і розійдемося.
Бо ви намагаєтесь вгадати опції. А правда в тому, що це мова зі статичною типізацією. І якщо навіть гіпотетично існує опція, яка здатна вимкнути статичну типізацію, то TypeScript після цього перестає бути TypeScript-ом. От і все.

Я ж відповів по вашому прикладу коду в цьому коментарі: dou.ua/...​rums/topic/48306/#2819680

А тут я взагалі згадував опції транслятора без привʼязки до вашого прикладу коду.

Я ж відповів по вашому прикладу коду в цьому коментарі

Ні, не відповіли.

Перефразую:
-
var a = 1;
// @ts-expect-error
var a = ’2′;
— 
// @ts-nocheck
var a = 1;
var a = ’2′;
— 
var a: any;
a = 1;
a = ’2′;

Не займайтеся шахрайством. Приклад був інший:

var a = 1;
a = '2';
Щасливої компіляції.

Та боже, що ви як мале троленятко. Приберіть другий var і буде той самий результат.

Останній раз. В мене є ts-файл з ось таким змістом:

var a = 1;
a = '2';
Скомпілюється чи ні?
Без демагогії, без трюків, без зміни коду.

Вам транслятор ts видасть js файл із таким самим кодом.

src/index.ts:2:1 - error TS2322: Type 'string' is not assignable to type 'number'.
$ npx tsc --version
Version 5.4.5

Узагалі, транслятор вам і без того коментаря странслює ваш код у js файл.

Cannot find name 'cout'.
The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
Cannot find name 'endl'.
// @ts-nocheck
lang = "Python"
print("Hello {lang}!".format(lang=lang))
А тут я взагалі згадував опції транслятора без привʼязки до вашого прикладу коду.

Хліб, яйця, молоко, помідори...
Ой, вибачте, я взагалі згадував, що маю в магазині купити.

Питання було

Цікаво, є якісь конструкції JS які не можна відтворити в TS?

і ось як ваш приклад можна відтворити на TS

Початкове твердження що в TS файлах можна писати на JS це очевидне перебільшення: писати на JS можна, але типи подекуди доведеться дописувати (коментар з цією тезою не захищаю і загалом з ним не погоджуюсь)

Так стопе, С++ починався з точно такого транслятора Cfront який гененерував код на С.

Ага й називали тоді плюси суперсетом сі?

Мову С++ і по сьогодні називають надмножиною С. Комітети із стандартизації тісно співпрацюють, сучасний С11 і вище дуже багато чого перейняв із С++, дещо С++ має перейняв з оновленого С. Якщо зворотня сумісність С++ із C буде втрачено, ця мова стане нікому не потрібна одразу.
Власне це головна перевага С++ перед : Rust, Go lang, D тощо. Щоби підключити С хеадер і використати системний API або якусь С бібліотеку в С++ не треба робити нічого особливого в переважній більшості випадків — 99%.
З TypeScript чи CoffeScript те саме, як було із C++ та Objective C. А от скажімо Dart — мало кому зайшов.

Аргументуй. Як то кажуть — ответить нужно.

Мову С++ і по сьогодні називають надмножиною С

Аргументуйте краще свій брєд. Тоді поговоримо. Решта тверджень там повна клініка. Є підозра, що ви були вчора ввечері п’яні... Ми всі люди, буває. Але вже ранок.

кщо зворотня сумісність С++ із C буде втрачено

Давно вже як, починаючи з несинхронізованості фіч типу designated initializers або VLA, які присутні у С, закінчуючи тим, що занулення memset()-ом структур, присвоєння void*, касти через union широко застосовуються у С, але у С++ викличуть помилку компіляції чи UB.

VLA — додали із C++ 20 www.geeksforgeeks.org/...​d-initializers-in-cpp-20 VLA дійсно відсутній в стандарті але підтримуюється наявними компіляторами, як то GCC та Clang.

занулення memset()-ом структур

ніхто не заважає компілятор може кинути ворнінг, що код не потрібний і його було прибрано. Partial initalization додано в обидві мови stackoverflow.com/...​on-of-automatic-structure

касти через union широко застосовуються у С, але у С++ викличуть помилку компіляції чи UB.

Абсолютно ідентична поведінка буде, щоправда приведення типів має інший синтаксис. При цьому С синтаксис залишився для сумісності і буде ворнінг (можна налаштувати компілятори так, що цей ворнінг стане помилкою, що і роблять більшість IDE за замовченням).

Знову як ці дрібні різниці в синткасисі завадять використати С header типу : Windows.h, unitstd.h, winsock2.h, чи ще щось ?

В 99% випадків С++ зворотно сумісний з С фактично безкоштовно. І при тому через extern «C» часто доволі дешево навпаки з С можна використати С++ тобто існує і пряма сумісність. Це від початку задумувалось саме Бйорном особисто www.stroustrup.com/compat_short.pdf

Цього не можна сказити про : D, Go lang, Rust тощо, щоб заюзати якийсь С header вам знадобиться робити велику кількість нудної роботи або використати якийсь сторонній генератор.. Серед того що я бачів такі можливості надає виключно C++ та Objective C.

VLA — додали із C++ 20

На протязі 21 року між стандартами був розрив у їх доступності, і у практично застосовуваних кодових базах буде ще якийсь час несумісність. З тої ж серії restrict, якого схоже так у С++ і не завезли.

ніхто не заважає компілятор може кинути ворнінг

Я про ризики перетирання віртуальних функцій у С++ і UB що за цим наступить, які відсутні для С.

Абсолютно ідентична поведінка буде

Стандарт С++ забороняє доступ до одного члену юніона після запису у інший, тільки послідовні записи-читання з одного поля. Те, що по факту воно десь працює, не гарантує що працюватиме і надалі.

І при тому через extern «C» часто доволі дешево навпаки з С можна використати С++ тобто існує і пряма сумісність.

Ну, це дешево, поки назовні експортуються сішні ж функції і структури, а не класи і неймспейси. На інших мовах для FFI теж доведеться обмежуватись лише наявним у С.

Мова була про інше, втупу скопіпастити сішний код чи перейменувати .c у .cpp і зібрати компілятором С++ — це і ідіоматично все менше поєднується з практиками С++ останніх стандартів, і по факту більш-менш крупний сішний проект завалиться з купою помилок і залишить ще купу тихого UB і потребуватиме ручного переписування, тому називати С++ надмножиною стає просто неправильно.

Копіпасти звісно погано, хоча деколи треба звісно в якомусь допоміжному коді який для якихось екскрементів там і т.п. Не знаю чому ви таке вирішили. Мова була саме про сумісність як зворотню тяк і пряму. І в цьому переваги саме С++ неперевершені. Якщо ви подивитесь на кодову базу скажімо Moby, це той що відкрита частина Docker в написаний на Go lang так там пів кодової бази це системні хеадери скажімо на WinAPI. Не знаю писали їх генератором чи руками, та як на мене це занадто. Усе що треба зробити в С++ — написати include та впевнитися що усе вірно налаштовано або в IDE, або в CMake чи ще де небудь. Те саме пів Cargo там або NPM — це усе врапери не сішні ліби типу GTK або GNU TLS.

Мову С++ і по сьогодні називають надмножиною С.

Цікаво, давно не чув, щоб плюси називали надмножиною, додатком, суперсетом тощо до сі.

Комітети із стандартизації тісно співпрацюють, сучасний С11 і вище дуже багато чого перейняв із С++, дещо С++ має перейняв з оновленого С.

Та наче й сайт стандарту один на двох, чи нє?

TypeScript краще JavaScript у всьому, крім порога входження. Крім того, потрібно досить добре знати ООП, щоб повноцінно використовувати його можливості.

Если быть строгим, то «ооп» в тайпскрипте вообще не имеет отношения к ооп. От такого джаваподобного «ооп» нужно бежать со всех ног. А то каждое чудо на проекте норовит наплодить гениальных иерархий наследования, переопределений методов и другого мусора.

ооо бля, есть такая приблуда «Keira3», для администрирования БД у серваков WoW. довольно-таки убогая в сравнении с Truice. хотел добавить нужный функционал, спулил. полез в сырцы, и прихуел, хотя у меня 10+ лет опыта ) github.com/azerothcore/Keira3

TypeScript краще JavaScript у всьому, крім порога входження

Було б дивно прочитати від джавіста щось інше :)

Фронтенд на Angular (TS) або ReactJS (JS). Потрiбно знати оба. (Я Java/Spring розробник).

...TypeScript just gets in the way of that for me. Not just because it requires an explicit compile step, but because it pollutes the code with type gymnastics that add ever so little joy to my development experience, and quite frequently considerable grief. Things that should be easy become hard, and things that are hard become `any`. No thanks!

Писати на ЖС це якийсь різновид колективного мазохізму. Те саме про ТС.

Вся історія ЖС це превознімаганіє недолугості мови.

Теорему Ескобара уже згадували?

Аксіому же

Але тут зустрічне питання до тебе — а що тоді являється кращою альтернативою?

Рвотные позывы от обеих, typescript своим существованием напомнитает об ущербности javascript, при этом сам отвратителен. Каждый день радуюсь что не нужно пользоваться этим.

Microsoft has a habit of capitalising on language trends and try to steer people into using their ecosystem. Examples include:

ASP (as an alternative to PHP)
First J++, then J# then C# (as alternatives to Java)
F# (as an alternative to other FP langs like Erlang and OCaml)
BASIC -> Visual Basic

TypeScript is also an example of this. JavaScript has taken off as the most widely employed language right now, and TS capitalises on the efforts of projects like JSDoc, Dart and Closure.

Людина на кворі.

Ні разу не працював на чистому js на щастя, шо з ангуларом шо з реактом був ts

На сайті TS сказано що TypeScript — це JavaScript з типами.

Вам потрібно використовувати інструмент, а не спорити про те що краще. Для додатків із невеликими API вам достатньо буде JS.

При здоровенних API інтеграціях без TS вам буде дуже важко.

Тому варто вибирати інструмент за потребою, а не за звичкою, і як показує практика — переписувати з JS на TS доводиться частіше ніж хотілось і часу на це йде значно більше ніж коли стартуєш проєкт зразу на TS.

Стаття жанру ’болгари васхітілісь’ 😁

Я не настільки сиджу на Dou, аби викупати, це байт+тролінг, чи реальне профанство)

З тайпскриптом цікаво проте не так ідеально . Я тут трішки розповідаю youtu.be/...​A99SY?si=2W3lC0AscE4iR9lg

Колись люди перестануть називати TS окремою мовою програмування, але не сьогодні )

Колись була дуже схожа спроба зробити що типу TS — фреймфорк Vaadin, який генерував JS. Був популярним. Здох.

Для jsx тестування достатньо ціна/якість/швидкість

Як писав Діоген:

Хочеш рухатися швидко використовуй JavaScript, якщо далеко — Typescript

Typescript. Я не настілький розумний, щоб використовувати Javascript

TypeScipt це інколи гармата проти горобців.
Я вибрав би комбінацію Angular+TypeScript або React+JSX (без типів).

Підписатись на коментарі