- 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.");
}
откудава я знаю что там стринг?
Ну просто явный каст это же ужс
Считай это не просто условием, а такой вот идиомой.
Да и один хер конкатенация чего-то со строкой всегда строка.
ты не понял его видимо
З.Ы. А, поняла о чём ты, вдруг f() возвращает не "str".
Но с другой стороны, если мы докажем, что sosat() + ebat() всегда возвращает "string", то всё будет ок. Но TS не Coq чтобы такие пруфы писать, конечно.
Теперь понятно как на свет рождаются недотупизированные говноязыки...
Царь был прав. LLVM зло, порождающее гроздья скриптухи.
Безопасные касты там есть.
Ты опять хочешь стриггерить ДжоДжочку?
> print(<string>arg);
> }
Это нормально?
Даже в майкомирке могут нормально:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-7.0/pattern-matching
Мы сделали рантайм проверку, теперь внутри этого блока мы в компайлтайме знаем тип и можем его юзать.
Это можно даже обобщить на какие-то произвольные предикаты.
В тайпскрипте было бы так
https://wandbox.org/permlink/mcdl44HFj3knVSzT
https://play.nim-lang.org/#ix=3vHu
Представь, что у тебя есть функция, принимающая "string".
Я могу написать
то есть явно кастить не нужно: компилятор сам приводит тип
> functionThatAcceptsInt(something);
Т.е. something это некая строка, и эта хрень проверяет, можно ли something распарсить как Int? И тогда эту хуйню как Int передают в такую-то функцию? Да, такую хуйню определенно можно наметушить через mixin-ы, хотя может быть и более простой способ.
знание о типе объекта (RTTI) есть в рантайме конечно.
https://wandbox.org/permlink/vLXXX7XcedqkS2zF (по сути это как крестопарашный шаблон)
Если неизвестен, это тоже решается, но это уже надо дрочиться с тем, как там этот тип в рантайме разковыривать и как его автокастить.
Пример из TS
Ну... Практически во всех современных языках есть. А уж для паттерн-нятчинга эта фича вообще обязательня.
https://wandbox.org/permlink/gW5FlqUt3ICFJlv1
Весёлый евал – принимает на вход пользовательскую строку. Без экранирования.
Твой define ничем не лучше ручкого каста, даже больше на одну строчку
https://www.infoq.com/news/2019/09/static-typescript-msft-paper/
дальше продолжать?
Нахуя? Ты мне конкретные кейсы покажи, чтоб я пожалел что этой фичи нет. А не то, что мелкомягкие что-то там высрали
Без смарткастов код может выглядеть так (пример на жабе, но не суть)
Теперь тоже самое со смарт кастами
Видишь разницу?
1) Такой код в контроллерах не встречается почти никогда. Зачем мне передавать или ту или ту хуйню куда-то там? Я отлично знаю, что куда зачем я передаю.
2) Если и встречается, то руками прописать касты это фигня, потому что такого кода будет МАЛО.
3) Если его вдруг будет МНОГО, можно это дело банально препроцессить, т.е. например за-shadow-ить переменную новой переменной с тем же именем внутри скоупа этого if, которой будет присвоен каст этой хуйни с нужным юнионом, и всё блядь
(хотя я вполне могу представить себе такой код)
Осталось узнать зачем мне нужны контроллеры.
У меня вот ни одного нету
> У меня вот ни одного нету
Фитнес-трекеры или смарт-часы у тебя есть какие-нибудь?
начал с ними бегать
пришлось сдать обратно, потому что они теряли gps в чистом поле и дистанцию засчитывали в двойном объёме
это те контроллеры или более лучшие?
А потеря GPS в чистом поле может быть как программным, так и аппаратным просчетом, я их прошивки не реверсил.
имелось в виду "без нормальной оси"
Если надо чтоб "без \"Linux\"" то очевидно что можешь взять "Apple Watch"
А вообще, что есть "умные часы" и чем они отличаются от "фитнес трекера"? Фитнес-трекеров без Linux более чем дофига. Часы с Pebble OS были например (Pebble OS это модифицированная версия FreeRTOS). В носимой хуйне от Fitbit например какая-то Fitbit OS.
- всем? просто они оказались никому нахуй не нужны и маркетологи срочно их перепрофилировали в "фитнес-трекеры с выебонами"
https://tinyurl.com/3tanbhz4
это что-то для осетинских врачей
Ты зачем детского врача избил?
Ну я нему сына привел, и говорю: "ты доктор?", а он говорит: "я педиатр".
Я говорю: "что??"
А он: "я педиатр-гомеопат, показывайте ребенка"
> У меня вот ни одного нету
Ну и у тебя наверняка есть какой-то контроллер в стиральной машине например. Или в кондиционере. Или в посудомоечной машине. Или в микроволновке.
У тебя есть что-то из этого?
Вот куплю новую, и там, вероятно будет контроллер
а пластик в такой старой технике не вреден для здоровья?
Даже там наверняка есть контроллеры. Они есть даже в не сильно древних ЭЛТ телевизорах, управляемых через ИК-пульт.
А еще и потому, что легко накостыливается препроцессингом. А еще и потому, что для "safe cast" нужен RTTI о котором знает некий рантайм языка, а это уже анскилл.
в джаве нет препроцессинга
> RTTI о котором знает некий рантайм языка, а это уже анскилл.
невозможно выпилить RTTI из джавы
В т.ч. поэтому жаба говно
> невозможно выпилить RTTI из джавы
В т.ч. поэтому жаба говно
Ты же сам не любил препроцессинг без доступа к AST, или я путаю?
> В т.ч. поэтому жаба говно
Ну тут ничего не поделаешь: так она устроена
Без препроцессинга и без доступа к AST - однозначно хуже, чем с препроцессингом и без доступа к AST.
Как и то, что поддержка чего либо часто встречающегося в языке лучше, чем кастомный напирдолинг этого препроцессором
А вот с этим можно и поспорить. Все фичи в язык все равно не запихнуть, и поэтому лучше делать более общие мета-механизмы(речь не о тупом препроцессоре из Си), на которых эти фичи можно достраивать.
Вот например что можно в "D" делать: https://forum.dlang.org/thread/[email protected]
Эту хуйню уже обсуждали, моё мнение можно прочитать в https://govnokod.ru/27340#comment621664
Не вижу смысла повторяться.
На этом говнокод держится!
Как типично проявляется творческий процесс?
> Я могу структуру сделать, а в структуре у меня может быть юнион на всякую хуйню
Какое столкновение двух культур )))
Впрочем у него даже на жабе это не скомпилится из-за ряда ошибок :)
of забыл?
Во-первых instanceof
Компилябельнее будет.
А во-вторых это всё последствия наследушной дрисни.
Это какой-то свежачок
>последствия наследушной дрисни.
Так я и не спорю. Я и с тем согласен, что в сишке это нахуй не нужно.
Просто всем остоебенили цепочки инстансофоф в жабах, так что смарткаст это хорошо
> Это какой-то свежачок
Я не знаю как по-другому заставить это скомпилиться.
obj вряд ли сожет магически поменять тип по ходу метода.
В котлине, например, можно именно так
и в TS тоже
А я привёл реальный пример :)
Компилять в последних jdk.
А в какой момент а жабе завезли safe cast? в 15-й?
И ты кстати не ответил, чего ты сейчас вместо жабы делаешь?
Я бы выразился аккуратнее: Областей, в которых Java является удачным решением, на самом деле гораздо меньше, чем принято считать;) может быть их и вовсе нет
А вот в это я охотно верю.
Возможно по этому safe cast завезли в Kotlin, а не в си
Оно там реализуется вручную через какое-то отдельное поле
Перепишем его на Си. https://wandbox.org/permlink/2bwulZWGLGvBRvVx
Проблемы?
Но бесплатно я такой хуйней заниматься естественно не буду.
странно, я думал тебе делать нехуй
Чтобы эту хуйню сделать на асме, мне надо будет дохуя потратить времени на вникание во всякую хуйню, а "как это сделать через сишный препроцессор" мне сразу было более-менее очевидно
Но всё-таки не нужно портировать скриптуху 1-в-1 и уподобляться в мыслях своих джавашкам: начинать хранить инфу о типах в рантайме. Зачем? Зачем?
Если мы знаем тип на этапе конпеляции, то можно там же проставить статические диспатчи.
Соответственно уродливая псевдоrtti жавашня struct Object вообще не нужна.
На этом выезжают крестошаблоны.
PS Минус не мой.
>
> Соответственно уродливая псевдоrtti жавашня struct Object вообще не нужна.
> На этом выезжают крестошаблоны.
Тогда на такой хуйне не сделать какой-нибудь говнопарсер питушни. Разве что компилтайм-парсер можно сделать. А крестошаблоны - говно ансикльное, ибо только в компилтайме отработать могут.
И для реализации компилтайм говнопарсера для PCRE надо кодогенерить такую вот ебучую дрисню:
а) анскильности кодера
б) ограниченности языка, который не может пронести инфу о типе через цепочку методов
Любимое развлечение жавухов (и скриптухов в целом): напихать питушни в женерик контейнер, педерать куда-то далеко, а потом руками доставать говно из типа и диспатчить его.
Альтернатива: оопушня и полиморфизм. С таблицами виртуальных питухов и просадкой пирфоманса.
Возьмем в качестве люстрации классический printf:
Уверен что в его реализации полно instanceof.
Но эти проверки на типы нужны только потому что компилятор внутри printf не может понять что нулевой элемент строка, а первый число. Отсюда необходимость в хранении этой инфы в рантайме.
Чем лучше в языке типизация, тем меньше нужно такой скучной блевотины.
Чем хуже — тем больше её нужно. Так например в js хороший тон всяких апи брутфорсить тип каждого аргумента: что это строка, массив, число или объект.
Если типизация будет идеальной инфа о типе в рантайме будет не нужна и мы получим... Сишку с её zero cost и голыми данными.
> Разве что компилтайм-парсер можно сделать
Компайл-тайм это ведь хорошо.
std::is_base_of хорошая весчь, как и прочие type_traits.
Правда в Сишке проблема базового типа снята, т.к. система типов одноуровневая, без наследования.
Маттерн патчинг заебись же, как в котлине
Проблемы в том, что ты будешь каждый раз писать это вручную с ноля. Для каждого проекта. Для каждой структуры.
Если ты считаешь что это хорошо -- писать вручную с ноля одно и тоже каждый раз -- то мне трудно будет объяснить, почему это плохо
Зато у меня нет намертво встроенного говноRTTI который хер знает как работает, и хер знает какой там оверхед.
Ничего не поделаешь
Этот "#define" может автогенериться в скоупе этого if
Т.е. грубо говоря "if (petuh instanceof String) {" трансформируется в
и закрывающая скобка "}"
трансформируется в
Хорошо, что в «TS» нету goto и что typeof и оператор сравнения нельзя перегрузить.
Ну и к тому синтаксису привык бы.
К любому говну можно привыкнуть. Программисты на «пхп» подтвердят.
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.
engeniger