- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
function foo(arg: any) {
if (typeof arg === "string") {
// We know this is a string now.
print(<string>arg);
}
}
function main() {
foo("Hello");
foo(1);
print("done.");
}
ASD_77 11.08.2021 15:59 # 0
ASD_77 11.08.2021 16:00 # 0
bormand 11.08.2021 16:00 # 0
ASD_77 11.08.2021 16:04 # 0
MAKAKA 11.08.2021 16:04 # 0
ASD_77 11.08.2021 16:07 # 0
ASD_77 11.08.2021 16:06 # 0
откудава я знаю что там стринг?
MAKAKA 11.08.2021 16:17 # +1
Ну просто явный каст это же ужс
XepMauop 11.08.2021 16:19 # 0
MAKAKA 11.08.2021 16:20 # 0
Считай это не просто условием, а такой вот идиомой.
ASD_77 11.08.2021 16:26 # 0
MAKAKA 11.08.2021 16:28 # 0
bootcamp_dropout 11.08.2021 16:29 # 0
bormand 11.08.2021 16:29 # 0
Да и один хер конкатенация чего-то со строкой всегда строка.
MAKAKA 11.08.2021 16:30 # 0
ты не понял его видимо
bormand 11.08.2021 16:31 # 0
З.Ы. А, поняла о чём ты, вдруг f() возвращает не "str".
MAKAKA 11.08.2021 16:32 # 0
bormand 11.08.2021 16:38 # +1
Но с другой стороны, если мы докажем, что sosat() + ebat() всегда возвращает "string", то всё будет ок. Но TS не Coq чтобы такие пруфы писать, конечно.
ASD_77 11.08.2021 16:04 # 0
3.14159265 11.08.2021 16:20 # +1
Теперь понятно как на свет рождаются недотупизированные говноязыки...
Царь был прав. LLVM зло, порождающее гроздья скриптухи.
MAKAKA 11.08.2021 16:21 # 0
bormand 11.08.2021 16:22 # 0
MAKAKA 11.08.2021 16:24 # 0
Безопасные касты там есть.
bormand 11.08.2021 16:23 # 0
Ты опять хочешь стриггерить ДжоДжочку?
MAKAKA 11.08.2021 16:24 # +1
3.14159265 11.08.2021 16:24 # 0
> print(<string>arg);
> }
Это нормально?
Даже в майкомирке могут нормально:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-7.0/pattern-matching
bormand 11.08.2021 16:25 # +1
Мы сделали рантайм проверку, теперь внутри этого блока мы в компайлтайме знаем тип и можем его юзать.
Это можно даже обобщить на какие-то произвольные предикаты.
MAKAKA 11.08.2021 16:29 # +1
ASD_77 11.08.2021 16:31 # +1
MAKAKA 11.08.2021 16:27 # 0
В тайпскрипте было бы так
ASD_77 11.08.2021 16:30 # 0
j123123 12.08.2021 01:28 # 0
https://wandbox.org/permlink/mcdl44HFj3knVSzT
JloJle4Ka 12.08.2021 01:42 # 0
https://play.nim-lang.org/#ix=3vHu
ASD_77 12.08.2021 02:53 # 0
JloJle4Ka 12.08.2021 06:34 # 0
ru66oH4uk 12.08.2021 02:34 # 0
j123123 12.08.2021 02:42 # 0
ru66oH4uk 12.08.2021 03:05 # 0
Представь, что у тебя есть функция, принимающая "string".
Я могу написать
то есть явно кастить не нужно: компилятор сам приводит тип
j123123 12.08.2021 03:14 # +1
> functionThatAcceptsInt(something);
Т.е. something это некая строка, и эта хрень проверяет, можно ли something распарсить как Int? И тогда эту хуйню как Int передают в такую-то функцию? Да, такую хуйню определенно можно наметушить через mixin-ы, хотя может быть и более простой способ.
ru66oH4uk 12.08.2021 03:22 # +1
знание о типе объекта (RTTI) есть в рантайме конечно.
j123123 12.08.2021 03:33 # 0
https://wandbox.org/permlink/vLXXX7XcedqkS2zF (по сути это как крестопарашный шаблон)
Если неизвестен, это тоже решается, но это уже надо дрочиться с тем, как там этот тип в рантайме разковыривать и как его автокастить.
ru66oH4uk 12.08.2021 03:34 # +1
Пример из TS
j123123 12.08.2021 03:41 # +1
Hacpy 12.08.2021 05:22 # +1
PolinaAksenova 12.08.2021 08:59 # −2
Ну... Практически во всех современных языках есть. А уж для паттерн-нятчинга эта фича вообще обязательня.
j123123 12.08.2021 10:12 # −1
https://wandbox.org/permlink/gW5FlqUt3ICFJlv1
j123123 12.08.2021 10:31 # −1
JloJle4Ka 12.08.2021 10:44 # +1
Весёлый евал – принимает на вход пользовательскую строку. Без экранирования.
Desktop 12.08.2021 10:47 # +1
bormand 12.08.2021 10:57 # +1
Desktop 12.08.2021 10:59 # 0
ru66oH4uk 12.08.2021 11:25 # 0
bormand 12.08.2021 11:32 # 0
ru66oH4uk 12.08.2021 11:32 # 0
Soul_re@ver 12.08.2021 11:37 # 0
COPOKA 12.08.2021 11:40 # 0
ru66oH4uk 12.08.2021 11:42 # 0
COPOKA 12.08.2021 11:44 # 0
ru66oH4uk 12.08.2021 11:25 # 0
Desktop 12.08.2021 11:27 # 0
j123123 12.08.2021 19:55 # +1
ru66oH4uk 12.08.2021 19:58 # +1
Твой define ничем не лучше ручкого каста, даже больше на одну строчку
j123123 12.08.2021 19:59 # 0
ru66oH4uk 12.08.2021 20:01 # +1
https://www.infoq.com/news/2019/09/static-typescript-msft-paper/
дальше продолжать?
j123123 12.08.2021 20:02 # +1
Нахуя? Ты мне конкретные кейсы покажи, чтоб я пожалел что этой фичи нет. А не то, что мелкомягкие что-то там высрали
ru66oH4uk 12.08.2021 20:09 # 0
Без смарткастов код может выглядеть так (пример на жабе, но не суть)
Теперь тоже самое со смарт кастами
Видишь разницу?
j123123 12.08.2021 20:14 # +3
1) Такой код в контроллерах не встречается почти никогда. Зачем мне передавать или ту или ту хуйню куда-то там? Я отлично знаю, что куда зачем я передаю.
2) Если и встречается, то руками прописать касты это фигня, потому что такого кода будет МАЛО.
3) Если его вдруг будет МНОГО, можно это дело банально препроцессить, т.е. например за-shadow-ить переменную новой переменной с тем же именем внутри скоупа этого if, которой будет присвоен каст этой хуйни с нужным юнионом, и всё блядь
ru66oH4uk 12.08.2021 20:18 # +1
(хотя я вполне могу представить себе такой код)
Осталось узнать зачем мне нужны контроллеры.
У меня вот ни одного нету
j123123 12.08.2021 20:19 # +1
> У меня вот ни одного нету
Фитнес-трекеры или смарт-часы у тебя есть какие-нибудь?
ru66oH4uk 12.08.2021 20:21 # +1
j123123 12.08.2021 20:22 # +1
Desktop 12.08.2021 20:25 # +2
начал с ними бегать
пришлось сдать обратно, потому что они теряли gps в чистом поле и дистанцию засчитывали в двойном объёме
это те контроллеры или более лучшие?
j123123 12.08.2021 20:29 # +3
А потеря GPS в чистом поле может быть как программным, так и аппаратным просчетом, я их прошивки не реверсил.
Desktop 12.08.2021 20:42 # 0
ru66oH4uk 12.08.2021 20:47 # −2
Desktop 12.08.2021 20:48 # 0
имелось в виду "без нормальной оси"
CHayT 12.08.2021 20:48 # +1
ru66oH4uk 12.08.2021 20:50 # +1
j123123 12.08.2021 20:54 # +1
Если надо чтоб "без \"Linux\"" то очевидно что можешь взять "Apple Watch"
А вообще, что есть "умные часы" и чем они отличаются от "фитнес трекера"? Фитнес-трекеров без Linux более чем дофига. Часы с Pebble OS были например (Pebble OS это модифицированная версия FreeRTOS). В носимой хуйне от Fitbit например какая-то Fitbit OS.
Desktop 12.08.2021 21:02 # 0
- всем? просто они оказались никому нахуй не нужны и маркетологи срочно их перепрофилировали в "фитнес-трекеры с выебонами"
ru66oH4uk 12.08.2021 21:11 # +1
https://tinyurl.com/3tanbhz4
Desktop 12.08.2021 21:15 # 0
guest6 12.08.2021 21:16 # +2
guest6 12.08.2021 21:24 # 0
Desktop 12.08.2021 21:30 # +2
это что-то для осетинских врачей
guest6 12.08.2021 21:36 # +2
Ты зачем детского врача избил?
Ну я нему сына привел, и говорю: "ты доктор?", а он говорит: "я педиатр".
Я говорю: "что??"
А он: "я педиатр-гомеопат, показывайте ребенка"
CHayT 12.08.2021 21:24 # 0
j123123 12.08.2021 20:30 # +3
> У меня вот ни одного нету
Ну и у тебя наверняка есть какой-то контроллер в стиральной машине например. Или в кондиционере. Или в посудомоечной машине. Или в микроволновке.
У тебя есть что-то из этого?
ru66oH4uk 12.08.2021 20:48 # +1
Вот куплю новую, и там, вероятно будет контроллер
Desktop 12.08.2021 20:51 # +1
guest6 12.08.2021 20:54 # +2
Desktop 12.08.2021 20:54 # 0
guest6 12.08.2021 20:56 # 0
Desktop 12.08.2021 20:57 # +1
GovnokodGovno 15.08.2021 00:27 # 0
Chupacabramiamor 15.08.2021 00:32 # 0
Desktop 12.08.2021 20:52 # +1
а пластик в такой старой технике не вреден для здоровья?
ru66oH4uk 12.08.2021 21:02 # +1
j123123 12.08.2021 20:58 # +1
Даже там наверняка есть контроллеры. Они есть даже в не сильно древних ЭЛТ телевизорах, управляемых через ИК-пульт.
ru66oH4uk 12.08.2021 21:01 # +1
j123123 12.08.2021 20:23 # +2
А еще и потому, что легко накостыливается препроцессингом. А еще и потому, что для "safe cast" нужен RTTI о котором знает некий рантайм языка, а это уже анскилл.
ru66oH4uk 12.08.2021 22:44 # 0
в джаве нет препроцессинга
> RTTI о котором знает некий рантайм языка, а это уже анскилл.
невозможно выпилить RTTI из джавы
j123123 12.08.2021 22:48 # +2
В т.ч. поэтому жаба говно
> невозможно выпилить RTTI из джавы
В т.ч. поэтому жаба говно
ru66oH4uk 12.08.2021 22:52 # 0
Ты же сам не любил препроцессинг без доступа к AST, или я путаю?
> В т.ч. поэтому жаба говно
Ну тут ничего не поделаешь: так она устроена
j123123 12.08.2021 22:55 # +1
Без препроцессинга и без доступа к AST - однозначно хуже, чем с препроцессингом и без доступа к AST.
ru66oH4uk 12.08.2021 23:01 # +1
Как и то, что поддержка чего либо часто встречающегося в языке лучше, чем кастомный напирдолинг этого препроцессором
j123123 12.08.2021 23:04 # +1
А вот с этим можно и поспорить. Все фичи в язык все равно не запихнуть, и поэтому лучше делать более общие мета-механизмы(речь не о тупом препроцессоре из Си), на которых эти фичи можно достраивать.
Вот например что можно в "D" делать: https://forum.dlang.org/thread/[email protected]
ru66oH4uk 12.08.2021 23:08 # +1
j123123 12.08.2021 23:09 # +1
Эту хуйню уже обсуждали, моё мнение можно прочитать в https://govnokod.ru/27340#comment621664
Не вижу смысла повторяться.
XepMauop 12.08.2021 23:44 # +1
На этом говнокод держится!
1024-- 13.08.2021 11:52 # 0
Как типично проявляется творческий процесс?
guest6 12.08.2021 20:19 # 0
3.14159265 12.08.2021 22:20 # +1
> Я могу структуру сделать, а в структуре у меня может быть юнион на всякую хуйню
Какое столкновение двух культур )))
Впрочем у него даже на жабе это не скомпилится из-за ряда ошибок :)
guest6 12.08.2021 22:21 # 0
ru66oH4uk 12.08.2021 22:22 # 0
of забыл?
guest6 12.08.2021 22:23 # 0
3.14159265 12.08.2021 22:23 # 0
Во-первых instanceof
Компилябельнее будет.
А во-вторых это всё последствия наследушной дрисни.
ru66oH4uk 12.08.2021 22:25 # 0
Это какой-то свежачок
>последствия наследушной дрисни.
Так я и не спорю. Я и с тем согласен, что в сишке это нахуй не нужно.
Просто всем остоебенили цепочки инстансофоф в жабах, так что смарткаст это хорошо
3.14159265 12.08.2021 22:26 # 0
> Это какой-то свежачок
Я не знаю как по-другому заставить это скомпилиться.
obj вряд ли сожет магически поменять тип по ходу метода.
ru66oH4uk 12.08.2021 22:27 # 0
В котлине, например, можно именно так
и в TS тоже
3.14159265 12.08.2021 22:34 # 0
А я привёл реальный пример :)
Компилять в последних jdk.
ru66oH4uk 12.08.2021 22:35 # 0
А в какой момент а жабе завезли safe cast? в 15-й?
И ты кстати не ответил, чего ты сейчас вместо жабы делаешь?
guest6 12.08.2021 22:37 # +6
ru66oH4uk 12.08.2021 22:39 # +1
Я бы выразился аккуратнее: Областей, в которых Java является удачным решением, на самом деле гораздо меньше, чем принято считать;) может быть их и вовсе нет
ASD_77 13.08.2021 03:03 # 0
JloJle4Ka 13.08.2021 10:36 # +1
ASD_77 13.08.2021 11:32 # +1
j123123 12.08.2021 20:05 # +1
ru66oH4uk 12.08.2021 20:10 # +1
А вот в это я охотно верю.
Возможно по этому safe cast завезли в Kotlin, а не в си
ASD_77 13.08.2021 11:50 # 0
j123123 13.08.2021 19:35 # 0
ru66oH4uk 13.08.2021 19:44 # 0
Оно там реализуется вручную через какое-то отдельное поле
j123123 13.08.2021 20:11 # −1
Перепишем его на Си. https://wandbox.org/permlink/2bwulZWGLGvBRvVx
Проблемы?
bootcamp_dropout 13.08.2021 21:06 # +1
j123123 13.08.2021 21:22 # 0
Но бесплатно я такой хуйней заниматься естественно не буду.
bootcamp_dropout 13.08.2021 21:26 # +3
странно, я думал тебе делать нехуй
j123123 13.08.2021 21:44 # 0
Чтобы эту хуйню сделать на асме, мне надо будет дохуя потратить времени на вникание во всякую хуйню, а "как это сделать через сишный препроцессор" мне сразу было более-менее очевидно
3.14159265 14.08.2021 02:43 # 0
Но всё-таки не нужно портировать скриптуху 1-в-1 и уподобляться в мыслях своих джавашкам: начинать хранить инфу о типах в рантайме. Зачем? Зачем?
Если мы знаем тип на этапе конпеляции, то можно там же проставить статические диспатчи.
Соответственно уродливая псевдоrtti жавашня struct Object вообще не нужна.
На этом выезжают крестошаблоны.
PS Минус не мой.
j123123 14.08.2021 04:16 # 0
>
> Соответственно уродливая псевдоrtti жавашня struct Object вообще не нужна.
> На этом выезжают крестошаблоны.
Тогда на такой хуйне не сделать какой-нибудь говнопарсер питушни. Разве что компилтайм-парсер можно сделать. А крестошаблоны - говно ансикльное, ибо только в компилтайме отработать могут.
И для реализации компилтайм говнопарсера для PCRE надо кодогенерить такую вот ебучую дрисню:
3.14159265 14.08.2021 04:57 # +1
а) анскильности кодера
б) ограниченности языка, который не может пронести инфу о типе через цепочку методов
Любимое развлечение жавухов (и скриптухов в целом): напихать питушни в женерик контейнер, педерать куда-то далеко, а потом руками доставать говно из типа и диспатчить его.
Альтернатива: оопушня и полиморфизм. С таблицами виртуальных питухов и просадкой пирфоманса.
Возьмем в качестве люстрации классический printf:
Уверен что в его реализации полно instanceof.
Но эти проверки на типы нужны только потому что компилятор внутри printf не может понять что нулевой элемент строка, а первый число. Отсюда необходимость в хранении этой инфы в рантайме.
Чем лучше в языке типизация, тем меньше нужно такой скучной блевотины.
Чем хуже — тем больше её нужно. Так например в js хороший тон всяких апи брутфорсить тип каждого аргумента: что это строка, массив, число или объект.
Если типизация будет идеальной инфа о типе в рантайме будет не нужна и мы получим... Сишку с её zero cost и голыми данными.
> Разве что компилтайм-парсер можно сделать
Компайл-тайм это ведь хорошо.
std::is_base_of хорошая весчь, как и прочие type_traits.
Правда в Сишке проблема базового типа снята, т.к. система типов одноуровневая, без наследования.
guest6 14.08.2021 05:26 # 0
Маттерн патчинг заебись же, как в котлине
ru66oH4uk 14.08.2021 02:59 # 0
Проблемы в том, что ты будешь каждый раз писать это вручную с ноля. Для каждого проекта. Для каждой структуры.
Если ты считаешь что это хорошо -- писать вручную с ноля одно и тоже каждый раз -- то мне трудно будет объяснить, почему это плохо
j123123 14.08.2021 03:56 # 0
Зато у меня нет намертво встроенного говноRTTI который хер знает как работает, и хер знает какой там оверхед.
guest6 14.08.2021 13:51 # 0
Ничего не поделаешь
j123123 12.08.2021 20:02 # 0
Этот "#define" может автогенериться в скоупе этого if
Т.е. грубо говоря "if (petuh instanceof String) {" трансформируется в
и закрывающая скобка "}"
трансформируется в
ASD_77 13.08.2021 02:56 # 0
COPOKA 12.08.2021 12:02 # 0
Хорошо, что в «TS» нету goto и что typeof и оператор сравнения нельзя перегрузить.
ASD_77 12.08.2021 02:54 # +1
j123123 12.08.2021 03:05 # +3
ASD_77 12.08.2021 11:28 # 0
Soul_re@ver 12.08.2021 11:35 # +2
Ну и к тому синтаксису привык бы.
К любому говну можно привыкнуть. Программисты на «пхп» подтвердят.
COPOKA 12.08.2021 11:38 # +1
guest6 12.08.2021 12:02 # +1
SHAIKH
Email : [email protected], [email protected]
Respected Sir,
Career Statement:
Extensive Project Engineer, Maintenance Engineer, QA/QC Engineer, Design Engineer with knowledge of handling projects. Seeking a responsible position as a engineer with a view to Utilize my professional experience in a renowned organization
Summary of Qualification:
· I have huge years of work experience in UAE, Saudi Arabia, Kuwait & Qatar.
· Ability to identify Objective and scope of the project as well as project segment
· Ability to work in a fast-paced environment
· Comprehensive knowledge of advanced engineering concepts, calculating and complete surveying project
· Coordinate with team to check the ongoing project status and development
· Excellent communication & leadership skills
· Excellent management skills and remarkable ability to contribute towards team performance
· Resourceful team player and keen attention to detail
· Skilled at adopting modern technologies
· Skilled in the methods and strategies of collecting and analyzing information and data required
Email : [email protected], [email protected]
Joining period : Immediately.
Your's
Shaikh.
bootcamp_dropout 12.08.2021 12:04 # 0
ASD_77 12.08.2021 13:34 # 0
Desktop 12.08.2021 20:28 # +1
engeniger
j123123 12.08.2021 21:12 # 0
XepMauop 12.08.2021 21:21 # 0
guest6 14.08.2021 13:51 # +3
guest6 14.08.2021 13:54 # +1
1024-- 14.08.2021 14:04 # 0
j123123 14.08.2021 16:46 # +1