Re[29]: Сложный язык для сложных срограмм.
От: Павел Кузнецов  
Дата: 18.02.07 21:35
Оценка:
Здравствуйте, WolfHound, Вы писали:

>>> Я предпочитаю сырци.


ПК>>Хотя и не очень эффективный, но вполне рабочий подход для написания одноразового кода.


WH>Почему одноразового?


Потому что, если полагаться на реализацию вместо published specification, то никаких гарантий того, что использованное поведение останется именно таким, при дальнейшей поддержке кода не будет.

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


Тестировать нужно.

ПК>>Это я не заметил, что ты пытаешься обращаться к одному и тому же объекту из разных потоков, модифицируя его. Это, естественно, работать не будет. Дальше разговор можно не продолжать, пока не будет приведена здравая причина необходимости отсутствия синхронизации при обращении к модифицируемому разделяемому ресурсу.


WH>Если все операции с данным объектом атомарны то синхронизация избыточна.


Атомарности операций для отсутствия необходимости синхронизации недостаточно: в общем случае нужен еще memory barrier для устранения эффектов переупорядочивания этих операций.

WH>Кто тут любит говорить про zerro overhead?


Не знаю. До некоторых пор я скорее любил говрить о premature optimization. Теперь подпись окупирована другим.

WH>А тут целий мъютекс на ровном месте.


Т.е. мотивация -- "ускорение"? Это не кажется здравой причиной для отсутствия синхронизации при периодическом перечитывании конфигурации из разделяемого объекта.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[48]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.02.07 22:28
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Патерн-матчинг в Лиспе есть.


Читаем:
Macro DESTRUCTURING-BIND 
...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[43]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.02.07 22:28
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

Ага, ага. Текстуальня компиляци без единой проверки и без возможности декомпозиции кода.
Ну, так мы дойдем, что и C# обладает охриниельной системой метапрограммирования, так как есть библиотеки компиляции кода на лету и возможность его испонять в рантайме.

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

VD>>Скромный вопрос... Что есть выделенные фрагменты?


Q>pat & ar — первые два элемента списка. &body body — остаток списка. Т.е

Q>
Q>(with-array ((a 0 0) (d 1 1) (i 2 2)) ar
Q>   (values a d i))
Q>

Q>pat — pattern = ((a 0 0) (d 1 1) (i 2 2))
Q>ar — array
Q>&body = (values a d i)

Не, нет. Как это называется?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[48]: Сложный язык для сложных срограмм.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 18.02.07 23:56
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Не, нет. Как это называется?


Параметры?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[49]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.07 00:16
Оценка:
Здравствуйте, lomeo, Вы писали:

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


VD>>Не, нет. Как это называется?


L>Параметры?


Не, не угадал. Это называется "включать дурака".
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[50]: Сложный язык для сложных срограмм.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 19.02.07 00:37
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>>>Не, нет. Как это называется?


L>>Параметры?


VD>Не, не угадал. Это называется "включать дурака".


А.. А то я думал, ты просто чушь несешь

А насчёт параметров, я не угадывал. Это так и называется. Па-ра-мет-ры. А не паттерн. Не веришь — проверь

Аналог ПМ впрочем есть — destructuring-bind. Только тотального его использования во всех макросах я не заметил

Насчёт схемы соглашусь — syntax-case — типичный ПМ.

И вопрос такой — вот ты часто используешь ПМ для списков? Если можно какой нибудь пример, просто интересно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[51]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.07 02:17
Оценка: -1
Здравствуйте, lomeo, Вы писали:

L>А.. А то я думал, ты просто чушь несешь


А тебе есть чем?

Ладно извни, но мне общение с тобой не доставляет удовольствия.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.07 02:17
Оценка:
Здравствуйте, WolfHound, Вы писали:

ПК>>Ерунда какая... Конечно, есть. В случае разделения объекта между потоками исполнения копирование объектов там тоже нужно будет делать с учетом возможных race conditions и т.п. (там это обычно называется clone или как-нибудь еще подобным образом из-за отсутствия внятной value семантики).

WH>Мне нужно скопировать ОДИН УКАЗАТЕЛЬ.
WH>В С++ Я вынужден счелкать счетчиком ссылок и из-за этого копирование указателя не атомарно.
WH>В системах с ГЦ копирование ссылки атомарно.

В чем-то Паша прав. Ни C# ни С++ не рассчитаны на многопоточность и в программах на них написанных всегда можно найти тучу мест где можно словить трудно-уловимые ошибки. Хотя конечно сам ЖЦ резко упрощат жизнь. Но по-моему не на столько на сколько нужно для комфортного программирования.

В идиале, я вообще не должен думать о блокировках, гонках и т.п. Тут нужен или фрэйворк или поддержка со стороны языка.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[52]: Сложный язык для сложных срограмм.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 19.02.07 09:26
Оценка: :))
Здравствуйте, VladD2, Вы писали:

VD>Ладно извни, но мне общение с тобой не доставляет удовольствия.


Это ты меня извини, я постоянно забываю, что целью моего общения должно служить доставление тебе удовольствия.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[49]: Сложный язык для сложных срограмм.
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 19.02.07 10:07
Оценка:
Здравствуйте, VladD2, Вы писали:

ANS>>Патерн-матчинг в Лиспе есть.


VD>Читаем:

VD>
VD>Macro DESTRUCTURING-BIND 
VD>...
VD>


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

Или тебе не нравится то, что это макра, а не вколоченная гвоздями сущность?
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[44]: Сложный язык для сложных срограмм.
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 19.02.07 10:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ага, ага. Текстуальня компиляци без единой проверки и без возможности декомпозиции кода.


Какая текстуальная компиляция? Окстись. Я жу написал, если нужен класс создаём объект и всё. Никакой компиляции вообще.

VD>Ну, так мы дойдем, что и C# обладает охриниельной системой метапрограммирования, так как есть библиотеки компиляции кода на лету и возможность его испонять в рантайме.


Срочно читать мой пост еще раз.

VD>В гробу я такие системы метапрограммирования имел.
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[44]: Сложный язык для сложных срограмм.
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 19.02.07 10:35
Оценка:
Здравствуйте, IT, Вы писали:

IT>Очень похоже сделана эмуляция ООП в JS. Видимо дралось из ST. Но вопрос был немного не об этом. Похоже мы просто запутались в терминологии. Меня прежде всего интересуют возможности метапрограммирования. Как, например, в ST делается (если делается) обработка и преобразование AST или любого другого представления кода/метаданных программы?


Возможно есть действительно недопонимание друг друга.

Вот я показал, как заменить один метод на другой, добавить/удалить метод. Имхо, это именно метапрограммирование и есть. Только оно осуществляется не манипулированием ни АСТ, ни текстуальным представлением программы, а манипулированием теми сущностями, которые есть результат кодогенерации в других языках. То бишь, если в Nemerle тебе, для создания класса нужно произвести манипуляции с AST, то в ST достаточно сделать `Metaclass new`. Всё, наш новый класс можно использовать в программе.

Добавлю, что в ST нет разницы между write time/compile time/run time. Это важное идеологическое отличие от других систем, где все три этапа четко отличимы. Например, когда я в ИДЕ в ST добавляю класс, то он в самом низу создаётся при помощи того же `Metaclass new`. То есть сама ИДЕ метапрограммирует программу.

Что касается инструментария, который работает с исходным кодом (Ref.Browser, напр), то там естественно есть и AST и визиторы . Но назвать это метапрограммированием у меня язык не поворачивается.
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[45]: Сложный язык для сложных срограмм.
От: IT Россия linq2db.com
Дата: 19.02.07 15:26
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Возможно есть действительно недопонимание друг друга.


ANS>Вот я показал, как заменить один метод на другой, добавить/удалить метод. Имхо, это именно метапрограммирование и есть.


Не совсем. Подобное можно сэмулировать даже в С с помощью указателей на функции. В моём понимании метапрограммирование — это программирование программ, которые в свою очередь создают программы. Например, макрос Немерле, анализируя контекст вызова может порождать принципиально разный код. А твой пример — это не более чем манипулирование таблицей виртуальных методов.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[46]: Сложный язык для сложных срограмм.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 19.02.07 15:40
Оценка:
Здравствуйте, IT, Вы писали:

ANS>>Вот я показал, как заменить один метод на другой, добавить/удалить метод. Имхо, это именно метапрограммирование и есть.


IT>Не совсем. Подобное можно сэмулировать даже в С с помощью указателей на функции.


Видимо, имеется в виду, что в С нельзя создать код этих функций.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[47]: Сложный язык для сложных срограмм.
От: IT Россия linq2db.com
Дата: 19.02.07 15:46
Оценка:
Здравствуйте, lomeo, Вы писали:

IT>>Не совсем. Подобное можно сэмулировать даже в С с помощью указателей на функции.


L>Видимо, имеется в виду, что в С нельзя создать код этих функций.


Так создание/генерацию кода я как раз нигде и не увидел.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[48]: Сложный язык для сложных срограмм.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 19.02.07 15:56
Оценка:
Здравствуйте, IT, Вы писали:

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


IT>>>Не совсем. Подобное можно сэмулировать даже в С с помощью указателей на функции.


L>>Видимо, имеется в виду, что в С нельзя создать код этих функций.


IT>Так создание/генерацию кода я как раз нигде и не увидел.


Насколько я понимаю строками Потом даём компилеру. Ну или байткод генерить.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[49]: Сложный язык для сложных срограмм.
От: IT Россия linq2db.com
Дата: 19.02.07 16:02
Оценка:
Здравствуйте, lomeo, Вы писали:

IT>>Так создание/генерацию кода я как раз нигде и не увидел.


L>Насколько я понимаю строками Потом даём компилеру. Ну или байткод генерить.


А как быть с декомпозицией кода?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[50]: Сложный язык для сложных срограмм.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 19.02.07 16:09
Оценка:
Здравствуйте, IT, Вы писали:

IT>А как быть с декомпозицией кода?


Прости, не понял. Что имеется в виду?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[46]: Сложный язык для сложных срограмм.
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 19.02.07 16:32
Оценка: 3 (1)
Здравствуйте, IT, Вы писали:

ANS>>Вот я показал, как заменить один метод на другой, добавить/удалить метод. Имхо, это именно метапрограммирование и есть.


IT>Не совсем. Подобное можно сэмулировать даже в С с помощью указателей на функции. В моём понимании метапрограммирование — это программирование программ, которые в свою очередь создают программы.


Вот смотри. В ST есть объекты (методы и классы это first class objects), которым можно посылать сообщения.

Программирование в ST это последовательное создание нужных объектов — последовательное изменение состояния, которое хранится в образе (image). Когда мы создаём класс в ИДЕ, на самом деле создаётся объект-класс.

Когда мы добавляем метод в наш класс, в этот объект-класс ИДЕ добавляет объект-метод. То есть, чтобы в класс добавить метод, нужно в колекцию методов класса просто положить метод. Что бы создать метод, нужно создать экземпляр класса `CompiledMethod` и напихать в него байт-коды. Байт-коды хранятся в списке в этом объекте. Естественно они специфичны для разных ВМ. Но если учитывать, что в ST-языке есть единственная операция — посылка сообщения, то байткодов много знать не нужно. (Есть даже люди, которые считаю, что ST это ОО-ассемблер). На практике же, компилятор среды обычно выполняет ряд (отключаемых) оптимизаций. Например, код '1000 timesDo: [ ... ]' не компилируется в отправку сообщения, а компилируется непосредственно в цикл. То есть чистота, принесена в угоду практичности. Хотя, если вызвать метод `timesDo:` у объекта-числа через рефлексию, то всё будет работать. Сейчас уже эти оптимизации уже не играют такой важной роли как в 80-х гг.

IT> Например, макрос Немерле, анализируя контекст вызова может порождать принципиально разный код.


Ну, так и любая ST-программа может, например, скомпилировать регэксп непосредственно в ST-байткод. Все манипуляции с кодом, выполняются манипулированием соответствующими объектами. Есть тулзы которые автоматизируют наиболее частые задачи.

IT>А твой пример — это не более чем манипулирование таблицей виртуальных методов.


Почти. Если чуть доработать эту систему, то получится ST-машины. В соответсвии с законом Гринспуна
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.