Re[11]: Who the fu..in guy is Gartner Hype Cycle? Ликбез.
От: Gaperton http://gaperton.livejournal.com
Дата: 09.09.08 01:48
Оценка: 52 (3)
Здравствуйте, mkizub, Вы писали:

M>Здравствуйте, Gaperton, Вы писали:


G>>Ты ошибаешься не в том, что первично, а что вторично, а в том, что вообще пытаешься связать это причинно-следственными связями. В природе и мире есть масса явлений, которые не являются причиной и следствием друг друга, а просто взаимосвязаны, идут в паре, и не могут друг без друга существовать. Как курица и яйцо. Это просто два аспекта одного и того же, и все.


M>Да, но есть сам процесс, есть причины его вызвавшие и правила по которым он развивается. У него есть разные проявления, его можно анализировать, его можно рассматривать с разных точек зрения. Говоря о развитии технологии, мы можем его рассматривать с точки зрения его положения на кривой хайпа, а можем его рассматривать с точки зрения его жизненного цикла (вроде цикла — становление, экспансия, стагнация, рецессия), и пр. Но если ты хочешь быть эффективен — тебе нужно знать причины, а не следствия. Не в том смысле, что следствия нам не интересны, а в том смысле, что влияя или зная причины — мы можем вывести, предсказать, повлиять на следствия. Это как стратегия и тактика. Очень важно вести себя правильно тактически, но выиграет тот, у кого правильная стратегия (при условии, конечно, что тактически они ведут себя правильно).


Прочитал твой ответ целиком. Кажется, я понял твою проблему. Тебе не Гартнер нужен. Тебе нужно вот это. Я начал месяц назад это переводить, думая опубликовать перевод, но не закончил. Ты по английски читаешь? Короче, даю как есть. 17 самых распространенных ошибок стартапщиков от профессионального успешного стартапщика.

Mistake 1: Failing to spend enough time researching the business idea to see if it's viable. "This is really the most important mistake of all. They say 9 [out] of 10 entrepreneurs fail because they're undercapitalized or have the wrong people. I say 9 [out] of 10 people fail because their original concept is not viable. They want to be in business so much that they often don't do the work they need to do ahead of time, so everything they do is doomed. They can be very talented, do everything else right, and fail because they have ideas that are flawed."

Недостаточно много времени уделено исследованию бизнес-идеи с целью понять, насколько она жизнеспособна. "Это действительно самая важная ошибка из всех. Говорит — 9 из 10 предпринимателей не достигли успеха из-за недостатка финансирования или плохой команды. Я скажу — 9 из 10 не достигли успеха потому, что их изначальная концепция не была жизнеспособна. Они до такой степени хотят быть в бизнесе, что часто не делают работы, которую они должны провести в первую очередь, и в результате все что они делают проваливается. Они могут быть очень талантливы, и делать все остальное правильно, и провалиться только потому, что их идеи содержат изъяны.

Mistake 2: Miscalculating market size, timing, ease of entry and potential market share. "Most new entrepreneurs get very excited over an idea and don't look for the truth about how many people will want to buy it. They put together financial projections as part of a presentation to pump up their investors. They say, 'The market size is 50 million people that could use this product, and if I could only sell to 2 percent of them, I'd be selling a million pieces.' But 2 percent of a market is a lot. Most products sell way less than 1 percent."

Неверная оценка объема рынка, времени, простоты вхождения и потенциальной доли рынка. "Большая часть начинающих предпринимателей с восторгом относятся к своей идее, и не обращают внимание на правду о том, насколько много людей захотят ее купить. Они вкладывают свои финансовые прогнозы в презентацию с целью привлечь инвесторов. Они говорят "объем рынка — 50 миллионов человек, которые могут использовать данный продукт, и если я смогу продать двум процентам из них, я продам миллион экземпляров". Но два процента рынка — это в действительности очень много. Большинство продуктов продается гораздо меньше, чем одному проценту.

Mistake 3: Underestimating financial requirements and timing. "They set their financial requirements based on Mistake 1, and they go ahead and make a commitment to this much office space and this many computers, and hire a vice president of sales, and so on. Before they know it, based on sales projections that were wrong to start with, they have created costs that require those projections to be met. So they run out of money."

Недооценка временных и финансовых требований. "Они ставят свои финансовые требования основываясь на первой ошибке, начинают, арендуют большие офисы, закупают много компьютеров, нанимают вице-президента по продажам, и далее в том же духе. Перед тем как они узнают, что их прогнозы продаж были изначально ошибочны, они создают затраты, которые требуют, чтобы эти прогнозы были верны. И таким образом, них кончаются деньги.

Mistake 4: Overprojecting sales volume and timing. "They have already miscalculated the size of the market. Now they overproject their portion of it. They often say 'There are 200 million homes, and I need to sell [to] x number of them.' When you break it down, though, a much smaller number of those are really sales prospects. That makes it impossible to make their sales projections."



Mistake 5: Making cost projections that are too low. "Their cost projections are always too low. Part of the reason is that they project much higher sales. There are also unknown reasons that always come out that usually make costs higher than planned. So on top of everything, their margins are now lower."

Mistake 6: Hiring too many people and spending too much on offices and facilities. "Now you have lower sales, higher costs and too much overhead. These are the things that you see every day in companies that fail. And they all grow out of that first mistake: failing to research the size and viability of the opportunity."

Mistake 7: Lacking a contingency plan for a shortfall in expectations. "Even if you're realistic in your estimates to start, there are things that happen when you start a new business. Your sales ideas may be no good; bank rates may go up; there may be a shipping strike. These aren't the result of poor planning, but they happen. More often than not, entrepreneurs just feel that something will come along when they need it. They don't have contingency plans for it not working out at the size and time they want."

Mistake 8: Bringing in unnecessary partners. "There are certain partners you need. For instance, you often need money, so you're going to need money partners. But too many times, the guy with the idea takes on all his friends as partners. Many people don't provide strategic advantages and don't warrant ownership. But they're all going to get 25 percent of the company. It's totally unnecessary, and it's a mistake. Before people are made partners, they have to earn it."

Mistake 9: Hiring for convenience rather than skill requirements. "In my first business or two, I hired relatives. It was easy to do, but in many cases, they were the wrong people [for the job]. And it's hard to fire people, especially if they're relatives or friends. More time needs to be spent handpicking people based on skill requirements. You really need super-skilled people who can wear more than one hat. It just bogs you down when you hire people who can't do the job."

Mistake 10: Neglecting to manage the entire company as a whole. "You see this happen all the time. They'll spend half their time doing something that represents 5 percent of their business. You have to have a view of your whole company. But too often, the person running it loses that view. They get involved in a part, and they don't manage the whole. Whether I do this product or that product, whether I hire somebody, [I consider] how they [will] fit long term and short term in the big picture. Constantly try to see your big picture."

Mistake 11: Accepting that it's "not possible" too easily rather than finding a way. "I had an engineer who was a very good engineer, but with every toy we developed, he would say, 'You can't do it that way.' I had to be careful not to accept this too easily. I had to look further. If you're an entrepreneur, you're going to break new ground. A lot of people are going to say it's not possible. You can't accept that too easily. A good entrepreneur is going to find a way."

Mistake 12: Focusing too much on sales volume and company size rather than profit. "Too much of your management is often based on volume and size. So many entrepreneurs want to say 'I have a company that's this big, with this many people, this many square feet of space, and this much sales.' It's too much [emphasis] on how fast and big you can build a business rather than how much profit it can make. Bankers and investors don't like this. Entrepreneurs are so into creating and building, but they also have to learn to become good [businesspeople]."

Mistake 13: Seeking confirmation of your actions rather than seeking the truth. "This often happens: You want to do something, so you talk about it with people who work for you. You talk to [your] family and friends. But you're only looking for confirmation; you're not looking for the truth. You're looking for somebody to tell you you're right. But the truth always comes out. So we [test] our products, and we listen to what [the testers] say. We give much more value to the truth than to people saying what we're doing is great."

Mistake 14: Lacking simplicity in your vision. "Many entrepreneurs go in too many directions at once and do not execute anything well. Rather than focusing on doing everything right to sell to their biggest markets, they divide the attention of their people and their time, trying to do too many things at [one time]. Then their main product isn't done properly because they're doing so many different things. They have an idea and say they're going to sell it to Wal-Mart. Then they say they're going to sell to [the] Home Shopping Network. And then the gift market looks good. And so on."

Mistake 15: Lacking clarity of your long-term aim and business purpose. "You should have an idea of what your long-term aim is. It doesn't mean that won't change, but when you aim an arrow, you have to be aiming at a target. This [concept will] often come up when people ask 'How do I pick a product?' The answer depends on what you're trying to do. If you're trying to [create] a billion-dollar company with this product, it may not have a chance. But if you're trying to make a $5 million company, it can work. Or if you're trying to create a company [in which] family members can be employed, it can work. Clarity of your business purpose is very important [but] is often not really part of the thought process."

Mistake 16: Lacking focus and identity. "This was written from the viewpoint of building the company as a valuable entity. The company itself is also a product. Too many companies try to go after too many targets at once and end up with a potpourri rather than a focused business entity with an identity. When you try to make a business, it's very important to maintain a focus and an identity. Don't let it become a potpourri, or it loses its power. For instance, you say, 'We're already selling to Kmart, so we might as well make a toy because Kmart buys toys.' If you do that, the company becomes weaker. A company needs to be focused on what it is. Then its power builds from that."

Mistake 17: Lacking an exit strategy. "Have an exit plan, and create your business to satisfy that plan. For instance, I am thinking I might run my new business for two years and then get out of it. I think it's an opportunity to make a tremendous amount of money for two years, but I'm not sure [whether] it's proprietary enough to stop the competition from getting in. So I'm in with an exit strategy of doing it for two years and then winding down. I won't commit to long-term leases, and after the first year, we'll start watching the marketplace very closely and start watching inventories.

Re[18]: Судьба новых идей, или почему прогресс идет так медл
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.09.08 05:29
Оценка:
Здравствуйте, IT, Вы писали:

IT>Была одна фича от комьюнити (напланировали конечно много) и ту зарубили А ты говоришь нельзя предугадать ход мыслей разработчиков.


Оно конечно, если поплевать в потолок, то можно много чего напридумывать, но лично я не берусь предсказать даже очень примерно направление развития шарпа.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[28]: Судьба новых идей, или почему прогресс идет так медл
От: cadet354 Россия
Дата: 09.09.08 05:33
Оценка:
Здравствуйте, AndrewVK, Вы писали:


AVK>Т.е. ты сознательно привел не относящуюся к делу информацию в качестве аргумента.

фраза про религиозного фанатика относилась к тому, что Фишер не является хорошим, да и вообще примером борьбы гражданина США против политики государства. Так же как и наши "закопанцы" ждавшие конца света.

AVK>А это уже не важно. Я просто привел пример того, что станет с человеком, который попробует переть против политики государства.

важно, в данном случае он нарушал его законы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[12]: Who the fu..in guy is Gartner Hype Cycle? Ликбез.
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 09.09.08 07:18
Оценка: +1
Здравствуйте, Gaperton, Вы писали:

G>17 самых распространенных ошибок стартапщиков от профессионального успешного стартапщика.


Спасибо, было очень интересно почитать (а ссылочка на первоисточник есть?).

Только вот создается впечатление, что эти советы не на 100% полезны в случае развития какой-то новой технологии. Скорее это советы для тех, у кого есть идея продукта и им требуется пара-тройка лет и N денежек для вывода продукта на рынок. Вот скажем, есть язык Pascal, который сам по себе не продукт. Тогда как компилятор Turbo Pascal -- тот самый продукт, который и стал стартовой точкой для успешного стартапа. Все 17 упомянутых советов очень хорошо относятся именно к Turbo Pascal, но вряд ли бы они пригодились при создании самого языка Pascal.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: Судьба новых идей, или почему прогресс идет так медле
От: mkizub Литва http://symade.tigris.org
Дата: 09.09.08 07:41
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, mkizub, Вы писали:


M>>Очевидно, дорабатывать его надо тем, кто его хочет использовать.

AVK>Все, не продано.

А что, кто-то покупал? Ты готов заплатить денег разработчикам Nemerle?

M>>Тут либо доработка сложна, либо бенефит получится незначительный.


AVK>Тут, такое дело, как раз и есть вся соль. При наличии стандарта языка эту работу за меня сделает JetBrains и я за скромную сумму ей воспользуюсь. При том что самостоятельная разработка даже более менее сложного плагина к решарперу не окупится никогда.


Какие проекты — такие и инструменты. Если твоим проектам с головой хватает продуктов JetBrains — то и покупай у них. Это будет правильно.
А если тебе их не хватает? Когда твой проект вырастет на десяток мегабайт исходников — перестанет хватать.
Будет намного дешевле написать "плагин", который твой десяток мегабайт превратит в три-четыре, и над проектом можно будет работать
дальше. Вместо чтоб нанять ещё сотню программистов, и завести проект в совсем убитое состояние.
Вот тут проблема Nemerle и вылазит. Нельзя перейти на Nemerle, когда перестаёт хватать C#.
Но это проблема Nemerle как такового, а не принципиально нерешаемая проблема.
Скажем, SymADE проектируется так, что эта проблема в нём будет решена.
Или за счёт чего так поднялся AOP? Его можно начать использовать в любой момент. Пусть он не настолько наворочен, как Nemerle, но он совместим с уже имеющимся кодом.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[12]: Who the fu..in guy is Gartner Hype Cycle? Ликбез.
От: mkizub Литва http://symade.tigris.org
Дата: 09.09.08 07:47
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Прочитал твой ответ целиком. Кажется, я понял твою проблему. Тебе не Гартнер нужен. Тебе нужно вот это. Я начал месяц назад это переводить, думая опубликовать перевод, но не закончил. Ты по английски читаешь? Короче, даю как есть. 17 самых распространенных ошибок стартапщиков от профессионального успешного стартапщика.


Спасибо, я читал этот текст.
Понятно, что ответить мне на него особенно нечего. То есть я могу долго рассказывать, почему мои оценки правильные.
Но это будет выглядеть как профессор физики, рассказывающий почему его теория правильная — увы, инвестор
всё равно не поймёт, поскольку физики и математики в этом объёме он не знает. И разумеется, профессор не сможет
определить правильные объёмы инвестирования и стратегию сбыта — он в этом так-же мало смыслит, как
инвестор в физике.
Так они и жили.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[7]: Судьба новых идей, или почему прогресс идет так медле
От: dotidot Россия  
Дата: 09.09.08 07:56
Оценка:
Здравствуйте, mkizub, Вы писали:

M>Какие проекты — такие и инструменты. Если твоим проектам с головой хватает продуктов JetBrains — то и покупай у них. Это будет правильно.

M>А если тебе их не хватает? Когда твой проект вырастет на десяток мегабайт исходников — перестанет хватать.
M>Будет намного дешевле написать "плагин", который твой десяток мегабайт превратит в три-четыре, и над проектом можно будет работать
M>дальше. Вместо чтоб нанять ещё сотню программистов, и завести проект в совсем убитое состояние.
M>Вот тут проблема Nemerle и вылазит. Нельзя перейти на Nemerle, когда перестаёт хватать C#.

а можно пример перехода с десятков мегабайт на вообще что-то другое? обычно у менеджмента одна только мысль о подобном святотатстве(ну как — мы же 5ть лет фигачили, вложили миллионы итд итп) вызывает бурные всплески гнева.
Re[8]: Судьба новых идей, или почему прогресс идет так медле
От: mkizub Литва http://symade.tigris.org
Дата: 09.09.08 08:20
Оценка:
Здравствуйте, dotidot, Вы писали:

D>а можно пример перехода с десятков мегабайт на вообще что-то другое? обычно у менеджмента одна только мысль о подобном святотатстве(ну как — мы же 5ть лет фигачили, вложили миллионы итд итп) вызывает бурные всплески гнева.


Скажем, у меня в компиляторе поддерживается версионное AST дерево. Для этого все обращения к полям AST узлов заменяются на getter/setter-ы, которые генерируются автоматически, или переписываются объявленные явно. Кроме того, генерируется мета-информация доступная в рантайм для полей аттрибутов/child узлов AST узлов. Это позволяет обходить дерево не используя вручную написанных visitor-ов и многое другое.
Вот такой код (я специально беру пример попроще, а то большой фиг разберемся)

@ThisIsANode
public class Binding extends ENode {
    @nodeAttr public UIEvent∅ events;
    
    @SymbolRefAutoComplete @SymbolRefAutoResolve
    @nodeAttr
    public final Action⇑ action;

    public String toString() { return "bind action: "+action+" to {"+Arrays.toString(events)+")"; }

}


Превращается в

public class Binding extends ENode
{
    static final class NodeAttr_events extends SpaceAttAttrSlot
    {

        public final ANode[] getArray(ANode parent)
        {
            return ((Binding)parent).getEvents();
        }

        public final void setArray(ANode parent, Object narr)
        {
            ((Binding)parent).setEvents((UIEvent[])narr);
        }

        NodeAttr_events(String name, TypeInfo typeinfo)
        {
            super(name, typeinfo);
        }
    }

    static final class NodeAttr_action extends AttAttrSlot
    {

        public final Object get(ANode parent)
        {
            return ((Binding)parent).getAction();
        }

        public final void set(ANode parent, Object val)
        {
            throw new RuntimeException("@nodeAttr action is not writeable");
        }

        public final boolean isWrittable()
        {
            return false;
        }

        NodeAttr_action(String name, TypeInfo typeinfo)
        {
            super(name, typeinfo);
        }
    }

    public static class VVV extends kiev.vlang.ENode.VVV
    {

        UIEvent events[];

        public VVV(Binding node)
        {
            super(node);
            events = node.events;
        }
    }


    public String toString()
    {
        return (new StringBuilder()).append("bind action: ").append(getAction()).append(" to {").append(Arrays.toString(getEvents())).append(")").toString();
    }

    public Binding()
    {
        setEvents((UIEvent[])((AttrSlot) (nodeattr$events)).defaultValue);
        action = new SymbolRef($typeinfo$1);
        if(getAction() != null)
            getAction().callbackAttached(this, nodeattr$action);
    }

    public final void setEvents(UIEvent value[])
    {
        if(ASTNode.EXECUTE_UNVERSIONED || !isVersioned())
            events = value;
        else
        if(Thread.currentThread().getThreadGroup() == CompilerThreadGroup.$instance)
            ((Binding)ASTNode.openCmp(this)).events = value;
        else
            ((VVV)ASTNode.openEdt(this)).events = value;
    }

    public final UIEvent[] getEvents()
    {
        return !ASTNode.EXECUTE_UNVERSIONED && Thread.currentThread().getThreadGroup() != CompilerThreadGroup.$instance && super.v_editor != null ? ((VVV)super.v_editor).events : events;
    }

    public final SymbolRef getAction()
    {
        return action;
    }

    public AttrSlot[] values()
    {
        return $values;
    }

    public Language getCompilerLang()
    {
        return (Language)null;
    }

    public String getCompilerNodeName()
    {
        return "Binding";
    }

    public Object copyTo(Object to$node, kiev.vtree.ANode.CopyContext in$context)
    {
        Binding node = (Binding)super.copyTo(to$node, in$context);
        nodeattr$events.copyFrom(node, getEvents(), in$context);
        getAction().copyTo(node.getAction(), in$context);
        return node;
    }

    protected void walkTreeFastVisit(TreeWalker $walker)
    {
        $walker.visitANodeSpace(getEvents());
        $walker.visitANode(getAction());
        super.walkTreeFastVisit($walker);
    }

    public void nodeRestore(kiev.vtree.ASTNode.VVV from)
    {
        VVV from = (VVV)from;
        events = from.events;
        super.nodeRestore(from);
    }

    public kiev.vtree.ASTNode.VVV nodeBackup()
    {
        return new VVV((Binding)this);
    }

    UIEvent events[];
    final SymbolRef action;
    public static final NodeAttr_events nodeattr$events;
    public static final NodeAttr_action nodeattr$action;
    private static final AttrSlot $values[];
    static final TypeInfo $typeinfo$0;
    static final kiev.vlang.SymbolRef.__ti__ $typeinfo$1;

    static 
    {
        $typeinfo$0 = TypeInfo.newTypeInfo(kiev/fmt/evt/Action, null);
        $typeinfo$1 = kiev.vlang.SymbolRef.__ti__.newTypeInfo(kiev/vlang/SymbolRef, new TypeInfo[] {
            $typeinfo$0
        });
        nodeattr$events = new NodeAttr_events("events", TypeInfo.newTypeInfo(kiev/fmt/evt/UIEvent, null));
        nodeattr$action = new NodeAttr_action("action", kiev.vlang.SymbolRef.__ti__.newTypeInfo(kiev/vlang/SymbolRef, new TypeInfo[] {
            $typeinfo$0
        }));
        $values = (new AttrSlot[] {
            nodeattr$events, nodeattr$action, ENode.nodeattr$ident, ENode.nodeattr$qualified, ENode.nodeattr$primary_expr, ENode.nodeattr$super_expr, ENode.nodeattr$symbol, ENode.nodeattr$type_lnk, ENode.nodeattr$dnode, ANode.nodeattr$parent
        });
    }
}
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[9]: Судьба новых идей, или почему прогресс идет так медле
От: prVovik Россия  
Дата: 09.09.08 08:42
Оценка:
Здравствуйте, mkizub, Вы писали:

M>Вот такой код (я специально беру пример попроще, а то большой фиг разберемся)


M>
M>...
M>


M>Превращается в


M>
M>...
M>



То есть это просто автоматическая генерация кода?
лэт ми спик фром май харт
Re[10]: Судьба новых идей, или почему прогресс идет так медл
От: mkizub Литва http://symade.tigris.org
Дата: 09.09.08 09:06
Оценка:
Здравствуйте, prVovik, Вы писали:

V>То есть это просто автоматическая генерация кода?


В данном случае — да. Вопрос же был о том, как из десятков мегабайт сделать намного меньше.
Ясен пень, это делается кодогенерацией.
Но у меня есть и других примеров, скажем, полностью интегрированный logic engine.
Из кода (очень простого, реально эти правила бывают и на страницу кода)

    @nodeAttr
    public ASTNode∅                members;

    public rule resolveNameR(ResInfo path)
    {
        path ?= this
    ;
        path @= members
    ;
        path.isSuperAllowed(),
        parent_set.dnode != null,
        path.getPrevSlotName() != "parent_set",
        path.enterSuper() : path.leaveSuper(),
        parent_set.dnode.resolveNameR(path)
    }


генерится (увы, декомпилятор плохо справляется — поэтому промежуточный, а потом
декомпилированный код)


#{
                    @static class frame$$ extends rule {
                                        frame$$(){}
                                        int bt$;
                                        int bt$0;
                                        int bt$1;
                                        kiev.vtree.NodeSpaceEnumerator $iter$0;
                                        kiev.stdlib.rule $rc$frame$1;
                    }
                    frame$$ $env;
                    int bt$;
                    if ( $env$ == null ) {
                                        $env = new frame$$();
                                        bt$ = 0;
                                        goto enter$1;
                    } else {
                                        $env = ($cast frame$$) $env$;
                                        bt$ = $env.bt$;
                    }
                    switch ( bt$ ) {
case 0 :
                    return null;
enter$1:
                    if ( path.$is_bound )
                                        goto bound$1;
                    if ( ! path.$bind_chk(this) )
                                        goto enter$2;
                    $env.bt$0 = bt$;
                    bt$ = 1;
                    $env.bt$ = bt$;
                    return $env;
case 1 :
                    path.$unbind();
                    bt$ = $env.bt$0;
                    goto enter$2;
bound$1:
                    if ( ! path.equals(this) )
                                        goto enter$2;
                    $env.bt$ = bt$;
                    return $env;
enter$2:
                    if ( path.$is_bound )
                                        goto bound$2;
                    $env.bt$0 = bt$;
                    bt$ = 2;
                    $env.$iter$0 = members.elements();
case 2 :
                    while ( $env.$iter$0.hasMoreElements() ) {
                                        if ( ! path.$rebind_chk($env.$iter$0.nextElement()) )
                                                            continue #id""#;
                                        $env.bt$ = bt$;
                                        return $env;
                    }
                    $env.$iter$0 = null;
                    path.$unbind();
                    bt$ = $env.bt$0;
                    goto enter$3;
bound$2:
                    $env.bt$0 = bt$;
                    bt$ = 2 + 1;
                    if ( members.contains(path.$var) ) #{
                                        $env.bt$ = bt$;
                                        return $env;
                    }
case 2 + 1 :
                    bt$ = $env.bt$0;
                    goto enter$3;
enter$3:
                    {
                                        if ( ! ( path.isSuperAllowed() && parent_set.dnode != null && path.getPrevSlotName() != "parent_set" ) )
                                                            return null;
                    }
enter$4:
                    {
                                        $env.bt$0 = bt$;
                                        bt$ = 4;
                                        path.enterSuper();
                                        goto enter$5;
                    }
case 4 :
                    {
                                        path.leaveSuper();
                                        return null;
                    }
enter$5:
                    $env.bt$1 = bt$;
                    bt$ = 5;
case 5 :
                    if ( ! ( $env.$rc$frame$1 = parent_set.dnode.resolveNameR(path) ) ) #{
                                        bt$ = $env.bt$1;
                                        goto case bt$;
                    }
                    $env.bt$ = bt$;
                    return $env;
                    }
                    return null;
}


    public rule resolveNameR(rule $env$, ResInfo path)
    {
        if($env$ != null) goto _L2; else goto _L1
_L1:
        static class frame.. extends rule
        {

            int bt$;
            int bt$0;
            int bt$1;
            NodeSpaceEnumerator $iter$0;
            rule $rc$frame$1;

            frame..()
            {
            }
        }

        frame.. $env;
        int bt$;
        $env = new frame..();
        bt$ = 0;
        if(!path.is$is_bound())
        {
            if(path.$bind_chk(this))
            {
                $env._fld0 = bt$;
                bt$ = 1;
                $env. = bt$;
                return $env;
            }
        } else
        if(path.equals(this))
        {
            $env. = bt$;
            return $env;
        }
          goto _L3
_L2:
        $env = (frame..)$env$;
        bt$ = $env.;
        bt$;
_L16:
        JVM INSTR tableswitch 0 5: default 392
    //                   0 68
    //                   1 111
    //                   2 177
    //                   3 267
    //                   4 329
    //                   5 347;
           goto _L4 _L5 _L6 _L7 _L8 _L9 _L10
_L5:
        return (rule)null;
_L6:
        path.$unbind();
        bt$ = $env._fld0;
_L3:
        if(!path.is$is_bound()) goto _L12; else goto _L11
_L12:
        $env._fld0 = bt$;
        bt$ = 2;
_L7:
        for($env._fld0 = new NodeSpaceEnumerator(getMembers()); $env._fld0.hasMoreElements();)
            if(path.$rebind_chk((ASTNode)$env._fld0.nextElement()))
            {
                $env. = bt$;
                return $env;
            }

        $env._fld0 = null;
        path.$unbind();
        bt$ = $env._fld0;
          goto _L13
_L11:
        $env._fld0 = bt$;
        bt$ = 3;
        if(NodeSpaceEnumerator.contains(getMembers(), path.get$var()))
        {
            $env. = bt$;
            return $env;
        }
_L8:
        bt$ = $env._fld0;
_L13:
        if(!path.isSuperAllowed() || (BindingSet)getParent_set().getDnode() == null || path.getPrevSlotName() == "parent_set")
            return (rule)null;
        $env._fld0 = bt$;
        bt$ = 4;
        path.enterSuper();
        $env._fld1 = bt$;
        bt$ = 5;
          goto _L10
_L9:
        path.leaveSuper();
        return (rule)null;
_L10:
        if(($env._fld1 = ((BindingSet)getParent_set().getDnode()).resolveNameR($env._fld1, path)) != null) goto _L15; else goto _L14
_L14:
        bt$ = $env._fld1;
        bt$;
          goto _L16
_L15:
        $env. = bt$;
        return $env;
_L4:
        return (rule)null;
    }


Это не простая генерация кода. Это компиляция из логического языка в явовский байткод. Этот логический код полностью интегрирован с явой — из явы можно вызывать эти методы, можно из методов вызывать явовские методы и использовать явовские выражения. Через этот логический язычёк у меня в компиляторе сделан резолвинг имён и auto-completition (поскольку он позволяет находить не просто первый ответ, но и все ответы, как любой нормальный логический язык программирования).

Реализуется он всё теми-же макросами и добавленными семантическими узлами AST дерева.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[4]: Судьба новых идей, или почему прогресс идет так медле
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.09.08 11:26
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>В свое время никто так и не ответил — кто будет дорабатывать под очередной макрос ReSharper. Все что удалось получить — дескать, Nemerle настолько крут, что решарпер ему нафик не нужен.


Тебе ответили, что дотрабатывать просто ничего не надо. Вот учитывать вопросы рефакторинга в макросах надо.

Простой пример. Вот есть в Немерле $-строки. Реализованы они с помощью макрос-средств. На самом деле реализация сложнешая. До 2008-го года рефактринг в их потрахах был невозможен, так как макрос не верно указывал Location-ы переменных в коде. В 2008 году я малость подкрутил компилятор и данный макрос и теперь этот (и любой другой) макрос без напряга указывает Location-ы, что приводит к тому, что внутри $-строк работает подсветка и рефакторинг.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Судьба новых идей, или почему прогресс идет так медл
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.09.08 12:48
Оценка:
Здравствуйте, cadet354, Вы писали:

AVK>>Т.е. ты сознательно привел не относящуюся к делу информацию в качестве аргумента.

C>фраза про религиозного фанатика относилась к тому, что Фишер не является хорошим

Кто то где то утверждал, что Фишер хороший? Что вообще такое "хороший" вне контекста детского сада?

C> Так же как и наши "закопанцы" ждавшие конца света.


Закопанцев, заметь, никто не трогал, требовали только несовершеннолетних отпустить.
... << RSDN@Home 1.2.0 alpha 4 rev. 1096>>
AVK Blog
Re[7]: Судьба новых идей, или почему прогресс идет так медле
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.09.08 12:48
Оценка: +2
Здравствуйте, mkizub, Вы писали:

M>>>Очевидно, дорабатывать его надо тем, кто его хочет использовать.

AVK>>Все, не продано.

M>А что, кто-то покупал?


Мы о коммерческом программировании еще говорим?

M> Ты готов заплатить денег разработчикам Nemerle?


В текущем состоянии — нет.

M>Какие проекты — такие и инструменты. Если твоим проектам


Сколько сантиметров?

M>Будет намного дешевле написать "плагин", который твой десяток мегабайт превратит в три-четыре,


Это миф.

M>Скажем, SymADE проектируется так, что эта проблема в нём будет решена.


Скажем, SymADE вообще никуда не годится.

M>Или за счёт чего так поднялся AOP?


С чего ты взял, что АОП куда то поднялся? Все что от него осталось — инструментирвание прикладного кода. А для этого самого инструментирования очень часто компайл-тайм технологии не подходжят в принципе, потому что делать его надо не при компиляции, а при деплойменте, поверх бинарников.
... << RSDN@Home 1.2.0 alpha 4 rev. 1096>>
AVK Blog
Re[19]: Судьба новых идей, или почему прогресс идет так медл
От: IT Россия linq2db.com
Дата: 09.09.08 13:45
Оценка:
Здравствуйте, AndrewVK, Вы писали:

IT>>Была одна фича от комьюнити (напланировали конечно много) и ту зарубили А ты говоришь нельзя предугадать ход мыслей разработчиков.


AVK>Оно конечно, если поплевать в потолок, то можно много чего напридумывать, но лично я не берусь предсказать даже очень примерно направление развития шарпа.


Ну если верить в сказки и в Деда Мороза, то может быть. А если в суровую правду жизни, то...
Неясность изложения обычно происходит от путаницы в мыслях.
Если нам не помогут, то мы тоже никого не пощадим.
Re[30]: Судьба новых идей, или почему прогресс идет так медл
От: cadet354 Россия
Дата: 09.09.08 14:51
Оценка:
Здравствуйте, AndrewVK, Вы писали:

C>>фраза про религиозного фанатика относилась к тому, что Фишер не является хорошим


AVK>Кто то где то утверждал, что Фишер хороший? Что вообще такое "хороший" вне контекста детского сада?

это я описался/недописал, надо читать так: что Фишер не является хорошим примером,
в данном случае показательным, это поведение религиозного фанатика, пусть и известного.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[31]: Судьба новых идей, или почему прогресс идет так медл
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.09.08 08:03
Оценка: +1
Здравствуйте, cadet354, Вы писали:

C>в данном случае показательным, это поведение религиозного фанатика, пусть и известного.


Нас интересует не поведение Фишера, а поведение властей США.
... << RSDN@Home 1.2.0 alpha 4 rev. 1096>>
AVK Blog
Re: Судьба новых идей, или почему прогресс идет так медленно
От: StevenIvanov США  
Дата: 11.09.08 18:36
Оценка:
Здравствуйте, Чистяков Влад (VladD2), Вы писали:

ЧВV>Статья:

ЧВV>Судьба новых идей, или почему прогресс идет так медленно
Автор(ы): Чистяков Влад (VladD2)
Дата: 27.08.2008
Вот уже который раз встречаю преинтереснейшую картину. Эта картина настолько задевает меня, что я решил поделиться с вами своими впечатлениями. Картина эта выглядит так. Где-то в глубине народных масс появляется некая неординарная идея. Эта идея теми или иными путями доходит до ушей в Microsoft и представители Microsoft бодрым голосом заявляют, что мол, это идея бредовая/вредная/бесполезная, и вроде бы тихо про нее забывают. В лучшем случае просто не следует никакой реакции. Проходит время, и вдруг появляется массированный пиар этой самой идеи, исходящий из недр Microsoft. Далее начинается массированная поддержка этой идеи в блогах. Через некоторое время появляются слухи о планах по включению этой возможности в один из продуктов Microsoft, и где-то через 1-3 года продукт, реализующий эту возможность, появляется у нас на компьютерах.


ЧВV>Авторы:

ЧВV> Чистяков Влад (VladD2)

ЧВV>Аннотация:

ЧВV>Вот уже который раз встречаю преинтереснейшую картину. Эта картина настолько задевает меня, что я решил поделиться с вами своими впечатлениями. Картина эта выглядит так. Где-то в глубине народных масс появляется некая неординарная идея. Эта идея теми или иными путями доходит до ушей в Microsoft и представители Microsoft бодрым голосом заявляют, что мол, это идея бредовая/вредная/бесполезная, и вроде бы тихо про нее забывают. В лучшем случае просто не следует никакой реакции. Проходит время, и вдруг появляется массированный пиар этой самой идеи, исходящий из недр Microsoft. Далее начинается массированная поддержка этой идеи в блогах. Через некоторое время появляются слухи о планах по включению этой возможности в один из продуктов Microsoft, и где-то через 1-3 года продукт, реализующий эту возможность, появляется у нас на компьютерах.

Ну так есть же такое замечательное GNU сообщество... Внесите желаемые изменения в Mono и не ждите погоды от империи зла И спасибо Вам скажут.
Re[3]: Судьба новых идей, или почему прогресс идет так медле
От: Gaperton http://gaperton.livejournal.com
Дата: 11.09.08 22:50
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Gaperton, Вы писали:


G>>...Скажем, она финансирует работы связанные с Хаскелем, F#, и много еще чего.


VD>Nemerle тоже был создан в раках проекта живущего на деньги МС Ресерч.

VD>Вот и не ясно почему в МС не применяют технологии опробованные в F# и Nemerle (хотя бы квази-цитирование) хотя бы для внутренней разработки.
VD>Этому то что мешает?

Дальше читаем. Оно и мешает, Влад. Я пытаюсь объяснить.

G>>Вот и все. Нарисуй Немерле на кривой Гартнеровского Хайп Цикла, и посмотри сам, где он находится. О метапрограммировании только-только начинают говорить, и мы даже не достигли первого пика.


VD>Метапрограммированию лет почти столько же сколько лет просто программированию. Просто все развивается по спирали. Пока МП был на уровне генерации и динамической модификации машкодов его по праву признавали очень сложным и даже небезопасным. Но сегодня когда все концепции позволяющие использовать МП рядовым программистам разработаны и проверены ему самое время пойти бы в массы.

VD>Но мне кажется, что страшилки прошлых лет слишком сильно давлеют на умы тех кто принимает решения.

Дело не в страшилках. Дело в другом. Не смотря на то, что метапрограммирование всречалось как элемент в разных системах уже давно, оно никогда не было отдельным "продуктом", колторый был бы способен "продавать себя". "Продавать" надо понимать как впрямом, так и в фигуральном смысле. Ты, безусловно, читалмой пост про косвенную конкуренцию и замещающие технологии. Там — продолжение нашего разговора. Я хочу, чтобы ты, пнимаешь, мысль понял. Она того стоит. Для тебя в этом есть положительный момент — я не спорю с тобой, Влад, я тебе мысль донести хочу. Ты реально умный парень, ты можешь понять. Функциональное программирование ты понял, а то о чем я сейчас говорю — гораздо проще. Про Model Driven Development — слышал? Отвечай там, на тот пост.
Re: Судьба новых идей, или почему прогресс идет так медленно
От: Димчанский Литва http://dimchansky.github.io/
Дата: 12.09.08 06:46
Оценка:
Здравствуйте, Чистяков Влад (VladD2), Вы писали:

ЧВV>Статья:

ЧВV>Судьба новых идей, или почему прогресс идет так медленно
Автор(ы): Чистяков Влад (VladD2)
Дата: 27.08.2008
Вот уже который раз встречаю преинтереснейшую картину. Эта картина настолько задевает меня, что я решил поделиться с вами своими впечатлениями. Картина эта выглядит так. Где-то в глубине народных масс появляется некая неординарная идея. Эта идея теми или иными путями доходит до ушей в Microsoft и представители Microsoft бодрым голосом заявляют, что мол, это идея бредовая/вредная/бесполезная, и вроде бы тихо про нее забывают. В лучшем случае просто не следует никакой реакции. Проходит время, и вдруг появляется массированный пиар этой самой идеи, исходящий из недр Microsoft. Далее начинается массированная поддержка этой идеи в блогах. Через некоторое время появляются слухи о планах по включению этой возможности в один из продуктов Microsoft, и где-то через 1-3 года продукт, реализующий эту возможность, появляется у нас на компьютерах.


Статью еще не читал, но осуждаю (* зачеркивает слово "осуждаю" *) по аннотации сразу всплыла ассоциация Nemerle — F#. Я прав?
Re: Судьба новых идей, или почему прогресс идет так медленно
От: russian_bear  
Дата: 16.09.08 16:12
Оценка:
ЧВV>Аннотация:
ЧВV>Вот уже который раз встречаю преинтереснейшую картину. Эта картина настолько задевает меня, что я решил поделиться с вами своими впечатлениями. Картина эта выглядит так. Где-то в глубине народных масс появляется некая неординарная идея. Эта идея теми или иными путями доходит до ушей в Microsoft и представители Microsoft бодрым голосом заявляют, что мол, это идея бредовая/вредная/бесполезная, и вроде бы тихо про нее забывают. В лучшем случае просто не следует никакой реакции. Проходит время, и вдруг появляется массированный пиар этой самой идеи, исходящий из недр Microsoft. Далее начинается массированная поддержка этой идеи в блогах. Через некоторое время появляются слухи о планах по включению этой возможности в один из продуктов Microsoft, и где-то через 1-3 года продукт, реализующий эту возможность, появляется у нас на компьютерах.

Да, интересно Вообще, я заметил, что очень многие нововведения в язык C# появились как некие следствия реализации чего-то более существенного. То есть для реализации чего-то более существенного ОЧЕНЬ УДОБНО реализовать какую-то фичу языка, которая уберет много лишних вопросов. Ну например — с появлением LINQ появились auto-properties — и таких примеров полно. Условно говоря, на любую новую фичу языка можно найти аналог такой мега-фичи, как LINQ, реализация которой ИСПОЛЬЗУЕТ эту фичу языка.

А добавлять лишнее "наперед" не хотят...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.