Giter VIP home page Giter VIP logo

Comments (4)

ForNeVeR avatar ForNeVeR commented on June 24, 2024

Открываю грамматику и вижу:

namespace           = identifier { "::" identifier }

Однако,

type                = [ namespace "." ] identifier [ ( { "[]" } | type_params ) ]

Получается, сейчас мы используем такой синтаксис:

System::Console.WriteLine("shit")

Действительно, это мне кажется неконсистентным. Например, в PowerShell это будет выглядеть с точностью до наоборот:

[System.Console]::WriteLine('shit')

Предлагаю следующее.

  1. Позиции внутри неймспейса разделять символом . - это соответствует стандартной нотации .NET. В любом другом случае парсер будет вынужден парсить неймспейс, а затем заменять разделители на . (чтобы такой неймспейс мог быть использован компилятором).
  2. Неймспейс от остальной части выражения отделять символами :: - это позволит устранить проблемы, перечисленные тобой.

Получается такая грамматика:

namespace           = identifier { "." identifier }
type                = [ namespace "::" ] identifier [ ( { "[]" } | type_params ) ]

Получается такой синтаксис:

alpha.beta.gamma::delta.eps = 1

Мне, как любителю PowerShell, нравится.

Однако, предложенный тобой вариант тоже пригоден к использованию.

from lens.

impworks avatar impworks commented on June 24, 2024

А мне показалось, как раз-таки очень консистентно. :: разделяет части неймспейса, а . обращается к членам объекта или класса. В случае с System::Console.WriteLine("shit") довольно наглядно видно, что слева от точки стоит полное имя класса, справа - имя метода.

Вариант с alpha.beta.gamma::delta.eps = 1, впринципе, решает вопрос с разруливанием того, где неймспейс, а где класс - дойдя до ::, парсер сделает backtrack и переинтерпретирует alpha.beta.gamma как неймспейс. Но мне он не нравится тем, что разделения имени класса и неймспейса, для которого используется оператор ::, ни в одном другом языке я еще не видел.

В PowerShell, :: используется для статического вызова, а . для динамического? То есть, если расширить пример, получится так?

[System.Console]::ReadLine().Substring(1)

Такой вариант, впринципе, тоже логичен. Тогда будет тоже довольно понятно:

alpha.beta.gamma::delta = 1    // alpha.beta.gamma - полное имя класса, delta - статическое поле
alpha.beta.gamma.delta = 1     // alpha - объект, все остальное - доступ к полям по цепочке

from lens.

ForNeVeR avatar ForNeVeR commented on June 24, 2024

В PowerShell, :: используется для статического вызова, а . для динамического?

Да, именно так.

from lens.

impworks avatar impworks commented on June 24, 2024

Тогда давай сделаем именно так. Я поправлю грамматику чуть позже.
Тикет закрываю.

from lens.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.