Re[31]: Являются ли макросы свидетельством недостаточной выр
От: mkizub Литва http://symade.tigris.org
Дата: 16.08.07 06:48
Оценка: -3
Здравствуйте, BulatZiganshin, Вы писали:

M>>>>А mutable локальные переменные как апдейтить?

C>>>А какие проблемы с mutable-переменными, если есть настоящие замыкания?

M>>Эффективность кода.


BZ>это проблема компилятора, который должен уметь их инлайнить


А вот и не угадал.
Если нам компилятор/язык гарантирует, что данный метод будет заинлайнен — то это те-же макросы, вид сбоку.
Спрашивается, нафига козе баян? Если в N уже есть макросы, более мощные чем инлайн-функции — нафига делать через инлайн, а не макросы?!
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[32]: Являются ли макросы свидетельством недостаточной выр
От: Курилка Россия http://kirya.narod.ru/
Дата: 16.08.07 06:52
Оценка:
Здравствуйте, mkizub, Вы писали:

M>Спрашивается, нафига козе баян? Если в N уже есть макросы, более мощные чем инлайн-функции — нафига делать через инлайн, а не макросы?!


Ну да, зачем нам JIT, если есть более мощные макросы?
Re[44]: Являются ли макросы свидетельством недостаточной выр
От: mkizub Литва http://symade.tigris.org
Дата: 16.08.07 06:52
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>типы в ООП динамические.


Да не в ООП!!! В принципе полиморфизма это. Может ты не видишь разницы, но больше мне добавить нечего.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[33]: Являются ли макросы свидетельством недостаточной выр
От: mkizub Литва http://symade.tigris.org
Дата: 16.08.07 06:56
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

M>>Впрочем, речь не о том, что их нельзя поменять из замыкания, а о том — как ты это собираешься делать? Физически — как? Указатель на них сохранить в замыкании? И потом работать с локальной переменной по ссылке, а не в регистре/стеке?


BZ>это в терминах C мыслишь в GC-ed языках всё создаётся в куче — и локальные переменные, и замыкания, которые на них ссылаются. остальное — оптимизации, выполняемые по мере сил и способностей компилятора


А к куче не через ссылки доступаются, да? Оптимизатор ничего не сможет наоптимизировать, он ссылки в хип на операции со стеком не заменит.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[33]: Являются ли макросы свидетельством недостаточной выр
От: mkizub Литва http://symade.tigris.org
Дата: 16.08.07 07:01
Оценка:
Здравствуйте, Курилка, Вы писали:

M>>Спрашивается, нафига козе баян? Если в N уже есть макросы, более мощные чем инлайн-функции — нафига делать через инлайн, а не макросы?!


К>Ну да, зачем нам JIT, если есть более мощные макросы?


Наверное, ты что-то умное хотел сказать. Про то, что компиляторы (а не только JIT) умеют инлайнить инлайн методы я в курсе. Что-то ещё хочешь добавить?
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[12]: Являются ли макросы свидетельством недостаточной выр
От: cl-user  
Дата: 16.08.07 07:48
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>А ты почитай внимательно, что и как предлагали.


Ок, раз речь идёт только об ембедщине — умолкаю
Re[45]: Являются ли макросы свидетельством недостаточной выр
От: BulatZiganshin  
Дата: 16.08.07 08:23
Оценка:
Здравствуйте, mkizub, Вы писали:

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


BZ>>типы в ООП динамические.


M>Да не в ООП!!! В принципе полиморфизма это. Может ты не видишь разницы, но больше мне добавить нечего.


я как раз вижу templates — это по твоему не полиморфизм?
Люди, я люблю вас! Будьте бдительны!!!
Re[32]: Являются ли макросы свидетельством недостаточной выр
От: BulatZiganshin  
Дата: 16.08.07 08:26
Оценка:
Здравствуйте, mkizub, Вы писали:

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


M>>>>>А mutable локальные переменные как апдейтить?

C>>>>А какие проблемы с mutable-переменными, если есть настоящие замыкания?

M>>>Эффективность кода.


BZ>>это проблема компилятора, который должен уметь их инлайнить


M>А вот и не угадал.

M>Если нам компилятор/язык гарантирует, что данный метод будет заинлайнен — то это те-же макросы, вид сбоку.
M>Спрашивается, нафига козе баян? Если в N уже есть макросы, более мощные чем инлайн-функции — нафига делать через инлайн, а не макросы?!

а зачем в С константы, если это по сути дела те же макросы — ты не догадываешься?

реимущесчтва в том, что это интегрированная часть языка, которую можно понять, не держа в голове дополнительный уровень трансляции. в том, что при отладке можно спокойно заходить внутрь клозур, в том что они могут реализовываться либо инлайнингом, либо ссылками в зависимости от настроек компилятора и своих размеров
Люди, я люблю вас! Будьте бдительны!!!
Re[46]: Являются ли макросы свидетельством недостаточной выр
От: mkizub Литва http://symade.tigris.org
Дата: 16.08.07 09:16
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>я как раз вижу templates — это по твоему не полиморфизм?


Из википедии (так себе источник, но для справки можно попользовать):

Полиморфизм (в языках программирования) — взаимозаменяемость объектов с одинаковым интерфейсом.

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


Никакий "различной реализации" для шаблонов я не вижу. Параметризация (что и служит для инстантиирования типа из шаблона) за полиморфизм, IMHO, не канает.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[33]: Являются ли макросы свидетельством недостаточной выр
От: mkizub Литва http://symade.tigris.org
Дата: 16.08.07 09:44
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>а зачем в С константы, если это по сути дела те же макросы — ты не догадываешься?


Ты опять не угадал. Мы же не о С-щных макросах говорим. В С++ const и inline ввели как type safe замену С-шных макросов.
А мы говорим об "умных" макросах. Которые сами по себе type safe.

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


Я же не против closures или inline. Иначе бы я не делал closures в своём компиляторе.
Речь зашла о том, что foreach в N можно сделать в виде closures, и инлайнинге метода foreach.
Можно, но есть такая вещь как сложность. Это фундаментальная проблема программирования, вокруг попыток упростить разработку программ вообще всё программирование вертится. Это в нём главное, иначе мы бы до сих пор в машинных кодах программировали бы.
Так вот. Силы разработчиков компилятора N ушли на макросы. У них пока руки не дошли обычный if оптимизировать (нормально скомпилировать, а не как http://rsdn.ru/forum/message/2618909.1.aspx
Автор: Othello
Дата: 13.08.07
), а ты говоришь об инлайнинге. Конечно, если N будет жить — то доделают и инлайнинг, и всё остальное. Но это ещё не скоро. А пока они взяли то, что у них сделано хорошо (макросы) и на них сделали foreach. И правильно сделали. А вот когда (и если) доделают инлайнинг — тогда кто-нибудь ради прикола напишет метод inline foreach(...) и будет приколисту щастье.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[54]: Являются ли макросы свидетельством недостаточной выр
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 16.08.07 09:57
Оценка: :)
Здравствуйте, IT, Вы писали:

IT>А кто ТЗ составлял?


Не я.
... << RSDN@Home 1.2.0 alpha rev. 716>>
AVK Blog
Re[34]: Являются ли макросы свидетельством недостаточной выр
От: BulatZiganshin  
Дата: 16.08.07 10:12
Оценка: -1
Здравствуйте, mkizub, Вы писали:

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


BZ>>а зачем в С константы, если это по сути дела те же макросы — ты не догадываешься?


M>Ты опять не угадал. Мы же не о С-щных макросах говорим. В С++ const и inline ввели как type safe замену С-шных макросов.

M>А мы говорим об "умных" макросах. Которые сами по себе type safe.

ну ты ведь понял, что не всё, что можно реализовывать макросами — нужно обязательно реализовывать макросами? в случае с константами проблема была в type safety, поддержке отладки

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


M>Я же не против closures или inline. Иначе бы я не делал closures в своём компиляторе.

M>Речь зашла о том, что foreach в N можно сделать в виде closures, и инлайнинге метода foreach.
M>Можно, но есть такая вещь как сложность. Это фундаментальная проблема программирования, вокруг попыток упростить разработку программ вообще всё программирование вертится. Это в нём главное, иначе мы бы до сих пор в машинных кодах программировали бы.
M>Так вот. Силы разработчиков компилятора N ушли на макросы. У них пока руки не дошли обычный if оптимизировать (нормально скомпилировать, а не как http://rsdn.ru/forum/message/2618909.1.aspx
Автор: Othello
Дата: 13.08.07
), а ты говоришь об инлайнинге. Конечно, если N будет жить — то доделают и инлайнинг, и всё остальное. Но это ещё не скоро. А пока они взяли то, что у них сделано хорошо (макросы) и на них сделали foreach. И правильно сделали. А вот когда (и если) доделают инлайнинг — тогда кто-нибудь ради прикола напишет метод inline foreach(...) и будет приколисту щастье.


да, макросы имеют превосходное соотношение цена/результат, пока не требуется большая надёжность
Люди, я люблю вас! Будьте бдительны!!!
Re[47]: Являются ли макросы свидетельством недостаточной выр
От: BulatZiganshin  
Дата: 16.08.07 10:13
Оценка: +3
Здравствуйте, mkizub, Вы писали:

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


BZ>>я как раз вижу templates — это по твоему не полиморфизм?


M>Из википедии (так себе источник, но для справки можно попользовать):


M>

M>Полиморфизм (в языках программирования) — взаимозаменяемость объектов с одинаковым интерфейсом.

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


M>Никакий "различной реализации" для шаблонов я не вижу. Параметризация (что и служит для инстантиирования типа из шаблона) за полиморфизм, IMHO, не канает.


это потому, что и ты, и авторы этой фразы знаете о полиморфизме только из книжек по ООП отгадай, как называется первая статья о type classes?
Люди, я люблю вас! Будьте бдительны!!!
Re[34]: Являются ли макросы свидетельством недостаточной выр
От: WolfHound  
Дата: 16.08.07 12:00
Оценка:
Здравствуйте, mkizub, Вы писали:

M>А к куче не через ссылки доступаются, да? Оптимизатор ничего не сможет наоптимизировать, он ссылки в хип на операции со стеком не заменит.

Еще как заменит... некоторые реализации жабы давно заменяют... и то что они делают далеко не придел.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[34]: Являются ли макросы свидетельством недостаточной выр
От: WolfHound  
Дата: 16.08.07 12:00
Оценка:
Здравствуйте, mkizub, Вы писали:

M>Так вот. Силы разработчиков компилятора N ушли на макросы. У них пока руки не дошли обычный if оптимизировать (нормально скомпилировать, а не как http://rsdn.ru/forum/message/2618909.1.aspx
Автор: Othello
Дата: 13.08.07
), а ты говоришь об инлайнинге.

Убирать такие ляпы фротенда дело виртуальной машины (и JIT .NET'а кстати убирает). Фронтенду и так есть чем заняться.
Болие того если этим будет заниматся фронтенд то эти оптимизации придется делать во всех фронендах. А если этим займется ВМ то эти оптимизации нужно сделать один раз.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: Являются ли макросы свидетельством недостаточной выра
От: Gaperton http://gaperton.livejournal.com
Дата: 16.08.07 12:29
Оценка:
Здравствуйте, mkizub, Вы писали:

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


G>>Шитый код оптимизировать глупо — надо оптимизировать критичные куски целиком (их немного) переписыванием на С (на asm-е под MIPS особо не наоптимизишь — gcc совершенно ацки компилить умеет, накладывая аппаратное умножение на второе умножение через сдвиги-сложения, используя слот инструкции после джампов, и прочее). Форт-машина должна быть тупой, это ее основное преимущество. Задействовать все регистры при "шитье" тоже, гхм, не нужно, наоборот, надо по возможности задействовать минимум регистров.


M>JFYI, я для Samsung-а переписал main loop явовского интерпретатора (KVM) на ассемблере (MIPS). Ускорение вышло в 2 раза. В основном за счёт правильного джамп-а при диспатчинге опкода (все хэндлеры имели по 16 или 32 комманды, не помню),


Шитый код в отличии от байткода — это уже адрес, по которому надо делать переход (для прямого шитого кода) причем адрес строго фиксированного размера. Например, 32 бита, без вариантов. Его диспатчить правильно не надо — есть ровно один способ.

M>расположения верхушки стека в регистре и т.п.

В случае форта это делать можно и нужно, и можно сделать такое на чистом С — достаточно верхушку таскать параметром как часть контекста, и удостовериться, что компилятор использует fastcall с регистровой передачей параметров.

M>Потом подрихтовал на ассемблере вызов методов, оптимизировал байткод при загрузке класса, оптимизнул несколько библиотечных методов и синхронизацию — и вышло ещё ускорение в 1.8 раз.


Этого всего в случае форт-машины делать просто не нужно, за отсутствием методов и классов, и исключительно простой процедуре вызова.
Re[15]: Являются ли макросы свидетельством недостаточной выр
От: Gaperton http://gaperton.livejournal.com
Дата: 16.08.07 12:38
Оценка:
Здравствуйте, mkizub, Вы писали:

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


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


G>>Есть от чего. Там в байткоде на один уровень косвенности больше, байткод это не просто адреса, и если не применяется JIT, (а он не применяется в JVM которые реализуют CLDC, например, в KVM — том самом, который в мобильных телефонах), то явский байткод будет медленнее.


M>О каком дополнительном уровне косвенности ты говоришь?


Я о том, что в фортовом шитом коде мне не надо дешифровать код операции — все коды фиксированной длины и представляют из себя адреса, по которым надо делать переход (для прямого кода JMP [PC++]) или слазить по адресу (для косвенного шитого кода JMP [PC++]]). В случае сишной переносимой встраиваемой реализации у меня байткод — это массив указателей на функции (которым верхушку стека я передам отдельным параметром, и она будет лежать в регистре). И все. По производительности такая переносимая реализация порвет тупенький KVM даже без "вставок на Клиппере для скорости".

M>>>Больше того, нынешние мобилки прекрасно позволяют компилировать яву в нэйтивный код, памяти у них хватает. И для распространённых на мобилках CPU эти компиляторы написаны и работают. Интепретатор форта не сдюжит против компилятора в нэйтивный код никаким местом.


G>>Мобилы реализуют CLDC и применяют в массе своей KVM в котором JIT не предусмотрен, поэтому ява для них ацки тормозит. Кроме случая, если в них как в смартфонах применяется ARM c Jazelle, тогда там ява должна быть быстра.


M>Ща. Я больше трёх лет работал в Esmertec. Их продукт (Jbed) — это AOP компилятор явы. А библиотечные функции компилятся в нэйтивный код на хосте, и раборают (сюрприз!) быстрее С-шных (за счёт интеграции с GC и избегания алиасинга, в C надо лепить volatile указателям, а в явовском коде не надо, плюс unsafe хаки в компиляторе для библиотечного кода).


Компилятор тут не причем. Речь о ява машинах для телефонов. Конкретнее, о том что CLDC-шный KVM популярный в мобилах не делает джит, и никакой компилятор не поможет тебе не то что обогнать, но даже близко к С подойти.

M>Jazelle — мёртворождённая технология. В ней переключение между режимом java и arm/thumb слишком медленное. Следующая версия ARM-а уже будет иметь инструкции для аппаратной проверки нулевых указателей, границ массива и ещё нескольких шибко удобных вещей — код (нэйтивный) в который компилятется ява имеет размер меньше байткода, а скорость работы сам понимаешь — полная. Тут Jazelle вообще пипец настанет.


Возможно.
Re[38]: Являются ли макросы свидетельством недостаточной выр
От: Gaperton http://gaperton.livejournal.com
Дата: 16.08.07 13:00
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

G>>>Однако, что такое динамическая и статическая типизация я помню хорошо. Отличие между ними, мой хорошо эрудированный и плохо знающий матчасть коллега, состоит не в полиморфизме, а в том, в какой момент проверяются типы. До выполнения (статически) или во время выполнения (динамически).


BZ>это вопрос реализации. были интерпретаторы даже для С, с другой стороны есть lint-подобные системы для динамичсеких языков. правильное же определение — в статических языках тип переменной определяется текстом программы, в динамических — процессом исполнения.


Не совсем так. Не текстом программы. Я и в динамическом языке могу во многих случаях тип вывести из контекста употребления. Разница в том, как семантика языка трактует ошибку типа — может ли она у меня во время выполнения выскочить, или это невозможно в принципе. Вот в вашем бейсике например семантика не обязываем меня употреблять % для целых чисел, и эту переменную я могу подставить в конструктор массива DIM. Что будет, если параметром DIM окажется число с плавающей запятой? Обязан ли компилятор выводить тип этой переменной и давать мне по рукам? Нет, не обязан — это должно упасть в рантайме. Потому, семантика динамическая. Просто система типов языка настолька убога, что пользы от этой динамической семантики нет никакой.

BZ>кстати ООП — это динамическая типизация, даже когда она привнесена в статические языки

Ну разумеется, нет. Это один из способов привнести в статические языки полиморфизм. Типизация остается статической — все ошибки типов гарантированно ловятся компилятором статически. Это если ты не пользуешься dynamic_cast и аналогами (даункасты в яве, QueryInterface в COM) — вот они как раз и есть "динамическая типизация" — могут и обломаться в рантайме запросто.
Re[53]: Являются ли макросы свидетельством недостаточной выр
От: IT Россия linq2db.com
Дата: 16.08.07 13:09
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Спокойнее. Ты уже мог заметить, что решение ограниченное временем компиляции я считаю ущербным "по умолчанию". Так что мимо такой фразы я просто не смог пройти мимо


Так бы сразу и сказал, что макросы суксь.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[39]: Являются ли макросы свидетельством недостаточной выр
От: BulatZiganshin  
Дата: 16.08.07 13:32
Оценка: -1
BZ>>кстати ООП — это динамическая типизация, даже когда она привнесена в статические языки
G>Ну разумеется, нет. Это один из способов привнести в статические языки полиморфизм.

меня зовут Вася
Люди, я люблю вас! Будьте бдительны!!!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.