In cases, the following code may exist (real production code):

```
defmodule MyModule.Error do

  # notice here
  if Code.ensure_loaded?(Ecto) do
    alias MyModule.Error.{ChangesetParser, ErrorList}
    @spec new(Ecto.Changeset.t()) :: MyModule.Error.ErrorList.t()
    def new(%Ecto.Changeset{} = changeset) do
      changeset
      |> ChangesetParser.parse()
      |> ErrorList.new()
    end
  end


end
```

Based on your proposal, use the following structure:

```elixir
features: [
  hls: [
    dependencies: [],
    modules: []
  ]
]
```

How could we configure it to depend on `Ecto` only for that function?
On Monday, May 15, 2023 at 2:22:51 PM UTC-4 christ...@gmail.com wrote:

> > Is there any particular issue with the information I shared that 
> wouldn't help with the situation?
>
> Your thoughts are compelling and merit discussion!
>
> It's just that there's a slippery slope in proposal conversations: between 
> discussing *a specific* proposal (in this instance, Michal's original 
> well-formulated one), and brainstorming and iterating on feedback to arrive 
> at *a new *specific proposal. It's a fuzzy line, but one we have to draw 
> at some point in any conversation as it goes on, as this mailing list is 
> only for specific proposals.
>
> It's nothing personal—it's just time to move conversation around building 
> a new proposal to a more productive discussion-oriented forum, such as the 
> Elixir Forums, or direct chat/emails with others working on a new idea!
> On Sunday, May 14, 2023 at 3:59:06 PM UTC-4 yordis...@gmail.com wrote:
>
>> I thought that the ideas were around the topic. Is there any particular 
>> issue with the information I shared that wouldn't help with the situation?
>>
>> On Sunday, May 14, 2023 at 3:33:30 PM UTC-4 José Valim wrote:
>>
>>> No worries, I didn't interpret it as a command. But it is clear there is 
>>> an expectation issue: this mailing list should focus on concrete features 
>>> and implementations. Once someone submits a proposal here, they are 
>>> probably expecting a yes, no (and why so), or what needs to be 
>>> considered/improved for the proposal to be accepted. So all feedback in 
>>> here has been direct (and historically it has not been a problem).
>>>
>>> I recommend the Elixir Forum if the goal is to bounce ideas and explore 
>>> the problem space. We (the Elixir team) already have a lot on our hands and 
>>> we probably won't be able to develop ideas into full proposals. So I don't 
>>> want your trust to be misplaced. :)
>>>
>>> > if we make assumptions and take the position of "it is possible 
>>> today," how could we discuss the trade-offs?
>>>
>>> The point of saying "it is possible today" is that, if you are going to 
>>> propose something new, then at least it needs to be compared to what is 
>>> possible today and explain how it improves on that. This, alongside the 
>>> problem statement, is very important to ensure we are all on the same page.
>>>
>>> On Sun, May 14, 2023 at 8:08 PM Yordis Prieto <yordis...@gmail.com> 
>>> wrote:
>>>
>>>> > Here is the issue: the proposal has not elaborated on how those 
>>>> problems will be tackled (outside of dependency management). 
>>>>
>>>> I wasn't trying to be in Solution-space, just sharing some ideas and 
>>>> pain points and trying to figure out if they could be solved 
>>>> simultaneously.
>>>>
>>>> > And don’t ask us to figure it out
>>>>
>>>> When I said, "I trust you will figure it out," I trusted you would do 
>>>> the right thing. I didn't give you any command. My apologies if it came 
>>>> across as a Command, but I intended to say, "I trust you, but please don't 
>>>> discourage the ideas making assumptions about it" That's all.
>>>>
>>>> > It is not that we don’t care or didn’t think about it. Those are 
>>>> different trade-offs, with their strengths and weaknesses, and if we want 
>>>> to copy features from Rust, then those trade-offs need to be taken into 
>>>> account as part of a complete proposal.
>>>>
>>>> I don't disagree with that at all. That was the intent; discuss it. But 
>>>> if we make assumptions and take the position of "it is possible today," 
>>>> how 
>>>> could we discuss the trade-offs?
>>>>
>>>> > Application.ensure_feature would most likely be a wrapper around 
>>>> config.
>>>>
>>>> I am not sure about the technicality underneath, but I was assuming 
>>>> that we can't just do that unless we reserve some key or something like 
>>>> that, so I was thinking in a completely different ets table for it, but 
>>>> sure, it could "feel" as simple as Config module, why not.
>>>>
>>>> One way I was thinking of adding a key under the `mix.exs` to be able 
>>>> to have information:
>>>>
>>>> ```
>>>> defmodule H264.MixProject do
>>>>   use Mix.Project
>>>>
>>>>   def project do
>>>>     [features: [:parser, :encoder, :native]] # maybe be able to add 
>>>> description for them also?!
>>>>   end
>>>> end
>>>> ```
>>>>
>>>> Be able to use that information when calling 
>>>> `Application.ensure_feature`. It would be just the Config API since it 
>>>> would require checking `mix.exs` and/or another ets table with the 
>>>> information about the feature. I guess that registering the Features at 
>>>> compile time instead of being statically defined in the `mix.exs` would 
>>>> become harder. I am unsure if that would be a good idea.
>>>>
>>>> ExDoc and the Mix.Deps task could read such information to require 
>>>> dependencies or have documentation about it. It could be used behind 
>>>> `Config` package under another macro:
>>>>
>>>> ```
>>>> import Config
>>>> feature :h264, encoder: true
>>>> ```
>>>>
>>>> Or don't do that at all and you only get to activate them using `deps` 
>>>> and mess around with `Mix.env()` to correctly configure the features.
>>>>
>>>> Probably activating "statically" in the mix.exs would be simple and 
>>>> easier to deal with.
>>>>
>>>> defmodule MyApp.MixProject do
>>>>   use Mix.Project
>>>>
>>>>   def project do
>>>>     [
>>>>       deps: [
>>>>         {:h264, "~> 0.10.0", features: [:encoder]}
>>>>       ]
>>>>     ]
>>>>   end
>>>> end
>>>>
>>>>
>>>> On Sunday, May 14, 2023 at 3:18:01 AM UTC-4 michal...@gmail.com wrote:
>>>>
>>>>> Sure thing, I just wrote as I thought that maybe you will say: that's 
>>>>> a good idea, we were thinking about it, we had similar problems etc. etc. 
>>>>>
>>>>> But because of a lot of questions and doubts it's clear that's the 
>>>>> requester responsibility to propose detailed description of the API, take 
>>>>> into account all pros and cons, describe how they will affect the whole 
>>>>> ecosystem and whether the requested feature fits into the language 
>>>>> concepts
>>>>>
>>>>> niedz., 14 maj 2023, 08:58 użytkownik José Valim <jose....@dashbit.co> 
>>>>> napisał:
>>>>>
>>>>>> One addition: “features” makes sense for Rust because the contents of 
>>>>>> its “module body” cannot be dynamic as in Elixir. So if they want to 
>>>>>> provide this feature in the first place, it must be done as part of the 
>>>>>> compiler.
>>>>>>
>>>>>> Elixir can execute any Elixir code when defining modules, which is 
>>>>>> why it is possible to implement these features today without additional 
>>>>>> work in the compiler.
>>>>>>
>>>>>> It is not that we don’t care or didn’t think about it. Those are 
>>>>>> different trade-offs, with their own strengths and weaknesses, and if we 
>>>>>> want to copy features from Rust, then those trade-offs need to be taken 
>>>>>> into account as part of a complete proposal.
>>>>>>
>>>>>> -- 
>>>>>>
>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "elixir-lang-core" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>> send an email to elixir-lang-co...@googlegroups.com.
>>>>>>
>>>>> To view this discussion on the web visit 
>>>>>> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4LeSido9jqm%3DKBwkwCh7%3DQFJeORGata2ertcJChzh_ezQ%40mail.gmail.com
>>>>>>  
>>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4LeSido9jqm%3DKBwkwCh7%3DQFJeORGata2ertcJChzh_ezQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "elixir-lang-core" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to elixir-lang-co...@googlegroups.com.
>>>>
>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/elixir-lang-core/b1519f28-ed13-43d1-88a5-64ba6d909e18n%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/elixir-lang-core/b1519f28-ed13-43d1-88a5-64ba6d909e18n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/0d6c0925-4394-43e3-a227-8b43ac10dc3an%40googlegroups.com.

Reply via email to