- 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 :) и узрите этот дампик во очию.
ASD_77 29.07.2021 11:12 # 0
ASD_77 29.07.2021 11:13 # 0
j123123 29.07.2021 11:25 # +2
ASD_77 29.07.2021 11:53 # 0
j123123 29.07.2021 12:04 # 0
Ragulinho 29.07.2021 12:09 # 0
То ты анскильная лалка
MAKAKA 29.07.2021 12:59 # 0
j123123 29.07.2021 13:36 # 0
j123123 29.07.2021 13:46 # +1
https://blog.quarkslab.com/resources/2013-07-12_visualcpp-rtti-inspection/images/rtti-layout.png
В крестах всё просто и понятно
ASD_77 29.07.2021 14:27 # 0
Ragulinho 29.07.2021 12:10 # +1
MAKAKA 29.07.2021 12:47 # 0
ASD_77 29.07.2021 11:53 # 0
j123123 29.07.2021 12:09 # +1
В "D" я их тоже вырубаю нахрен.
3.14159265 10.08.2021 21:07 # 0
Перепитушня не нужна.
Ragulinho 29.07.2021 12:11 # +2
MAKAKA 29.07.2021 12:48 # +1
g: SEH
WindowsGovno 30.07.2021 22:45 # 0
j123123 29.07.2021 13:43 # +1
ASD_77 29.07.2021 11:55 # 0
ASD_77 29.07.2021 12:01 # 0
Soul_re@ver 29.07.2021 12:04 # +1
Не стоит забывать, что у j123123 оператива меряется в килобайтах. Да и флеш памяти не сильно больше.
j123123 29.07.2021 12:10 # 0
ASD_77 29.07.2021 12:16 # 0
j123123 29.07.2021 12:23 # 0
ASD_77 29.07.2021 12:38 # 0
j123123 29.07.2021 15:17 # 0
Или может TS оттранслированный в JS содержит в себе какую-то принципиально некомпилируемую хуйню, например eval()?
guest6 29.07.2021 15:36 # +1
j123123 29.07.2021 15:40 # 0
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.
guest6 29.07.2021 15:52 # 0
Я не уверен, что компилятор TS генерит такой JS код, из которого легко вывести типы
j123123 29.07.2021 16:01 # 0
Что еще за "выводятся типы"? Вполне обычный код на JS это валидный код на TS.
https://stackoverflow.com/questions/38318542/how-to-use-javascript-in-typescript
https://www.tutorialsteacher.com/typescript/converting-javascript-to-typescript - некоторые небольшие исправления конечно же могут потребоваться, но я не вижу никаких требований что-то там типизировать
guest6 29.07.2021 16:08 # 0
вот валидный код для JS, но не валидный для TS, потому что не известно что возвращает foo()
``allowJs`` позволяет включать js код в компиляцию, но это не делает его TS.
j123123 29.07.2021 16:09 # 0
И как включение js кода будет решаться в компиляторе из-TS-в-LLVM?
guest6 29.07.2021 16:12 # +1
на выбор
1. запретить
2. сделать неоптимально
Например гетерогенный массив куда сложнее сделать оптитмально, чем массив numberов.
Можно провести такую аналогию: у тебя есть код на "си" с асмовставками на "x86 asm".
Как скомпилировать его под arm?
1. запретить асмовставки
2. перевести их на ARM (возможно очень неоптимально_)
ASD_77 29.07.2021 17:26 # +1
j123123 29.07.2021 21:48 # +1
Soul_re@ver 29.07.2021 21:51 # +2
Только это был не GC, а говно и палки, с помощью которых предлагалось сделать свой GC. Ими никто не пользовался (даже те, кто делал GC в крестах) поэтому и убрали.
JloJle4Ka 30.07.2021 02:49 # 0
ASD_77 30.07.2021 03:11 # +1
JloJle4Ka 30.07.2021 03:25 # 0
j123123 30.07.2021 08:07 # +1
JloJle4Ka 30.07.2021 08:18 # 0
j123123 30.07.2021 08:27 # 0
Через инструкцию push выделяй
JloJle4Ka 30.07.2021 08:31 # 0
А ещё можно позвать из ассемблера аллоку или маллоку сишную.
j123123 30.07.2021 08:35 # 0
JloJle4Ka 30.07.2021 08:40 # 0
j123123 30.07.2021 08:42 # +1
guest6 30.07.2021 20:19 # 0
Хуже того: говно это лживое
В непидорских средах и непидорских языках GC нет
guest6 30.07.2021 20:29 # 0
Приведи реальные примеры.
bormand 30.07.2021 20:39 # 0
guest6 30.07.2021 20:40 # 0
bormand 30.07.2021 20:44 # 0
guest6 30.07.2021 21:03 # 0
bormand 30.07.2021 21:05 # 0
Но ведь он для apple...
Desktop 30.07.2021 21:06 # 0
bormand 30.07.2021 21:10 # 0
А там либы то завезли? Или надо будет как на сишке всё с нуля?
Desktop 30.07.2021 21:13 # 0
https://medium.com/@Aciid/ship-c-code-with-swift-packages-using-swift-package-manager-44edcc702a45
впрочем, я на практике сишный интероп юзал только на мяке и там это очень ок
bormand 30.07.2021 21:14 # 0
Да, для всякой гуйни это особенно удобно...
Desktop 30.07.2021 21:14 # 0
bormand 30.07.2021 21:15 # 0
Desktop 30.07.2021 21:17 # 0
bormand 30.07.2021 21:17 # 0
MediumGovno 01.08.2021 10:45 # 0
Desktop 01.08.2021 11:21 # 0
кстати, как оказалось, что медиум вполне работает и с включённым noscript
guest6 30.07.2021 21:07 # +1
Desktop 30.07.2021 21:10 # 0
guest6 30.07.2021 20:41 # 0
j123123 29.07.2021 16:18 # 0
Вот вполне валидный код на TS. И где здесь типизация, guest6? Можно еще "noImplicitAny": false выставить, и тогда даже этот ": any" можно не использовать
guest6 29.07.2021 16:28 # 0
j123123 29.07.2021 16:29 # 0
guest6 29.07.2021 16:37 # +1
``any`` хранить менее оптимально, чем ``number``.
Если всегда сначала компилировать в JS, то тебе всегда придется иметь дело с "any", а значит ты никогда не сможешь ничего оптимизировать (точнее сможешь, но придется много чего доказывать)
Сравним с жабой или C#: ты можешь явно указать int, и получить 4 байта инт. А можешь указать Object, и получить указатель на объект в куче, который будет внутри иметь int.
Очевидно, первый случай более оптимальный.
j123123 29.07.2021 17:04 # 0
Хуйню с "any" реализовывать в любом случае придется, иначе такой компилятор TS много какой хуйни не скомпилирует, так почему б не начать с реализации компилятора JS, и уже потом на него напяливать типы как в TS?
j123123 29.07.2021 17:08 # 0
ASD_77 30.07.2021 19:42 # 0
guest6 29.07.2021 17:46 # 0
вон товарищ подсказывает, что он такой кейс вообще не
ASD_77 29.07.2021 17:28 # 0
JaneBurt 30.07.2021 16:22 # 0
j123123 30.07.2021 17:09 # 0
Desktop 01.08.2021 11:25 # +1