Size: a a a

Compiler Development

2020 January 04

МБ

Михаил Бахтерев in Compiler Development
Kir
https://bitbucket.org/heimdell/lvm/src/11b43569b2ead1aeae4683bdea1ec5459135756e/Eval.fs#lines-163 - вот реализация рекурсивного let на FSharp, конкретно этот кусок позволяет значениям взаимно-рекурсивно ссылаться в контексте на самих себя. Если я понимаю о чём вы. Я на неё смотрел неоднократно, после того как её написал.
Вроде, это то, что нужно (с телефона не всё видно). Но тогда откуда проблема при формировании {a = a}? Ааа. Понял. Они перекрывают предыдущий frame. Хм... Всё же где-то я видел решение этой проблемы.
источник

K

Kir in Compiler Development
Решение я нашёл простое: сделать отдельный синтаксис (и отдельный кусок реализации) для захвата имени. И теперь выбираю ключевое слово.
источник

K

Kir in Compiler Development
Кстати, никто призмы как примитив для реализации паттерн-матчинга не использовал?
источник

DP

Dmitry Ponyatov in Compiler Development
Михаил Бахтерев
Вроде, это то, что нужно (с телефона не всё видно). Но тогда откуда проблема при формировании {a = a}? Ааа. Понял. Они перекрывают предыдущий frame. Хм... Всё же где-то я видел решение этой проблемы.
квотирование не работает типа `a ?
источник

K

Kir in Compiler Development
У меня в языке не планируется квотирования. Ну и проблему-то я решил, я сейчас ключевое слово выбираю
источник

DP

Dmitry Ponyatov in Compiler Development
Yuriy Syrovetskiy
это какое-то мутное ООП? может, вспомнить классику? во Смолтоке для доступа ко своим полям есть особый синтаксис — ^a
^ это возврат, поля инстанса и класса в методах напрямую по имени доступны
источник

K

Kir in Compiler Development
+
источник

МБ

Михаил Бахтерев in Compiler Development
Kir
У меня в языке не планируется квотирования. Ну и проблему-то я решил, я сейчас ключевое слово выбираю
В SISAL можно было явно к предыдущим фрэймам обращаться: a = top.а Может, так лучше сделать? Да и универсальнее a = top.a ++ a
источник

МБ

Михаил Бахтерев in Compiler Development
Вместо top сделать зюкву ^.
источник

K

Kir in Compiler Development
Нет, пожалуй. Доступ руками к scope - это худшее из того, что может быть, я считаю.
источник

YS

Yuriy Syrovetskiy in Compiler Development
Dmitry Ponyatov
^ это возврат, поля инстанса и класса в методах напрямую по имени доступны
хм, там разве не было способа отличить переменную и геттер с одинаковым именем?
источник

YS

Yuriy Syrovetskiy in Compiler Development
Dmitry Ponyatov
^ это возврат, поля инстанса и класса в методах напрямую по имени доступны
я спутал с @foo из Ruby
источник

МБ

Михаил Бахтерев in Compiler Development
Kir
Нет, пожалуй. Доступ руками к scope - это худшее из того, что может быть, я считаю.
Не. Динамические scope хуже :)
источник

K

Kir in Compiler Development
Михаил Бахтерев
Не. Динамические scope хуже :)
Полностью согласен!
источник

YS

Yuriy Syrovetskiy in Compiler Development
Dmitry Ponyatov
^ это возврат, поля инстанса и класса в методах напрямую по имени доступны
вот, поле будет foo, а метод — self foo. нет, этот путь не подойдёт
источник

МБ

Михаил Бахтерев in Compiler Development
Но мне бы хотелось однообразного синтаксиса с обычной инициализацией. Может, какое-нибудь ¿a = a. Чтобы понимать, что это просто поле... А потом уже уточнять тонкости.
источник

YS

Yuriy Syrovetskiy in Compiler Development
Михаил Бахтерев
Но мне бы хотелось однообразного синтаксиса с обычной инициализацией. Может, какое-нибудь ¿a = a. Чтобы понимать, что это просто поле... А потом уже уточнять тонкости.
.a = a, как в С
источник

МБ

Михаил Бахтерев in Compiler Development
Yuriy Syrovetskiy
.a = a, как в С
+1
источник

M

MaxGraey in Compiler Development
Yuriy Syrovetskiy
.a = a, как в С
Вот и нормально выглядит
{ .foo = 1, .a }
источник

K

Kir in Compiler Development
А я по-прежнему не вижу необходимости в нерекурсивном let. Это самый let меня в окамле/F# просто достал, в т.ч., ограничениями на рекурсию значений. Когда я через F# computation expressions пытался сделать http://hackage.haskell.org/package/base-4.12.0.0/docs/Control-Monad-Fix.html#v:mfix, я проклял всё. В итоге, использование того, что получилось, выглядело как месиво из функций, lazy/force и было невместно для демонстрации в приличном обществе.
источник