2007-10-28

Od komentarzy do poprzedniego posta chodził za mną mały felietonik na temat ?:.
Niby nic wielkiego, operator jak operator.
Weźmy dla przykładu implikację, z fałszu wynika cokolwiek, z prawdy tylko prawda, więc mamy: p -> q i tablekę:
 p | q | wynik
---+---+---
 F | F | T
 F | T | T
 T | F | F
 T | T | T
to dość ładnie nadaje się do użycia ?: - o tak: !p ? true : q ? true : false.
Czasem jednak przywiązujemy większą wagę do jednego pierdolnika, niech będzie nim p, więc zmodyfikujemy kod do takiego: !p ? "Nie P" : q ? "Q" : "Nie Q".
Popatrzmy, jak działa w C/C++ (będzie w ++):
@zlom:~/public_html/felietonik$ cat f.cpp
#include <iostream>
#include <vector>
typedef std::vector<bool> vb;
int main(int argc, char* argv[]) {
    vb a(2);
    a[0] = false;
    a[1] = true;
    for (vb::iterator p(a.begin()), pe(a.end()); p != pe; ++p)
        for (vb::iterator q(a.begin()), qe(a.end()); q != qe; ++q)
            std::cout << "p = " << *p << ", q = " << *q << " "
                << (!*p ? "Nie P" : *q ? "Q" : "Nie Q") << std::endl;
    return 0;
}
@zlom:~/public_html/felietonik$ ./a.out
p = 0, q = 0 Nie P
p = 0, q = 1 Nie P
p = 1, q = 0 Nie Q
p = 1, q = 1 Q
@zlom:~/public_html/felietonik$
Kul, w Javce podobnie:
package pierdy;

public class Felietonik {

    public static void main(String[] args) {
        boolean[] a = {false, true};
        for (int p = 0; p < a.length; ++p)
            for (int q = 0; q < a.length; ++q)
                System.out.printf("p = %5s, q = %5s %s\n"
                    , a[p], a[q], !a[p] ? "Nie P" : a[q] ? "Q" : "Nie Q");
    }
}

p = false, q = false Nie P
p = false, q =  true Nie P
p =  true, q = false Nie Q
p =  true, q =  true Q
Bardzo ładnie.
Perl:
@zlom:~/public_html/felietonik$ perl -e '@a=(0, 1); for $p (@a)\
 {for $q (@a) { print "p = $p, q = $q ", (!$p ? "Nie P" : $q ? "Q" : "Nie Q"), $/ }}'
p = 0, q = 0 Nie P
p = 0, q = 1 Nie P
p = 1, q = 0 Nie Q
p = 1, q = 1 Q
I jeszcze dla porządku JavaScript (w źródle se sprawdźcie, jak chcecie):
Dobra, teraz przechodzimy do klu - PHP:
@zlom:~/public_html/felietonik$ cat f.php
<?
$a = array(false, true);

foreach ($a as $p)
    foreach ($a as $q)
        echo "p = $p, q = $q "
            .(!$p ? 'Nie P' : $q ? 'Q' : 'Nie Q')
            .'<br />';
?>
I wyniki:
p = , q = Q
p = , q = 1 Q
p = 1, q = Nie Q
p = 1, q = 1 Q
Pełna niewiara, co ten frustrat pierdoli.
No to sprawdźcie, na 4.x, na 5.x, who cares.
No ci którym się chciało wzięli i sprawdzili, i rzeczywiście.
Chodzi o to, że w PHP operator ?: jest rozwijany inaczej niż w reszcie świata.
Jakby poustawiać nawiasy, to
!p ? "Nie P" : q ? "Q" : "Nie Q"
jest rozumiany jako
!p ? "Nie P" : ( q ? "Q" : "Nie Q" )
, w PHP inaczej:
( !p ? "Nie P" : q ) ? "Q" : "Nie Q"
- już jarzycie?
W dokumentacji jest wołami napisane, że jak się nie podoba, to nawiasami można wymusić 'normalne' zachowanie.
(jak nie widać, to zaznaczenie załatwi sprawę).

Etykiety:

2007-10-22

Akcja jest taka, nowa. Poprzednia była żeby wysmarować pięć rzeczy o sobie - głupia i ją zlałem.
Teraz jest fajna - języki programowania:
C++
+ Obiektowy, przeciążanie operatorów, biblioteka standardowa, template. A, i zarabiam nim na życie :>.
- Rzeczy in plus nie są wszędzie, ręczne czyszczenie pamięci, jak się zapomni robi się smutno. Redukuje się czasem do C z klasami.
Java
+ Pisze się zajebiście szybko, ale potrzeba IDE, nie trzeba się pałować z pamięcią, jak się wypierdala, to w 99.99% kulturalnie.
- Bez IDE ani przystąp, koszmarnie przegadany język, prymitywy z autoboxingiem potrafią przypierdolić po nerach, ogólnie prymitywy mogłyby już wylecieć, wtedy wszystko byłoby obiektem, przeciążanie operatorów też mogłoby być, a nie jest dla usera (ale + ma 3 wersje :>). I chlastające operowanie na stringach.
Perl
+ Zajebisty język, weapon of choice. W każdej robocie mi się przydał, i w magisterce.
- Można w nim napisać rzeczy, których nie rozumiem. Sam mogę takie rzeczy napisać. I napisanie modułu jest upierdliwe.
PHP
+ Jest wszędzie. W sumie coś jak miliardy much.
-- Niesamowicie niski próg wejścia powoduje, że do krapowatości języka dochodzi ogólny syf kodu produkowanego przez wannabe programistów PHP. Język nie wyróżnia się niczym szczególnym, ale ma perełki - na przykład operator ?:. Rzeczy które poprzednio zrobiłbym w PHP teraz w robocie napisałem w Perl + CGI, bo mi się nie chciało doinstalowaywać.
JavaScript
+ Takie małe chujumuju do robienia różnych rzeczy pod przeglądarkami.
- Każda przeglądarka ma swoje zdanie na temat jego standardu. Zmienne są zdradzieckie.
C
+ Jest prawie na wszystko, i jest taki sam.
- Tak samo masakryczny, brakuje stuffu z C++.
Pascal
+ Eeeeee
- W Pascalu nie da się napisać funkcji z Pascala. Miało być tak pięknie, a wyszło jak zwykle. Przegadana składnia.
ADA + Język zrobiony na zamówienie Department of Defense. To daje niejaką perspektywę zatrudnienia.
- Wzorowany na Pascalu - ślepa uliczka rozwoju składni języków programowania.
Prolog
+ Fajny do pewnych zastosowań.
- Ale trzeba se mózg wywrócić na lewą stronę.
SML
+ Fajny do pewnych zastosowań, zmienia spojrzenie na programowanie przez nauczenie się paradygmatu funkcyjnego/funkcjonalnego, zależnie jak to zwał.
- Mało kto używa, taka ciekawostka, mózg można tylko przeklepać, nie trzeba nicować.
plPgSQL
+ Język programowania z PostgreSQLa, podobny do Oraklowego pgSQL, daje niejakie perspektywy zatrudnienia.
- Kuzyn ADY.
Pike
+ Tu nie ma jeszcze bardziej niż w przypadku Pascala.
- Kod w Pike wygląda tak, jakby ktoś wydrukował kod w C++, obsikał listing i otrzepał, oto Pike. Niszowy pomiot który robi to samo co Perl albo Pythong albo Ruby, tylko inaczej, bo koledzy wyczerpali możliwości.
Python (w tym to zrobiłem całe kilka linijek)
+ Fanatycy go lubią, znaczy się ma duże user base, czyli ma dużo ewangelistów, czyli jest się kogo pytać, jak trzeba w nim rzeźbić. Podobno ma więcej bibliotek niż Perl. I chyba łatwiej się pisze do niego moduły w C niż do Perla.
- Wcięciami się go formatuje, nie da się napisać onelinera, bo się formatuje wcięciami, jak tak można?

Etykiety:

2007-10-19

Nic się nie dzieje interesującego.
To znaczy nic, o czym warto byłoby specjalnie pisać.
W odróżnieniu od Projektu Absurdalnego, gdzie dokładnie wiedziałem co i jak robię, ale uważałem to co robię za absolutnie niepotrzebną kupę gówna (potrzebna była z punktu widzenia Projektu A, który był zjebany ideowo i z tego zjebania potrzebna była Cegła), teraz robię rzeczy których dopiero się uczę, lekko po omacku, ale wiem po co i dlaczego, i z tą argumentacją się zgadzam.
I wartość tego co robię (albo brak wartości tego co spierdolę, ale wolę nie) jest daleko większa. W sumie to jestem podobnie zastępowalny, ale część projektu robię większą.
Oprogramowanie ma warstwy i Ogry mają warstwy.
Najgorzej, jak spod warstwy oprogramowania wychodzi Ogr.

Etykiety: