Надо придумать как выводить тип для рекурсивных функций
else ветка снова вызывает fib, думаю сделать обязательным декларацию возвращаемого значения для функций с рекурсией, и при встрече рекурсии выводить собственно тип из декларации
Int fib -> Int = _
| this < 2 => 1
|=> (this - 2) fib + (this - 1) fib
else ветка снова вызывает fib, думаю сделать обязательным декларацию возвращаемого значения для функций с рекурсией, и при встрече рекурсии выводить собственно тип из декларации
This media is not supported in your browser
VIEW IN TELEGRAM
юзверь прислал такую проблему с ui флита, можете ли вы понять шо его не устраивает токо из гифки?
отгадка завтра
отгадка завтра
🤔1
Прототипное наследование было топ, до того как его решили впендюрить в си лайк язык со слабой типизацией.
Это было развитие идеи ООП, если все есть объект, и каждый объект принадлежит Класссу объектов, то к какому классу принадлежит класс, конечно же к MetaClass, а MetaClass? а его мы зациклим, его класс будет он сам, чтобы сломать рекурсию.
Ну это как то тупо, подумали в лаборатории Palo Alto и запилили Self язык без классов, по сути это был Smalltalk 2.0
Это было развитие идеи ООП, если все есть объект, и каждый объект принадлежит Класссу объектов, то к какому классу принадлежит класс, конечно же к MetaClass, а MetaClass? а его мы зациклим, его класс будет он сам, чтобы сломать рекурсию.
Ну это как то тупо, подумали в лаборатории Palo Alto и запилили Self язык без классов, по сути это был Smalltalk 2.0
gavr_sas
Прототипное наследование было топ, до того как его решили впендюрить в си лайк язык со слабой типизацией. Это было развитие идеи ООП, если все есть объект, и каждый объект принадлежит Класссу объектов, то к какому классу принадлежит класс, конечно же к MetaClass…
Такому типу наследования ну очень идет гуи.
Когда исполнив любое выражение ты буквально получаешь в руки объект результа.
Все объекты таблички, значением может быть что угодно, если вставим лямбду получим что у объекта есть метод, отпрототипимся, получим объект с тем же методом.
В каждом "объекте" поле в котором можно делать eval и из которого доступны поля этого объекта, то есть каждый объект как мини иде со своим скоупом.
На скриншотах пример выставления пятерки в дефолтное значение поля foo
Когда исполнив любое выражение ты буквально получаешь в руки объект результа.
Все объекты таблички, значением может быть что угодно, если вставим лямбду получим что у объекта есть метод, отпрототипимся, получим объект с тем же методом.
В каждом "объекте" поле в котором можно делать eval и из которого доступны поля этого объекта, то есть каждый объект как мини иде со своим скоупом.
На скриншотах пример выставления пятерки в дефолтное значение поля foo
https://codapi.org/
Нашел прикольную штуку, может когда нибудь заюзаю.
Как питон ноутбуки, только для всех языков, и без стейта, нужно скорее для документации и презентаций, можно выставить зависимость между сниппетами чтобы при запуске 3 сначала выполнились 1 и 2.
Нашел прикольную штуку, может когда нибудь заюзаю.
Как питон ноутбуки, только для всех языков, и без стейта, нужно скорее для документации и презентаций, можно выставить зависимость между сниппетами чтобы при запуске 3 сначала выполнились 1 и 2.
codapi.org
codapi: Interactive code examples
Embed executable code snippets directly into your product documentation, online course or blog post.
🔥1
Забавная история ишья автоматом закрывается если создавший ее чел не поставил в проект звездочку
https://github.com/daeuniverse/dae/issues/368
И разумеется в ридми репы есть подсчет звездочек
https://github.com/daeuniverse/dae/issues/368
И разумеется в ридми репы есть подсчет звездочек
😁3
Проектирую нуллабилити для языка
синтакс справка:
Изучаю как другие решаеют, вот Swift делает странновато,
У меня бы это было наверно как то так, потому что уже есть синтаксис лямбд такой же
Но зачем это это объявление переменной, если обычная проверка на нулл и так должна сужать тип?
-Потому что если переменная мутабельна, то делать это небезопасно, что если в другом потоке кто-то снова присвоит ей нулл? тогда внутри ифа произойдет NRE.
Так что вроде бы идея неплохая, и вложенную нулабилити покрывает
Так что украду этот синтаксис, он также супер упрощает резолвинг, не нужно ебаца с булевой алгеброй, например в котлине у нас
if (x != null && y != null) { x и y смарткастнулись к нон нулл}
а если бы было || то не смарткастнулись бы, и это еще самый простой вариант только, так что у меня будет свифтовая семантика с локальными переменными, токо не знаю стоит ли оставлять != null, у swift нету
синтакс справка:
x > 5 => x foo bar
// это у меня
if (x > 5) {
x.foo().bar()
}
Изучаю как другие решаеют, вот Swift делает странновато,
if let переменная = нуллабл, которая внутри тела ифа будет не нуллаблlet abc = null
if let variableName = abc { // If casting, use, eg, if let var = abc as? NSString
// variableName will be abc, unwrapped
} else {
// abc is nil
}
У меня бы это было наверно как то так, потому что уже есть синтаксис лямбд такой же
x = null
x != null => [nonNullX -> ...]
или
nonNullX = x != null => [...]
Но зачем это это объявление переменной, если обычная проверка на нулл и так должна сужать тип?
-Потому что если переменная мутабельна, то делать это небезопасно, что если в другом потоке кто-то снова присвоит ей нулл? тогда внутри ифа произойдет NRE.
Так что вроде бы идея неплохая, и вложенную нулабилити покрывает
if let money = person?.wallet?.money { money non null here }Так что украду этот синтаксис, он также супер упрощает резолвинг, не нужно ебаца с булевой алгеброй, например в котлине у нас
if (x != null && y != null) { x и y смарткастнулись к нон нулл}
а если бы было || то не смарткастнулись бы, и это еще самый простой вариант только, так что у меня будет свифтовая семантика с локальными переменными, токо не знаю стоит ли оставлять != null, у swift нету
if let w = person?.wallet {w ...}person wallet => [w -> w уже не нулл]