Re[29]: MIT переходи со схемы на...
От: Cyberax Марс  
Дата: 25.11.06 19:00
Оценка: +4 -1
PhantomIvan wrote:
> IT>Мат и подонковщина заразны.
> заразны конечно, но это не болезнь
Болезнь, причем заразная.

> IT> Небольшое послабление и очень быстро сайт превратится в помойку.

> а так он типа — средоточие чистоты и квинтэссенция мысли
Ну не нравится — не пиши, какие проблемы-то?
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[26]: MIT переходи со схемы на...
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 26.11.06 01:29
Оценка: +2 -1
IT,

VK>>>В Nemerle разработчики зачастую не добавляют такие вещи из принципа, дабы не замусоривать дизайн ядра языка. Кроме того, по сравнению с макросами у такого подхода есть один очень большой недостаток — производительность. Замыкания это вещь далеко не бесплатная.


LCR>>Смею заметить, что макросы — это вещь тоже далеко небесплатная.


IT>Макросы влияют только на скорость компиляции.


Бррр. Скорость здесь постольку-поскольку. Когда мы вводим конструкции типа repeat .. until .. то надо полагать, что мы их вводим не для того, чтобы побить все рекорды в language shootout benchmarks. Скорее всего мы это делаем для того, чтобы чего-то там выглядело более красиво.

Так вот, в этом свете замечание VK про то, что замыкания тормозят ... выглядит немного странно. В конце концов, если не нравится скорость — перепеши без использования замыканий. Предлагать же переписывать тормозящие места на макросах везде, где можно, ну я бы поостерёгся, ибо оплачивать скорость полученную макросами нам придётся усложнением поддержки — это и есть упомянутая мной выше небесплатность макросов.

Я ни с чем не спорю, я просто указал на однобокость замечания VK, чтобы не создалось картины, что макросы — рулез форева.

IT>Речь идёт о производительности конечного кода. То что реализация замыканий в .NET требует некоторых ресурсов, надеюсь, понятно.


Да, конечно.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[26]: MIT переходи со схемы на...
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 26.11.06 01:30
Оценка: +1 -1
Vermicious Knid,

VK>IT уже ответил, я с ним согласен.


Я тоже согласен, но он ответил не на тот вопрос


LCR>>ИМО, ФВП — это обычная, совершенно прозрачно читаемая конструкция.


VK>Только до тех пор, пока ими не пытаются эмулировать расширения синтаксиса. В частности, неявное создание замыканий я не считаю прозрачно читаемой конструкцией. Когда вызываешь некий метод объекта, все таки не ожидаешь, что его параметр может превратиться в замыкание. А тем более не ожидаешь увидеть вместо нормального списка параметров(ограниченного привычными круглыми скобками) какой-то непонятный блок кода.


Если это верно для замыканий, то вдвойне верно и для макросов.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[24]: MIT переходи со схемы на...
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 26.11.06 06:02
Оценка: +2
Здравствуйте, Vermicious Knid, Вы писали:

VK>Это примитив.


Конечно. Это тестовая задачка для изучающих Scala.

VK Всего-лишь синтаксический сахар для чего-то вроде:
VK>
VK>repeatLoop(() => { System.Console.WriteLine($"i=$i"); i++ }).until(() => i >= 4);
VK>


Тем не менее синтаксический сахар переводит приведенную тобой конструкцию в гораздо более читабельный вариант.

VK>В Nemerle разработчики зачастую не добавляют такие вещи из принципа, дабы не замусоривать дизайн ядра языка. Кроме того, по сравнению с макросами у такого подхода есть один очень большой недостаток — производительность. Замыкания это вещь далеко не бесплатная.


VK>Реализация с помощью макросов сможет сделать этот цикл действительно обычным циклом. И это будет работать в десятки раз быстрее, чем всякие извращения с замыканиями.


Это легко проверить:
object LoopSpeed2 extends Application {
  def meter( name: String, action: => unit ) {
    val start = java.util.Calendar.getInstance.getTimeInMillis
    action
    val finish = java.util.Calendar.getInstance.getTimeInMillis

    Console.println( name + ": " + (finish - start) )
  }

  class Repeater( command: => unit ) {
    def until( condition: => boolean ): unit = {
      do command while( !condition )
    }
  }

  def repeatLoop( action: => unit ) = new Repeater( action )

  val LIMIT = 100000000

  meter( "Simple do-while",
    { var i = 0; do { i = i + 1 } while( i < LIMIT ); } )
  meter( "Repeat until",
    { var i = 0; repeatLoop { i = i + 1 } until( i >= LIMIT ); } )
}


В результате получается:
Simple do-while: 2313
Repeat until: 4359

Проигрыш в два раза на таком тривиальном цикле -- это не так уж плохо. Тем более, что накладные расходы в случае более сложной конструкции в цикле будут менее заметны (в процентном отношении).


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[25]: MIT переходи со схемы на...
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 26.11.06 08:26
Оценка:
eao197,

E>Проигрыш в два раза на таком тривиальном цикле -- это не так уж плохо. Тем более, что накладные расходы в случае более сложной конструкции в цикле будут менее заметны (в процентном отношении).


+1

От себя добавлю, что стоит заглянуть в кишки ...
public class LoopSpeed2$Repeater implements ScalaObject
{
    private Function0 command;

    public void until(Function0 condition)
    {
        do
        {
            command.apply();                                                           // (*)
        } while(!ScalaRunTime$.MODULE$.booleanValue((BoxedBoolean)condition.apply())); // (**)
    }

    public int $tag() { return scala.ScalaObject.class.$tag(this); }

    public LoopSpeed2$Repeater(Function0 command) { this.command = command; super(); }
}

public LoopSpeed2.Repeater repeatLoop(Function0 action)
{
    return new LoopSpeed2.Repeater(action);
}
  ...
//meter( "Repeat until",
//  { var i = 0; repeatLoop { i = i + 1 } until( i >= LIMIT ); } )
LoopSpeed2$.MODULE$.repeatLoop(new _anonfun__cls2(i$0)).until(new _anonfun__cls3(i$0));

... и мы увидим, что тело command и условие condition создаются только один раз при входе в цикл. В-данном случае время жрётся на вызовы методов apply в (*) и (**).
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[25]: MIT переходи со схемы на...
От: Андрей Хропов Россия  
Дата: 26.11.06 09:04
Оценка:
Здравствуйте, eao197, Вы писали:

E> def meter( name: String, action: => unit ) {

E> val start = java.util.Calendar.getInstance.getTimeInMillis
E> action
E> val finish = java.util.Calendar.getInstance.getTimeInMillis

E> Console.println( name + ": " + (finish — start) )

E> }

Да, в стандартной библиотеке Scala есть уже готовый trait Benchmark:
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
[Benchmark] Встроенный while vs макросы vs замыкания на Scal
От: Андрей Хропов Россия  
Дата: 26.11.06 11:24
Оценка: 21 (4)
Здравствуйте, eao197, Вы писали:

VK>>Реализация с помощью макросов сможет сделать этот цикл действительно обычным циклом. И это будет работать в десятки раз быстрее, чем всякие извращения с замыканиями.


E>Это легко проверить:

E>
E>object LoopSpeed2 extends Application {
E>  def meter( name: String, action: => unit ) {
E>    val start = java.util.Calendar.getInstance.getTimeInMillis
E>    action
E>    val finish = java.util.Calendar.getInstance.getTimeInMillis

E>    Console.println( name + ": " + (finish - start) )
E>  }

E>  class Repeater( command: => unit ) {
E>    def until( condition: => boolean ): unit = {
E>      do command while( !condition )
E>    }
E>  }

E>  def repeatLoop( action: => unit ) = new Repeater( action )

E>  val LIMIT = 100000000

E>  meter( "Simple do-while",
E>    { var i = 0; do { i = i + 1 } while( i < LIMIT ); } )
E>  meter( "Repeat until",
E>    { var i = 0; repeatLoop { i = i + 1 } until( i >= LIMIT ); } )
E>}
E>


E>В результате получается:

E>
E>Simple do-while: 2313
E>Repeat until: 4359
E>

Это HotSpot -client насколько я понял?

Хмм, очень любопытно что JRockit существенно медленнее, а HotSpot -server вообще нереально хуже(!) в этом случае .

PentiumM 1.7 Dothan, Scala 2.2.0,
HotSpot-client — Java HotSpot(TM) Client VM (build 1.5.0_08-b03, mixed mode)
HotSpot-server — Java HotSpot(TM) Server VM (build 1.5.0_08-b03, mixed mode)
JRockit — BEA JRockit(R) (build R26.4.0-63-63688-1.5.0_06-20060626-2259-win-ia32, ) (-server)
(на нем разницы между клиентом и сервером практически нет)

LIMITHotSpot-clientHotSpot-serverJRockit
10000000220/4218853/777821512/1853
100000000(то что у тебя)2043/415688477/> 300000 (надоело ждать больше 5 мин)14861/18427
В целом видно, что поведение сильно зависит от JVM. JRockit намного менее эффективно, но разница не в 2 раза, а 20%.
А HotSpot -server вообще поразил!

Для сравнения:

1) Nemerle.

Вот текст макроса do/while из стандартной библиотеки:

  macro dowhile (cond, body) 
  syntax ("do", body, "while", "(", cond, ")") 
  {
    def loop = Nemerle.Macros.Symbol (Util.tmpname ("do_while_"));

    <[
      ($("_N_break" : global) : {
        def $(loop : name) () {
          $("_N_continue" : global) : {
            $body
          }
          when ($cond) $(loop : name) ();
        }
        $(loop : name) ()
      })
    ]>
  }

А вот программа, с немного видоизмененной для полного соответствия Scala конструкцией предложенной Vermicious Knid
using System.Diagnostics;

[Record]
class repeatLoop
{
    action : void->void;
    public until(condition : void->bool) : void
    {
            do action() while(condition());
    }
}

def meter( name, action ) 
{
  def stopwatch = Stopwatch();
  
  stopwatch.Start();
  action();
  stopwatch.Stop();

  System.Console.WriteLine( $"$name : $(stopwatch.ElapsedMilliseconds) ms elapsed" );
}

def LIMIT = 100000000;

meter( "Macro do-while",()=>{ mutable i = 0; do { i++; } while( i < LIMIT ); } );
meter( "Repeat until",()=>{mutable i = 0; repeatLoop(()=> i++ ).until(()=> i < LIMIT)} );

В результате
.NET 2.0:
Macro do-while : 178 ms elapsed
Repeat until : 945 ms elapsed

Mono 1.2:
Macro do-while : 271 ms elapsed
Repeat until : 1913 ms elapsed

Итого: разница по скорости между макросом и конструкцией с замыканиями получилась существенной
(порядка 5 раз для .NET и порядка 7 раз для Mono).
Что интересно, это в любом случае оказалось быстрее Scala!

+ в Немерле не поддерживаются блоки кода и поэтому все несколько замусорено конструкциями "()=>"

2) D

import std.stdio, std.perf;

class Repeater
{
  void delegate() _command;
  
  public this( void delegate() command )
  {
    _command = command;
  }
  
  public void until( bool delegate() condition )
  {
    do _command(); while( condition() );
  }
}

Repeater repeatLoop( void delegate() action ) { return new Repeater( action ); }

void meter(char[] name, void delegate() action)
{
  auto t = new HighPerformanceCounter();  
  
  t.start();
  action();
  t.stop(); 
  
  writefln(name,": ", t.milliseconds() ," ms elapsed ");
}

void main()
{
  auto LIMIT = 100000000;
  
  meter( "Simple do-while", { auto i = 0; do { i++; } while( i < LIMIT ); } );
  meter( "Repeat until", {auto i = 0; repeatLoop( { i++; } ).until( { return i < LIMIT; });} );
}

Результат

DMD 0.175:
Simple do-while: 119 ms elapsed
Repeat until: 821 ms elapsed

GDC 0.19:
Simple do-while: 99 ms elapsed
Repeat until: 955 ms elapsed

Итого: опять же разница между встроенным while и конструкцией с замыканиями получилась существенной
(порядка 7 раз для DMD и порядка 9,5 раз для GDC).
Опять же — и тот и другой вариант быстрее Scala!

+ в D делегаты без параметров выглядят получше, с другой стороны, т.к. язык не функциональный для создания возвращающего bool делегата пришлось писать return .

Также можно сказать, что managed Nemerle на .NET очень близок к этим результатам, что не может не радовать .
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[24]: MIT переходи со схемы на...
От: Андрей Хропов Россия  
Дата: 26.11.06 11:43
Оценка:
Здравствуйте, Vermicious Knid, Вы писали:

VK>Реализация с помощью макросов сможет сделать этот цикл действительно обычным циклом.

Да, у меня Nemerle вский do/while на макросах работает с той же скоростью, что и C# вский встроенный.

VK> И это будет работать в десятки раз быстрее, чем всякие извращения с замыканиями.

По моим испытаниям[Benchmark] Встроенный while vs макросы vs замыкания на Scal
Автор: Андрей Хропов
Дата: 26.11.06
обычно разброс в 5-10 раз.
Но в случае Scala получается небольшая разница (до 2 раз). При этом там и встроенный do/while не слишком быстр.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: [Benchmark] дополнение
От: Андрей Хропов Россия  
Дата: 26.11.06 11:46
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

Да, добавлю, что это конечно экстремальный случай когда тело цикла состоит из буквально одной инструкции "i++".
В более сложных случаях конечно разница между встроенными конструкциями и замыканиями будет меньше.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: [Benchmark] Встроенный while vs макросы vs замыкания на
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 26.11.06 12:27
Оценка:
Здравствуйте, Андрей Хропов

АХ>Это HotSpot -client насколько я понял?


Да.

АХ>Хмм, очень любопытно что JRockit существенно медленнее, а HotSpot -server вообще нереально хуже(!) в этом случае .


Возможно свет на производительность Scala замеров прольет замечание Jamie Webb о том, что в данном примере JIT вообще не запуститься.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: [Benchmark] Встроенный while vs макросы vs замыкания на
От: PhantomIvan  
Дата: 26.11.06 12:40
Оценка:
АХ>2) D

a D по скоростным характеристикам аналогичен C ?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: [Benchmark] Встроенный while vs макросы vs замыкания на
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 26.11.06 12:58
Оценка:
Андрей Хропов,

АХ>А HotSpot -server вообще поразил!

Здесь явно какой-то баг... Завтра на работе попробую погонять.


АХ>Также можно сказать, что managed Nemerle на .NET очень близок к этим результатам, что не может не радовать .

Голый цикл while? Такие результаты можно экстраполировать как угодно, и они всё равно не будут соответствовать действительности. Меня вот радует, что относительный провал варианта с замыканиями в Скале всего примерно 2 раза, и это опять же ни о чём не говорит.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[26]: MIT переходи со схемы на...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.06 13:47
Оценка: +1 -1
Здравствуйте, eao197, Вы писали:

E>Ну посмотри на количество библиотек поддержки многопоточности для C++ и попробуй выбрать лучшую.


Разнообразие — благо. Но в С++ все библиотеки одинаково плохи.

E>Хочешь такого же для Nemerle?


Хочу чтобы был выбор и чтобы среди вариантов были достойные.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: MIT переходи со схемы на...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.06 13:47
Оценка:
Здравствуйте, PhantomIvan, Вы писали:

PI>та ну, у меня был принтер к спектруму (МС), но это были тяжелые времена, иногда приходилось потрошить "катридж" и делать из ленты ленту Мёбиуса

PI>но ты прав, я из второго поколения — только тут скорее различие между людьми, которые обычные, художественные книги не могут читать с монитора
PI>как то так, физически не могут... и ищут бумажный вариант... естественно, они же плодят основную нагрузку на принтер
PI>естественно, их большинство

Знаешь, я тоже не стану читать книгу с монитора. Но код — это не крига которую можно читать страница за страницей. Код связанная структура и без заглядывания в определения элементов на которые ссылается ткущий фрагмент кода ничего понять нельзя. Естественно, что речь идет о больших проектах.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: MIT переходи со схемы на...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.06 13:47
Оценка:
Здравствуйте, eao197, Вы писали:

E>Пару раз в год, когда какие-то старые подсистемы приходит время переписывать (например, подсистему транспортных агентов в SObjectizer). Как правило, это несколько тысяч строк кода.


Ты печатаешь всеь код проекта? Если, да, то сколько листов бумаги на это уходит? И что ты делаешь после очередного изменения?

E>Их удобно держать под рукой и раскладывать на столе как документацию, ведь в коде зафиксированно все до мельчайших подробностей.


И твоий проект целиком умещается на одном письменном столе?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: MIT переходи со схемы на...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.06 13:47
Оценка:
Здравствуйте, FR, Вы писали:

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


Области применения у них идентичные. Гнать про ОС и райверы не сотоит. Ди для их написания тоже не преименяют.
А параметр по которому Ди лучше вы уже озвучивали не раз. Он не требует дотнета. В любом случае очивидно, что по значимым параметрам Ди уступает.

FR>А вот тогдашнему чемпиону мира по жиму штанги присутствие будущего губернатора было абсолютно фиолетово, а ведь практически одним и тем же занимались, железки тягали.


Аналогия не уместна. Штангисты занимаются другим. А Ди и Немерле — это универсальные языки общего назначения. И их сравнение вполне кооректно.

VD>>Та же фигня с Ди. Если бы он родился в 85-ом, то уверен, что С++ не прожил бы и года.


FR>Очень спорно, у C++ были тогда достойные конкуренты (тот же objective C) но стал популярным именно C++.


Ты бы посмотрел на этот Objective C прежде чем говорить. Конкурент из него был хреновый.

FR>Давай я буду лезть в каждую тему про немерле и пропагандировать там например рефал(как малоизвестную тут вещь), как скоро тебя станет тошнить об любого упоминания о рефале?


А куда я лез? Да и ты лезешь куда только можешь. Так что не надо.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: MIT переходи со схемы на...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.06 13:47
Оценка: :)
Здравствуйте, FR, Вы писали:

PI>>а кто ещё? WolfHound? я?


FR>Давай обойдемся без списков врагов народа


Ты это еао197 расскажи который беззастенчиво занимается составленийм подобных списков.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: MIT переходи со схемы на...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.06 13:47
Оценка:
Здравствуйте, FR, Вы писали:

VD>>Оно делается во время компиляции в байткод? Что-то не верится. Да и откровенно говоря не верится, что при подобном подкручивании не будет проблем в других местах. У той же IDE обязательно крышу снесет.


FR>Оно будет делатся при инстанцировании класса (не создание объектов класса а именно при создании самого класса). Обычно это происходит при первом импорте модуля.


Значит в рантайме, и значит будет отъедать время. То есть вопрос только в объемах. ОК.

Ачто на счет IDE и ее крыши? Ты как-то по тихому замял это вопрос.

FR>Странно что ты сделал такой вывод, примеры были очень близки к примерам от создателей немерле.


Возможно я путаю вас с еао197, но помнится я видел совершенно текстуальные приемы при генерации чего-то.

VD>>Вот это уже точно фигня. Попробуй напирмер реализовать мета-код аналогичный моему макросы SupportRelocation:

VD>>http://nemerle.org/svn/nemerle/trunk/macros/compiler.n

FR>Спасибо, но времени разбиратся в таком достаточно приличном объеме кода у меня нет.


Там все довольно просто.

FR> Вот если бы ты на словах объяснил или дал ссылку на документацию я мог бы сказать можно сделать подобное или нет.


Смысл такой. Есть дерево (скажем АСТ) в котором в некоторых ветках есть свойства типа Location. Нужно сгенерировать код который в рантайме позволит изменить значения этих Location-ов так чтобы все локешоны ниже заданного отступа были сдвинуты на переданное значение. Причем алгоритм должен работать очень быстро. Это накладывает ограничение на анализ типов в рантайме и заставляет отсекать некоторые ветки (про которые заранее извесно, что толку в них заходить нет). Естественно, что ветки отсекаются тоже по типам.

Учитывая, что в динамических языках о типах во время компиляции, да даже при загрузке приложения ничего толком не известно, то задача качественно на них не решатся. Единственное что можно сделать, это производить анализ дерева динамически, но это сильно медленее чем выполнять код который строится во время компиляции.

VD>>В лучшем случае ты прийдешь к рантайм-интерпретации. А это по скорости равносиельно использованию рефлексии в дотнете.


FR>Ты просто не хочешь понимать что я тебе уже объяснял, это аналог compile time выпролняется только при создании класса и не влияет на скорость работы объектов этого класса.


FR>>>Проблема в том что реально измерить мощность языков очень тяжело, оценка во многом получается субъективной.


VD>>Тяжело. Не спорю. Нр я стараюсь быть объективным.


FR>Угу стараешся


FR>>>Мне кажется ты чуть выше очень правильно описал свое понимание динамики:


FR>>>

FR>>>И от того тебе кажется, что что-то не важно, а что-то является всего лишь непонятным извращением.


VD>>Тебе кажется. Со всем о чем я веду речь я работал. Я конечно могу ошибаться в частностях (какой язык на каком уровне реализует ту или инуб возможность). Но я пточно понимаю о чем идет речь. В цитате же говорится о непонимании обсуждаемых вещей.


FR>Дьявол он в деталях

FR>Я пока сам плотно не поработал с динамикой был примерно такого же мнения о ней как и ты.

FR>>>Если оставить в стороне очень спорные разговоры о мощности, то динамика просто не пошла у тебя, ты ее не понимаешь и не хочешь понимать поэтому плюсы тебе кажутся очень мелкими а минусы очень большими.


VD>>Я уже повторял. Я отчетливо вижу ущербность динамики. Потому и говорю, что при прочих равных (а это уже пожалуй и не обсуждается уже) статика дает больше возможностей.


FR>Ты в упор не видишь преимуществ динамики, поэтому бесполезно тебе что-то доказывать. Недостатки у динамики конечно есть и многие из них ты уже хорошо осветил. Но преимущества (тот же REPL, динамическая смена методов, перезагрузка, обобщенность и вытекающее из нее способы проектирования и конструирования, легкость написания прототипов и много других важных вещей) для тебя "фигня".


VD>>Я не хочу возвращаться к "Статика вс. Динамика". В данном случае я указавал на совокупность возможностей (которую Грэхем назвал континумом). И на то что она у Немерла на сегодня объективно больше.


FR>Это очень спорно, если разбиратся то эта совокупность возможностей скорее всего максимальна у того же лиспа или рефала. И потом если представить эту "мощность" как область на плоскости окажется что области занимаемые разными языками полностью не пересекаются, я вполне допускаю что у немерле сейчас эта область одна из самых больших, но это ни как ни отменяет другие языки, так как мощность всех языков все равно на порядки больше любого отдельного.


VD>>От того я им и занимаюсь. Причем как бы не хотелось злым языкам вроде еао197 это представлять в виде пропаганды, в отличии от них я пытаюсь быть объектвным и реально работаю над увеличеним возможностей языка и их качества. Наша Интеграция со Студией — это реальный вклад. И делаю я его потому, что отчетливо понимаю перспективность языка и то, что без нашго вклада он так и может остаться "перспективным чудом" вроде ОКамла или Лиспа.


FR>То что ты делаешь очень хорошо, но агрессивная пропоганда по моему уже приносит больше вреда чем пользы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: MIT переходи со схемы на...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.06 13:47
Оценка:
Здравствуйте, FR, Вы писали:

FR>Эмулировать и даже встраивать не так сложно, пример на питоне тут: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/413570,


О чем я и говорю.

FR>можно также сделать и полный интерпретатор http://christophe.delord.free.fr/en/pylog/index.html


Лучше компилятор. А то интерпретатор, то можно сделать на любом языке. Но это сложно и работать будет он медленно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: MIT переходи со схемы на...
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 26.11.06 14:32
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>Пару раз в год, когда какие-то старые подсистемы приходит время переписывать (например, подсистему транспортных агентов в SObjectizer). Как правило, это несколько тысяч строк кода.


VD>Ты печатаешь всеь код проекта? Если, да, то сколько листов бумаги на это уходит?


Нет, только те классы, которые собираюсь выбрасывать и заменять чем-то.
Иногда печатал страниц по двадцать.

VD>И что ты делаешь после очередного изменения?


Пускаю освободившиеся страницы на черновики.

E>>Их удобно держать под рукой и раскладывать на столе как документацию, ведь в коде зафиксированно все до мельчайших подробностей.


VD>И твоий проект целиком умещается на одном письменном столе?


Целиком нет, но некоторые подсистемы вполне умещаются. Тем более, что иногда достаточно разместить рядом страниц 4-5 страниц формата A4.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.