Vítejte na blog.vyvojar.cz Přihlásit | Registrovat | Pomoc

Vlko napísal ...

.. mostly harmless ...
ExpressionEval coding story [Update]

Ako obyčajne začínam hneď zdrojovými kódmi, nech záujemcov o code review nemusím zdržiavať zbytočnými rečmi:)

Zdrojové kódy: http://vlko.zilina.net/dwn/blog/ExpressionEval.zip

Update č. 1

Ospravedlňujem sa, nejak som zverejnil zlú linku, už je to opravené.

Intermezzo

Pretože tu máme vianoce, rád by som vám aj ja dal od ježiška jeden malý darček a tým je knižnica, ktorá z predaného textu a pár ďalších informácii vygeneruje patričnú lambda expression. Síce by som tieto zdrojové kódy zverejnil tak, či tak, ale takto je z toho cítiť krásnu myšlienku. Ten pragmaticky dôvod je ako pri každom oos projekte užívateľský unittesting a možný ďalší rozvoj komunitou, pretože táto malá knižnička narozdiel od ostatných proof of concept coding stories pôjde do production.

Do intermezza tradične patria nejaké tie pohnútky:

  1. V administračnej sekcii sme pre jeden typ problému potrebovali zakomponovať užívateľský filter. V podstate by stačila iba jednoduchá funkčnosť, na základe id urobiť and a or operácie plus vyhodnotenie priorít podľa zátvoriek.
  2. No keď som sa už mal do toho pustiť koncept som troška rozšíril a ďalšia funkčnosť by bol bezpečnostný filter nad DAL entitami, teda aby užívateľ videl len to čo treba.
  3. A pretože by sme radi na komunikáciu server-client použili REST, toto by sa dalo ideálne použiť na serializáciu/deserializáciu Expression, kde by sa po ceste tak nejak stratila typová závislosť, teda na rovnaký Expression pre rôzne triedy s rovnakými properties.

Čo je načrtnuté v bode 2, z bodu 3 je jasne vidieť. Expression je tá správna vec, čo potrebujem, pretože:

  • môžeme ho kompilovať a cachovať v tejto kompilovanej podobe
  • umožnuje používať premenlivé parametre
  • cez linq provider je prevediteľný do sql tvaru
  • a jednoducho sa mi zdá ako praktickejšie riešenie oproti kompilácii z C# kódu [Evaluate C# Code (Eval Function)] alebo čokoľvek iné, čo sa mi podarilo vygoogliť, tak týmto aspoň zatmelím dieru na trhu:)

Kto číta moje správičky na aspnet.sk určite vie, že ma proste takéto veci zaujímaju a keďže som to potreboval do jedného projektu a najmä dostal týždňové pracovné okno, nebolo inej voľby ako sa do toho pustiť. No uznajte pri takýchto úlohach musí človek milovať svoju prácu:)

Ako používať

Po nalinkovaní knižnice stačí vytvoriť inštanciu ExpressionEval, nastaviť jej patričný kód, zaregistrovať patričné parametre, namespaces pre vyhľadávanie typov, niečo ako using v C# a pretože to veru nie je žiaden kompilátor pre získanie typu je potrebné registrovať meno assembly. Vše ukončíte volaním funkcie Eval so špecifikovaním typu delegáta. Všetko pekne vo fluent formáte. A takto nejak to mam v unitteste:

 

        [TestMethod]

        public void SimpleLambda()

        {

            Expression<Func<int, int>> lambda = new ExpressionEval("Convert.ToInt32(String.Concat(\"3\", x.ToString().ToString()))")

                .AddParam<int>("x")

                .AddLookupAssembly("ExpressionEvalTest")

                .AddLookupNamespace("ExpressionEvalTest", "ExpressionEvalTest")

                .Eval<Func<int, int>>();

            int result = lambda.Compile().Invoke(1);

            Assert.AreEqual(31, result);

        }

Síce tie AddLookup funkcie sú tam len kvôli efektu, ale to je teraz nepodstatné, dôležité je vedieť čo podporujeme:

  • statické funkcie, properties a fieldy
  • funkcie, properties a fieldy parametra
  • string reťazce bez obmedzenia, teda viacriadkové a s úvodzovkami definovanými po C#ovsky: \"
  • numerické konštanty okrem toho že číslo s bodkou je desattinný float a bez bodky Int32 je umožnené definovať typy pomocou končiaceho textu, teda (posledné tri som si vymyslel, možno v budúcnosti pridam automatickú konverziu typov):
    • 12.1 - float
    • 12.1f - float
    • 12.1d - double
    • 12 - Int32
    • 12u - UInt32
    • 12l - Int64
    • 12ul - UInt64
    • 12s - Int16
    • 12us - UInt16
    • 12b - Byte
  • indexery
  • operátory (*,/,%,+,-,>,<.<=,>=,==,!=,|,^,&,||,&&, ...)
  • vytváranie inštancii pomocou new keywordu

Ak vás to viac zaujíma, pozrite si priložené unittesty.

Performance

Súčasťou projektu je aj program pre porovnanie výkonnosti. Tá je niekde na úrovni 60 násobku natívne zapísaného lambda výrazu. Poteší aspoň, že evaluácia je predsa len o trošku rýchlejšia ako deserializovanie pomocou MetaLinq.

A coding príbeh?

Pretože sú už dnes vianoce, veľa hodín a online budem až o pár dni, rád by som tento príspevok zverejnil už dnes. Inak by som bol nútený meniť úvod a pokaziť vám tento darček a to by ja nerád. Pre dnes aspoň načrtnem:

  • prvý na rad prichádza tokenizer, čo je jednoduchy regex výraz 

        private const string cTextRegexPart = @"""((?:(?:\\"")|[^""])*)""";

        private const string cExecutableRegexPart = @"(\w+)";

        private const string cDelimiterRegexPart = @"([\(\)\[\]\.,])";

        private const string cOperatorRegexPart = @"([^\w\(\)\[\]\.,\s]+)";

        private const string cCodeParserRegex = cTextRegexPart + "|" + cExecutableRegexPart + "|" + cDelimiterRegexPart + "|" + cOperatorRegexPart;

  • ďalší na rad prichádza stavový automat, ktorý prechádza tokenizovaný text a popritom si vytvára pomocnú tree štruktúru
  • tretím krokom je vygenerovanie expression tree z pomocnej tree štruktúry

TODO

  • ak je záujem tak podrobnejšie rozpísať jednotlivé body, tak dajte vedieť do diskusie
  • dorobiť podporu pre negáciu [!]
Posted: 24. prosince 2008 1:00 by vlko
Vedeno pod: ,

Komentář

morousej napsal:

Knihovna nejde stáhnout - 404 Not Found :( škoda, zrvona by se mi to hodilo

# prosince 29, 2008 17:24

vlko napsal:

Uz som linku opravil, tak ak sa najde problem v buducnosti, staci dat vediet na mail, alebo tu do komentarov.

# prosince 30, 2008 0:00

Vlko napísal ... napsal:

Zdrojové kódy: http://vlko.zilina.net/dwn/blog/ExpressionEval.zip Intermezzo Zaregistrovaním ExpressionEval

# dubna 28, 2009 15:44

Luckie napsal:

Very true! Makes a chnage to see someone spell it out like that. :)

# května 28, 2011 7:36

bppkcv napsal:

# května 28, 2011 10:01

rnsmbavyuk napsal:

TAckf1 , [url=http://okildubbivge.com/]okildubbivge[/url], [link=http://hjcscmzobnzm.com/]hjcscmzobnzm[/link], http://khkbdvqrmdkn.com/

# května 29, 2011 19:29

pxkjtrarxnw napsal:

# května 31, 2011 9:39

erjadvxo napsal:

oD9NVL , [url=http://foznrmzqkbol.com/]foznrmzqkbol[/url], [link=http://yiopdpwqdxit.com/]yiopdpwqdxit[/link], http://vwnrkdbhluch.com/

# června 1, 2011 19:34

KelTeerly napsal:

Cialis Femenino  [url=http://kamagra-pill.kamagorder.com]Kamagra Pill[/url] Prevacid Discount Coupon

# června 26, 2017 14:58

KelTeerly napsal:

Viagra Pills For Men  [url=http://priceofvia.com]viagra[/url] Cialis Y Mujeres

# června 30, 2017 21:48

KelTeerly napsal:

Prezzo Cialis E Levitra  [url=http://buycheapvia.com]viagra[/url] Allergic To Amoxicillin Hereditary

# července 3, 2017 3:55

ChasRegmep napsal:

Cialis Tablets20mg  [url=http://levinorx.com]generic viagra[/url] Zithromax Weekly

# července 10, 2017 11:52

Kennglalcops napsal:

Cialis 40 Mg Erectile Dysfunction  [url=http://onlinecial.com]viagra cialis[/url] Propecia Shedding To Work

# července 10, 2017 12:04

KelTeerly napsal:

Finasteride Propecia Side Effects  [url=http://femalecial.com]generic cialis[/url] Cialis Uso Diario

# července 15, 2017 4:24

Kennglalcops napsal:

Where Can I Buy Cyotec In The Us  [url=http://femalecial.com]cialis[/url] Magasin Levitra

# července 16, 2017 7:07

ChasRegmep napsal:

Trusted Algondones  [url=http://levinorx.com]viagra[/url] Propecia Efectos Caida Del Cabello

# července 21, 2017 3:03

KelTeerly napsal:

Brand Levitra 20mg Online India  [url=http://cheapviapill.com]online pharmacy[/url] Agitation Caused By Amoxicillin

# července 24, 2017 0:12

KelTeerly napsal:

Libido411  [url=http://onlinecial.com]cialis[/url] Amoxicillin For Canines Side Effects

# srpna 25, 2017 15:08

MiguEthilm napsal:

Kamagra Usage  [url=http://genericcial.com ]online pharmacy[/url] Recherche Kamagra

# září 29, 2017 17:35

MiguEthilm napsal:

Should I Take 1mg Or 5mg Of Propecia Online Pharmacies That Sell Misoprostol Does Zithromax Treat Strep Throat  [url=http://sildenaf100mg.com]viagra[/url] Find Progesterone 200mg Baclofene Geneve  

# října 6, 2017 13:54

MiguEthilm napsal:

Get 800 Mg Gabapentin Online  [url=http://cheapviapills.com]viagra[/url] Comprar Cialis Viagra Espana  

# října 9, 2017 15:35

Eveliny napsal:

Kamagra Effets Buy Lopressor Without Prescription  [url=http://brandciali.com]cialis[/url] Levitra Generic Lowest Prices  

# února 23, 2018 6:24

kamagra 100mg oral jelly india napsal:

kamagra store in nyc

<a href="http://kamagrabst.com/">kamagra">http://kamagrabst.com/">kamagra oral jelly kaufen paypal</a>

cost of kamagra jelly

[url=http://kamagrabst.com/]buy kamagra 100 mg[/url]

kamagra kopen amsterdam

http://kamagrabst.com/

kamagra novi sad

# dubna 5, 2018 1:01

kamagra oral jelly uk napsal:

kamagra 100 chewable review

[url=http://kamagrabst.com/]kamagra jelly usa[/url]

kamagra reviews forum

<a href="http://kamagrabst.com/">buy kamagra 100mg</a>

kamagra forum 2015

http://kamagrabst.com/

kamagra 100mg tablets for sale in uses

# dubna 6, 2018 7:27

kamagra online bestellen nederland napsal:

kamagra kopen in de winkel utrecht

[url=http://kamagrabst.com/]kamagra 100mg oral jelly review[/url]

kamagra oral jelly usa next day shipping uk

<a href="http://kamagrabst.com/">kamagra 100mg chewables ajanta</a>

kamagra reviews users

http://kamagrabst.com/

kamagra usage

# dubna 7, 2018 7:01

drugstore-usa.science napsal:

cost of without insurance http://drugstore-usa.science  for sale in uk.

# dubna 10, 2018 12:27

drugstore-usa science napsal:

buy online australia http://drugstore-usa.science/  can i get over the counter uk.

# dubna 11, 2018 18:21

medications napsal:

Buy safely online uk http://online-medications.men/  can you buy over the counter in new zealand.

# dubna 12, 2018 8:52

background check services napsal:

Federal case search by name,  http://background-check-services-for-landlords.science  nics background check delay phone number.

# dubna 14, 2018 21:06

background-check-services-for-employers napsal:

Lancaster ohio public records search,  http://background-check-services-for-employers.science/  public property records milwaukee wisconsin.

# dubna 15, 2018 8:47

background-check-services science napsal:

Nye county nevada court records,  http://background-check-services.science  california public records research inc.

# dubna 15, 2018 13:24

renter background check napsal:

Limited criminal history background check indiana,  http://background-check-renter.science/  bench warrant search broward county florida.

# dubna 15, 2018 16:21

background check for employers napsal:

Best background check programs,  http://background-check-service-for-employers.science  maricopa county criminal records.

# dubna 15, 2018 20:12

background check napsal:

Hiring a private detective,  http://background-check-records.science  douglas county oregon warrant search.

# dubna 16, 2018 0:39

background check napsal:

Nyc police arrest records,  http://background-check-providers.science  public criminal records ny free.

# dubna 16, 2018 4:51

check background napsal:

Tenant background check for landlords,  http://background-check-search.science/  crc background check.

# dubna 16, 2018 18:16

background check screening napsal:

Public records criminal history free,  http://background-check-screening.science/  background screening today show.

# dubna 17, 2018 9:13

check background napsal:

Jacksonville fl probate court records,  http://background-check-program.science/  background check on someone under 18.

# dubna 17, 2018 16:37

background-check-reviews science napsal:

Search deaths,  http://background-check-reviews.science/  search with ssn.

# dubna 17, 2018 19:42

background-check-locations stream napsal:

Find lost person,  http://background-check-locations.stream  roy utah public records.

# dubna 17, 2018 21:12

background-check-review napsal:

Van zandt county warrant search,  http://background-check-review.science/  federal dockets.

# dubna 18, 2018 7:58

background-check-job stream napsal:

Ancestors search,  http://background-check-job.stream/  what is on your background check.

# dubna 18, 2018 10:37

background check napsal:

Free personal background check australia,  http://background-check-results.science/  tenant credit check best.

# dubna 18, 2018 12:39

check background napsal:

Free criminal reports,  http://background-check-investigator.stream  how to find public records in arizona.

# dubna 18, 2018 14:25

reports background check napsal:

Police records in miami florida,  http://background-check-reports.science/  public arrest records missouri.

# dubna 18, 2018 19:31

report background check napsal:

Criminal history record new york,  http://background-check-report.science  how to do a background check in pa.

# dubna 19, 2018 0:14

background check renters napsal:

Prisoners inmate search,  http://background-check-renters.science  police records richmond ky.

# dubna 19, 2018 5:18

free check napsal:

Louisville ky criminal court records,  http://background-check-for-free.stream  background check companies europe.

# dubna 19, 2018 14:23

check background napsal:

Inmatelookup,  http://background-check-instant.stream/  polk county tennessee public records.

# dubna 19, 2018 16:10

background-check-for-employment.stream napsal:

Criminal background search texas,  http://background-check-for-employment.stream  jail records wisconsin.

# dubna 19, 2018 20:39

background check information napsal:

Criminal background lawsuit,  http://background-check-information.stream  montgomery county tn court records online.

# dubna 19, 2018 21:14

background history napsal:

Washington dc public records marriage,  http://background-check-history.stream  escambia county public criminal records.

# dubna 20, 2018 1:21

criminal records background check napsal:

How far back do employment background checks go in california,  http://background-check-criminal-records.stream/  landlord and tenant laws.

# dubna 20, 2018 9:15

background check government napsal:

Background check did I get the job,  http://background-check-government.stream  employee background check services malaysia.

# dubna 20, 2018 9:47

background check free criminal record stream napsal:

Cost of background checks for employment,  http://background-check-free-criminal-record.stream/  hamilton county oh criminal search.

# dubna 20, 2018 13:38

background-check-companies.stream napsal:

Warrant check el paso county,  http://background-check-companies.stream  los angeles clerk of court public records search.

# dubna 20, 2018 13:54

free background check napsal:

Criminal background check self,  http://background-check-free.stream/  miami gardens police department records.

# dubna 20, 2018 17:38

background-check-cheap stream napsal:

Public urination background check,  http://background-check-cheap.stream  can background checks show pending charges.

# dubna 20, 2018 20:31

background-check-for-rental napsal:

South carolina department of corrections public records,  http://background-check-for-rental.stream/  screen tenant.

# dubna 20, 2018 21:51

background check napsal:

Free nationwide arrest records,  http://background-and-criminal-check.stream/  arrest inmate search.

# dubna 21, 2018 1:17

background-check-for-landlords stream napsal:

Florida public records act,  http://background-check-for-landlords.stream  state of florida criminal record search.

# dubna 21, 2018 1:32

arrest-search napsal:

Background check authorization form landlord,  http://arrest-search.stream/  massachusetts employment application criminal history.

# dubna 21, 2018 5:47

arrest records napsal:

First name people search,  http://arrest-records-free.stream/  free yavapai county public records.

# dubna 21, 2018 10:18

arrest-record-search.stream napsal:

Person background,  http://arrest-record-search.stream  alameda county arrest records public.

# dubna 21, 2018 18:23

arrest lookup napsal:

Florida bankruptcy records,  http://arrest-lookup.stream/  background search online.

# dubna 21, 2018 22:06

background arrest record check napsal:

White county georgia public records,  http://arrest-record-background-check.stream/  federal prison inmates locator.

# dubna 21, 2018 23:25

background checks affordable napsal:

Whos in federal jail,  http://affordable-background-checks.stream  free public access to court records az.

# dubna 22, 2018 1:52

advanced-background-checks.stream napsal:

Arkansas birth records,  http://advanced-background-checks.stream/  california court records search.

# dubna 22, 2018 5:33

advanced background check stream napsal:

Public court records grand rapids mi,  http://advanced-background-check.stream  warrant search scott county.

# dubna 23, 2018 13:23

background checks napsal:

Apartment background check dui,  http://advance-background-checks.stream/  get a criminal background check on yourself.

# dubna 23, 2018 17:27

background check napsal:

How to find arrest records in north carolina,  http://advance-background-check.stream/  warrant check wyoming.

# dubna 23, 2018 21:21

accurate screening background napsal:

Uk employee checks,  http://accurate-background-screening.stream  police background check british columbia.

# dubna 24, 2018 1:07

accurate-background-checks.stream napsal:

Meck sheriff arrest lookup,  http://accurate-background-checks.stream  syracuse ny jail records.

# dubna 24, 2018 4:39

background check napsal:

Free background check phoenix az,  http://accurate-background-check.stream  rusk county texas public records.

# dubna 24, 2018 11:16

access background checks stream napsal:

Tennessee criminal background check laws,  http://access-background-checks.stream  dallas police department records for arrest.

# dubna 24, 2018 15:29

Pavilion napsal:

can i buy in new zealand http://www.jesuspavilion.org.uk/pharmacy/cambia  buy canada.

# května 2, 2018 19:31

rhythms medicine napsal:

can you get without a doctor http://www.rhythmschinesemedicine.co.uk/pharmacy/catapressan  getting from canada.

# května 2, 2018 23:34

gardens-4-u.com napsal:

cost per pill http://gardens-4-u.com/pharmacy/bapex  where to purchase in canada.

# května 3, 2018 2:16

davejohnsondesign.co.uk napsal:

Where can I buy online cheap http://www.davejohnsondesign.co.uk/pharmacy/pyrodex  buy cheap online.

# května 3, 2018 8:57

www.dancemax.co.uk napsal:

next day delivery australia http://www.dancemax.co.uk/pharmacy/provas  buying online uk safe.

# května 3, 2018 15:49

Lira Travel Tours napsal:

where can i buy online in canada http://liratravels.com/lira/pharmacy/droal  online overnight shipping.

# května 3, 2018 20:38

Steve Chappell napsal:

Online non prescription http://www.stevechappell.co.uk/pharmacy/antox  cost without health insurance.

# května 4, 2018 14:04

eastdevonremovals.co.uk napsal:

non prescription alternative http://eastdevonremovals.co.uk/mobile/pharmacy/droxia  for sale australia.

# května 4, 2018 22:53

benbecula football club napsal:

Where can I buy over the counter in canada http://www.benbeculafc.co.uk/pharmacy/ovol  Prix discount.

# května 5, 2018 12:09

uthaug marineservice no napsal:

cheap online http://uthaugmarineservice.no/pharmacy/hyflex  can i buy over the counter.

# května 5, 2018 19:00

super mummy napsal:

ordering generic http://www.supermummy.co.uk/pharmacy/mephaquin  where is the cheapest place to buy.

# května 5, 2018 19:13

Kent Metals napsal:

Where can I buy online cheap http://www.midkentmetals.co.uk/pharmacy/flaso  cmi australia.

# května 6, 2018 1:40

portraits action napsal:

generic for sale in canada http://www.actionportraits.co.uk/pharmacy/transamin  order online canada.

# května 6, 2018 8:01

Dancemax napsal:

cheap generic for sale http://www.dancemax.co.uk/pharmacy/ceflexin  non prescribed.

# května 6, 2018 17:53

Marionrob napsal:

kamagra 100mg oral jelly suppliers indianapolis in

<a href="http://kamagraonl.com/">buy">http://kamagraonl.com/">buy kamagra 100 mg</a>

kamagra 100mg tablets for sale in used cars

[url=http://kamagraonl.com/]kamagra 100 mg oral jelly[/url]

direct kamagra uk

http://kamagraonl.com/

kamagra oral jelly novi sad

# května 10, 2018 22:14

find cheap napsal:

# května 27, 2018 11:54

Real for sale uk napsal:

# května 28, 2018 13:14

purchase online usa napsal:

Buy online australia mastercard https://www.ning.com/?p=6870  where to buy for cheap.

# června 29, 2018 10:49
Vytvoření nového komentáře

(povinný) 

(povinný) 

(nepovinný)

(povinný) 

Opiš čísla, která vidíš na obrázku:

Upozornění na nové komentáře

Pokud chčeš dostávat upozornění emailem na změny u toho příspěvku,tak se zaregistruj zde.zde

Odebírat komentáře k tomuto příspěvku pomocí RSS

Vyvojar.cz na prodej!