Здравствуйте VladD2, Вы писали:
VD>Здравствуйте Геннадий Васильев, Вы писали:
ГВ>>Во-первых, не один Страус. Там ещё и комитет ANSI есть. ГВ>>А во-вторых — ИМХО, Страус больше апеллирует к интеллектуальности, а MS — к её отсутствию. Типа: "Вот вам рецепт и всем срочно радоваться!" Вторая позиция понятна для продавцов, но... программисты, ИМХО, всё-таки больше тяготеют к первому.
VD>Да к маразму старческому (не по годам) этот Страуструп апеллирует.
Ладно, давай без личностей ;)
VD>А MS решает проблемы кторые перед ней стаят.
Путём создания волны новых? Кстати, у тебя интересная, почти фрейдистская описка: последнее слово должно быть "стаВят" или "стОят"? Если "ставят", то хрен они что исправили в том же компиляторе C++, а если "стоят", то это её проблемы, пусть себе решает на здоровье. Нет. я не против маркетинга, я просто стараюсь ему не подчиняться.
VD>Этот орел как то ляпнул, что мол GC интересная и хорошая идея, но мол, ее легко можно реализовать средствами языка. Вот Мишка.Нэт попробывал риалзоват... вошло как у тебя, много кода и совершенно не применимо на практике. :(
Значит, не особо нуждались, раз не стали применять. ;) (ИМХО)
VD>Хочет решать проблемы средствами самого языка? Пожалуйста... только пусть этот язык расширят, чтобы можно было делать то что нужно. И не через одно место автогеном, а просто и лаконично.
Да пусть его хоть в рамках определения реализуют! Тогда только будет ясно, что именно в него надо добавлять.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте Mishka.NET, Вы писали:
IT>>Архитектурно реализуется перехваткой обращений к методам объекта, благо там и так прокси разнообразные просто кишат Ну а в C# есть... даже не в C# а в .NET, пожалуй.. поддержка этого дела. Ты можешь создать объект, а потом заставить другой объект вклиниваться в вызовы методов первого. В "Inside C#" Арчера есть немного об этом. M.NET>Ну-ка ткни пальцем где такое написано, я это уже давно ищу — не знал что в .NET это есть.
Здравствуйте VladD2, Вы писали:
VD>Здравствуйте Геннадий Васильев, Вы писали:
ГВ>>И то верно — он никого не причёсывает, все сами "причёсываются". ;)
VD>Интересно, когда Страус все причесывает своими кривыми идеями, то это нормально и называется "стандартизация", ну, если MS стандарты клепать начинает, то это называется "причесывание всех под одну гребенку" и "угнетение невинно обиженных". :)))
Подобные заявления означают, что ты вообще ничего не понимаешь в том, как происходила стандартизация C++ и больше говорят о тебе, чем о Страуструпе. Ты бы почитал что-нибудь.
Здравствуйте <Аноним>, Вы писали:
А>Подобные заявления означают, что ты вообще ничего не понимаешь в том, как происходила стандартизация C++ и больше говорят о тебе, чем о Страуструпе. Ты бы почитал что-нибудь.
Ты бы прежде чем народ обкакивать представился бы что ли, а то некрасиво получается однако.
Здравствуйте <Аноним>, Вы писали:
А>Подобные заявления означают, что ты вообще ничего не понимаешь в том, как происходила стандартизация C++ и больше говорят о тебе, чем о Страуструпе. Ты бы почитал что-нибудь.
Ты бы прежде чем народ обкакивать представился бы что ли, а то некрасиво получается однако.
Здравствуйте Mishka.NET, Вы писали:
M.NET>Здравствуйте Igor Trofimov, Вы писали:
IT>>Ты написал объект и он работает в middletier звене каком-то. А другой кто-то (может, MS, а может Вася) написал...хм...как называется-то? аспект? — и теперь есть возможность применения на административном уровне к твоему объекту некоторой функциональности. Админ это может настроить.
M.NET>На самом деле не админ, а программер. Создаём аспект, говорим в нём, что если кто-то, например, вызвал метод с такой сигнатурой, то надо выполнить такой-то код. Или, куда интереснее, если произошло исключение в таких-то методах, то выполнить то-то и то-то. То бишь — один чел пишет прогу не думая об обработке исключений, security и пр. А другие пишут к его коду соответствующие аспекты.
IT>>COM+ короче. M.NET>COM+ поддерживает только зачатки аспектной ориентации.
Я так понял, спор уже зашёл о run-time-поддержке выполнения с подгрузкой нового кода на лету без остановки и перекомпиляции всего приложения и даже системы.
Интересный момент. В C# такое возможно на уровне классов? В Java -- да, в С/C++ -- нет.
Небольшой пример для Java: интерфейс и "пусковик" пишутся и компилируются на самой ранней стадии, а вот классы, реализующие интерфейс, пишутся значительно позднее и могут подключаться к работающей системе на лету, тем самым реализуется в run-time нужный аспект.
public interface Figure {
...
void paint();
}
Классы, написанные и откомпилированные позднее:
public class Oval implements Figure {
...//Реальный кодpublic void paint() {
...//Реальный код
}
}
public class Rectangle implements Figure {
...//Реальный кодpublic void paint() {
...//Реальный код
}
}
Запускаем любой код, реализующий интерфейс Figure:
import java.util.Properties;
import java.io.*;
public class FigureLauncher {
private FigureLauncher() {//Синглетонsuper();
}
public static void main(String args[]) {
try {
String fileproperties = args[0];
InputStream propStream = new FileInputStream(fileproperties);
Properties properties = new Properties();
properties.load(propStream);
String launchableClassName = properties.getProperty("launchableclass");
Class serviceClass = Class.forName(launchableClassName);
Object serviceObject = serviceClass.newInstance();
//Работаем с объектом:
(Figure)serviceObject....//...
(Figure)serviceObject.paint();
} catch (Exception e) {
System.out.println("Ошибка:");
e.printStackTrace();
}
}
}
Файл настроек пусковика (структуру можно усложнить):
IT>>Архитектурно реализуется перехваткой обращений к методам объекта, благо там и так прокси разнообразные просто кишат ;) Ну а в C# есть... даже не в C# а в .NET, пожалуй.. поддержка этого дела. Ты можешь создать объект, а потом заставить другой объект вклиниваться в вызовы методов первого. В "Inside C#" Арчера есть немного об этом. M.NET>Ну-ка ткни пальцем где такое написано, я это уже давно ищу — не знал что в .NET это есть.
Здравствуйте iZEN, Вы писали:
ZEN>Я так понял, спор уже зашёл о run-time-поддержке выполнения с подгрузкой нового кода на лету без остановки и перекомпиляции всего приложения и даже системы. ZEN>Интересный момент. В C# такое возможно на уровне классов? В Java -- да, в С/C++ -- нет.
В шарпе такое намного проще, ввиду того что компиляторы в виде классов есть в рантайме, умеют компилировать в память, стандартный класслоадер умеет shadow copy files, а Reflection.Emit позволяет формировать сборки в памяти вобще без компиляторов.
IT>>>Архитектурно реализуется перехваткой обращений к методам объекта, благо там и так прокси разнообразные просто кишат Ну а в C# есть... даже не в C# а в .NET, пожалуй.. поддержка этого дела. Ты можешь создать объект, а потом заставить другой объект вклиниваться в вызовы методов первого. В "Inside C#" Арчера есть немного об этом. M.NET>>Ну-ка ткни пальцем где такое написано, я это уже давно ищу — не знал что в .NET это есть.
Посмотри в ремоутинге.
Здравствуйте Геннадий Васильев, Вы писали:
VD>>Да к маразму старческому (не по годам) этот Страуструп апеллирует.
ГВ>Ладно, давай без личностей
Так ты первый заговорил о велиичии личностей "Страус больше апеллирует к интеллектуальности".
ГВ>Путём создания волны новых? Кстати, у тебя интересная, почти фрейдистская описка: последнее слово должно быть "стаВят" или "стОят"? Если "ставят", то хрен они что исправили в том же компиляторе C++, а если "стоят", то это её проблемы, пусть себе решает на здоровье. Нет. я не против маркетинга, я просто стараюсь ему не подчиняться.
Второе (стоят). Ты подчиняешся догмам, хотя сам понимаешь, что что-то нужно менять.
ГВ>Значит, не особо нуждались, раз не стали применять. (ИМХО)
Просто реализовать удобный GC без поддержки компилятора невозможно. А Страуструп просто языком молол без соображения. У него похоже догмы еще глубже сидят. Ну, возможно пора давать дорогу молодым.
ГВ>Да пусть его хоть в рамках определения реализуют! Тогда только будет ясно, что именно в него надо добавлять.
А мне трехэтажные кострукции не нужны. Они расширяют язык не туда. Нужно решать проблемы людей, а они придумывают ерунду которая все равно не решает всех проблем, но создает огромные проблемы у разработчиков компиляторов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
<...>
Class serviceClass = Class.forName(launchableClassName);
Object serviceObject = serviceClass.newInstance();
//Работаем с объектом:
(Figure)serviceObject....//...<<--Синтаксическая ошибка.
(Figure)serviceObject.paint();<<--Синтаксическая ошибка.
<...>
Исправляю:
<...>
Class serviceClass = Class.forName(launchableClassName);
Object serviceObject = serviceClass.newInstance();
//Работаем с объектом:
((Figure)serviceObject)....//...<<-- уже правильно
((Figure)serviceObject).paint();//<<-- уже правильно
<...>
Так ещё лучше:
<...>
Class serviceClass = Class.forName(launchableClassName);
Object serviceObject = serviceClass.newInstance();
//Работаем с объектом:
Figure f = (Figure)serviceObject;//Преобразуем ссылку к нужному типу
f....//...
f.paint();
<...>
Здравствуйте Аноним, Вы писали:
А>Подобные заявления означают, что ты вообще ничего не понимаешь в том, как происходила стандартизация C++ и больше говорят о тебе, чем о Страуструпе. Ты бы почитал что-нибудь.
Я я что-нибудь почитал. Но стандарт от этого прямее не стал. Да и у MS многое стандартизовано. Тот же .NET. Да и для меня нет разницы между стандартами дефакто и бумажными. Первые мне даже больше нарвятся. Они к жизни ближе. Я когда писал на С, всегда предпочитал вариант Ричи, чем ансишный.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
<....> VD>А мне трехэтажные кострукции не нужны. Они расширяют язык не туда. Нужно решать проблемы людей, а они придумывают ерунду которая все равно не решает всех проблем, но создает огромные проблемы у разработчиков компиляторов.
Согласен. Можно посмотреть на CORBA: такая огромная спецификация, а чтобы разрабатывать под неё придётся знать всё...:)
Здравствуйте iZEN, Вы писали:
ZEN>Я так понял, спор уже зашёл о run-time-поддержке выполнения с подгрузкой нового кода на лету без остановки и перекомпиляции всего приложения и даже системы. ZEN>Интересный момент. В C# такое возможно на уровне классов? В Java -- да, в С/C++ -- нет.
Нет, спор идёт о другом (конкретно аспектах). То, что ты имеешь в виду называется Reflection. Этот механизм присутствует и в Java и в .NET.
Здравствуйте AndrewVK, Вы писали:
AVK>Здравствуйте iZEN, Вы писали:
ZEN>>Я так понял, спор уже зашёл о run-time-поддержке выполнения с подгрузкой нового кода на лету без остановки и перекомпиляции всего приложения и даже системы. ZEN>>Интересный момент. В C# такое возможно на уровне классов? В Java -- да, в С/C++ -- нет. AVK>В шарпе такое намного проще, ввиду того что компиляторы в виде классов есть в рантайме, умеют компилировать в память, стандартный класслоадер умеет shadow copy files, а Reflection.Emit позволяет формировать сборки в памяти вобще без компиляторов.
В Java такое тоже возможно (сам компилятор написан на Java): хоть из массива, хоть из потока, хоть с COM-порта.
Здравствуйте iZEN, Вы писали:
ZEN>В Java такое тоже возможно (сам компилятор написан на Java): хоть из массива, хоть из потока, хоть с COM-порта.
Возможно, но никакого API под это нет, нужно писать свой класслоадер.
Здравствуйте VladD2, Вы писали:
VD>>>Да к маразму старческому (не по годам) этот Страуструп апеллирует. ГВ>>Ладно, давай без личностей ;) VD>Так ты первый заговорил о велиичии личностей "Страус больше апеллирует к интеллектуальности".
Ну, если бы не он был автором и "ведущим кем-то там" по разработке языка, то я упомянул бы другого. Я аргументировал только его подходом, а не личными качествами (маразмом там, старостью, генальностью и пр.) Аналогично и про MS. Возможно, фраза была несколько неудачно построена... :(
ГВ>>Путём создания волны новых? Кстати, у тебя интересная, почти фрейдистская описка: последнее слово должно быть "стаВят" или "стОят"? Если "ставят", то хрен они что исправили в том же компиляторе C++, а если "стоят", то это её проблемы, пусть себе решает на здоровье. Нет. я не против маркетинга, я просто стараюсь ему не подчиняться.
VD>Второе (стоят). Ты подчиняешся догмам, хотя сам понимаешь, что что-то нужно менять.
Опять к личностям. OK. Тогда назови хоть одну из тех догм, которым я, по твоему мнению, подчиняюсь.
ГВ>>Значит, не особо нуждались, раз не стали применять. ;) (ИМХО)
VD>Просто реализовать удобный GC без поддержки компилятора невозможно.
В общем, согласен, особенно если непосредственно в язык введены идиомы работы с памятью.
VD>А Страуструп просто языком молол без соображения. У него похоже догмы еще глубже сидят. Ну, возможно пора давать дорогу молодым.
От блин! :) Vlad, давай больше Страуса вообще не будем упоминать. И Гейтса лично тоже. :)
ГВ>>Да пусть его хоть в рамках определения реализуют! Тогда только будет ясно, что именно в него надо добавлять.
VD>А мне трехэтажные кострукции не нужны. Они расширяют язык не туда. Нужно решать проблемы людей, а они придумывают ерунду которая все равно не решает всех проблем, но создает огромные проблемы у разработчиков компиляторов.
Ты хочешь сказать, что что-то может решить все проблемы? Этакий философский камень? ;)
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте Геннадий Васильев, Вы писали:
ГВ>Ну, если бы не он был автором и "ведущим кем-то там" по разработке языка, то я упомянул бы другого. Я аргументировал только его подходом, а не личными качествами (маразмом там, старостью, генальностью и пр.) Аналогично и про MS. Возможно, фраза была несколько неудачно построена...
Правильно интеллектуальность не качество.
ГВ>Опять к личностям. OK. Тогда назови хоть одну из тех догм, которым я, по твоему мнению, подчиняюсь.
"С++ законченый язык. Его средствами можно реализовать хоть черта лысого, а занчит менять в нем ничего не нужно."
ГВ>От блин! Vlad, давай больше Страуса вообще не будем упоминать. И Гейтса лично тоже.
Ну, тогда и на MS нечего клепать.
VD>>А мне трехэтажные кострукции не нужны. Они расширяют язык не туда. Нужно решать проблемы людей, а они придумывают ерунду которая все равно не решает всех проблем, но создает огромные проблемы у разработчиков компиляторов.
ГВ>Ты хочешь сказать, что что-то может решить все проблемы? Этакий философский камень?
Я хочу сказать, что если проблемы есть, то их нужно решать, а не городить огород на ровном месте и не объяснять, что мол, а мне и так нравится.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте Mishka, Вы писали:
M>Здравствуйте iZEN, Вы писали:
ZEN>>В Java такое тоже возможно (сам компилятор написан на Java): хоть из массива, хоть из потока, хоть с COM-порта.
M>А знаешь, что стандартная Java не поддерживает? Компиляцию динамически созданного кода в native код процессора.
Это не проблема написать на Java, например, Pascal-компилятор для DOS/Windows (теория компиляторов знакома, надеюсь?). Но вот вопрос: зачем это нужно, когда многие вещи в самой Java делаются проще и быстрее(JIT) чем во многих старых компилируемых языках (операции по управлению памятью для строк, например). Так что возражения типа "в нативном коде быстрее будет" не принимаются -- просто это из другой области.
Здравствуйте AndrewVK, Вы писали:
AVK>Здравствуйте iZEN, Вы писали:
ZEN>>В Java такое тоже возможно (сам компилятор написан на Java): хоть из массива, хоть из потока, хоть с COM-порта. AVK>Возможно, но никакого API под это нет, нужно писать свой класслоадер.
Для COM-порта есть JavaAPI.
Свой класслоадер наследуешь от абстрактного класса java.lang.ClassLoader, переопрееляешь пару-тройку методов и всё. :))