Content deleted Content added
m Maintain {{WPBS}}: 3 WikiProject templates. Keep majority rating "Start" in {{WPBS}}. Remove 3 same ratings as {{WPBS}} in {{WikiProject Computing}}, {{WikiProject Computer science}}, {{WikiProject Software}}. Tag: |
|||
(14 intermediate revisions by 12 users not shown) | |||
Line 1:
{{Talk header}}
{{WikiProject banner shell|class=Start|
{{WikiProject Computing|importance=Low}}
{{WikiProject Computer science|importance=Mid}}
{{WikiProject Software|importance=Low}}
}}
==Origin of the concept==
Line 44 ⟶ 51:
(excluding languages which ''can'' implement generator functionality (via more general support for continuations or coroutines), but don't really support them as a native idiom)
*[[Aldor]] [http://www.aldor.org/docs/HTML/chap9.html]
*[[Icon programming language|Icon]] (already done)
*[[Panacea programming language|Panacea]] (mentioned in [[Randall Hyde]]'s ''Art of Assembly Language'', [http://webster.cs.ucr.edu/AoA/DOS/ch12/CH12-6.html Ch. 12.5 Iterators])
*[[Unicon programming language|Unicon]]
*[[Raku (programming language)|Raku]] ... lazy lists?
== Generators versus continuations ==
Line 112 ⟶ 121:
The Generator expression example for Icon can be simplified and does not require a co-expression.
<
local j
every j := (|seq(0) \ 20) ^2 do # Produced the first 20 squares
write(j)
</syntaxhighlight>
If the idea is to demonstrate really what Icon can do in terms of using generators outside a loop construct, the following may be a better example
<
# find the first matching element
a := [1,2,3,4]
b := [5,6,2,7]
c := ( !a = !b ) | &null # assign first matching element, or set to &null
</syntaxhighlight>
[[User:CheyenneWills|CheyenneWills]] ([[User talk:CheyenneWills|talk]]) 20:01, 16 June 2010 (UTC)
Line 275 ⟶ 284:
:Would that work? We could of course try to invent a broader-scoped definition, but I'm hesitant to do so. -- [[User:Dmeranda|Dmeranda]] 21:39, 24 April 2007 (UTC)
===Fuzzy or Hairy?===
The definition at the very start of the article is very hard to parse. It overuses analogy and is quite confusing. Perhaps later in the intro section it might be comprehensible, but at 0300 in the morning w/ a non-working GRUB2 EFI configuration hanging over my head, I just ditched trying to read the article and leave this short note waiting for the rest of my update to download.
The definition/intro is ambiguous and seems to muddle up the notion of what is being iterated, what the iterator is, and how it is implemented. Try to stay at a very non-computer science language level with the initial definition or include the WP article link for every bit of jargon you need to be clear. You could, however, start by saying that a generator is specific case of an [[Iterator]]... However, nearly every CS topic has, someplace, a fairly clear definition using basic mathematics/logic terms that most reasonable educated individuals without a degree in CS can understand.
What you should not say is that it is like an array, since it isn't anything like an array. You might use a generator to access values in an array, but it isn't the array. You can use a bucket to empty a bathtub full of soapy water, but don't confuse the bucket with the bathwater (and for heaven's sake, take the baby out first!).
Sorry, but most of my programming experience is with Java (w/o generators as a built in, but I am sure I have had to write thousands of them w/o ever knowing what the hell I was doing), or I would try my hand at a new intro. <!-- Template:Unsigned IP --><small class="autosigned">— Preceding [[Wikipedia:Signatures|unsigned]] comment added by [[Special:Contributions/75.73.1.89|75.73.1.89]] ([[User talk:75.73.1.89#top|talk]]) 09:16, 13 January 2017 (UTC)</small> <!--Autosigned by SineBot-->
== Needs verification ==
Line 434 ⟶ 452:
--[[User:Eboyjr|Eboyjr]] ([[User talk:Eboyjr|talk]]) 17:02, 16 June 2011 (UTC)
== Needs common example; Should be an infinite sequence ==
(Disclaimer: my view of "what a generator is" and "what they are good for" comes chiefly from my experience with Python.)
The article -- and its examples -- are very scattered. They even include examples of "generating the numbers from 10 to 1". To someone who doesn't understand the power of or purpose of generators, this will be a highly deluminating example, as they could [correctly] disparage the whole idea: "why wouldn't I just do that in a loop, decrementing a counter?"
My suggestions:
* Point out that generators are really good for generating INFINITE sequences... just a little bit at a time, as the "consumer" needs the "next" item.
* Point out that most useful generators need to store a complicated state. (It is not just a simple unary test like "is this number even", which -- again -- can be accomplished declaratively and used as a test in a loop.)
* Point out that languages that "support generators" do so by giving the programmer a simple way to do BOTH of those: generate "infinite sequences incrementally" and "save their state between calls".
* Pick a simple example that uses BOTH of those features. Such as: calculating the Fibonacci sequence. Let's see a Fib() generator in all the languages discussed.
* Point out that recursion and generation can each be used on certain calculations, but they are NOT synonymous.
* Compare and contrast a generator with a memoized recursive routine. (You can quickly calculate Fib(10000000) with a memoized recursive Fib, at the expense of the memory for the 1000000 prior entries. However, with a generator-based Fib(), constant memory (just two state variables) will serve to walk through all the values of Fib forever.)
If I have time someday, I may attempt to update the article with some of these suggestions.
[[User:Dharasty|Dharasty]] ([[User talk:Dharasty|talk]]) 13:10, 3 May 2012 (UTC)
== Dates are incorrect. Fix or maybe even remove? ==
The dates in this refer to the date the programming language first appeared, which is often *not* the same date as when generators appeared for this language.
For example if you would glance at this article, you would get the impression that:
* Generators were first introduced in Lisp in 1958 (not so, generators are a recent addition to Lisp, and AFAIK not even standardized in Common Lisp)
* PHP has generators since 1995 (It's implemented and available in the `latest source', but available in a general release yet).
etc... IMHO this is rather misleading ... Someone should fix the dates to reflect whenever this feature was added to a language (if it wasn't there from the start) or the dates should just be removed.
[[User:Carpetsmoker|Carpetsmoker]] ([[User talk:Carpetsmoker|talk]]) 10:00, 11 March 2013 (UTC)
Just passing by, but came here to write this exact same thing - The Ruby section says 1995 but also says "starting from version 1.9" which was released in 2007. [[User:Galestar|Galestar]] ([[User talk:Galestar|talk]]) 17:21, 22 April 2013 (UTC)
Corrected the date for Python. [[User:Tlesher|tlesher]] ([[User talk:Tlesher|talk]]) 20:13, 19 August 2013 (UTC)
|