Здравствуйте, csharpworker, Вы писали: C>- все примеры, SDK и тому подобные вещи идут с примерами на СИ и Шарпе. Задолбался я переводить это все на паскаль. C>- begin, end C>- var
Возрадуйся, ибо в новом шарпе таки есть var
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, DOOM, Вы писали:
kuj>>>>1. У Javascript есть нормальный garbage collector. Ему не нужны smart pointer`ы. DOO>>>Тем не менее. Мне они не нужны и в C — и так хорошо живется. У всего есть своя ниша. G>>Не показывай свою необразованность. В C нет обънектов, смарт поинтеры там не нужны. DOO>Соответственно все завязано на основную форму приложения, а значит все объекты будут корректно уничтожены рано или поздно — это вариант борьбы с отсутствием автоматического контроля времени жизни объекта. И, если человек хоть немного понимает, что такое указатель, объект и т.п., то у него не будет проблем с утечками.
Ты вообще программированием занимаешься или как Шеридан? Судя по утверждению — последнее.
kuj>>>>2. Делфи — динамический язык? DOO>>>В достаточной мере. G>>Не более динаический, чем С++. Можно везде писать (void*) и кастить при каждом обращении. DOO>Да... Ну ладно — тогда создай мне экземпляр класса по его строковому имени в ран-тайме.
Создание класса по его строковому имени в рантайм не является признаком динамического языка.
DOO>Или хотя бы перечисли методы объекта в ран-тайме.
Перечисление методов объекта в рантайм не достаточно, чтоб для динамического языка.
DOO>Да, конечно, в Дельфи нету JIT'а, но и статическим строго типизированным его не назовешь.
У C# куда больше всяких плюшек: и extension methods, и анонимные классы и функции, и лямба-выражения, и атрибуты и многое другое, но он все еще остается статическим строго типизированным языком по-определению.
Медитируй http://en.wikipedia.org/wiki/Dynamic_programming_language
kuj>>>>А Борланд об этом знает? DOO>>>Да уж наверное. Хотя в 6-й дельфи они стали на многие прикольные фишки выдавать ворнинги, что в .Net версии это уже не будет работать. G>>Наверное ворнинги не от хорошей жизни. DOO>Ворнинги от того, что в .Net банально многое нельзя, а значит программа не перенесется в среду .Net.
Здравствуйте, DOOM, Вы писали:
kuj>>Богатый интерфейс на яваскрипте? Флаг в руки, ветер в спину.
DOO>А в чем проблема? Можно и интерфейс. Можно и прямо COM объект настрочить на JS (точнее, конечно, это WSH)... Не знал?
Пример JS скрипта на WSH с "богатым интерфейсом" в студию.
Здравствуйте, hattab, Вы писали:
G>>В .NET и Java у человека не будет проблем с утечками даже если он не понимает указатели.
H>Судя по тому, что ты тут пишешь, я вижу, что многого ты так и не понял...
Здравствуйте, kuj, Вы писали:
kuj>Мне нужно нажать только =, в то время как тебе в Delphi — зажать shift, нажать 6, отжать shift, нажать = и это для, пожалуй, наиболее используемого оператора...
Здравствуйте, hattab, Вы писали:
S>>>Можно. Еще как можно. Более того, в Delphi можно сделать вызов метода, которого объект не поддерживает, и узнать об этом только в рантайме. В точности, как в JS. Вот этот код прекрасно скомпилируется: H>Нет такой опции
Отсюда только следует, что Delphi не является ни статическим, ни динамическим языком, а некий жуткий сурогат.
Здравствуйте, kuj, Вы писали:
kuj>Здравствуйте, hattab, Вы писали:
S>>>>Можно. Еще как можно. Более того, в Delphi можно сделать вызов метода, которого объект не поддерживает, и узнать об этом только в рантайме. В точности, как в JS. Вот этот код прекрасно скомпилируется: H>>Нет такой опции
kuj>Отсюда только следует, что Delphi не является ни статическим, ни динамическим языком
Ну наконец-то ты это понял...
kuj>, а некий жуткий сурогат.
А это уже субъективизм.
Здравствуйте, DOOM, Вы писали:
G>>Любоую программу можно написать без объектов, только вопрос времени. DOO>Неверно. Распространенное заблуждение, что ООП реально сильнее процедурного программирования — почитай как народ офигел, когда поняли, что никто не умеет эффективно проектировать при ООП подходе. И как потом разрабатывали UML — процесс был долгий и мучительный (если я правильно помню, только через 6 лет смогли родить первую версию UML). Т.е. плата за все плюсы ООП — гораздо более серьезная зависимость от правильного проектирования. DOO>Популярная библиотека Gtk является чисто сишной — на одних struct'ах построена и ничего, народ пользуется.
Хотелось бы посмотреть как ты будешь чисто процедурно писать средних размеров корпоративную систему. Это из разряда "на JS можно написать мощный интерфейс пользователя".
Судя по твоей писанине в этом топике ты не являешься профессиональным программистом. Завязывай уже со этой ахинеей и пустозвонством.
G>>Что-то я не увидел примеров. DOO>Еще раз: DOO>Могу еще что-нибудь придумать...
Придумай. Еще посмеемся.
DOO>>>Соответственно все завязано на основную форму приложения, а значит все объекты будут корректно уничтожены рано или поздно — это вариант борьбы с отсутствием автоматического контроля времени жизни объекта. G>>Выделенное — офигенный недостаток. DOO>Это by design (ну да, иногда недостаток), но в общем и целом это как раз, то, что надо.
DOO>>>И, если человек хоть немного понимает, что такое указатель, объект и т.п., то у него не будет проблем с утечками. G>>В .NET и Java у человека не будет проблем с утечками даже если он не понимает указатели. DOO>Но если он не понимает указатели, то до борьбы с утечками он просто не доберется — ничего толком работать не будет.
Какая взаимосвязь между пониманием что такое "указатель в Delphi" и борьбой с утечками в .NET/Java? Пиши ище!
DOO>>>Ворнинги от того, что в .Net банально многое нельзя, а значит программа не перенесется в среду .Net. G>>В .NET можно сделать все, что можно в делфи. DOO>В .Net нет прямого доступа к памяти, или я ошибаюсь?
Выкладывай для какой задачи тебе нужен прямой доступ к памяти.
G>>Глупость номер раз — Delphi динамический язык DOO>Я тебе показал отсутствие строгой типизации? Показал. Значит не все так просто в датском королевстве. Не укладывается Delphi в узкое определение статического языка со строгой типизацией — есть там кое-какие фичи.
Делфи вообще никуда не укладывается. Если хочешь узнать что такое полноценный динамический язык посмотри на Ruby.
G>>Глупость номер два — использование вариантных типов везде. DOO> Поясни. Кто тут и где про использование вариантных типов говорил?
Ты одной квотой выше.
Здравствуйте, ironwit, Вы писали:
kuj>>Мне нужно нажать только =, в то время как тебе в Delphi — зажать shift, нажать 6, отжать shift, нажать = и это для, пожалуй, наиболее используемого оператора...
I>shift+Ж в англ раскладке? :
Почему я должен помнить какая у меня там активная раскладка, если все что мне нужно, это ввести оператор присваивания?
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, gandjustas, Вы писали: G>>Да знаю я это. Пару страниц назад сам об этом писал. Причем какя-то опция компилятора отключает это. G>>Но код G>>Вызвоет ошибку компиляции, что есть проявление статической типизации. S>Итого? Есть два кода. Один вызывает ошибку компиляции, другой не вызывает. S>Какие выводы можно сделать? Ну, кроме того, что участники дискуссии очень плохо разбираются в системах типов?
Что-то это переходит в болтологию. Если язык поддерживает строгую типизацию, кроме случая использования типа Variant, то как его назвать?
Здравствуйте, hattab, Вы писали:
H>Здравствуйте, gandjustas, Вы писали:
G>>>>Ну на C# я напишу G>>>>
G>>>> (obj as IInterface)//Если obj реализует IInterface, то вернется переменная этого типа, иначе будет null.
G>>>>
G>>>>При этом человек, который писал о класс объекта obj мог и не знать о существовании IInterface. H>>>А что произойдет в момент компиляции, если obj не реализует IInterface? G>>Ничего.
H>Ok. Если это так, то такое поведение оператора as это и есть запрос интерфейса от объекта (но не приведение оного). А теперь запроси от объекта другой объект (ты же сказал, что решение на интерфейсах вызвано кривостью Delphi).
Вникай, все это нормально компилируется
interface IA
{
//...
}
interface IB
{
//...
}
class A:IA
{
//...
}
class B:IB
{
//...
}
class C:A
{
//...
}
//...
A a = new C();
(a as IA) //вернет ссылку на интерфейс IA
(a as IB) //вернет null
(a as A) //вернет ссылку на класс A
(a as B) //вернет null
(IA)a //вернет ссылку на интерфейс IA
(B)a //вылетит Exception
(IB)a //вылетит Exception
kuj>Хотелось бы посмотреть как ты будешь чисто процедурно писать средних размеров корпоративную систему.
Хотелось бы посмотреть как ты будешь писать средних размеров корпоративную систему.
Метод решения выбирают под задачу и исходя из опыта команды. Да будет тебе известно, что Дейкстра так и не признал ООП — так для сведения.
Ядро Linux написано на C и его размеры могут поконкурировать даже не со средних размеров корпоративной системой
Весь Gnome написан на C (ну может за редким исключением).
Еще примеры надо?
kuj>Это из разряда "на JS можно написать мощный интерфейс пользователя".
Ну c JS слишком долго лазить за примерами, но вот Tk — есть и для tcl, есть и для перла. Приложений на Tk масса...
kuj>Судя по твоей писанине в этом топике ты не являешься профессиональным программистом. Завязывай уже со этой ахинеей и пустозвонством.
Про то, что программированием я уже давно не занимаюсь, я написал в самом начале этого топика. А вот твои беспочвенные обвинения реально уже достали
G>>>Что-то я не увидел примеров. DOO>>Еще раз: DOO>>Могу еще что-нибудь придумать...
kuj>Придумай. Еще посмеемся.
Мда... Все-таки недаром тебя в КСВ считают неадекватным оппонентом...
DOO>>Но если он не понимает указатели, то до борьбы с утечками он просто не доберется — ничего толком работать не будет. kuj>Какая взаимосвязь между пониманием что такое "указатель в Delphi" и борьбой с утечками в .NET/Java? Пиши ище!
И еще раз возможность в этом убедиться.
DOO>>>>Ворнинги от того, что в .Net банально многое нельзя, а значит программа не перенесется в среду .Net. G>>>В .NET можно сделать все, что можно в делфи. DOO>>В .Net нет прямого доступа к памяти, или я ошибаюсь? kuj>Выкладывай для какой задачи тебе нужен прямой доступ к памяти.
Сам подумай на досуге, а.
G>>>Глупость номер два — использование вариантных типов везде. DOO>> Поясни. Кто тут и где про использование вариантных типов говорил? kuj>Ты одной квотой выше.
Я показал пример, за это мне навесили: "использование вариантных типов везде" — логических ошибок совсем не видать?
Здравствуйте, kuj, Вы писали:
kuj>Богатый интерфейс на яваскрипте? Флаг в руки, ветер в спину.
Ты под богатым интерфейсом часом не вот это имеешь в виду? Или, может быть, maps.google.com?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, DOOM, Вы писали:
kuj>>Отсюда только следует, что Delphi не является ни статическим, ни динамическим языком DOO>Ну наконец-то ты это понял... kuj>>, а некий жуткий сурогат. DOO>А это уже субъективизм.
Это не субъективизм, а реалии жизни. Вместо того, чтоб сделать нормальный строго типизированный язык, взяли самую худшую черту динамического языка и прилепили ее в виде специального типа Variant.
К слову, Variant изначально был придуман Microsoft как тип данных COM. COM-объекты исторически писались почти исключительно на C++.
В нормальных строго типизированных ОО языках типа C# и Java у всех классов есть общий предок: object и java.lang.Object, соответственно, а так же полноценные метаданные и полноценный механизм reflection. Более того, у .NET в отличии от Delphi из мира dynamic languages взят еще оператор eval, позволяющий компилировать код непосредственно в рантайм. Язык остался строго типизированным, но получил многие элементы динамических языков: type inference, closures, duck typing (производная от dynamic typing: var something = new ClassA(...); ), eval, reflections.
Такой .NET язык как Boo пошел еще дальше и взял такие элементы динамических языков как: syntactic macros (в отличии от макросов в C++, макросы в Boo имеют больше черт, характерных макросам в динамических языках — они модифицируют compiler pipeline) и generators.
Полноценным динамическим языком в мире .NET на основе DLR станет IronRuby.
Здравствуйте, gandjustas, Вы писали:
G>>>Да знаю я это. Пару страниц назад сам об этом писал. Причем какя-то опция компилятора отключает это. G>>>Но код G>>>Вызвоет ошибку компиляции, что есть проявление статической типизации. S>>Итого? Есть два кода. Один вызывает ошибку компиляции, другой не вызывает. S>>Какие выводы можно сделать? Ну, кроме того, что участники дискуссии очень плохо разбираются в системах типов? G>Что-то это переходит в болтологию. Если язык поддерживает строгую типизацию, кроме случая использования типа Variant, то как его назвать?
Делфи как не называй все-равно фигня получится. Это как в анекдоте: " — мальчик или девочка?! — вырастет — само решит..."
Здравствуйте, kuj, Вы писали:
kuj>Здравствуйте, DOOM, Вы писали:
kuj>>>Отсюда только следует, что Delphi не является ни статическим, ни динамическим языком DOO>>Ну наконец-то ты это понял... kuj>>>, а некий жуткий сурогат. DOO>>А это уже субъективизм.
kuj>Это не субъективизм, а реалии жизни. Вместо того, чтоб сделать нормальный строго типизированный язык, взяли самую худшую черту динамического языка и прилепили ее в виде специального типа Variant.
В результате это существенно упростило некоторые задачи, что и позволило стать дельфи языком для непрограммистов. Значит с рыночной точки зрения решение было правильным
kuj>К слову, Variant изначально был придуман Microsoft как тип данных COM. COM-объекты исторически писались почти исключительно на C++.
К чему эта цепочка умозаключений? Мы вроде уже выяснили, что COM можно и на JS написать, было бы желание...
kuj>В нормальных строго типизированных ОО языках типа C# и Java у всех классов есть общий предок: object и java.lang.Object, соответственно, а так же полноценные метаданные и полноценный механизм reflection. Более того, у .NET в отличии от Delphi из мира dynamic languages взят еще оператор eval, позволяющий компилировать код непосредственно в рантайм. Язык остался строго типизированным, но получил многие элементы динамических языков: type inference, closures, duck typing (производная от dynamic typing: var something = new ClassA(...); ), eval, reflections.
kuj>Такой .NET язык как Boo пошел еще дальше и взял такие элементы динамических языков как: syntactic macros (в отличии от макросов в C++, макросы в Boo имеют больше черт, характерных макросам в динамических языках — они модифицируют compiler pipeline) и generators.
kuj>Полноценным динамическим языком в мире .NET на основе DLR станет IronRuby.
Ну замечательно... К чему это только все?
Здравствуйте, DOOM, Вы писали:
kuj>>Хотелось бы посмотреть как ты будешь чисто процедурно писать средних размеров корпоративную систему. DOO>Хотелось бы посмотреть как ты будешь писать средних размеров корпоративную систему. DOO>Метод решения выбирают под задачу и исходя из опыта команды. Да будет тебе известно, что Дейкстра так и не признал ООП — так для сведения.
Дейкстра уж много лет как на пенсии. Так что он немного не в теме современных реалий программирования.
DOO>Ядро Linux написано на C и его размеры могут поконкурировать даже не со средних размеров корпоративной системой DOO>Весь Gnome написан на C (ну может за редким исключением). DOO>Еще примеры надо?
Давай пример корпоративной системы написанной полностью процедурными методами и хотя бы пару широкораспространенных прикладных приложений.
kuj>>Это из разряда "на JS можно написать мощный интерфейс пользователя". DOO>Ну c JS слишком долго лазить за примерами,
Слив засчитан.
kuj>>Придумай. Еще посмеемся. DOO>Мда... Все-таки недаром тебя в КСВ считают неадекватным оппонентом...
Это из серии "Мы Государь всея Руси, считаем тебя неадекватным оппонентом..."
DOO>>>>>Ворнинги от того, что в .Net банально многое нельзя, а значит программа не перенесется в среду .Net. G>>>>В .NET можно сделать все, что можно в делфи. DOO>>>В .Net нет прямого доступа к памяти, или я ошибаюсь? kuj>>Выкладывай для какой задачи тебе нужен прямой доступ к памяти. DOO>Сам подумай на досуге, а.
Слив засчитан.
G>>>>Глупость номер два — использование вариантных типов везде. DOO>>> Поясни. Кто тут и где про использование вариантных типов говорил? kuj>>Ты одной квотой выше. DOO>Я показал пример, за это мне навесили: "использование вариантных типов везде" — логических ошибок совсем не видать?
Слив засчитан. В динамических языках все типы динамические.
Здравствуйте, DOOM, Вы писали:
kuj>>Это не субъективизм, а реалии жизни. Вместо того, чтоб сделать нормальный строго типизированный язык, взяли самую худшую черту динамического языка и прилепили ее в виде специального типа Variant. DOO>В результате это существенно упростило некоторые задачи, что и позволило стать дельфи языком для непрограммистов. Значит с рыночной точки зрения решение было правильным
Variant позволил Делфи стать языком для непрограммистов? /сползаю под стол
kuj>>В нормальных строго типизированных ОО языках типа C# и Java у всех классов есть общий предок: object и java.lang.Object, соответственно, а так же полноценные метаданные и полноценный механизм reflection. Более того, у .NET в отличии от Delphi из мира dynamic languages взят еще оператор eval, позволяющий компилировать код непосредственно в рантайм. Язык остался строго типизированным, но получил многие элементы динамических языков: type inference, closures, duck typing (производная от dynamic typing: var something = new ClassA(...); ), eval, reflections.
kuj>>Такой .NET язык как Boo пошел еще дальше и взял такие элементы динамических языков как: syntactic macros (в отличии от макросов в C++, макросы в Boo имеют больше черт, характерных макросам в динамических языках — они модифицируют compiler pipeline) и generators.
kuj>>Полноценным динамическим языком в мире .NET на основе DLR станет IronRuby. DOO>Ну замечательно... К чему это только все?
К тому, что Delphi не является динамическим языком. До тебя так же туго доходит, как и для hattab`а. Впрочем, может ты его альтер-эго?
Здравствуйте, Sinclair, Вы писали:
kuj>>Богатый интерфейс на яваскрипте? Флаг в руки, ветер в спину. S>Ты под богатым интерфейсом часом не вот это имеешь в виду? Или, может быть, maps.google.com?
Часом нет. Речь шла о Windows, а не о Web. А то, может, давайте еще Silverlight сюда приплетем.
Здравствуйте, gandjustas, Вы писали:
G>>>>>Ну на C# я напишу G>>>>>
G>>>>> (obj as IInterface)//Если obj реализует IInterface, то вернется переменная этого типа, иначе будет null.
G>>>>>
G>>>>>При этом человек, который писал о класс объекта obj мог и не знать о существовании IInterface. H>>>>А что произойдет в момент компиляции, если obj не реализует IInterface? G>>>Ничего.
H>>Ok. Если это так, то такое поведение оператора as это и есть запрос интерфейса от объекта (но не приведение оного). А теперь запроси от объекта другой объект (ты же сказал, что решение на интерфейсах вызвано кривостью Delphi).
G>Вникай, все это нормально компилируется G>
G>interface IA
G>{
G> //...
G>}
G>interface IB
G>{
G> //...
G>}
G>class A:IA
G>{
G> //...
G>}
G>class B:IB
G>{
G> //...
G>}
G>class C:A
G>{
G> //...
G>}
G>//...
G>A a = new C();
G>(a as IA) //вернет ссылку на интерфейс IA
G>(a as IB) //вернет null
G>(a as A) //вернет ссылку на класс A
G>(a as B) //вернет null
G>(IA)a //вернет ссылку на интерфейс IA
G>(B)a //вылетит Exception
G>(IB)a //вылетит Exception
G>
Вникать тут не во что. Я тебя попросил вполне конкретный пример: по аналогии с запросом ICanFly, сделать запрос объекта (без использования интерфейсов, это же, с твоих слов, криво). Ты мне приведения типов показываешь Это далеко не одно и то же. Ломай стены в своей голове.