- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
namespace InstanceOf {
class Foo {
x: number
y: string
bar() {
return this.x
}
}
class Bar extends Foo { }
class Baz extends Foo { }
class Bar2 extends Bar { }
class Bar3 extends Bar { }
export function run() {
print("InstanceOf")
assert(new Bar2() instanceof Foo, "if")
assert(new Bar2() instanceof Bar, "ib")
assert(new Bar2() instanceof Bar2, "ib2")
assert(new Bar3() instanceof Bar, "ib")
assert(!(new Bar2() instanceof Baz), "!ib")
assert(!(new Foo() instanceof Baz), "!ib2")
assert(!(new Foo() instanceof Bar), "!ib2")
(new Foo()).bar();
(new Bar3()).bar();
}
}
function main()
{
InstanceOf.run()
print("done");
}
Возрадуйтесь братья и сестры. я вам принес зачатки RTTI :) и узрите этот дампик во очию.
То ты анскильная лалка
https://blog.quarkslab.com/resources/2013-07-12_visualcpp-rtti-inspection/images/rtti-layout.png
В крестах всё просто и понятно
В "D" я их тоже вырубаю нахрен.
Перепитушня не нужна.
g: SEH
Не стоит забывать, что у j123123 оператива меряется в килобайтах. Да и флеш памяти не сильно больше.
Или может TS оттранслированный в JS содержит в себе какую-то принципиально некомпилируемую хуйню, например eval()?
https://en.wikipedia.org/wiki/TypeScript#Compatibility_with_JavaScript
TypeScript is a strict superset of ECMAScript 2015, which is itself a superset of ECMAScript 5, commonly referred to as JavaScript.[32] As such, a JavaScript program is also a valid TypeScript program, and a TypeScript program can seamlessly consume JavaScript. By default the compiler targets ECMAScript 5, the current prevailing standard, but is also able to generate constructs used in ECMAScript 3 or 2015.
Я не уверен, что компилятор TS генерит такой JS код, из которого легко вывести типы
Что еще за "выводятся типы"? Вполне обычный код на JS это валидный код на TS.
https://stackoverflow.com/questions/38318542/how-to-use-javascript-in-typescript
https://www.tutorialsteacher.com/typescript/converting-javascript-to-typescript - некоторые небольшие исправления конечно же могут потребоваться, но я не вижу никаких требований что-то там типизировать
вот валидный код для JS, но не валидный для TS, потому что не известно что возвращает foo()
``allowJs`` позволяет включать js код в компиляцию, но это не делает его TS.
И как включение js кода будет решаться в компиляторе из-TS-в-LLVM?
на выбор
1. запретить
2. сделать неоптимально
Например гетерогенный массив куда сложнее сделать оптитмально, чем массив numberов.
Можно провести такую аналогию: у тебя есть код на "си" с асмовставками на "x86 asm".
Как скомпилировать его под arm?
1. запретить асмовставки
2. перевести их на ARM (возможно очень неоптимально_)
Только это был не GC, а говно и палки, с помощью которых предлагалось сделать свой GC. Ими никто не пользовался (даже те, кто делал GC в крестах) поэтому и убрали.
Через инструкцию push выделяй
А ещё можно позвать из ассемблера аллоку или маллоку сишную.
Хуже того: говно это лживое
В непидорских средах и непидорских языках GC нет
Приведи реальные примеры.
Но ведь он для apple...
А там либы то завезли? Или надо будет как на сишке всё с нуля?
https://medium.com/@Aciid/ship-c-code-with-swift-packages-using-swift-package-manager-44edcc702a45
впрочем, я на практике сишный интероп юзал только на мяке и там это очень ок
Да, для всякой гуйни это особенно удобно...
кстати, как оказалось, что медиум вполне работает и с включённым noscript
Вот вполне валидный код на TS. И где здесь типизация, guest6? Можно еще "noImplicitAny": false выставить, и тогда даже этот ": any" можно не использовать
``any`` хранить менее оптимально, чем ``number``.
Если всегда сначала компилировать в JS, то тебе всегда придется иметь дело с "any", а значит ты никогда не сможешь ничего оптимизировать (точнее сможешь, но придется много чего доказывать)
Сравним с жабой или C#: ты можешь явно указать int, и получить 4 байта инт. А можешь указать Object, и получить указатель на объект в куче, который будет внутри иметь int.
Очевидно, первый случай более оптимальный.
Хуйню с "any" реализовывать в любом случае придется, иначе такой компилятор TS много какой хуйни не скомпилирует, так почему б не начать с реализации компилятора JS, и уже потом на него напяливать типы как в TS?
вон товарищ подсказывает, что он такой кейс вообще не