gavr_sas
167 subscribers
2.46K photos
164 videos
24 files
733 links
JB пропаганда
Download Telegram
я узнал что существует банановый сироп, и можно просить добавить его в кофя
жизнь прошла не зря
А как резолвить body функций у которых должен быть выведен return type?

допустим ситуация
fun main() {
sas()
}

fun sas() = 42


шо делать как быть:
1) мы не можем заранее пройдясь по всем функциям узнать точные их сигнатуры, ведь они не полные
2) мы не можем просто начать резолвить тела в рандомном порядке, ведь может встретится экспрешон с вызовом еще не зарезолвленной функции

Решения два три,
1 Топологическая сортировка: попробовать сначала построить граф зависимостей между функциями и отсортировать его топологически, сначала резолвя функции без зависимостей итд
Сложно реализуется
Не поддерживает mutually recursive функцайки a -> b -> c -> a, короче сасать

2 Lazy резолвинг, обязательное условие - наличие точки входа(а что делать с либами?)

Имеем 2 структуры,
резолвнутое to Type
Стек того что резолвим се

короч не важно, суть что идем резолвить то что видим, увидили вызов sas, проверили что еще не резолвнут, резолвнули, а по стаку мы можем понять что не попали в ловушку a вызывает б а б вызывает а
gavr_sas
А как резолвить body функций у которых должен быть выведен return type? допустим ситуация fun main() { sas() } fun sas() = 42 шо делать как быть: 1) мы не можем заранее пройдясь по всем функциям узнать точные их сигнатуры, ведь они не полные 2) мы не…
3 самый ахуенный наш любимый ХиндиМинди ^_^

Hindley–Milner
1) собираем все декларации функций переменных в одну бог шлепа структуру, обычно изза этого в таких языках есть жесткое требование к определению до использования F# OCalm(форвард декларейшон как в С)

2) Присваиваем переменным воображаемые временные типы, аля тайп холы ⭕️ t0 t1 t2...

3) Генерим уравления/ограничения, исходя из контекста, например обычно в H&M нет перегрузки операторов, и + всегда означает 2 числа, из этого можно легко вывезти 2 любых t1 + t2, еще простой пример fun f(x), f(y), => x == y, аля аргумент должен быть того же типа что параметр функции

4) Унификация, ну это я уже выше описал по сути, решаем все ети уровнения, если решение найти невозможно — выдаем ошибку типа
очень конкретная схема развития любого програмиста
(за спам извени)
This media is not supported in your browser
VIEW IN TELEGRAM
идеи древних java людей
👏3
компухтар с подписью we used to be a proper profession
💋1
вот всегда бы так
Таких треугольников много, но эти конкретные 6 треугольников мои, мои треугольники — мои лучшие друзья, я должен научится владеть ими также как я владею своей жизнью
constexpr может быть как runtime так и ct
consteval is ct only

сука, это помойму какой то апогей дизайна, понятно что хуже только perl, но все же, назвать штуки практически наоборот
😨1
- Jai: make_directory_if_it_does_not_exist

I fully support that
👍3
Forwarded from kolpotraż bananów
C++ exists to create jobs and keep dumbasses away from money.
🔥2
неочевидная весщъ

вот казалось бы функции и функции
аннет, вторая здесь это топ левел константное значение, аргументов то нет!

а как же сделать все таки функцию, не принимающую аргументов

а надо обернуть все тело в лямбду и добавить один фальшифый _ аргумент, теперь это как бы переменная-лямблда поэтому ее можно вызывать как функцию без аргументов

либо еще один вариант, в комментариях
4
Forwarded from gavr
а нахуя тогда мне эта информация?
💯3
Forwarded from GNOME News
This media is not supported in your browser
VIEW IN TELEGRAM
Джулиан Спарбер делится рабочим прототипом мерж реквеста для поддержки нескольких курсоров в Reflection (ранее Aardvark), локального текстового редактора для GNOME.
🤣2👍1
прохид заборонено
😨4
This media is not supported in your browser
VIEW IN TELEGRAM
не ну LSP это конеш прикольно
- склонил чужой Vala IDEA плагин
- поменял там одну строчку пути к своему exeшнику
- готово, поддержка для нового языка в IDEA