Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2018-01-29, 13:32
  #13
Medlem
MrArturs avatar
Citat:
Ursprungligen postat av SuperSizeMe
Såklart, men nya programmerare tror att just stdlib är heligt, och lärarna hjälper dem knappast att få bort den tanken.

Det må vara sant. Men de som läser kurser på universitetet (iofs beroende på kurs, möjligtvis) är ofta nybörjare också. Dessutom tycker jag att många funktioner i standardbiblioteket är klart användbara och enkla att använda, när det passar ens syften. Tacksamt för nybörjare åtminstone.

Citat:

Om du vill kunna behandla en tre-raders textfil med en miljon tecken per rad lika väl som en miljon-raders textfil med tre tecken per rad, är fgets() värdelöst.
Fast det är ju inte alltid man vill detta. Ibland vill man bara läsa in låtlistor exvis.
Citera
2018-01-29, 13:56
  #14
Avstängd
Citat:
Ursprungligen postat av MrArtur
Dessutom tycker jag att många funktioner i standardbiblioteket är klart användbara och enkla att använda, när det passar ens syften.

Alla funktioner är användbara och enkla att använda när det passar ens syften. Ge mig exempel på en funktion i stdlib som inte finns i en bättre version i GLib, jävla punkare.

Citat:
Ursprungligen postat av MrArtur
Tacksamt för nybörjare åtminstone.

Nej, nej och åter nej. Man ska inte skyffla återanvändandet av andras bibliotek och funktioner, och det egna skrivandet av detsamma, åt sidan. Det är för fan där man ska börja, med insikten att ett problem kan delas upp i mindre delar, kunskapen hur man gör det bäst, varför man gör det osv.
Citera
2018-01-29, 14:37
  #15
Medlem
MrArturs avatar
Citat:
Ursprungligen postat av SuperSizeMe
Alla funktioner är användbara och enkla att använda när det passar ens syften. Ge mig exempel på en funktion i stdlib som inte finns i en bättre version i GLib, jävla punkare.

Precis.


Citat:

Nej, nej och åter nej. Man ska inte skyffla återanvändandet av andras bibliotek och funktioner, och det egna skrivandet av detsamma, åt sidan. Det är för fan där man ska börja, med insikten att ett problem kan delas upp i mindre delar, kunskapen hur man gör det bäst, varför man gör det osv.
Och detta gör man för att man väljer annat bibliotek? Detta är din åsikt. Med din attityd misstänker jag att informationen skulle flyga eleverna högt över huvudet från lektion 1. Men jag misstänker också att syftet med dina lektioner inte heller skulle vara att eleverna skulle lära sig, utan snarare att visa eleverna ett smakprov på lärarens förträfflighet.

I den första kursen jag läste gick vi in på funktioner. Vi skrev dock ingen egen scanf. Vi använde knappt pekare. Det går att lära sig detta utan att uppfinna hjulet på nytt. En annan viktig poäng pedagogik med att använda funktioner är att det inte alltid är nödvändigt att veta vad som händer under huven för en funktion. När man återanvänder kod så räcker det ofta om man har kunskaper om dess interface. Allt behöver inte vara optimerat till fullo för att tjäna sitt syfte...
Citera
2018-01-29, 15:01
  #16
Avstängd
Citat:
Ursprungligen postat av MrArtur
Med din attityd misstänker jag att informationen skulle flyga eleverna högt över huvudet från lektion 1. Men jag misstänker också att syftet med dina lektioner inte heller skulle vara att eleverna skulle lära sig, utan snarare att visa eleverna ett smakprov på lärarens förträfflighet.

Blanda inte ihop hur förträfflig jag tycker att jag är, med sanningshalten i det jag skriver. Då gör du dig skyldig till samma synd.

Har jag försökt undanhålla fakta från någon?

Citat:
Ursprungligen postat av MrArtur
I den första kursen jag läste gick vi in på funktioner. Vi skrev dock ingen egen scanf. Vi använde knappt pekare. Det går att lära sig detta utan att uppfinna hjulet på nytt. En annan viktig poäng pedagogik med att använda funktioner är att det inte alltid är nödvändigt att veta vad som händer under huven för en funktion. När man återanvänder kod så räcker det ofta om man har kunskaper om dess interface. Allt behöver inte vara optimerat till fullo för att tjäna sitt syfte...

Bara tjafs, inget intressant värt att kommentera.
__________________
Senast redigerad av SuperSizeMe 2018-01-29 kl. 15:10.
Citera
2018-01-29, 15:31
  #17
Medlem
MrArturs avatar
Citat:
Ursprungligen postat av SuperSizeMe
Blanda inte ihop hur förträfflig jag tycker att jag är, med sanningshalten i det jag skriver. Då gör du dig skyldig till samma synd.

Har jag försökt undanhålla fakta från någon?



Bara tjafs, inget intressant värt att kommentera.
Du lägger dig förmodligen på allra minst en nivå över den som skrivit denna TS (och förmodligen även nivåer över den som skriver denna text). Du förespråkar användandet av funktioner samtidigt som du uppmanar till att skriva egna. Jag har helt ärligt inga tvivel på att du är jäkligt duktig på programmering. Du har koll. Men för en låtlista (och många flera andra sammanhang där inläsning av strängar förekommer) har du inte presenterat några argument varför fgets() skulle vara oduglig i detta fall. Visst, den kollar inte om tecknen får plats i arrayer. Skulle kunna vara en svaghet eller eventuellt ett tillfälle för utökad kunskap. Du kallade mig punkare, som ett invektiv. Jag ställer mig frågan vilken typ av frijazz som innehåller album med låtar av miljontals tecken alternativt miljontals låtar med <= 3 tecken.

Förövrigt håller jag med om din antydan, att det även i utbildningssyfte skulle vara värdefullt att implementera kod med funktioner från exvis Glib - bibliotek.
__________________
Senast redigerad av MrArtur 2018-01-29 kl. 15:47.
Citera
2018-01-29, 16:52
  #18
Avstängd
Citat:
Ursprungligen postat av MrArtur
Du lägger dig förmodligen på allra minst en nivå över den som skrivit denna TS (och förmodligen även nivåer över den som skriver denna text).

Well.. jag skulle kunna skylla på att nybörjarna ändå aldrig bryr sig om vad man skriver eller fattar det, eller att jag har en förhoppning att skapa djupare och intressantare diskussioner med de riktiga programmerarna i forumet, men ändå är noga med att svara på TS frågor. Om jag failar på något sätt i detta tar jag gärna kritik. Eller smisk på stjärten.

Men sanningen är väl att jag vill stila, och det vill väl alla som svarar på Flashback. Varför i helvete skulle jag vilja hjälpa någon att bli en lite bättre programmerare och få ett jobb med 40k/mån, när jag själv sitter gravt alkoholiserad och går på socialbidrag sedan 20 år tillbaka?

Citat:
Ursprungligen postat av MrArtur
Jag har helt ärligt inga tvivel på att du är jäkligt duktig på programmering. Du har koll.

Tack, det var riktigt snällt sagt.

Citat:
Ursprungligen postat av MrArtur
Du förespråkar användandet av funktioner samtidigt som du uppmanar till att skriva egna.

Nej, nej, jag förespråkar bara icke-användandet av standardbiblioteket. Om någon blir glad av att använda fgets() kan jag tänka mig att låta bli att klaga på det. Men faktum kvarstår att funktionen fgets() är värdelös. En funktions existensberättigande beror tyvärr på hur många system som en stabil (och öppen) implementation av den den finns på, och den måttstocken går liksom inte att använda på fgets() eftersom alla system måste implementera den.

Citat:
Ursprungligen postat av MrArtur
Men för en låtlista (och många flera andra sammanhang där inläsning av strängar förekommer) har du inte presenterat några argument varför fgets() skulle vara oduglig i detta fall. Du kallade mig punkare, som ett invektiv. Jag ställer mig frågan vilken typ av frijazz som innehåller album med låtar av miljontals tecken alternativt miljontals låtar med <= 3 tecken.

Ja, och vem i hela världen skulle kunna tänkas använda mer än 640 kB minne, som det påstås att Bill Gates sade. Använd inte fgets() med sin begränsning på radlängd bara för att du är lat eller osäker, hur tydligare kan jag förklara det? (FB) Min fgetline() är en funktion som kanske kompileras till bara några hundra byte, och gör allt som en radläsningsfunktion bör göra. Det finns ingen funktion på nätet som är i närheten av dess användbarhet, och har jag missat något som den borde göra bygger jag gärna ut den.

Ken Thompson och Dennis Ritchie skapade ett underverk till språk, men jag har bättre omdöme än dem i frågan om vilka funktioner som ska vara en del av språkets färdiga bibliotek.

Citat:
Ursprungligen postat av MrArtur
Förövrigt håller jag med om din antydan, att det även i utbildningssyfte skulle vara värdefullt att implementera kod med funktioner från exvis Glib - bibliotek.

Visst, nån gång måste man ju låta studenterna använda I/O-funktioner och göra något vettigt. Men jag skulle nog hellre se dem flippa led-lampor än använda standardbiblioteket, för de förstnämnda studenterna ställer verkligen djupare och mer intressanta frågor. Skillnaden mellan språket och interfacet till omvärlden blir mer uppenbar, om inte läraren lyckas förklara det och det tvivlar jag på att han kan, när man bara läser och skriver till minnesadresser. Whatever.
__________________
Senast redigerad av SuperSizeMe 2018-01-29 kl. 17:00.
Citera
2018-01-29, 19:00
  #19
Medlem
MrArturs avatar
Citat:
Ursprungligen postat av SuperSizeMe
Well.. jag skulle kunna skylla på att nybörjarna ändå aldrig bryr sig om vad man skriver eller fattar det, eller att jag har en förhoppning att skapa djupare och intressantare diskussioner med de riktiga programmerarna i forumet, men ändå är noga med att svara på TS frågor. Om jag failar på något sätt i detta tar jag gärna kritik. Eller smisk på stjärten.

Men sanningen är väl att jag vill stila, och det vill väl alla som svarar på Flashback. Varför i helvete skulle jag vilja hjälpa någon att bli en lite bättre programmerare och få ett jobb med 40k/mån, när jag själv sitter gravt alkoholiserad och går på socialbidrag sedan 20 år tillbaka?



Tack, det var riktigt snällt sagt.



Nej, nej, jag förespråkar bara icke-användandet av standardbiblioteket. Om någon blir glad av att använda fgets() kan jag tänka mig att låta bli att klaga på det. Men faktum kvarstår att funktionen fgets() är värdelös. En funktions existensberättigande beror tyvärr på hur många system som en stabil (och öppen) implementation av den den finns på, och den måttstocken går liksom inte att använda på fgets() eftersom alla system måste implementera den.



Ja, och vem i hela världen skulle kunna tänkas använda mer än 640 kB minne, som det påstås att Bill Gates sade. Använd inte fgets() med sin begränsning på radlängd bara för att du är lat eller osäker, hur tydligare kan jag förklara det? (FB) Min fgetline() är en funktion som kanske kompileras till bara några hundra byte, och gör allt som en radläsningsfunktion bör göra. Det finns ingen funktion på nätet som är i närheten av dess användbarhet, och har jag missat något som den borde göra bygger jag gärna ut den.

Ken Thompson och Dennis Ritchie skapade ett underverk till språk, men jag har bättre omdöme än dem i frågan om vilka funktioner som ska vara en del av språkets färdiga bibliotek.



Visst, nån gång måste man ju låta studenterna använda I/O-funktioner och göra något vettigt. Men jag skulle nog hellre se dem flippa led-lampor än använda standardbiblioteket, för de förstnämnda studenterna ställer verkligen djupare och mer intressanta frågor. Skillnaden mellan språket och interfacet till omvärlden blir mer uppenbar, om inte läraren lyckas förklara det och det tvivlar jag på att han kan, när man bara läser och skriver till minnesadresser. Whatever.
Fast det används ett par standardfuntioner i den "getLine". fgets() fungerar fint för TS ärende. Den funktionen du länkar till skulle också fungera. När jag läste en kurs i inbyggda system gjorde vi en drivrutin för en display som vi sedan kopplade till printf(). Också en utmärkt övning. Givetvis kunde vi även skriva till skärmen med egengjorda funktioner också. Jag kanske tolkade dig fel, men jag tolkade dig som att du menade att standardbiblioteken skulle undvikas och att man inte förstod vad C var, om man nyttjade dom, utifrån detta inlägg.
Citera
2018-01-30, 08:14
  #20
Medlem
Citat:
Ursprungligen postat av SuperSizeMe
Bla, bla, bla...
Jag är rätt säker på att du om fem, tio år av C-programmering kommer inse hur naiv och oinstatt du är just nu. Förhoppningsvis tidigare än så. Kom tillbaka till den här tråden och garva då.
Citera
2018-01-31, 20:18
  #21
Avstängd
Citat:
Ursprungligen postat av FaderBerg
Jag är rätt säker på att du om fem, tio år av C-programmering kommer inse hur naiv och oinstatt du är just nu. Förhoppningsvis tidigare än så. Kom tillbaka till den här tråden och garva då.

Det är såklart en möjlighet, trots att jag har programmerat i 30 år, 15 i C.

Skriver man upp sig för en C-kurs antar jag att man är mer intresserad av datorers "inner-workings" än enkel inlärning och snabba resultat. Annars ska man ta en kurs i ett scriptspråk och ha mycket roligare. Och skulle man vara intresserad av C bara för att det är det mest effektiva, snabbaste språket, är knappast fgets() rätt funktion heller.

Som jag har debatterat för i andra trådar, lär man sig först (grundläggande) assembler och hur en processor fungerar. Det gör man på en månad, sen vet man ungefär vad som händer bakom kulisserna i C-koden, ungefärligt antal cykler och minnesanvändning för sin kod, och kommer att uppskatta C:s förbättrade syntax jämfört med assembler.

Microsofts VisualXxx och andra GUI:s rör man inte med tång.

Sen förklarar läraren de dåliga och saknade delarna av C och låter eleverna skriva egna funktioner för dem. Vad funktioner är, deras gränssnitt, hur de används, hur man länkar, include-filer osv ska man inte vänta med till senare, det kommer att göra både den som vill göra flashiga grejor och den som vill lära sig djupare saker, besviken.

Sen låter man eleverna använda sina egna funktioner resten av kursen.

* En map- och en vektortyp för att komplettera C:s fixed-sixe-arrayer.
* En egen radläsningsfunktion som använder vektortypen.
* Egna strängtyper som inte terminerar med NUL-tecknet, och där man inte behöver veta längden på destinationssträngen i förhand. Också byggt på vektor-typen.
* En scanf() byggd på radläsningsfunktionen och strängfunktionerna.

En C++-användare som använder fgets() blir väl utskrattad?
__________________
Senast redigerad av SuperSizeMe 2018-01-31 kl. 20:26.
Citera
2018-02-01, 01:08
  #22
Medlem
Citat:
Ursprungligen postat av SuperSizeMe
Det är såklart en möjlighet, trots att jag har programmerat i 30 år, 15 i C.
Oj... Det kunde jag aldrig gissa. Jag undrade om du kanske skrev Java, C# eller möjligtvis C++.
Än mer märkligt då att du har en så förunderlig uppfattning om Cs standard-bibliotek. Visst, det finns tillfällen då många funktioner inte räcker till, men då skapar man alternativ; om det inte redan finns. Precis som du har varit inne på. Att däremot förkasta dem bara för att de inte klarar av ytterst hypotetiska problem är bara dumt.

Ta låtlistan till exempel. Är det en feature eller en bug att 'Min fgetline' orsakar ENOMEM om raden är oändlig? Hade vi velat avbryta tidigare eftersom någonting - högst sannolikt - är fel, när en låttitel eller artistnamn börjar röra sig över 250 tecken i längd? Det här är ju också ett hypotetiskt problem som förmodligen aldrig kommer inträffa. Men efter övervägande av två sätt att hantera detta hypotetiska scenario på, så kan i alla fall jag räkna bort behovet av dynamiska strängar. Jag tar alternativet att avbryta tidigare.
Eftersom jag därmed tänker begränsa den tillåtna radlängen så duger fgets alldeles utmärkt. Vi kanske inte ens behöver veta längden på strängarna heller för det vi ska göra och/eller kan använda en statisk/stack buffer. I så fall kan vi räkna hem en prestandaförbättring också, när vi slipper malloc och free för varje rad. I vissa fall knappt märkbart, men varför inte?
Alltså, det är gjort med ett fåtal rader och C89s standard-bibliotek. Varför göra det krångligare än så egentligen?
Kanske vill du bygga en binär åt din kaffebryggare...

Citat:
Ursprungligen postat av SuperSizeMe
En C++-användare som använder fgets() blir väl utskrattad?
Jag har inte en aning. Som C-programmerare funderar man inte på frågor som är irrelevanta.
__________________
Senast redigerad av FaderBerg 2018-02-01 kl. 01:41.
Citera
2018-02-01, 03:37
  #23
Avstängd
Citat:
Ursprungligen postat av FaderBerg
Ta låtlistan till exempel. Är det en feature eller en bug att 'Min fgetline' orsakar ENOMEM om raden är oändlig? Hade vi velat avbryta tidigare eftersom någonting - högst sannolikt - är fel, när en låttitel eller artistnamn börjar röra sig över 250 tecken i längd?

Tycker inte att vi ska bestämma det åt användaren, sånt kan MS hålla på med. Att printa ett irriterande felmeddelande "det är högst sannolikt att du har gjort något fel" vore väl något för dem. Att fgetline använder upp allt RAM, virtuellt minne ökas och hårddisken börjar låta som en kulspruta, är en feature. Eller iaf något som ska lämnas till användaren eller operativsystemet, och inte hårdkodas i varje program.

Undrar hur många miljoner extra arbetstimmar som har slösats bort de senaste decennierna för att fortsätta stödja begränsningen för filnamn i DOS (8+3 tecken) och sökvägar i UNIX (255 tecken), bara för att någon inte orkade skriva lite minnesdynamisk kod. Har vi inte lärt oss av det?

Citat:
Ursprungligen postat av FaderBerg
Det här är ju också ett hypotetiskt problem som förmodligen aldrig kommer inträffa. Men efter övervägande av två sätt att hantera detta hypotetiska scenario på, så kan i alla fall jag räkna bort behovet av dynamiska strängar. Jag tar alternativet att avbryta tidigare.

250 tecken räcker inte om du lyssnar på Rednex. Kanske 1024 med artistnamnet, och programmet måste kompileras om när den döda symbolen känd som Prince döps om till en 1000 tecken lång svordom. Visst, vissa risker får man ta, och längden på artist- och låtnamn är en av de saker som toligen inte kommer att ändras (mycket) i framtiden...

Citat:
Ursprungligen postat av FaderBerg
Alltså, det är gjort med ett fåtal rader och C89s standard-bibliotek. Varför göra det krångligare än så egentligen?

...men i det här fallet tycker jag det är onödigt eftersom det inte är krångligt att lägga till raden `#include "fgetline.h"` till källkoden och fgetline.c till makefilen/projektet.
__________________
Senast redigerad av SuperSizeMe 2018-02-01 kl. 03:40.
Citera
2018-02-01, 11:05
  #24
Medlem
Citat:
Ursprungligen postat av SuperSizeMe
Tycker inte att vi ska bestämma det åt användaren, sånt kan MS hålla på med. Att printa ett irriterande felmeddelande "det är högst sannolikt att du har gjort något fel" vore väl något för dem. Att fgetline använder upp allt RAM, virtuellt minne ökas och hårddisken börjar låta som en kulspruta, är en feature. Eller iaf något som ska lämnas till användaren eller operativsystemet, och inte hårdkodas i varje program.
Jag tycker nog att det är en bugg i alla fall. Vi är inte helt överens där, men jag öppen för diskussion och kan ändra mig om argumentet är det rätta. Felmeddelandet skulle ju kunna vara lite mindre sarkastiskt och lite mer sakligt i stället i alla fall. Tar du en titt på det innan vi presenterar det för beställaren.

Citat:
Ursprungligen postat av SuperSizeMe
Undrar hur många miljoner extra arbetstimmar som har slösats bort de senaste decennierna för att fortsätta stödja begränsningen för filnamn i DOS (8+3 tecken) och sökvägar i UNIX (255 tecken), bara för att någon inte orkade skriva lite minnesdynamisk kod. Har vi inte lärt oss av det?
Det där är en filsystemfråga egentligen, inte hur man hanterar minne när man programmerar. Jag orkar inte grotta ner mig i anledningarna till varför filsystemen fick dessa begränsningar i begynnelsen. Men att påstå att de som utvecklade dem var lata och insinuera att de var dumma i huvudet... Är det okunskap eller bara ren arrogans? Jag vet inte.

Citat:
Ursprungligen postat av SuperSizeMe
250 tecken räcker inte om du lyssnar på Rednex. Kanske 1024 med artistnamnet, och programmet måste kompileras om när den döda symbolen känd som Prince döps om till en 1000 tecken lång svordom. Visst, vissa risker får man ta, och längden på artist- och låtnamn är en av de saker som toligen inte kommer att ändras (mycket) i framtiden...
Bra! Tack för researchen. Ska vi öka bufferstorleken till 2k, 512k eller 1M innan vi skeppar? Eller ska vi köra dynamiskt allokerade strängar mot en smärre trade-off i prestanda?

Citat:
Ursprungligen postat av SuperSizeMe
...men i det här fallet tycker jag det är onödigt eftersom det inte är krångligt att lägga till raden `#include "fgetline.h"` till källkoden och fgetline.c till makefilen/projektet.
Nej... Det är inte krångligt. Det har du rätt i. Jag åsyftade mest till inblandning av andra gigantiska libraries som du har varit inne på.
Nåväl. Jag respekterar ditt designbeslut för jag förstår hur du tänker och vad du vill uppnå. Jag tycker inte att det är fel i sak, även om jag själv hade valt att lösa det på ett annorlunda sätt. Bra jobbat.

Citat:
Ursprungligen postat av SuperSizeMe
Ken Thompson och Dennis Ritchie skapade ett underverk till språk, men jag har bättre omdöme än dem i frågan om vilka funktioner som ska vara en del av språkets färdiga bibliotek.
En funktion liknande 'Min fgetline' finns inte med i Cs standard bibliotek därför ett av följande alternativ:
  1. Ett förslag har aldrig lagts fram för ISO-kommitén
  2. Ett förslag har lagts fram, men har blivit avfärdat på grund av att det anses vara onödigt och/eller utanför standardens huvudsakliga mening

Tack för ordet. Ha det.

Kod:
if (strstr(artist, "rednex"))
        while (1);
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback