Is een invoerloos programma overbodig?

Zijn er nuttige programma's die geen input gebruiken zoals: De toetsenbordinvoer van een gebruiker; een onderbreking van een klok; data van een andere server etc.

Een programma dat vooraf gedefinieerde gegevens heeft berekend/afgedrukt, kan in een bestand worden omgezet, toch?

6
Een dodemansknop die geen configuratie vereist. Nou, ik denk dat dat een timer als input zou hebben, hoewel je een timer zou kunnen benaderen door in een lus te zitten. Echt, elk programma waar je de invoergegevens hardgooit.
toegevoegd de auteur sgwill, de bron
In de eenvoudigste vorm, een dobbelstenen roller. Ze hebben meestal gebruikersinvoer die bepalen wat te rollen, maar je zou er zeker een kunnen hebben die dat niet doet, of je zou er een kunnen hebben waar de invoer op de commandoregel staat en je zou het kunnen noemen met een batchbestand dat vooraf gedefinieerde invoer leverde - de batchbestand zou dus een programma worden met nulinvoer.
toegevoegd de auteur Sander Rijken, de bron
Wat dacht je van een programma dat de cijfers van pi berekent? Wat dacht je van een programma dat bedoeld is om het antwoord te berekenen voor sommige wiskundige problemen, waarbij de "input" hardgecodeerd is in het programma zelf (tijdens de programmeer- of compilatiefase)?
toegevoegd de auteur Ryan Cox, de bron
Dus, is het enige voorbeeld van een wiskundige benadering?
toegevoegd de auteur cmrhema, de bron
Het gebruik van het woord "nuttig" bij vraagdetails duidt dit aan.
toegevoegd de auteur cmrhema, de bron
" ... invoer van een gebruiker, omgeving enz. zoals sleutelinvoer of de huidige tijd [of een server]"
toegevoegd de auteur cmrhema, de bron
Deze vraag werd op onterechte wijze in de wacht gezet.
toegevoegd de auteur cmrhema, de bron
Het antwoord is ja (1) :-)
toegevoegd de auteur Schroeder, de bron
Als u "overbodig" zegt, bedoelt u dan echt "nutteloos"?
toegevoegd de auteur whatsisname, de bron
Inputloze programma's kunnen nuttige neveneffecten hebben. Een invoerloos puur -programma kan waarschijnlijk worden omgezet naar een plat bestand.
toegevoegd de auteur closeparen, de bron
Met "invoer", dienen de gegevens van de server ook als invoer? Omdat ik denk aan een pure informatie-app die geen gebruikersinteractie nodig heeft, maar de gegevens worden geserveerd vanaf de server om deze beter beheersbaar te maken.
toegevoegd de auteur Suraj, de bron

7 antwoord

Een voorbeeld waarbij een dergelijk programma nuttig kan zijn, is wanneer het programma veel korter is dan de uitvoer ervan. Dat betekent dat het programma in feite een gecomprimeerde versie van zijn uitvoer is.

Enkele praktische use cases:

  • Zelfuitpakkende zip-bestanden
  • Programma's waarvan de uitvoer feitelijk oneindig is, zoals yes (1) die herhaaldelijk "y" uitvoert. (Dank aan blrfl voor het vermelden van dit in een opmerking.)

The theoretical term for this concept (when the output is finite) is Kolmogorov complexity. From Wikipedia:

Beschouw de volgende twee reeksen van 32 kleine letters en cijfers:

  abababababababababababababababab

4c1j5b2p0cv4w1x8rx2y39umgw5q85s7
 
     

De eerste reeks heeft een korte Engelstalige beschrijving, namelijk "ab   16 keer ", bestaande uit 11 tekens. De tweede heeft geen   duidelijke eenvoudige beschrijving (met dezelfde tekenset) anders dan   de string zelf opschrijven, die uit 32 tekens bestaat.

     

Formeler is de complexiteit van een tekenreeks de lengte van de tekenreeks   de kortst mogelijke beschrijving van de string in een aantal vaste universele   beschrijving taal [...].

(Opmerking: deze vaste universele beschrijvingstaal is meestal een Turing-complete programmeertaal.)

9
toegevoegd

Veel systeemhulpprogramma's. Het afsluiten, rebooten, uitschakelen commando's.

Er zijn nog andere waar ik nu niet aan kan denken, dat weet ik zeker.

4
toegevoegd

Ja, eenheidstests (minstens fatsoenlijk geschreven).

Bewerk

To be less glib: There are a lot of different unit test setups but they effectively boil down to the following, the code base under test is treated as a library and your unit tests are essentially one big program that when run prints out something like

Test foo passed
Test bar passed
Test baz failed
     ...Details...
Test quux passed

Als uw unit tests deterministisch zijn (wat ze in het algemeen zouden moeten zijn als debuggen, zijn niet-deterministische testen de ergste), dit zal gewoon een constante string zijn.

Nu je eenmaal in de echte wereld bent, is de grens hier echt wazig, maar ik denk dat het algemene punt dat een invoerloos programma een goede manier is om iets over een andere set broncode te leren.

3
toegevoegd
Ik ben in de war; zal een eenheidstest geen testcode testen die je hebt geschreven, waardoor het een invoer is?
toegevoegd de auteur cmrhema, de bron
Ik dacht dat eenheidstests code als input namen om te testen?
toegevoegd de auteur cmrhema, de bron
@Tobi goed, nee ... Eenheidstest leest de implementatie niet als een invoer- of milieuresource, ze include de implementatie tijdens de compilatie. Om mooie, interactieve resultaten te genereren, werkt de testsuite meestal samen met de omgeving (zoals een IDE of een testrunner). Maar dat is echt optioneel. Het kan net zo goed een binair bestand zijn dat op zichzelf wordt uitgevoerd en de resultaten naar standaardwaarden dumpt. En in feite heb ik zelf een aantal testlopers van die aard gecocked ...
toegevoegd de auteur svidgen, de bron
@Tobi, hopelijk brengt de bewerking het punt naar voren.
toegevoegd de auteur walpen, de bron

Een programma dat de volgorde van priemgetallen berekent.

1
toegevoegd

Hangt af van wat je bedoelt met overbodig. Hier zijn een paar die ik in een paar minuten zou kunnen bedenken:

  • Een programma dat muziek of kunst maakt

  • Een programma dat danst of instructies stuurt naar een robot die danst

  • Een programma dat een virtuele samenleving modelleert en de verwachte levensduur onder wisselende omstandigheden weergeeft

  • Een radiobaken

Zijn die dingen overbodig?

1
toegevoegd
# 1: Wat betekent "creëert muziek of kunst"? Randomly = Seeded door een input # 2: Dat zou een input zijn in een tolk die de robotbeweging regelt. # 3: Een ingevoerde samenleving of een willekeurig gegenereerde samenleving? De laatste zou worden gezaaid # 4: Wat bedoel je met "radio beacon"? ..
toegevoegd de auteur cmrhema, de bron
Al deze dingen zullen input hebben, zelfs als het afkomstig is van een willekeurig zaadje.
toegevoegd de auteur RubberDuck, de bron
Niet correct; geen van de items die ik heb vermeld vereist in zet, zoals in, iets dat van buiten het systeem doorloopt naar binnen in het systeem. En ik weet niet waar je het idee vandaan hebt dat willekeur een vereiste is voor een ervan.
toegevoegd de auteur John Wu, de bron
# 1 Ik bedoel letterlijk componeert een stuk muziek of tekent een foto. Het hoeft geen erg goede muziek te zijn of een heel interessante foto. Noch willekeur, noch originaliteit is een vereiste. # 2. Nee, het zou een out worden aan een tolk die de robotbeweging regelt. # 3. Geen van beide; een samenleving die zichzelf bepaalt, beginnend met een basisinitiële conditie en vervolgens evolueert. # 4. Een voortdurende transmissie in het elektromagnetische spectrum, gemoduleerd door de uitvoer van ons programma, mogelijk in overeenstemming met een vooraf bepaald patroon.
toegevoegd de auteur John Wu, de bron

Programma's zoals dit doen zich soms voor en zijn nuttig om een ​​specifieke vraag te beantwoorden door enkele berekeningen uit te voeren. Maar zodra het programma correct werkt en het resultaat oplevert, is het niet meer nodig om het uit te voeren.

Als voorbeeld heb ik ooit een dergelijk programma geschreven om een ​​reeks matrices te produceren die Euler-hoeken naar een orthogonale matrix converteren voor alle mogelijke Euler-hoeksystemen. De input werd hoofdzakelijk binnen het programma gegenereerd (een reeks permutaties). Het programma vermenigvuldigde symbolisch 3 of 2 matrices samen voor elk mogelijk Euler-hoeksysteem en produceerde een TeX-bestand met de resulterende matrices. Het was minder werk en minder foutgevoelig om het programma te schrijven dan om met de hand te rekenen. Er was echter geen input vanuit de omgeving. Je hebt net het commando uitgevoerd en het heeft het bestand weggeschreven. En toen ik eenmaal tevreden was dat het correct werkte, heb ik het sindsdien niet meer gebruikt.

1
toegevoegd

Een programma dat absoluut geen input van een gebruiker of de omgeving in beslag neemt, geeft een zeer voorspelbaar resultaat. Als het resultaat alleen gegevens zijn, zou u het inderdaad in een bestand kunnen opslaan in plaats van het programma steeds opnieuw uit te voeren. Het zou een constante verspreiding naar het hoogste niveau zijn.

Niet voorspelbaar betekent echter niet hetzelfde. Een programma zonder enige invoer zou bij elke berekening toch verschillende resultaten kunnen opleveren. Het typische voorbeeld is een simulatietoepassing met willekeurige getallen. Dit geval is niettemin een grens, omdat je zou kunnen stellen dat de generator van willekeurige getallen (of zijn zaad) een speciale vorm van input van de omgeving is.

Een programma kan echter bijwerkingen hebben. Het kan bijvoorbeeld sommige leds (of verkeerslichten) in- en uitschakelen. Of toon een aftelling in een venster. Dergelijke "bijwerkingen" zijn mogelijk niet vervangbaar door een niet-berekend resultaat in een bestand. Dus nee: zelfs zonder enige input is een programma niet noodzakelijk "overbodig"!

0
toegevoegd
Yikes, ik denk dat iedereen hier de basissysteemtheorie niet lukte. U kunt deterministische (niet-willekeurige) uitvoer hebben die niet voorspelbaar is. Vgl chaos theorie .
toegevoegd de auteur John Wu, de bron
Hier is het schoolvoorbeeld. Geen externe systemen nodig. var x = 0,002; voor (int t = 0; t Kijk of je x voor een gegeven t kunt voorspellen.
toegevoegd de auteur John Wu, de bron
Dus je hebt nog nooit twee keer naar hetzelfde nummer geluisterd?
toegevoegd de auteur John Wu, de bron
@JohnWu "zeer afhankelijk van de beginvoorwaarden" betekent het verkrijgen van een soort van invoer vanuit de omgeving (bijvoorbeeld de staat van niet-geïnitialiseerde variabelen). Als het programma deel uitmaakt van een groter dynamisch systeem, zou het moeten communiceren met andere programma's om chaotische resultaten te genereren: IPC is ook een vorm van invoer.
toegevoegd de auteur Christophe, de bron
@JohnWu sorry als dit niet duidelijk is in mijn antwoord: mijn punt is dat op dezelfde computer, dit soort berekening bij elke uitvoering hetzelfde resultaat zal opleveren. Dus ik kan het één doen, de resultaten noteren en de opgenomen resultaten achteraf gebruiken (zo interpreteerde ik het dubbelzinnige "overbodig" in de vraag). Natuurlijk, als het de bedoeling is om ongeduld en enthousiasme te creëren voor een gebruiker die naar de resultaten kijkt of het resultaat zal convergeren, kan dit niet worden gereproduceerd en dit is wat ik bedoelde met "bijwerkingen". Als de lus nooit eindigt, blijven we in het neveneffectgedeelte van mijn antwoord
toegevoegd de auteur Christophe, de bron
@JohnWu ja dat doe ik :-) ik hou van het neveneffect op mijn emoties. En persoonlijk bewaar ik nooit gegevens die ik nauwkeuriger zou kunnen herberekenen op een betere hardware. Ik beantwoord gewoon de theoretische vraag. En deel over de frustratie die ik had met mijn eerste simulatieprogramma's 30 jaar geleden, toen ik ontdekte dat het beloofde toeval slechts pseudorandom was en dat programma's wat externe input nodig hadden om dingen te doen die me konden verbazen. En eerlijk gezegd, gebruik je veel interessante programma's die geen input, evenement of feedback krijgen van hun omgeving ;-)
toegevoegd de auteur Christophe, de bron