The OpenNET Project / Index page

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

Выпуск jsii 1.31, генератора кода C#, Go, Java и Python из TypeScript

10.07.2021 21:09

Компания Amazon опубликовала компилятор jsii 1.31, представляющий собой модификацию компилятора TypeScript, позволяющую извлечь из компилируемых модулей информацию об API и сгенерировать универсальное представление данного API для обращения к JavaScript-классам из приложений на различных языках программирования. Код проекта написан на TypeScript и распространяется под лицензией Apache 2.0.

Jsii даёт возможность создавать на языке TypeScript библиотеки классов, которые могут использоваться в проектах на языках C#, Go, Java и Python, благодаря трансляции в родные для этих языков модули, предоставляющие тот же самый API. Инструментарий используется в AWS Cloud Development Kit для поставки библиотек для разных языков программирования, формируемых из одной кодовой базы.

Новый выпуск примечателен добавлением команды "jsii-rosetta transliterate", позволяющий провести транслитерацию файлов ".jsii"c промежуточным представлением кода в один или несколько целевых языков программирования.

Например, на основе JavaScript/TypeScript-кода:


   export class HelloWorld {
       public sayHello(name: string) {
           return `Hello, ${name}`;
       }

       public fibonacci(num: number) {
           let array = [0, 1];
           for (let i = 2; i < num + 1; i++) {
               array.push(array[i - 2] + array[i - 1]);
           }
           return array[num];
       }
   }

jsii сгенерирует Python-код:


   class HelloWorld:
       def say_hello(self, name):
           return 'Hello, ' + name

       def fibonacci(self, n):
           table = [0, 1]

           for i in range(2, n + 1):
                table.append(table[i - 2] + table[i - 1])

           return table[n]


  1. Главная ссылка к новости (https://github.com/aws/jsii/re...)
  2. OpenNews: Доступен язык TypeScript 2.0, продвигаемый Microsoft в качестве дополнения к JavaScript
  3. OpenNews: Реализация языка Python на JavaScript и транслятор кода Python в JavaScript
  4. OpenNews: Facebook открыл код транслятора из языка Hack в PHP. Обновление PHP 5.6.3, 5.5.19 и 5.4.35
  5. OpenNews: Google выпустил J2ObjC 1.0, транслятор из Java в Objective-C
  6. OpenNews: Google представил фреймворк Flutter 2 и язык Dart 2.12
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/55466-jsii
Ключевые слова: jsii, typescript, javascript
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (36) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.10, Аноним (10), 21:51, 10/07/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Мне бы не помешало наоборот. Из Го и Си генерить TypeScript или сразу JS, ибо в последнем вообще беспредел мозга.
     
     
  • 2.11, Аноним (10), 21:54, 10/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Хотя если перевод API, то скорее их действительно никто не понимает.
     
  • 2.28, Аноним (28), 22:25, 10/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Их конструкции на ts не переводятся так просто.
    С common lisp ещё попроси :)
    А вот ts штука примитивная, хоть во что и без проблем.
     
     
  • 3.101, Аноним (101), 01:08, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Это тс примитивный?
    Посмотрю я, как ты транспилируешь зависимые типы в любой язык, кроме хаскеля.
    Ну и это ещё не учитывая, что тс включает в себя ecmascript со всеми прототипами.

    Там, конечно же, поддерживается только подмножество языка.

     
     
  • 4.104, Аноним (28), 05:52, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Мы же говорим о тюринг-полных языках?
    Понятно, что они эквивалентны. По большому счету.
    Вопрос в сложности перевода конструкций одного в конструкции другого.
    Если взять пару ts и basic, то ситуация будет обратная: basic примитивный и легко укладывается в ts.
    Ts в basic будет запихать гораздо сложнее.
    Возможно всё, вопрос сложности.
     
  • 2.33, лолшто (?), 22:28, 10/07/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Я конеш хз что за кейс, но можно сгенерить WASM, а его уже дергать на [jt]s.
     
     
  • 3.120, Аноним (120), 12:23, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Трудно кодить сразу на нескольких языках, особенно, когда в JS альтернативное мышление. Я вот не считаю шарящих в JS слабоумными, т.к. там наоборот надо сосредотачиваться и врубаться в конструкции конкретно, мне после Си и Го трудно осилить, да хоть даже после Java/C++ с учетом ООП.
     
  • 2.82, Аноним (82), 22:43, 10/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    есть же Emscripten. Компилятор из борщехлебной сишечки в смузихлебный typescript
     
     
  • 3.107, Lex (??), 06:21, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Он васм генерирует, а не тс
     
  • 2.108, Lex (??), 06:29, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    В последнем, как раз, все норм Беспредел - это делать на базе ЯП переусложненну... большой текст свёрнут, показать
     
     
  • 3.111, Аноним (111), 09:05, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Вот вот. Настоящим программистам типизация ненужна. Она нужна только глупым вебмакакам которые не могут запомнить какие данные передают.

    Мне например постоянно приходится прописывать jsdoc, javadoc, phpdoc чтобы понять как как работает чужой код, хотя настоящие программисты написали его без единого комментария, без документации и почти без тестов и уволились.
    В java чуть легче так как строгая статическая типизация, но всё равно много чего передаются в виде Map<String,Object>

     
  • 3.119, Аноним (120), 12:20, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Дело не столько в типизации, ибо всегда можно на JS проверить или сделать Number() и т.п. Просто JS позволяет столько всего, что трудно разобраться мыслящему на классических языках. Вот эти пробросы объектов через =>, код функций внутри кода функций и прочие эксклюзивные вещи.
     
  • 3.137, лолшто (?), 00:33, 12/07/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    TS тоже стал жертвой беспредела. С появлением реакта и хайпа в веб среде вокруг ФП, куча паттернов пустила корни. Currying, partial application, higher order functions, мутировавшие в higher order components и куча прочего говна. TS отреагировал появлением utility types, которые проблему то мб и решают, но еще больше добавляют сложности и синтаксического шума. А бизнес на эти типы срать хотел, поэтому касты и any.
     
  • 3.139, Bx (ok), 21:09, 12/07/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну надо же, типы данных виноваты.
    Как там посдедний пишет при смешивании пробелов с табами?
     
  • 2.142, Аноним (142), 00:48, 13/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Используй wasm
     
  • 2.145, softkot (?), 18:44, 14/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Go -> JS

    На https://github.com/gopherjs/gopherjs прекрасно пишутся либы на go и потом подгружаются в любой js/html

     

  • 1.24, Аноним (24), 22:08, 10/07/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Не понял. Зачем транспонировать в медленный код из быстрого?
     
     
  • 2.35, economist (?), 22:29, 10/07/2021 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Быстрый - Медленный
    Мутный - Ясный
    Незнакомый - Знакомый
    Старый - Новый
    Из Top10 - из Top3

    Причин может быть много, у каждого - свои.

     
     
  • 3.99, Аноним (99), 00:47, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    свои - чужие
    хорошие - плохие
    добрые - злые
    грязные - чистые
    золотые - серебристые

    А какая именно причина у создателя jsii?

     
     
  • 4.100, Аноним (101), 01:01, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    У них же там английским по белому написано.

    Чтобы автоматически генерировать код AWS sdk на всех поддерживаемых языках из единой кодовой базы на одном языке.

     
     
  • 5.102, Аноним (99), 01:11, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Просто я не восприимчив к тексту написанному на белом фоне
     
  • 3.110, iv (?), 08:25, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Свобода - рабство
    Мир - война
    Незнание - сила
     
  • 2.114, anonymous (??), 11:33, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Go сильно быстрее TypeScript.
     
     
  • 3.115, Аноним (24), 11:41, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Go сильно быстрее TypeScript.

    Значит ли это, что го ощутимо быстрее додиеза с жабой? А раз нет, то как это работает? Не в синтетике?

     
  • 3.118, Аноним (118), 12:08, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Простите, а как вы измерили скорость выполнения TypeScript?
     
  • 2.121, Аноним (121), 12:47, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >Зачем транспонировать в медленный код из быстрого?

    Чтоб в страничку влепить и в бровсере исполнять.

     

  • 1.103, Nikki Next (?), 04:50, 11/07/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Можно перевести из Python в C++ через jsii?
     
     
  • 2.122, Аноним (121), 12:51, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Для этого отдельный инструмент разарбатывается:
    https://ru.wikipedia.org/wiki/Nuitka
    https://nuitka.net/
     

  • 1.113, n00by (ok), 10:23, 11/07/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    array.push(array[i - 2] + array[i - 1]);

    А зачем они хранят предыдущие значения? Сайты слишком быстро работают?

     
     
  • 2.140, Bx (ok), 21:16, 12/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Бобер, выдыхай! В массиве все значения хранятся, че бы и не запушить в массив последнее и предпоследнее значения?
     
     
  • 3.143, n00by (ok), 05:12, 13/07/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    return array[num];

    Возвращают не всю последовательность Фибоначи, а только искомое.

    При больших n пример не работает, или сборщик мусора догадается, что массив не используется и подчистит?

     
  • 2.141, Аноним (111), 00:16, 13/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А как надо?
     
     
  • 3.144, n00by (ok), 05:18, 13/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    В последовательности Фибоначчи первые два числа равны 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел. То есть достаточно хранить 2 последних числа, соответственно и массива на 2 элемента. То есть как-то так, но лучше вообще без массива:

    array[0] = array[1];
    array[1] = array[0] + array[1];

    Ну и возвращать array[1] а не array[num].

     
     
  • 4.146, Аноним (146), 21:48, 17/07/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Исправлю ваш баг.

    > array[0] = array[1];

    Здесь затирается array[0].

    > array[1] = array[0] + array[1];

    А здесь затёртый array[0] используется как ни в чём не бывало.


    Лучше вот так, если хочется переменную сэкономить:

    array[1] = array[1] + array[0];
    array[0] = array[1] - array[0];


    А ещё лучше не экономить, чтоб понятней было:

    current  = array[0] + array[1];
    array[0] = array[1];
    array[1] = current;

     
     
  • 5.147, n00by (ok), 09:06, 18/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо! Это не баг, это лажа. :) Если без массива, то последний вариант должен был получиться сам собой. А до предпоследнего я бы сам не додумался.
     

  • 1.124, Sw00p aka Jerom (?), 14:23, 11/07/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    как там у них с оптимальностью или гамнокод с одного ЯП в гамнокод на другом ЯП переводит?
     
     
  • 2.125, Аноним (125), 14:47, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > гамнокод с одного ЯП в гамнокод на другом ЯП переводит?

    ещё и с преумножением оного.

     

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



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

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