LINUX.ORG.RU

Typescript, как ведущая технология.

 , ,


0

3

Встал вопрос выбора технологий под новый проект.

Накидайте плюсов typescript, господа, владеющие данным ЯП.
Сам пока насмотрелся дивных косяков и неприятных моментов:

1 Не нужен без IDE. В редакторых без обвеса бесмыссленно на нём писать. Предлагаемый VSCode тырит всё, к чему может дотянуться (прописано в лицензии и в требованиях к дополнениям)
2 Прямо из документации: Null и его весёлые проблемы, простой тип Boolean, точно Вам говорю! Ссылки на «нормально». Да весь раздел по ссылке весёлый.
3 Это надо разбираться и уметь, а те, кто клепает на React/Vue, да и просто большинство - не знают, как вообще работает JS или ИХ выбранный framework, куда им до выведения типов, сложно, короче.
4 Всегда стремает MS. Сколько я с ней не работал, везде отношение " пользователь - не человек".

А так, если на этот список закрыть глаза, очень здравая идея.



Последнее исправление: Neuromagus (всего исправлений: 3)

Ответ на: комментарий от Neuromagus

Спасибо, пойду смотреть.

Можешь ещё на Elm и Reason глянуть. Единственное, разработчики Elm посрались года три назад и с тех пор релизов не было. Но оно всё ещё работает и довольно неплохо. А Reason пилится мордокнигой.

hateyoufeel ★★★★★
()
Ответ на: комментарий от Neuromagus

Есть язык Reason, представляющий собой OCaml с переделанным синтаксисом, более похожим на JavaScript. Есть компилятор к нему, перегоняющий его в JavaScript. Всё это дело пилится компанией Facebook.

https://reasonml.github.io/en/

hateyoufeel ★★★★★
()
Ответ на: комментарий от Zhbert

Я вчера из ex режима в виме не смог выйти когда он открылся в fzf.vim (пробовал его) :visual не работает всё иное тоже :D

А так да, иногда то в pluma то в gedit чёнить пишешь и в конце пум-пум-трум пум пум :wq вместо сохранения по ctrl+s и кликания кнопочки закрыть окно, причём на секунду мысль «а ты чего не закрылось то? Расскладка чтоль не та…», а потом «Тьфу блин хехе»

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от alex0x08

И компилятор там сложный и не твой, еще и постоянно изменяющийся. В случае чего шансов самостоятельно поправить Typescript transpiler просто нет.

Так было уже довольно давно, в современных проектах с каким vite/next.js транспайлер просто вырезает типы не обращаясь к tsc.

Ну а классы конечно же не нужны.

WSL_user
()
Ответ на: комментарий от WSL_user

Так было уже довольно давно, в современных проектах с каким vite/next.js транспайлер просто вырезает типы не обращаясь к tsc.

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

Тут суть-то в другом: есть исходный код, у исходного кода есть жизненный цикл, который может быть и 10 и 20 лет в хороших проектах. Работу (внезапно) не выкидывают раз в полгода из-за навязанного устаревания, иначе никаких сил не хватит.

Что случится с компилятором TS через 10 лет, если сам язык переделывается раз в полгода?

Будет очевидное «ваш проект устарел бла-бла-бла, немедленно обновляйтесь бла-бла-бла RuntimeError бла-бла-бла».

В результате в нагрузку к своему проекту будет еще и проект TS, который надо либо постоянно обновлять либо самостоятельно поддерживать какую-то одну версию.

Я точно также когда-то попал с MooTools, который был когда-то главным конкурентом jQuery а потом взял и умер.

alex0x08 ★★★
()
Ответ на: комментарий от alex0x08

Через 20 лет все также типы будут вырезаться транспайлером. Версия компилятора TS не влияет на возможность сторонней программы вырезать типы из исходников.

WSL_user
()
Ответ на: комментарий от alex0x08

Что случится с компилятором TS через 10 лет, если сам язык переделывается раз в полгода?

Всем пофиг в индустрии однодневок. Через 10 лет у них уже будет новый язык, не то что компилятор. И новые индусы.

bread
()

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

alex0x08 ★★★
()
Ответ на: комментарий от bread

Мне не пофиг, поскольку я (внезапно) все же рассчитываю какое-то время маржу с работающего проекта собирать а не сразу выкидывать на мороз. За полгода никакая разработка не окупится в принципе, так что речь про 5-10 лет.

alex0x08 ★★★
()
Ответ на: комментарий от bread

ES5 уж чересчур хардкорен, если кто вдруг забыл как это выглядит:

function Person(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gender = gender;
}

Person.prototype.getName = function() {
  return this.name;
};

Person.prototype.getAge = function() {
  return this.age;
};

Person.prototype.getGender = function() {
  return this.gender;
};

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

alex0x08 ★★★
()
Ответ на: комментарий от bread

Так фактически prototype — это явный vtable. Только он динамический, в отличие от C++. И прототипы — не изобретение JavaScript, они были известны ранее: https://en.wikipedia.org/wiki/Prototype-based_programming

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

Принципиальное отличие prototype от С++ в том, что там есть возможность конкретному объекту поменять метод, например. То бишь там идёт поиск по цепочке obj[method], obj.__proto__[method], obj.__proto__.__proto__[method] и тд. И на каждом этапе можно всё менять в рантайме. В С++ и большинстве других ООП-языков такой возможности нет и виртуальные таблицы задаются на этапе компиляции. Это и плюс (идёт ровно одно разыменование указателя, чтобы добраться до указателя на функцию), и минус (меньше гибкости, хотя с другой стороны может это и не минус).

Хотя если в эти нюансы не вдаваться, а просто писать class A extends B, то работает примерно так же.

vbr ★★★
()
Последнее исправление: vbr (всего исправлений: 1)

1. man lsp server и пиши хоть в vim'е
2. Ты еще T as any не видел, вот где смешно
3. Даже чтобы посрать надо разбираться и уметь
4. MS - это не так и страшно. TS делал автор поцкаля и додиеза

Как ты заметил, ts не даёт тебе нормального типизированного языка, при этом ломает преимущества скриптухи. Какой-то красивый декларативный код, чтобы можно было в 1.5 строчки загнать фичу ты не сделаешь, будешь сидеть обмазываться кодогенераторами и убогими декораторами. При этом код получается многословный как ява. Про обход объектов забудь, это не в чести, это не типизируемо, но зато ты не забудешь что возвращает функция (если тип возврата проставят). Правда могут поставить T1 | T2 | T3. И я хз как потом делать свитч, потому что в рантайм не прокидывается информация о типах (type). Юзай классы, интерфейсы, чекай на null/undefined, потому что никто тебе ничего так же не гарантирует, просто заставляют юзать мусорные аннотации, которые никого ни к чему не обязывают.

Оставили бы жсников в покое, сидели бы придумали как вылезти из динамически типизированного говнеца, нет, пришли скатили все в свою СТ помойку.

crutch_master ★★★★★
()
Ответ на: комментарий от KivApple

Но TS выполняет статический анализ корректности кода в плане типов (а вот это в JS пока не перетекает).

И не перетечет, по крайней мере в таком же виде, как это сляпали в тс.

crutch_master ★★★★★
()
Ответ на: комментарий от alex0x08
var makeClass = function(class) {
  var ret = function() {
    class.constructor.call(this, arguments)
  }
  class.getters.forEach( function(prop) {
    personClass["get"+prop] = function() { return this[prop]; }
  });
}

var personClass = {
  constructor : function(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gender = gender;
  },
  getters : ["name", "age", "gender"]
}

var entity = makeClass(personClass);
...

Хардкоден, да. Если круглое толкать, а квадратное катить. Как видишь, велик написанный за 5 минут на коленке, по возможностям затыкает всё эти ваши классы из тс и ес6 говнеца, где вы обречены писать все до самой пенсии ручками, как мартыханы.
inb4. Напоминаю, что если языку в 2к23 нужен кодогенератор сбоку, то это говно, а не язык.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 5)
Ответ на: комментарий от crutch_master

Слушай, тут ровно два варианта:

  1. Ты и сам прекрасно понимаешь какое это говно - классы в ES5 стиле и просто стебешься.
  2. Ты фанатик и переубедить тебя нереально.

На форуме помимо меня присутствуют программисты с опытом на Java/C#/C++/Typescript - пусть они выскажут свое мнение и по самим классам и по варианту реализации.

Будет больше фанатов ES5-стиля и ненависти к ООП - хер с ним, сорву диету и накачу пару бокалов пива за ЛОР. Будет больше адекватных - пойду на очередную пробежку.

alex0x08 ★★★
()
Ответ на: комментарий от crutch_master

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

Писать слишком подробные типы где они затрудняют поддержку/написание кода - code smell.

T1 | T2 | T3 чекается через различия в значениях вплоть до добавление в объекты тега который будет разным для этих типов (descriminated unions).

WSL_user
()
Ответ на: комментарий от WSL_user

Как линтер может ломать преимущества скриптухи?

А как ты eval тайпскрипта делать собрался?

остальное покрываешь any и готово.

Смысл тогда тайпскрипта вообще, если у тебя кругом any через any.

T1 | T2 | T3 чекается через различия в значениях вплоть до добавление в объекты тега который будет разным для этих типов (descriminated unions).

Уууу. Так и я умею.

crutch_master ★★★★★
()
Ответ на: комментарий от alex0x08

Ты и сам прекрасно понимаешь какое это говно

А ты можешь объяснить в чём говно? Не такие как в жабке? Я вот могу объяснить чем классы javalike ооп - говнище.

Ты фанатик и переубедить тебя нереально.

Никакого фанатизма. Только аргументированный срач. А еще может выяснится то, что никаких критериев кроме вкусовщины нет и фанатик тут кое-кто другой.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

А как ты eval тайпскрипта делать собрался?

Просто удалением типов. В TS конечно есть исторические фитчи влияющие на результирующий js код, но их использование в проектах не приветствуется.

Смысл тогда тайпскрипта вообще, если у тебя кругом any через any.

Смысл в том чтобы сыкономить на разработке/поддержке ресурсов больше чем затратить на написание типов. Один из главных плюсов TS - возможность его использовать настолько насколько он полезен.

Уууу. Так и я умею.

А других способов и нет. То что языки с nominal typing возможностями проставляют теги на уровне компилятора не делает их магическими. Наоборот TS более удобен в реальном мире где часто помимо стройных абстракций языка системы есть еще внешние системы никак их не уважающие.

WSL_user
()
Последнее исправление: WSL_user (всего исправлений: 1)