Back in the day, in the dojotookit we used a combination of feature
detection and a require.js alike module system to build feature-specific
sources. So rather than magic comments with preprocessor meaning, you got
real conditionals in the code that were optimized away given a feature-set
profile at build-time. In practice this was mostly done at a file/module
level though - very similar to what Marcus proposes.



On Wed, Nov 25, 2015 at 1:09 PM, Marcus Cavanaugh <m...@mcav.com> wrote:

> On Wed, Nov 25, 2015 at 12:51 PM, Justin D'Arcangelo <
> jdarcang...@mozilla.com> wrote:
>
>> There are cases where we need to include certain files **at build time**
>> conditionally.
>>
>
> That's a perfect match for the "build-step is a static site generator"
> part. At the file level, the build system can alter paths and resources,
> just like a web server could serve different content for different devices.
> I think most of our existing needs would fit nicely with this approach.
>
> There's an argument to be made for within-file substitutions in some
> cases, such as optimizing HTML includes in "index.html". But I don't think
> we should extend that need to including a full-blown conditional
> preprocessor running through all HTML and JS files.
>
> (forgot reply-all, sorry justin)
>
> On Wed, Nov 25, 2015 at 12:51 PM, Justin D'Arcangelo <
> jdarcang...@mozilla.com> wrote:
>
>> There are cases where we need to include certain files **at build time**
>> conditionally. Of course we should feature-detect at runtime when we can,
>> but there are many instances when we need to branch code paths
>> conditionally when building. Especially when we try to optimize our
>> application bundles and exclude resources that may not be needed for
>> certain devices, we similarly may need to include certain stylesheets,
>> scripts, etc. based on the device profile as well.
>>
>> -Justin
>>
>>
>> On Nov 25, 2015, at 3:36 PM, Marcus Cavanaugh <m...@mcav.com> wrote:
>>
>> Using a conditional preprocessor is an admission that the Web's support
>> for conditionals is not enough. The Web already supports IFDEF:
>>
>> if (window.feature) {   }
>>
>> When feature detection isn't enough, hypermedia already has an answer. No
>> need for a module system. Our build system is a glorified static site
>> generator, positioned exceptionally well to write files based on build
>> flags:
>>
>> <script src="thing-for-specific-device.js"></script>
>> <script>
>>   Thing.doSomething(); // no feature detection conditionals!
>> </script>
>>
>> Conditional preprocessors turn against many of the web's foundational
>> values (view-source transparency, hypermedia, open-source). The Web's
>> solution is already simple, sufficient, and widely-understood.
>>
>> From a grep of Gaia, IFDEF_FIREFOX_SYNC seems to be the only current use
>> case, which seems like a perfect candidate for a more webby approach. Less
>> magic, more open.
>>
>>
>>
>> On Wed, Nov 25, 2015 at 10:15 AM, Eli Perelman <eperel...@mozilla.com>
>> wrote:
>>
>>> I'd have to agree with the sentiments against C-style pre-processing.
>>> Anything that breaks linting or an IDE's static analysis would make
>>> development a pain.
>>>
>>> Eli Perelman
>>>
>>> On Wed, Nov 25, 2015 at 11:55 AM, Sam Giles <sgi...@mozilla.com> wrote:
>>>
>>>> I was surprised having worked in m-c that Gaia wasn't using the C
>>>> pre-processor fwiw.
>>>>
>>>> But I think the fact it will break syntax is a show stopper - unless we
>>>> pre-process before linting - but the problem is deeper than that, I think
>>>> the approachability of the code base will be affected by this.  Not because
>>>> the C pre-processor is obscure, I don't think it is at all, but because the
>>>> syntax is just different to what you might expect.  I'd also be worried
>>>> about how easy it is to set up the toolchain for Windows developers.
>>>>
>>>> I don't see what the problem with the third party pre-processor
>>>> proposed is, it at least covers what we already have in a better way and
>>>> despite encasing the conditions in comments, is practically offering the
>>>> same as the C pre-processor–without macros 🙌.
>>>>
>>>> Sam
>>>>
>>>> On Wed, Nov 25, 2015 at 5:31 PM, David Flanagan <dflana...@mozilla.com>
>>>> wrote:
>>>>
>>>>> If there is a pre-processing system that is already familiar to the
>>>>> majority of web developers, I'd buy this argument. But I don't think there
>>>>> is. So most web developers who encounter preprocessing in FirefoxOS will
>>>>> have to learn our system from scratch. If that is true, then I'd favor the
>>>>> solution with 40+ years of use over something that someone just made up 
>>>>> and
>>>>> posted on github.  And if `#ifdef FOO` scares away contributors then I
>>>>> don't see how `<!-- @ifdef FOO -->` is any less scary!  Its not like I'm
>>>>> suggesting we use m4 here.
>>>>>
>>>>> If the argument is that we need a preprocessor that we can run in node
>>>>> without invoking the shell, then maybe we can find a cpp implementation in
>>>>> node.
>>>>>
>>>>> Maybe we want a syntax that uses comments so that the code remains
>>>>> valid even before preprocessing so that linters and other tools don't get
>>>>> confused. That seems like a reason that we need something other than cpp.
>>>>>
>>>>> Greg thinks that we need a preprocessor that can do template expansion
>>>>> and looping. I find that surprising and a little scary, but I don't know
>>>>> what the use case is.
>>>>>
>>>>> Anyway, my point is that the C preprocessor is venerable and well
>>>>> understood by generations of programmers. IT seems to me that any
>>>>> discussion of "what preprocessor should we use" should begin with the
>>>>> question "can we just use cpp?"
>>>>>
>>>>>   David
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Nov 25, 2015 at 8:14 AM, Justin D'Arcangelo <
>>>>> jdarcang...@mozilla.com> wrote:
>>>>>
>>>>>> We should use a preprocessor that is familiar to web/JS devs. We're
>>>>>> trying to grow contributors, not scare them away.
>>>>>>
>>>>>> -Justin
>>>>>>
>>>>>>
>>>>>> On Nov 25, 2015, at 11:08 AM, David Flanagan <dflana...@mozilla.com>
>>>>>> wrote:
>>>>>>
>>>>>> Why can't we use the standard C preprocessor (with #if, #ifdef,
>>>>>> #define, and even #include) for this instead of adopting a new 
>>>>>> technology?
>>>>>>
>>>>>>   David
>>>>>>
>>>>>> P.S. When we do adopt a preprocessor solution, I'm interested to
>>>>>> explore whether I can use it to include unit tests in the same file as 
>>>>>> the
>>>>>> code being tested.
>>>>>>
>>>>>> On Tue, Nov 24, 2015 at 9:54 PM, Fred Lin <f...@mozilla.com> wrote:
>>>>>>
>>>>>>> Seems we have kind of common agreement to reuse the third-party
>>>>>>> preprocess library[1].
>>>>>>>
>>>>>>> Francisco has done some experiment port, and found the library has
>>>>>>> some node dependency.
>>>>>>> It also brings the request to have the node based build script.
>>>>>>>
>>>>>>>
>>>>>>> 1. https://github.com/jsoverson/preprocess
>>>>>>> <https://github.com/jsoverson/preprocess>
>>>>>>>
>>>>>>>
>>>>>>> regards
>>>>>>> --
>>>>>>> Fred
>>>>>>>
>>>>>>> On Wed, Nov 18, 2015 at 10:40 PM, Francisco Jordano <
>>>>>>> fjord...@mozilla.com> wrote:
>>>>>>>
>>>>>>>> +1 to this,
>>>>>>>>
>>>>>>>> several reasons to do it:
>>>>>>>>
>>>>>>>> - It support multiple languages (javascript, html, css, c, etc)
>>>>>>>> - You can combine as many options as you want.
>>>>>>>> - The options have value, which could add a complete new set of
>>>>>>>> cases, not just the binary one.
>>>>>>>>
>>>>>>>> Cheers,
>>>>>>>> f
>>>>>>>>
>>>>>>>> On 18 November 2015 at 14:07, Fred Lin <f...@mozilla.com> wrote:
>>>>>>>>
>>>>>>>>> In Gaia currently we have preprocessor.js[1] that support some
>>>>>>>>> syntax[2] to exclude/include HTML/JS/CSS in build time.
>>>>>>>>>
>>>>>>>>> With this tool, developer can exclude files, code sections from
>>>>>>>>> origin HTML/JS/CSS files to shape the source to fit more kinds of 
>>>>>>>>> devices.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> html code....
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> <!--IFDEF_FIREFOX_SYNC
>>>>>>>>> html code section
>>>>>>>>> ENDIF_SAMPLE-->
>>>>>>>>>
>>>>>>>>> The consideration during review is we can't put html related
>>>>>>>>> comments inside of <!-- -->, which make bad patten match and also 
>>>>>>>>> make the
>>>>>>>>> editor cry.
>>>>>>>>>
>>>>>>>>> As my experience about other code mangler/optimizer, some of them
>>>>>>>>> support Ruby like start/end syntax,  such as:
>>>>>>>>>
>>>>>>>>> <!-- @if NODE_ENV='production' --><script 
>>>>>>>>> src="some/production/lib/like/analytics.js"></script><!-- @endif -->
>>>>>>>>>
>>>>>>>>> Which wrap target code section with start comment and end comment,
>>>>>>>>> therefore the origin source is still viewable in plain HTML. May we 
>>>>>>>>> have
>>>>>>>>> something similar so we won't left orphan comments in HTML file?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Another thought is since we can use npm modules now (Not 100%
>>>>>>>>> sure), why we don't reuse existing preprocessor[3] and send PR to 
>>>>>>>>> them to
>>>>>>>>> leverage efforts from outside talents?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> 1.
>>>>>>>>> https://github.com/mozilla-b2g/gaia/blob/master/build/preprocessor.js
>>>>>>>>> 2.
>>>>>>>>> https://github.com/mozilla-b2g/gaia/blob/master/apps/settings/elements/root.html#L140
>>>>>>>>> 3. https://github.com/jsoverson/preprocess
>>>>>>>>>
>>>>>>>>> regards
>>>>>>>>> --
>>>>>>>>> Fred
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> dev-fxos mailing list
>>>>>>> dev-fxos@lists.mozilla.org
>>>>>>> https://lists.mozilla.org/listinfo/dev-fxos
>>>>>>>
>>>>>>>
>>>>>> _______________________________________________
>>>>>> dev-fxos mailing list
>>>>>> dev-fxos@lists.mozilla.org
>>>>>> https://lists.mozilla.org/listinfo/dev-fxos
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> dev-fxos mailing list
>>>>> dev-fxos@lists.mozilla.org
>>>>> https://lists.mozilla.org/listinfo/dev-fxos
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> dev-fxos mailing list
>>>> dev-fxos@lists.mozilla.org
>>>> https://lists.mozilla.org/listinfo/dev-fxos
>>>>
>>>>
>>>
>>> _______________________________________________
>>> dev-fxos mailing list
>>> dev-fxos@lists.mozilla.org
>>> https://lists.mozilla.org/listinfo/dev-fxos
>>>
>>>
>>
>>
>
> _______________________________________________
> dev-fxos mailing list
> dev-fxos@lists.mozilla.org
> https://lists.mozilla.org/listinfo/dev-fxos
>
>
_______________________________________________
dev-fxos mailing list
dev-fxos@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-fxos

Reply via email to