jakubův notes – programování a vejšplechty

Píšu o:

PHP: Escapujeme jmenné prostory

Když jsem se před dvěma dny dozvěděl, co se chystá za pěknou změnu v návrhu jmenných protorů do nové desetinkové verze PHP, do verze 5.3, říkal jsem si, že si vývojáři asi museli poplést měsíce, jelikož již dlouho, co apríl byl, a ještě daleko, než zase bude. Jedná se o jednu takovou pěknou syntaktickou libůstku – a to o oddělovač jmenných prostorů. Doposud bylo oddělovačem dvojdvojteččí (::), kteréžto se v PHP používá pro přístup k statickým třídním vlastnostem a metodám. A v tom je právě ten problém – nastaly nejednoznačnosti při volání funkcí. Jednoduchý příklad:

<?php
namespace foo::bar;
function baz()
{
    echo "function";
}

namespace foo;
class bar
{
    public static function baz()
    {
        echo "method";
    }
}

foo::bar::baz(); // function? method?

Co by se mělo správně vypsat? A je tu vlastně nějaké „správně“?

Když se člověk podívá na takové C++, tak tam se jmenné prostory oddělují pomocí dvojdvojteččí (::) a stejně se přistupuje i k třídním vlastnotem a metodám. Nikde jsem ale neviděl, že by kvůli tomu na C++ někdo nadával, protože ho toto vytrestalo. Proto jsem to zkusil:

#include <iostream>

namespace foo {
    namespace bar {
        void baz(void)
        {
            std::cout << "function" << std::endl;
        }
    }

    class bar {
        public:
            static void baz(void)
            {
                std::cout << "method" << std::endl;
            }
    };
}

int main(void)
{
    foo::bar::baz();
    return 0;
}

A co mi z toho vylezlo? g++ (verze 4.2.1) říká, že prý: Error: symbol `_ZN3foo3bar3bazEv' is already defined. Jelikož jsem chtěl, aby se mi do terminálu vypsal řetězec function, metodě bar::baz() jsem místo přázdného seznamu argumentů dal jeden celočíselný s očekáváním, že g++ najde moji fci baz(void) ve jemnném prostoru foo::bar. Chyba lávky. g++ fci nenašlo a zahlásilo, že ve třídě bar neexistuje metoda baz(void), ale nachází se zde pouze baz(int). U C++ tedy mají jasno – třída definuje svůj vlastní jmenný prostor, který dostává přednost před jmenným prostorem definovaným pomocí namespace (alespoň takto to podle všeho má implementované g++).

Ale v PHP ne. Radši zavedeme nějaký bizarní oddělovač, který se pro tento účel naprosto nehodí (to i ten smajlík, co byl v návrzích (:)), vypadá lépe :o)) – zpětné lomítko je a vždycky bylo v Céčkoidních jazycích znakem pro escapování.

Myslím, že je čas se ještě vážněji než-li do teď zabývat jinými možnostmi programování pro web a jednoduchého skriptování. Python, Ruby? (V případě omezeního se pouze na první přichází v úvahu ještě Java.)

vydáno 27. 10. 2008, 12:27:26

žádný komentář

Zařazeno mezi:

Tak mám Asus EEE 1000H

Bylo, nebylo, rozhodl jsem si, že se přidám k zástupu lidí, co vlastní nějaký ten notebook. Situace na tomto poli počítačů nevypadala (alespoň pro mě) příliš dobře, jelikož já potřebuju něco malého, mobilního, ale přesto s nějakou pořádnou klávesnicí (PDAčko by pro mě nebylo). Pak přišel Asus se svými modely označenými třemi Éčky („Easy to learn, Easy to work, Easy to play“). Nejsem si jistý, jestli to byly první notebooky takovéto velikosti, ale rozhodně byly prvními, o kterých bylo toliko slyšet.

Pohled shora

[ pokračovat ve čtení… ]

vydáno 6. 10. 2008, 18:22:53

žádný komentář

Zařazeno mezi:

„Kompilované“ PHP

Člověk dostává hodně zběsilých nápadů. Nedávno mě zrovna něco takového napadlo. Jak jsem četl Code Generation in Action, honilo se mi hlavou hodně myšlenek o tom, kde by se takové generování dalo v PHP a při tvorbě webu využít. Když jsem si tak probíral model třívrstvé aplikace (model, kontroler, view), tak ve view (na webu je to prakticky rovno HTML šablonám), ani v kontroléru by podle mě nebylo nějaké generování prakticky k ničemu.

Šablony člověk dostane nakódované od kodéra (v mnoha případech to znamená „předat“ si je sám sobě :o)), aplikační logiky bývá poskrovnu a to ona je většinou právě tím, co se aplikace od aplikace liší. Jedinou oblastí, kde by se generování mohlo ujmout, je model a práce s daty. (Sebeujištění se: ano, tady by to opravdu šlo.) Dneska je sice v módě, že nad daty sedí několikero runtimeových vrstev abstrakcí, ale tak jsem si říkal, což takhle „kompilovat“ model přesně na míru databázi?

Řekl bych, že opičení se po Railsovém ORMActiveRecordu – bylo už dost. Moc se mi líbí názory lidí, kteří obhajují tyhle druhy práce s databází tím, že je to odpoutává od toho strašného složitého SQL. Nevím, ale mě vždycky psaní SQL bavilo. Samozřejmě, že většina dotazů jsou jen rutinní výběry. Ale pokud se tyhle dotazy vygenerují rovnou, zbydou na udělání ty „hezčí“, ty, při kterých člověk opravdu něco řeší. A ty podle mě je jednodušší napsat rovnou v čístém SQL než se mořit s nějakými definicemi v objektech (nejlépe ještě přes různé fluent interfaces, ať to stojí za to; nedej bůh, aby člověk jen trochu pomyslel na strašlivé SQL :o)).

Dost řešení každé blbosti v runtimeu, jde se „kompilovat“. Jde se „kompilovat“ do PHP! :o)

Tohle spojení („zkompilovat do PHP“) zní vážně divně :o)

Zatím přemýšlím nad tím, jak nejlépe si s tím pohrát. Určitě by to mělo generovat takové základní dotazy jako výběr podle jednotlivých sloupců v tabulce, ale zároveň tam musí být možnost si napsat dotazy vlastní, které se při „kompilaci“ přechroustají a „napasují“ do interfacu modelu (nějak hezky a šikovně) – interface bych chtěl podobný, jaký je k vidění jinde, ale opravdu by se jednalo jenom o to, aby metody abstrahovaly nad vykonáváním dotazu, ne aby řešily nějaké obštrukce vůbec s jeho generováním.

Bude to sranda :o)

vydáno 15. 9. 2008, 20:42:07

1 komentář (1 nový)

Zařazeno mezi:

Roztomilý PHP deployment

Včera (ano, myslím, že to bylo včera) jsem se rozhodl, že tady na blog přihodím ještě RSS pro komentáře. Bylo to jednoduché, přidat routu do jednoho souboru, upravit model v jiném souboru, přidat další kontrolér a šablonu – celkově pár základních operací nad několika soubory. Na „lokále“ všechno chodí, říkám si: „Super!“ teď to hodím na „ostrý“ server. Teď přišlo avšak na řadu to horší – právě ono „házení“.

[ pokračovat ve čtení… ]

vydáno 6. 9. 2008, 17:00:01

žádný komentář

Zařazeno mezi:

Kniha Code Generation in Action

Pod ruku se mi dostala další kniha. Tentokráte nazavaná jako Code Generation in Action. Autorem je Jack Herrington. Je to již trochu starší kousek (z roku 2003), ale díky jeho zaměření informace v něm obsažené jen tak nezastarají. Dá se nejspíše již podle názvu dost dobře odhadnout, o čem tato kniha bude – zabývá se technikami automatické generování kódu, které mohou programátorovi mnohdy ušetřit mnoho rutinní kódovací činností (prostě mlácení kódu do počítače jako opička :o)), což si myslím, že každého normálního programátora štve a otravuje.

Code Generation in Action

[ pokračovat ve čtení… ]

vydáno 5. 9. 2008, 17:03:21

žádný komentář

Zařazeno mezi: