- 1
https://github.com/ASDAlexander77/TypeScript2Cxx/blob/master/cpplib/core.h
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+5
https://github.com/ASDAlexander77/TypeScript2Cxx/blob/master/cpplib/core.h
Нужна помощь смелых и умных людей, надо сделать review кода и посоветовать что там по стандартам улучшить... короче любая помощь welcome
https://github.com/ASDAlexander77/TypeScript2Cxx/blob/master/cpplib/core.h
Он всё правильно сделал.
Дал бой скриптухе.
Вообще на ГК очень редко проскакивает что-то настолько упорото-гениальное.
Подтверждаю.
#26671 уже забился.
Или сишные sprintf("Hello, my name is %s"), или что там в кресты завезли. Может форматтеры как-то приспособить.
Формат-стринги удобны в логгерах, и прочих местах где не всегда нужно вычислять кокотенированую строку.
А в каком месте происходит разбор и парсинг .ts?
в этом файле. нужно получить команда compileSources и главный код ts.createProgram(sources, {})
ты получаешь пропарсенные обьекты - const sourceFiles = program.getSourceFiles();
дальше делай что хочешь
начни с процедуры public processNode(node: ts.Node): void
Есть мысли как решить проблему утилизации «островков» циклических ссылок?
Получится гибрид как в CPython, где основную часть мусора собирает счётчик ссылок.
А остальное прибивает традиционный гц.
Garbage collection algorithms
Standard CPython's garbage collector has two components, the reference counting collector and the generational garbage collector, known as gc module.
The reference counting algorithm is incredibly efficient and straightforward, but it cannot detect reference cycles. That is why Python has a supplemental algorithm called generational cyclic GC, that specifically deals with reference cycles.
The reference counting module is fundamental to Python and can't be disabled, whereas the cyclic GC is optional and can be invoked manually.
Зато локальные и короткоживущие объекты деаллоцируются мгновенно и детерминированно.
Десктрукторы срабатывают когда надо. Соответственно ресурсы практически всегда освобождаются сами.
И не возникает таких багров:
https://govnokod.ru/26671#comment548754
https://govnokod.ru/26671#comment549578
Я спросил, чем это лучше)
Я понимаю, что ГЦ быстро аллоцирует (потому что просто берет еще кусок, и всё), но потом долго чистит (или не чистит вовсе).
>И не возникает таких багров:
Да, теперь понятно.
Файл закроется при выходе из функции даже без with, да?
Еще интересно сделано в C#/.net.
Там есть структуры, которые могут жить на стеке. И объекты, которые как джаве объекты.
К сожалению, я не могу выбирать что и где разместить (не C++), но могу сказать struct вместо class, и она всегда будет жить на стеке и копироваться.
Но кажется что на нее нельзя референс получить вообще никогда.
- недетерминированные финализаторы, как в языках с GC
- оверхед от рефкаунтера, как в языках без GC
Полная хуйня, имхо.
Или вводить ограничения на разные классические структуры типа doubly linked list.
пых невозможно
а вот так ужастно выглядит с++
и это я еще проигнорировал с++ header
и получаем С++ код для него
Моё почтение.
Кстати не факт что оно не сломается на каком-то ёбнутом примере со слабой тупизацией, где ф-ция принимает и строку и число.
Как я понимаю any и shared это просто void *.
struct any;
struct shared;
shared — мусоросборный умный, а any — обычный указатель.
Не понял пока по каким правилам транспилер понимает какой нужно ставить any или shared?
и вот результат
Хорошо бы довести до type_of(padding) == STR("number").
и результирующий код
Т.к. скриптушня вдруг побежит наперегонки с крестами.
>C# to C++ transpiler (Cs2Cpp)
Слушай, да ты и правда поехавший
Я понимаю, когда мудаки из FB и ВК пишут компилятор из своего недоязыка в С++: у них много легаси говна на недоязыке, а он тормозит, и выбора у них нет.
Но тебе-то зачем это?
ps: как же я люблю ВКод.
Просто читал бы и читал
Вёб-макаки нынче не так дороги.
Тайпскрипт нужен, потому что JS неюзабельное дерьмо без стат типизации, и писать на нем большой проект это полный undefined [Object object] NaN.
TS же имеет бесплатный интероп с JS и очень хорошо в него компилируется.
Ровно за этим он и нужен.
Использовать TS там, где можно использовать нормальный язык -- глупо (имхо).
Хотя...
Если я пишу приложение с фронтом в браузере и высоконагруженном беке, то я могу (теоретически) написать его на TS.
Фронт компильнется в JS, а бек, через твою опердень, в C++.
Может, не такая уж и плохая идея:)
Другой вариант -- взять Котлин.
Он умеет компилироваться в JS (хуево) и в нативный код (через посредство llvm) (тоже очень хуёво).
https://ru.wikipedia.org/wiki/Хейлсберг,_Андерс
Один и тот же человек изобрёл «Турбо Паскаль», «Delphi», участвовал в создании «MFC», «J++», «C#» и, наконец, придумал «TypeScript».