Как стать автором
Обновить
15
0
Эридан Доморацкий @ProgMiner

Разработчик

Отправить сообщение

Я вот пытался на скорую руку найти в интернете, как спарсить числовой тип из строкового, но не получилось. Пришлось выкручиваться =)

Ну и документация тоже не помогла

Ух ты, не знал что можно с помощью infer выводить числа из строки! Я для этого задания написал свой парсер чисел используя массивы в качестве чисел...

Текст решения
type Add<A extends any[], B extends any[]> = [...A, ...B];
type Mul<A extends any[], B extends any[]> = A extends [infer H, ...infer T] ? [...B, ...Mul<T, B>] : [];

type Ten = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

type AsNumber<N extends string, Acc extends any[] = []> =
    N extends `0${infer R}` ? AsNumber<R, Mul<Acc, Ten>> :
    N extends `1${infer R}` ? AsNumber<R, Add<Mul<Acc, Ten>, [1]>> :
    N extends `2${infer R}` ? AsNumber<R, Add<Mul<Acc, Ten>, [1, 2]>> :
    N extends `3${infer R}` ? AsNumber<R, Add<Mul<Acc, Ten>, [1, 2, 3]>> :
    N extends `4${infer R}` ? AsNumber<R, Add<Mul<Acc, Ten>, [1, 2, 3, 4]>> :
    N extends `5${infer R}` ? AsNumber<R, Add<Mul<Acc, Ten>, [1, 2, 3, 4, 5]>> :
    N extends `6${infer R}` ? AsNumber<R, Add<Mul<Acc, Ten>, [1, 2, 3, 4, 5, 6]>> :
    N extends `7${infer R}` ? AsNumber<R, Add<Mul<Acc, Ten>, [1, 2, 3, 4, 5, 6, 7]>> :
    N extends `8${infer R}` ? AsNumber<R, Add<Mul<Acc, Ten>, [1, 2, 3, 4, 5, 6, 7, 8]>> :
    N extends `9${infer R}` ? AsNumber<R, Add<Mul<Acc, Ten>, [1, 2, 3, 4, 5, 6, 7, 8, 9]>> :
    Acc;

type Get<T extends unknown, Path extends string> = Path extends '' ? T :
    Path extends `${infer Key}->${infer Rest}` ? Get1<T, Key, Rest> :
    Get1<T, Path, ''>;

type Get1<T extends unknown, Key extends string, Rest extends string> =
    Key extends `(${infer L}-${infer R})` ? GetLR<T, AsNumber<L>, AsNumber<R>, Rest> :
    T extends Record<Key, unknown> ? Get<T[Key], Rest> :
    never;

type GetLR<T extends unknown, L extends any[], R extends any[], Rest extends string> =
    T extends Record<L["length"], unknown> ? (
        R extends L ? Get<T[L["length"]], Rest> :
        Get<T[L["length"]], Rest> | GetLR<T, [1, ...L], R, Rest>
    ) : never

Интересно, спасибо за ссылку! Было бы там ещё по-больше примеров кода...

Как это "какой-нибудь vim"? Передовой инструмент для работы с большими объёмами текста! Особенно, если смотреть на потребление памяти и скорость работы при огромном наборе функций.

Будут возмущаться на публику, а на самом деле это имхо чуть ли не лучшее применение для данной нейронки.

Логичным завершением вашей истории было бы "А потом и жизнь".

Как говорится, нельзя, но если очень хочется, то можно. Публично они, конечно, заявляют, что никуда не смотрели, но даже на Хабре тема поднималась и была речь о том, что среди разработчиков там есть люди, имевшие доступ к сорцам вин хп или около того.

Совмещённый текстбокс это же киллерфича современных браузеров. Одна строка, чтобы править всеми. Лучше только кнопка «Сделать хорошо»

Подсчёт суммы занятой памяти то ещё занятие. Нужнг учитывать количество шаренной между процессами памяти, а это не показывается в удобном виде в диспетчерах задач

Куча процессов на самом деле благо. До того, как лиса научилась создавать по процессу на вкладку, зависание или подвисание одной вкладки отражалось на всём браузере. Аналогично с недостатком оперативки. Разделение вкладок по процессам позволяет переложить менеджмент тасками на операционку, что позволяет например срубать вкладки, жрущие слишком много памяти (на линуксе этим занимается OOM killer)

А что же в случае, если мы попытаемся обратиться к динамически-типизированной переменной?

Я не очень понял вашу мысль про PHP. Я намерено не написал про него в своём комментарии, потому что про PHP нельзя сказать, что в нём используются вставки на другом языке. Если вы хорошо знакомы с PHP, вы должны знать, что между ?> и <?php можно заключить текст таким образом, чтобы он подчинялся логике, написанной на языке (заключить в условие или в цикл). То есть это не код на PHP встраивается в файл, а текст встраивается в код на PHP, что сразу не очевидно. Поэтому там вообще всё сложно.

Я, говоря про имена, имел ввиду проблему макросов. Если вы знакомы с препроцессором C/C++, то должны знать, что при использовании имён в макросах, они подставляются в код программы как есть и нет никакой возможности создать уникальное для конкретной подстановки имя. В случае вашего языка, если я всё правильно понимаю, это может привести к намеренному или случайному нарушению логики сгенерированного кода за счёт использования внутренних имён, которые вы наверняка генерируете, в коде на C++. И напротив, если вам потребуется для каких-либо целей изменить имена переменных из вашего языка в сгенерированном коде, то вам придётся также предоставлять удобный механизм обращения к ним в коде на C++. Учитывая, что у вас используется динамическая типизация, у вас должен быть общий тип для всех значений, а значит, работать с такими значениями как с простыми значениями в кодовой вставке уже не получится. Надеюсь, я смог донести свою мысль

На самом деле, вам бы обратить внимание в этом плане на языки, где такие фокусы разрешены. Например, сразу вспоминаются ассемблерные вставки в Си/Си++/Паскале, а следом за ними более сложные примеры типа Bison и JSP. Первая же проблема, которая появляется -- это использование имён в кодовой вставке. Вторая -- это порядок исполнения (особенно, когда внешний язык замахивается на декларативность). И наконец -- это проблемы оптимизации. Намного лучше связывать языки через линкер, для чего продумывать ABI, ну или хотя бы через компилятор нижнего языка, без возможности вставки кода на нижнем языке в ваш, используя API

Сишные функции не кидают исключений, а сигналы это зачастую уже не исключения, а ошибки. Для исключений делается обёртка в вашем языке, проверяющая значение кода возврата функции и/или errno, и выкидывающая исключение на основе этих значений.

На самом деле, это мой личный опыт, если довольно долго искать только в Яндексе, то качество выдачи по техническим вопросам становится намного лучше (вероятно, за счёт персонализации поиска), чем в Гугле. И при необходимости всегда можно воспользоваться кнопками в футере для перехода в Гугл, при этом у меня лично редко когда было такое, что Гугл находил то, что не нашлось в Яндексе.

Ридеса-Ламона

Было такое когда-то с загадочным Мерали Бегом, пока я случайно не узнал, что это была Мера Лебега

Так напишите свой редактор без плагинов!)

Тем не менее, в вопросах печати и передачи форматированного текста (когда важно то, как свёрстан документ) – ему нет равных.

Да и тот же флеш сильно двинул веб вперёд, хотя, может, и не в том направлении, в котором некоторым хотелось бы. Печально только то, что теперь мало чем можно его открыть, при том, что иногда попадаются старые SWF, созданные ещё во времена величия флеша.

Спасибо! Добавил readme.
1

Информация

В рейтинге
Не участвует
Откуда
Петродворец, Санкт-Петербург и область, Россия
Зарегистрирован
Активность