d2jsp
Log InRegister
d2jsp Forums > Off-Topic > International > Magyar > Mekprogramozzuk Topic
Prev16465666768249Next
Add Reply New Topic New Poll
Member
Posts: 4,795
Joined: Apr 26 2007
Gold: 289.00
Oct 25 2014 01:55pm
Quote (Anarkin @ 25 Oct 2014 20:49)
szerintem annyira nem elrugaszkodott a valóságtól
volt egy jó hosszú google videó (valamelyik google IO-n) ahol a szakértő egy pár soros algoritmust úgy széthackelt 45 perc alatt, hogy majdnem c-gyors lett

ott van például a LUA nyelv, sok sok helyen használják, embeddelhető nyelv akármibe
pl WOW-ba így kell addonokat írni (sose wowoztam), de tudományos helyeken is használják

még az implementációját is meg lehet nézni (C-s), látszik hogy működik, ott a Stack, meg a globális dolgok, stb, csak úgy mint JavaScriptnél is láthatjuk azokat, ha pl VS-ben debuggoljuk a JScript Engine-t

egyik sem piszkálható assembly/bytecode/IL szinten (se a javascriptben nincs rá mód, se a lua-ban -- asszem), mégis tudnak azok is relatíve gyorsak lenni

10-15% performance loss (illetve a managed vs unmanaged történet) a mai világban csak ott jelenik meg kb, ahol feldolgozó algoritmusok futnak,
vagy pl gyártósorokon, hardware eszközön, ahol PONTOSAN 4 perc 23 másodperc 16 nanomásodperc alatt kell lefutnia valaminek (mert ezt egy GC-s környezetben nem igazán lehet garantálni, vagy csak olyan munkával, hogy akkor már egyszerűbb megírni natívan, célzott környezetre)



ja az kimaradt, vagy csak túl implicit volt :D
hát hogy COMPILE time garantáljuk, hogy csak egyszer hívhatóak meg a függvényei


Itt most arra gondolok, hogy egy olyan dinamikus nyelv, mint a javascript, hogyan tölthetné be hatékonyan egy "assembly" nyelv szerepét. És itt arra is gondolni kell, hogy nem feltétlenül jól megirt és optimalizált kódot kap a böngésző. Ellenben egy java szintű bytecode jóval több garanciát tud adni, mint egy random javascript kód. És a sebesség sem feltétlen kritikus, mert a biztonságot (sandbox) jobban szeretnénk, mint azt az 5% performance-t egy weboldal esetén. Remélem érted mit akarok mondani.

Feladvány: C++ lehet?
Member
Posts: 53,925
Joined: Apr 15 2007
Gold: 11,500.00
Trader: Trusted
Oct 25 2014 01:58pm
Quote (Jason89 @ 25 Oct 2014 20:55)
Itt most arra gondolok, hogy egy olyan dinamikus nyelv, mint a javascript, hogyan tölthetné be hatékonyan egy "assembly" nyelv szerepét. És itt arra is gondolni kell, hogy nem feltétlenül jól megirt és optimalizált kódot kap a böngésző. Ellenben egy java szintű bytecode jóval több garanciát tud adni, mint egy random javascript kód. És a sebesség sem feltétlen kritikus, mert a biztonságot (sandbox) jobban szeretnénk, mint azt az 5% performance-t egy weboldal esetén. Remélem érted mit akarok mondani.

Feladvány: C++ lehet?


jaja amúgy jogos, ezért is van az asm.js kezdeményezés, ami azt erőlteti hogy csak atomibb műveleteket csináljanak az emberek, amiket le lehet *somehow automagically* optimalizálni

Feladvány: lehet, mert kiváncsi vagyok rá én is, csak egy megoldást tudtunk eddig kitalálni pl C# alá, de az is undorító (egy funkcionális programozóval beszéltem róla és egy C-s öreg motorossal -- igaz mindkettő C#-ban dologozik most)
igazán jó nyelvi szintű megoldást nem tudtunk kitalálni, csak egy szörnyeteget, egy förmedvényt
Member
Posts: 4,795
Joined: Apr 26 2007
Gold: 289.00
Oct 25 2014 02:00pm
Quote (Anarkin @ 25 Oct 2014 20:58)
jaja amúgy jogos, ezért is van az asm.js kezdeményezés, ami azt erőlteti hogy csak atomibb műveleteket csináljanak az emberek, amiket le lehet *somehow automagically* optimalizálni

Feladvány: lehet, mert kiváncsi vagyok rá én is, csak egy megoldást tudtunk eddig kitalálni pl C# alá, de az is undorító (egy funkcionális programozóval beszéltem róla és egy C-s öreg motorossal -- igaz mindkettő C#-ban dologozik most)
igazán jó nyelvi szintű megoldást nem tudtunk kitalálni, csak egy szörnyeteget, egy förmedvényt


Nice, akkor egy kis technikai szünet. A megoldás C++11 lesz. :)
Member
Posts: 4,795
Joined: Apr 26 2007
Gold: 289.00
Oct 25 2014 02:36pm
Raw verzió, még lehet rajta csiszolni.

Code

#include <iostream>
#include <memory>
#include <type_traits>

// vegleges "osztaly"
struct TheClass
{
TheClass() { }
TheClass(int size, int scale) : size(size), scale(scale) { }

int size;
int scale;
};

// wrapper osztaly
template<int enables=3>
class Wrapper
{
std::unique_ptr<TheClass> cls;

public:
Wrapper() : cls(new TheClass) { }
Wrapper(std::unique_ptr<TheClass> & cls) : cls(std::move(cls)) { }

template<typename Dummy = char>
Wrapper<enables&(~1)> WithSize(int size, typename std::enable_if<!!(enables & 1), Dummy>::type* = 0)
{
cls->size = size;
return {cls};
}

template<typename Dummy = char>
Wrapper<enables&(~2)> WithScale(int scale, typename std::enable_if<!!(enables & 2), Dummy>::type* = 0)
{
cls->scale = scale;
return {cls};
}

operator TheClass()
{
return *cls;
}
};

typedef Wrapper<3> Class;

int main()
{
TheClass OK_1 = Class().WithSize(3);
TheClass OK_2 = Class().WithScale(3);
TheClass OK_3 = Class().WithSize(3).WithScale(3);
TheClass OK_4 = Class().WithScale(3).WithSize(3);
// TheClass FAIL = Class().WithSize(3).WithSize(5);

return 0;
}
Member
Posts: 53,925
Joined: Apr 15 2007
Gold: 11,500.00
Trader: Trusted
Oct 25 2014 02:48pm
Quote (Jason89 @ 25 Oct 2014 21:36)
Raw verzió, még lehet rajta csiszolni.


többnyire értem, kis guglizás után
the power of templates... :wacko:

a mi "szörnyetegünk" valami ilyesmi lett elméleti síkon, most le is pötyögtem
asszem Java még csak erre se lenne képes, és bosszant is hogy nem tudják ezek a nyelvek (mert ami most következik az a "nem tudás" kategória, sokkal inkább "cheating death")

Code
public class MyClass
{
public Color Color { get; private set; }
public Size Size { get; private set; }
public int Scale { get; private set; }

public Func<Color, Func<Size, Action<int>>> With()
{
return WithColor;
}

private Func<Size, Action<int>> WithColor(Color color)
{
Color = color;
return WithSize;
}

private Action<int> WithSize(Size size)
{
Size = size;
return WithScale;
}

private void WithScale(int scale)
{
Scale = scale;
}
}


usage is like

Code
var myClass = new MyClass();
myClass.With()
.Invoke(Color.Red)
.Invoke(new Size(10, 10))
.Invoke(5);


1) undorító, nem szabad ilyet leírni
2) sorrendhez kötött
3) nem lehet kihagyni egy paramétert (ha mondjuk itt nem akarnék Size-t adni, de Scale-t meg igen) ; csak akkor ha az összes permutációt szintén le kéne programozni

igazából T4 template generatorral simán meg tudnám csinálni, az class.gen.cs kódot köpne ki az összes permutációra
csak mondjuk 4-5 methodnál már 1000 soros lenne a class :D
de persze akkor ha két paraméter van ami int, akkor bukott az egész
UNLESS, minden property kap saját típust is, IntSize, IntScale, IntRadius :rofl:
szeretek elrugaszkodni a valóságtól, na..


de amúgy még a cpp-s templates megoldás is lehet macerás N paraméternél, el kell rajta gondolkozni ott is -- ha jól látom?

This post was edited by Anarkin on Oct 25 2014 02:50pm
Member
Posts: 4,795
Joined: Apr 26 2007
Gold: 289.00
Oct 25 2014 02:53pm
Quote (Anarkin @ 25 Oct 2014 21:48)
többnyire értem, kis guglizás után
the power of templates... :wacko:

a mi "szörnyetegünk" valami ilyesmi lett elméleti síkon, most le is pötyögtem
asszem Java még csak erre se lenne képes, és bosszant is hogy nem tudják ezek a nyelvek (mert ami most következik az a "nem tudás" kategória, sokkal inkább "cheating death")

Code
public class MyClass
    {
        public Color Color { get; private set; }
        public Size Size { get; private set; }
        public int Scale { get; private set; }

        public Func<Color, Func<Size, Action<int>>> With()
        {
            return WithColor;
        }

        private Func<Size, Action<int>> WithColor(Color color)
        {
            Color = color;
            return WithSize;
        }

        private Action<int> WithSize(Size size)
        {
            Size = size;
            return WithScale;
        }

        private void WithScale(int scale)
        {
            Scale = scale;
        }
    }


usage is like

Code
var myClass = new MyClass();
            myClass.With()
                .Invoke(Color.Red)
                .Invoke(new Size(10, 10))
                .Invoke(5);


1) undorító, nem szabad ilyet leírni
2) sorrendhez kötött
3) nem lehet kihagyni egy paramétert (ha mondjuk itt nem akarnék Size-t adni, de Scale-t meg igen) ; csak akkor ha az összes permutációt szintén le kéne programozni

igazából T4 template generatorral simán meg tudnám csinálni, az class.gen.cs kódot köpne ki az összes permutációra
csak mondjuk 4-5 methodnál már 1000 soros lenne a class :D
de persze akkor ha két paraméter van ami int, akkor bukott az egész
UNLESS, minden property kap saját típust is, IntSize, IntScale, IntRadius :rofl:
szeretek elrugaszkodni a valóságtól, na..


Invoke? Elég csúnyácska, ilyet tényleg nem szabad írni. :P

Igen, pont a permutációk miatt találtam ki a bitfield-et (OK_3, OK_4). A megoldásomban egyedül a kezdő érték a fontos, de azt lehet typedef-elni. Ha pedig 32 attribútumnál több kell, akkor lehet 64 is (long long), vagy akár több template paraméter.
Btw, a kódban pár dolog fölösleges, lehet belőle törölni.
Member
Posts: 4,795
Joined: Apr 26 2007
Gold: 289.00
Oct 25 2014 02:55pm
Quote (Anarkin @ 25 Oct 2014 21:48)

de amúgy még a cpp-s templates megoldás is lehet macerás N paraméternél, el kell rajta gondolkozni ott is -- ha jól látom?


Esetleg lehet enum-ba szedni a feature-öket. Mondom, raw verzió. :D
Member
Posts: 53,925
Joined: Apr 15 2007
Gold: 11,500.00
Trader: Trusted
Oct 25 2014 03:05pm
Quote (Jason89 @ 25 Oct 2014 21:55)
Esetleg lehet enum-ba szedni a feature-öket. Mondom, raw verzió. :D


elég pöpec!

most gondolkoztam azon, ezt hogy kezeli le a cpp (egy Svéd sráccal brainstormingoltunk) ->

azon gondolkozunk, hogy ezért mondják hogy a C++ templatek "fucked up" amúgy?

ez most konkrétan compile time legenerál nekünk rohadt sok különböző classt az assemblybe? mert ez nem runtime van kezelve, ha jól látom az interneten / ha jól tudjuk
Member
Posts: 4,795
Joined: Apr 26 2007
Gold: 289.00
Oct 25 2014 03:09pm
Quote (Anarkin @ 25 Oct 2014 22:05)
elég pöpec!

most gondolkoztam azon, ezt hogy kezeli le a cpp (egy Svéd sráccal brainstormingoltunk) ->

azon gondolkozunk, hogy ezért mondják hogy a C++ templatek "fucked up" amúgy?

ez most konkrétan compile time legenerál nekünk rohadt sok különböző classt az assemblybe? mert ez nem runtime van kezelve, ha jól látom az interneten / ha jól tudjuk


Minden compile time történik. És igen, egy rakás szimbólum fog létrejönni. De! Ha kérsz optimalizációt (és miért ne kérnél), akkor kb nem marad az egészből semmi, mert kioptimalizálja a közbülső, temporális osztályokat.

edit: Ja, és nem "fucked up", hanem zseniális. :D

This post was edited by Jason89 on Oct 25 2014 03:09pm
Member
Posts: 53,925
Joined: Apr 15 2007
Gold: 11,500.00
Trader: Trusted
Oct 25 2014 03:24pm
Quote (Jason89 @ 25 Oct 2014 22:09)
Minden compile time történik. És igen, egy rakás szimbólum fog létrejönni. De! Ha kérsz optimalizációt (és miért ne kérnél), akkor kb nem marad az egészből semmi, mert kioptimalizálja a közbülső, temporális osztályokat.

edit: Ja, és nem "fucked up", hanem zseniális. :D


ez még egy érdekes dolog lehet, milyen szinten képes erre
ha mondjuk valami minimálisan komplexebb logika lenne benne, több ilyen "leíróval", amit több helyen használunk feltételként
na majd ha meguntam mindent elkezdek ennek a lelkébe is belenézni
.net is precompileolja a genericeket, de ott nem lehet feltételhez kötni ilyen dolgokat mint amit láthatunk fent - szóval ez a permutációs robbanás sem létezik, csak annyi class lesz, amennyire hivatkoznak kül. typeokkal
(ez még mindig jobb mint a Java, ahol a generic = object, és minden alkalommal felcastolja :DD)
érdekes téma, az ilyeneket likeolom

This post was edited by Anarkin on Oct 25 2014 03:26pm
Go Back To Magyar Topic List
Prev16465666768249Next
Add Reply New Topic New Poll