- 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
guest8 27.05.2020 13:27 # −999
gost 27.05.2020 14:23 # 0
3.14159265 27.05.2020 14:33 # 0
Он всё правильно сделал.
Дал бой скриптухе.
gost 27.05.2020 14:44 # 0
3.14159265 27.05.2020 14:46 # 0
Вообще на ГК очень редко проскакивает что-то настолько упорото-гениальное.
gost 27.05.2020 14:50 # 0
Подтверждаю.
3.14159265 27.05.2020 14:52 # 0
#26671 уже забился.
3.14159265 27.05.2020 14:37 # 0
Или сишные sprintf("Hello, my name is %s"), или что там в кресты завезли. Может форматтеры как-то приспособить.
ASD_77 27.05.2020 15:04 # 0
3.14159265 27.05.2020 15:20 # 0
Формат-стринги удобны в логгерах, и прочих местах где не всегда нужно вычислять кокотенированую строку.
А в каком месте происходит разбор и парсинг .ts?
ASD_77 27.05.2020 15:31 # 0
в этом файле. нужно получить команда compileSources и главный код ts.createProgram(sources, {})
ты получаешь пропарсенные обьекты - const sourceFiles = program.getSourceFiles();
дальше делай что хочешь
3.14159265 27.05.2020 18:17 # 0
ASD_77 27.05.2020 19:16 # +1
начни с процедуры public processNode(node: ts.Node): void
3.14159265 27.05.2020 14:39 # 0
1024-- 27.05.2020 16:27 # 0
3.14159265 27.05.2020 18:16 # 0
Есть мысли как решить проблему утилизации «островков» циклических ссылок?
ASD_77 27.05.2020 19:16 # 0
guest8 27.05.2020 19:24 # −999
3.14159265 27.05.2020 21:15 # 0
Получится гибрид как в 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.
MAKAKA 27.05.2020 21:16 # 0
3.14159265 27.05.2020 21:26 # 0
Зато локальные и короткоживущие объекты деаллоцируются мгновенно и детерминированно.
Десктрукторы срабатывают когда надо. Соответственно ресурсы практически всегда освобождаются сами.
И не возникает таких багров:
https://govnokod.ru/26671#comment548754
https://govnokod.ru/26671#comment549578
MAKAKA 27.05.2020 21:37 # 0
Я спросил, чем это лучше)
Я понимаю, что ГЦ быстро аллоцирует (потому что просто берет еще кусок, и всё), но потом долго чистит (или не чистит вовсе).
>И не возникает таких багров:
Да, теперь понятно.
Файл закроется при выходе из функции даже без with, да?
Еще интересно сделано в C#/.net.
Там есть структуры, которые могут жить на стеке. И объекты, которые как джаве объекты.
К сожалению, я не могу выбирать что и где разместить (не C++), но могу сказать struct вместо class, и она всегда будет жить на стеке и копироваться.
Но кажется что на нее нельзя референс получить вообще никогда.
bormand 28.05.2020 19:32 # 0
- недетерминированные финализаторы, как в языках с GC
- оверхед от рефкаунтера, как в языках без GC
Полная хуйня, имхо.
HIV 28.05.2020 19:34 # 0
HIV 28.05.2020 20:46 # 0
HIV 28.05.2020 20:48 # 0
guest8 27.05.2020 19:24 # −999
3.14159265 27.05.2020 21:20 # 0
Или вводить ограничения на разные классические структуры типа doubly linked list.
bagrinho 27.05.2020 19:44 # 0
ASD_77 27.05.2020 20:35 # 0
MAKAKA 27.05.2020 20:38 # 0
guest8 27.05.2020 20:58 # −999
MAKAKA 27.05.2020 20:59 # 0
пых невозможно
guest8 27.05.2020 20:48 # −999
ASD_77 27.05.2020 22:10 # 0
а вот так ужастно выглядит с++
и это я еще проигнорировал с++ header
guest8 27.05.2020 22:13 # −999
ASD_77 27.05.2020 23:26 # +1
и получаем С++ код для него
3.14159265 28.05.2020 00:44 # +1
Моё почтение.
Кстати не факт что оно не сломается на каком-то ёбнутом примере со слабой тупизацией, где ф-ция принимает и строку и число.
Как я понимаю any и shared это просто void *.
struct any;
struct shared;
shared — мусоросборный умный, а any — обычный указатель.
Не понял пока по каким правилам транспилер понимает какой нужно ставить any или shared?
ASD_77 28.05.2020 02:11 # +1
ASD_77 28.05.2020 02:15 # 0
ASD_77 28.05.2020 02:17 # +1
и вот результат
1024-- 28.05.2020 19:20 # 0
Хорошо бы довести до type_of(padding) == STR("number").
ASD_77 28.05.2020 02:29 # 0
и результирующий код
3.14159265 28.05.2020 13:14 # +1
3.14159265 27.05.2020 21:19 # 0
Т.к. скриптушня вдруг побежит наперегонки с крестами.
MAKAKA 27.05.2020 22:17 # 0
>C# to C++ transpiler (Cs2Cpp)
Слушай, да ты и правда поехавший
ASD_77 27.05.2020 22:20 # +1
MAKAKA 27.05.2020 22:21 # 0
Я понимаю, когда мудаки из FB и ВК пишут компилятор из своего недоязыка в С++: у них много легаси говна на недоязыке, а он тормозит, и выбора у них нет.
Но тебе-то зачем это?
guest8 27.05.2020 22:23 # −999
MAKAKA 27.05.2020 22:24 # 0
ps: как же я люблю ВКод.
Просто читал бы и читал
nblXOMAKAKA 27.05.2020 22:29 # 0
guest8 27.05.2020 22:36 # −999
guest8 27.05.2020 22:36 # −999
guest8 27.05.2020 22:37 # −999
guest8 27.05.2020 22:41 # −999
guest8 27.05.2020 22:45 # −999
guest8 27.05.2020 22:48 # −999
guest8 27.05.2020 22:51 # −999
3.14159265 28.05.2020 00:51 # 0
Вёб-макаки нынче не так дороги.
guest8 28.05.2020 00:56 # −999
MAKAKA 28.05.2020 05:09 # +1
guest8 28.05.2020 11:04 # −999
MAKAKA 28.05.2020 05:08 # 0
nblXOMAKAKA 28.05.2020 10:45 # 0
ASD_77 27.05.2020 23:32 # 0
MAKAKA 27.05.2020 23:36 # 0
ASD_77 28.05.2020 00:01 # 0
MAKAKA 28.05.2020 04:32 # 0
Тайпскрипт нужен, потому что JS неюзабельное дерьмо без стат типизации, и писать на нем большой проект это полный undefined [Object object] NaN.
TS же имеет бесплатный интероп с JS и очень хорошо в него компилируется.
Ровно за этим он и нужен.
Использовать TS там, где можно использовать нормальный язык -- глупо (имхо).
Хотя...
Если я пишу приложение с фронтом в браузере и высоконагруженном беке, то я могу (теоретически) написать его на TS.
Фронт компильнется в JS, а бек, через твою опердень, в C++.
Может, не такая уж и плохая идея:)
Другой вариант -- взять Котлин.
Он умеет компилироваться в JS (хуево) и в нативный код (через посредство llvm) (тоже очень хуёво).
nblXOMAKAKA 28.05.2020 00:09 # +1
https://ru.wikipedia.org/wiki/Хейлсберг,_Андерс
Один и тот же человек изобрёл «Турбо Паскаль», «Delphi», участвовал в создании «MFC», «J++», «C#» и, наконец, придумал «TypeScript».
gost 28.05.2020 00:14 # +2
MAKAKA 28.05.2020 04:30 # 0
3.14159265 28.05.2020 00:36 # 0
MAKAKA 28.05.2020 04:29 # 0
ASD_77 28.05.2020 00:44 # 0
phpBidlokoder2 28.05.2020 01:04 # 0
ASD_77 28.05.2020 02:31 # +1