When "features" are added to the language, developers have to learn them. Either that or risk being relegated to second class status. That means more time learning about and testing and sorting out support for new features and less time actually developing an application. I like the idea of "keeping it small". To me, the ideal is a balance of simple and powerful.

-Terence Bandoian


On 3/13/2018 9:59 AM, Mark Miller wrote:


On Mon, Mar 12, 2018 at 11:33 PM, Jordan Harband <[email protected] <mailto:[email protected]>> wrote:

    As someone who does wear the shoes of a senior programmer
    responsible (along with my team) for overseeing a very very large
    web project, the super trivial and easy answer to this is "use a
    linter" - eslint can be configured to restrict any syntax you
    like, and since surely your CI process is already gating any
    merges, so too can the linter be used to gate merges, which will
    prevent anyone from any using any syntax you deem unclean.

    Tons of new syntax can be added to JavaScript forever and it need
    not have a single bit of impact on any of your project's code
    except a few lines in your eslint configuration.



Hi Jordan, while I agree with some of your overall point, I think this goes way too far. The larger the language, and the more diversity there is in which subset one shop chooses vs another, the more we loose the benefits of having many developers use a common language. No one shop writes all the JS they use. They use libraries written by others whose lint rules are different. They hire programmers from other shops. They read and post to stackOverflow, etc.

Much better is for the language to omit as much as possible, keeping it small. I am glad my "Tragedy of the Common Lisp" post is so widely cited and appreciated. Later in that thread, at https://esdiscuss.org/topic/the-tragedy-of-the-common-lisp-or-why-large-languages-explode-was-revive-let-blocks#content-22 I state a hierarchy of different parts of a language with different pressures towards minimality:


    the force of my [minimality] point gets weaker as we move from
    core language to standardizing libraries. The overall standard
    language can be seen as consisting of these major parts:

      * fundamental syntax -- the special forms that cannot faithfully
        be explained by local expansion to other syntax

      * semantic state -- the state than computation manipulates

      * kernel builtins -- built in library providing functionality
        that, if it were absent, could not be provided instead by user
        code.

      * intrinsics -- libraries that semantic state or kernel builtins
        depend on. For example, with Proxies, one might be able to do
        Array in user code. But other kernel builtins already have a
        dependency on Array specifically, giving it a privileged
        position over any replacement.

      * syntactic sugar -- the syntax that can be explained by local
        expansion to fundamental syntax.

      * global convenience libraries -- could be implemented by
        unprivileged user code, but given standard global naming paths
        in the primordial global namespace.

      * standard convenient library modules

    I have listed these in order, according to my sense of the costs
    of growth and the urgency for minimalism. For all of these we
    still need to exercise discipline. But it is only for the last one
    that we should consider growth of absolute size to be unbounded;
    restricting ourselves only to the rate of growth as we wait for
    candidates to prove themselves first by the de facto process.
    Ideally, TC39 should stop being the bottleneck on the last bullet
    anyway, as external de facto and de jure processes should be
    perfectly capable of independently arguing about and evolving
    standard convenience modules.



Although syntactic sugar is low on the list, it is still costly and best avoided when there's no compelling need. "Just use a linter" is not a panacea.


    On Mon, Mar 12, 2018 at 8:26 AM, Terence M. Bandoian
    <[email protected] <mailto:[email protected]>> wrote:

        In my opinion, one of the more significant advances in the C
        programming language was the increase in the maximum length of
        identifiers.  To me, this translates to "less cryptic is better".

        -Terence Bandoian



        On 3/11/2018 1:09 AM, Peter Jaszkowiak wrote:
        Personally, I'd push my subordinates to learn this new
        syntax. But if you dislike it, you can blacklist it in your
        linter: it's one of the main features of a linter.

        On Mar 10, 2018 23:37, "kai zhu" <[email protected]
        <mailto:[email protected]>> wrote:

            @peter, put yourself in the shoes of a senior-programmer
            responsible
            for overseeing an entire web-project.  the project is @ the
            integration-stage and you're busy debugging an async
            timeout/near-timeout bug preventing the frontend from
            talking to the
            backend (which btw, is one of the most common integration/qa
            javascript-bugs).

            while trying to figure out what's causing the
            timeout-issue, you're
            debugging i/o code with operators that look like this:

            ```
            const h = ? |> f |> g;
            ```

            maybe it is useful for the small-picture sub-problem you were
            originally trying to solve. but now that you're a
            bigger-fish with
            bigger-picture integration i/o issues, doesn't this look
            alot like
            technical-debt that no one will have a clue how to debug
            once a month
            or two has passed?

            -kai

            On 3/11/18, Peter Jaszkowiak <[email protected]
            <mailto:[email protected]>> wrote:
            > Oh please,
            >
            > This is an alternative syntax that's very useful for
            many people. If you
            > want too simplify syntax yourself you can use a linter
            to disable
            > alternatives.
            >
            > On Mar 10, 2018 22:56, "kai zhu" <[email protected]
            <mailto:[email protected]>> wrote:
            >
            >> my vote is for neither. exactly what industry painpoint or
            >> problem-space do either of these proposals solve?
            >>
            >> rather, they compound an existing industry painpoint;
            where
            >> ocd-programmers have problems in deciding-and-choosing
            which es6
            >> style/design-pattern to employ and stick with before
            coding even
            >> begins. many of us wish there were less choices, like
            python (and a
            >> more assertive tc39 that makes clear certain proposals are
            >> productivity-negative and not open for debate) so we
            could get on with
            >> the actual coding-part.
            >>
            >> from a senior-engineer / technical-manager
            perspective, it also
            >> doesn't help in managing an entire web-project;
            comprised of dozens of
            >> sub-components that you didn't all write yourself; and
            having to
            >> context-switch for each sub-component's quirky
            es6/es7/es8/es9
            >> style-guide/design-pattern.
            >>
            >> On 3/4/18, Isiah Meadows <[email protected]
            <mailto:[email protected]>> wrote:
            >> > Just thought I'd point out that the proposal itself
            entertains the
            >> > possibility of a corresponding composition proposal
            [1]. Also, in my
            >> > proposal, one of my "potential expansions" [2] would
            open a generic
            >> > door for "lifting" over a type, addressing the
            concern of
            >> > extensibility. (It's not ideal, and I just filed an
            issue in my repo
            >> > for that, but that's orthogonal.)
            >> >
            >> > [1]:
            https://github.com/tc39/proposal-pipeline-operator#
            <https://github.com/tc39/proposal-pipeline-operator#>
            >> related-proposals
            >> > [2]:
            >> >
            
https://github.com/isiahmeadows/function-composition-proposal#possible-
            
<https://github.com/isiahmeadows/function-composition-proposal#possible->
            >> expansions
            >> >
            >> > -----
            >> >
            >> > Isiah Meadows
            >> > [email protected] <mailto:[email protected]>
            >> >
            >> > Looking for web consulting? Or a new website?
            >> > Send me an email and we can get started.
            >> > www.isiahmeadows.com <http://www.isiahmeadows.com>
            >> >
            >> >
            >> > On Sat, Feb 24, 2018 at 5:40 AM, Naveen Chawla
            <[email protected] <mailto:[email protected]>>
            >> > wrote:
            >> >> Although it doesn't allow composition with
            generator functions like
            >> >> the
            >> >> composition proposal does, otherwise it's a pretty
            good solution.
            >> >>
            >> >> My only concern with pipeline is that since it
            offers a different way
            >> >> of
            >> >> calling functions than the `()` syntax, it can lead
            to mixed and hence
            >> >> slightly more confusing code when both `()` and
            `|>` are used. For
            >> example
            >> >> multi arg and no-arg functions would still use
            `()`, and single arg
            >> >> functions may or may not use `|>` depending on
            whether or not they may
            >> >> prospectively use a pipeline. The composition
            operator doesn't
            >> >> supersede
            >> >> the
            >> >> `()` syntax in any context, and so it could be
            argued it would lead to
            >> >> more
            >> >> consistent, more readable code.
            >> >>
            >> >> On Sat, 24 Feb 2018 at 15:02 Peter Jaszkowiak
            <[email protected] <mailto:[email protected]>>
            >> wrote:
            >> >>>
            >> >>> I'd like to point out the partial application
            operator:
            >> >>>
            https://github.com/tc39/proposal-partial-application
            <https://github.com/tc39/proposal-partial-application>
            >> >>>
            >> >>> Sounds like the combination of pipeline + partial
            application would
            >> >>> result
            >> >>> in what is essentially the same as function
            composition operator:
            >> >>>
            >> >>> ```
            >> >>> const h = ? |> f |> g;
            >> >>> ```
            >> >>>
            >> >>> Which results in `h` being the composition `g • f`.
            >> >>>
            >> >>>
            >> >>> On Feb 24, 2018 02:21, "Naveen Chawla"
            <[email protected] <mailto:[email protected]>> wrote:
            >> >>>
            >> >>> That could be a problem for readability.
            >> >>> I agree with the rest of what you said.
            >> >>>
            >> >>>
            >> >>> On Sat, 24 Feb 2018 at 11:16 Viktor Kronvall <
            >> [email protected]
            <mailto:[email protected]>>
            >> >>> wrote:
            >> >>>>
            >> >>>> I don’t know the implications but I could easily
            imagine the
            >> >>>> pipeline
            >> >>>> proposal being extended to not taking any input
            on the left hand
            >> >>>> side
            >> >>>> and
            >> >>>> effectively represent composition in the opposite
            direction.
            >> >>>>
            >> >>>> For example:
            >> >>>> ```
            >> >>>> let h = |> f |> g
            >> >>>> h(2) //g(f(2))
            >> >>>> ```
            >> >>>>
            >> >>>> That said, the point holds for the proposal in
            its current state.
            >> Being
            >> >>>> able to compose functions
            >> >>>> leads to much more expressivity than if you have
            >> >>>> to call the pipeline (and collapse) where it is
            defined.
            >> >>>> 2018年2月24日(土) 14:32 Naveen Chawla
            <[email protected] <mailto:[email protected]>>:
            >> >>>>>
            >> >>>>> The function composition operator composes
            function pipelines into
            >> >>>>> functions for later use and/or further
            composition. Those functions
            >> >>>>> still
            >> >>>>> need to be called via the existing `()` syntax,
            so it doesn't offer
            >> >>>>> a
            >> >>>>> different way of calling functions as such.
            >> >>>>>
            >> >>>>> The function pipeline operator calls the
            function pipeline
            >> immediately,
            >> >>>>> so it is really only a different way of calling
            functions.
            >> >>>>>
            >> >>>>> On Fri, 23 Feb 2018 at 12:37 Jordan Harband
            <[email protected] <mailto:[email protected]>>
            >> wrote:
            >> >>>>>>
            >> >>>>>> How is either operator not "a different way of
            calling functions"?
            >> >>>>>>
            >> >>>>>> On Thu, Feb 22, 2018 at 8:34 PM, Naveen Chawla <
            >> [email protected] <mailto:[email protected]>>
            >> >>>>>> wrote:
            >> >>>>>>>
            >> >>>>>>> I was just thinking about the relative merits
            and coexistence (or
            >> >>>>>>> not)
            >> >>>>>>> of function composition operator and function
            pipeline operator
            >> >>>>>>> features:
            >> >>>>>>>
            >> >>>>>>> e.g.
            >> >>>>>>>
            >> >>>>>>>
            https://github.com/TheNavigateur/proposal-pipeline-operator-for-
            <https://github.com/TheNavigateur/proposal-pipeline-operator-for->
            >> function-composition
            >> >>>>>>>
            https://github.com/tc39/proposal-pipeline-operator
            <https://github.com/tc39/proposal-pipeline-operator>
            >> >>>>>>>
            >> >>>>>>> They can of course co-exist, but there is
            overlap only in the
            >> respect
            >> >>>>>>> that both allow function pipelines to be
            called from left to
            >> >>>>>>> right
            >> >>>>>>> (except
            >> >>>>>>> the input parameter in the case of the
            composition feature, which
            >> >>>>>>> requires
            >> >>>>>>> existing bracket syntax to be used to call
            it). If one were to be
            >> >>>>>>> chosen,
            >> >>>>>>> would say that a function composition operator
            adds a whole new
            >> >>>>>>> dimension of
            >> >>>>>>> expressive power to the language, whereas a
            pipeline operator
            >> >>>>>>> only
            >> >>>>>>> offers a
            >> >>>>>>> different way of calling functions.
            >> >>>>>>>
            >> >>>>>>> I was wondering about all of your thoughts
            about whether you'd
            >> prefer
            >> >>>>>>> only the pipeline operator, only the
            composition operator, or
            >> >>>>>>> both,
            >> >>>>>>> or
            >> >>>>>>> neither to be added to the language (these are
            pretty much all
            >> >>>>>>> the
            >> >>>>>>> possibilities), and why.
            >> >>>>>>>
            >> >>>>>>> _______________________________________________
            >> >>>>>>> es-discuss mailing list
            >> >>>>>>> [email protected]
            <mailto:[email protected]>
            >> >>>>>>> https://mail.mozilla.org/listinfo/es-discuss
            <https://mail.mozilla.org/listinfo/es-discuss>
            >> >>>>>>>
            >> >>>>>>
            >> >>>>> _______________________________________________
            >> >>>>> es-discuss mailing list
            >> >>>>> [email protected]
            <mailto:[email protected]>
            >> >>>>> https://mail.mozilla.org/listinfo/es-discuss
            <https://mail.mozilla.org/listinfo/es-discuss>
            >> >>>
            >> >>>
            >> >>> _______________________________________________
            >> >>> es-discuss mailing list
            >> >>> [email protected] <mailto:[email protected]>
            >> >>> https://mail.mozilla.org/listinfo/es-discuss
            <https://mail.mozilla.org/listinfo/es-discuss>
            >> >>>
            >> >>>
            >> >>> _______________________________________________
            >> >>> es-discuss mailing list
            >> >>> [email protected] <mailto:[email protected]>
            >> >>> https://mail.mozilla.org/listinfo/es-discuss
            <https://mail.mozilla.org/listinfo/es-discuss>
            >> >>
            >> >>
            >> >> _______________________________________________
            >> >> es-discuss mailing list
            >> >> [email protected] <mailto:[email protected]>
            >> >> https://mail.mozilla.org/listinfo/es-discuss
            <https://mail.mozilla.org/listinfo/es-discuss>
            >> >>
            >> > _______________________________________________
            >> > es-discuss mailing list
            >> > [email protected] <mailto:[email protected]>
            >> > https://mail.mozilla.org/listinfo/es-discuss
            <https://mail.mozilla.org/listinfo/es-discuss>
            >> >
            >> _______________________________________________
            >> es-discuss mailing list
            >> [email protected] <mailto:[email protected]>
            >> https://mail.mozilla.org/listinfo/es-discuss
            <https://mail.mozilla.org/listinfo/es-discuss>
            >>
            >



        _______________________________________________
        es-discuss mailing list
        [email protected] <mailto:[email protected]>
        https://mail.mozilla.org/listinfo/es-discuss
        <https://mail.mozilla.org/listinfo/es-discuss>



    _______________________________________________
    es-discuss mailing list
    [email protected] <mailto:[email protected]>
    https://mail.mozilla.org/listinfo/es-discuss
    <https://mail.mozilla.org/listinfo/es-discuss>




--
  Cheers,
  --MarkM

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to