Beiträge von gandro

    Wie im IRC schon geklärt ist ein match-Statement das einfachste und offensichtlichste. Die primitiven mathematischen Operationen sind in Rust wie in vielen anderen Sprachen (C, Java, Go, etc) nicht sogenannte Funktionen höherer Ordnung Funktionen die man herumreichen kann (anders als z.B. in Haskell). Es gibt jedoch abstrakte Interfaces in std::ops die zum Überladen der Operatoren gedacht sind, die hier verwendet werden können. Beispiel:

    Code
    use std::ops::Add;
    
    
    fn main() {
        let op = Add::<i32>::add;
        
        println!("{}", op(1, 2)); // 3
    }

    Eigentlich wollte ich jetzt schreiben, dass das fehlende Subtyping bei Traits in Rust dich daran hindert, einfach Code zu schreiben, der sowohl für Add als auch für z.B. Mul beides funktioniert. Allerdings bilden freistehende Funktionen (fn Typen) in Rust jedoch eine Ausnahme wo es Subtyping gibt weil sie alle als Funktionspointer verwendet werden können. Dementsprechend funktioniert folgender Code zu meiner kompletten Überraschung:

    Playground: https://play.rust-lang.org/?gist=662de9bc…&version=stable

    Man lernt halt nie aus. op ist dabei vom Typ fn(i32, i32) -> i32, also eine beliebige freistehende Funktion die zwei i32 nimmt und ein i32 zurückgibt.

    Ehrlich gesagt, glaube ich nicht dass man mit der Rechenleistung die man so zuhause rumstehen hat gross Geld verdienen kann. Cloud Computing Anbieter wie Amazon oder Digital Ocean koennen die gleiche Leistung massiv guenstiger anbieten. Ein Rechenzentrum hinstellen kostet zwar initial mehr Geld, aber wenn das man laeuft dann sind die Strom-, Anschaffungs- und Wartungskosten pro Rechner locker 10-100x billiger als jeder Privatrechner der irgendwo im Hobbyraum vor sich hinlaeuft. Essentiell der gleiche Grund warum sich Bitcoin-Mining als Privatperson nicht mehr lohnt.

    Wenn du etwas sinnvolles mit der Rechenleistung anfangen willst, dann Spende sie an wissenschaftliche Projekte wie BOINC, siehe https://www.rechenkraft.net

    Ich mach hier mal zu. Sollte es sich tatsaechlich um Schleichwerbung handeln werden wir entsprechend handeln.

    Nachtrag: Ja, den IP-Adressen nach zu urteilen handelt es sich hierbei sehr wahrscheinlich um ungefragte Werbung.

    Moderationshinweis: Diamant hat seine Problemstellung deutlich formuliert, er möchte die angezeigten Fragmentieungen entfernen. Bleibt bitte beim Thema, das heisst: Jegliche zukünftigen Antworten die das konkrete Problem nicht lösen sind Off-Topic und werden gelöscht.

    Wenn ihr nicht glaubt, dass das Problem nicht lösenswert ist, dann ignoriert den Thread hier einfach, dann wird er auch dementsprechend in der Liste runterrutschen. Sinnlose Grundsatzdiskussionen nerven nur.

    Wie ihr seht, habe ich den die übelsten Derailings gelöscht, bleibt bitte beim Thema: Fotos von euch posten und in einem passenden Rahmen diskutieren. Dazu gehören nicht: persönliche Provokationen und Sticheleien, Flirten, Rechtschreibkorrekturen, sonstige Kommentare die nichts zum Thema beitragen.

    For-Schleifen sind IMMER kopfgesteuert, die Bedingung wird also vor dem ersten Durchlauf gecheckt. Anders sieht es bei fußgesteuerten Do-Loop-Schleifen aus, wo erst einmal durchgeführt und DANN erst die Bedingung gecheckt wird.


    Ich habe nichts anderes behauptet. Nur ist ob kopf- oder fussgesteuert halt irrelevant, der Unterschied hier ist ob es for- oder while-Schleifen sind. Bei "for" wird die Expression nur einmal komplett evaluiert, bei "while" bei jedem Durchlauf. Beide sind kopfgesteuert.

    Mir ist nicht ganz klar, was es hier für eine Rolle spielen soll, ob die Bedingung am Anfang oder am Ende des Loops ausgeführt wird (wie soll eine fussgesteuerte "for i in x" Schleife überhaupt funktionieren, was ist i in ersten Durchlauf?). Das hier ist viel mehr eine Frage der Ausführungsregeln. Und bei einem For-Loop in der Shell wird das iterierte Set vor dem ersten Durchlauf vollständig evaluiert.

    Um die Frage zu beantworten ob das nur in bash so funktioniert, oder generell: Der POSIX-Standard definiert die For-Schleife wiefolgt:

    Zitat von http://pubs.opengroup.org/onlinepubs/007904875/utilities/xcu_chap02.html#tag_02_09_04_03


    First, the list of words following in shall be expanded to generate a list of items.
    Then, the variable name shall be set to each item, in turn, and the compound-list executed each time.

    Was genau Word-Expression sein können (also der Teil nach dem in, in dem Falle hier die Pathname-Extension *.c), steht hier:
    http://pubs.opengroup.org/onlinepubs/007….html#tag_02_06 bzw den Link folgend hier: http://pubs.opengroup.org/onlinepubs/007….html#tag_02_13

    For-Loop Items können nicht (wie z.B. bei Python, for line in open('words.txt')) lazy generiert werden. Selbst bei sowas wie IFS=$'\n'; for line in $(cat words.txt); do echo $line ; done wartet die Shell bis der Befehl fertig ist und die Datei eingelesen, bevor die Ausgabe beginnt. Das ist anders als z.B. das while-Statement in Shell, wo cat words.txt | while read w ; do echo $w ; done direkt nach der ersten Zeile anfängt zu iterieren - beide Schleifen hier sind kopfgesteuert.

    Zum selber testen, einfach das cat zu einem tail -f umwandeln.

    TLDR: Ja, Shell garantiert dir, dass bei einem for Loop die Word List nur einmal initial evaluiert wird, und danach über jedes Item separat iteriert.