Re[4]: С#
От: alexkro  
Дата: 31.10.03 06:19
Оценка: 1 (1) -1
Здравствуйте, gloomy rocker, Вы писали:

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


GR>Справедливое замечание, НО!

GR>Разрабатывать компоненты бизнес-логики стало намного приятней. И именно в этом контексте я имел в виду лаконичность.
GR>Попробуй например на C++ напиши что-то типа
GR>
GR>my_object.MyMethod(new MyParam1(...), new MyParam2(...));
GR>

GR>Проблемы гарантированы!

А в чем проблемы?

GR>Попробуй на каждый чих проверять возвращаемое значение. Тут ты с воплями (ushort)1 — rules!!! прескочишь на C#.


Это не проблема языка, а особенность Win32 API, которые должны быть вызываемы из C. Возьми winstl, например, и жизнь станет проще.

А попробуй из C# Win32 функции повызывать, тоже возвращаемое значение проверять прийдется. От этого никуда не деться.

GR>А как меня достал бардак со строками в C++

GR>Надо тебе BSTR на подстроки, разделяемые запятой, разбить — нужно сконвертить его например в CStringW,
GR>а потом последовательно вызывать метод Tokenize, пока подстроки не закончатся.
GR>Бррр... жуть!!! А на C# это записывается ЛАКОНИЧНО
GR>
GR>string[] str_parts = my_string.Split(...);
GR>


Бардак в COM программировании опять же, а не в C++. А ты возьми comstl, и жизнь... сам знаешь
А в C++ со строчками все хорошо: std::string.

GR>Еще примеры придумать?

GR>interop, например, намного приятней, чем #import в С++.

Зато из C# нельзя создать COM объекты, не реализующие IDispatch.

GR>И таких приятных мелочей в C# полно.


Пока что C# выигрывает только тем, что библиотека .NET для него доступна, а для (native) C++ нет (C++ with managed extensions — это очень грусно). Но прийдет другое время... (http://msdn.microsoft.com/vstudio/productinfo/roadmap.aspx смотри раздел про Visual C++).
Re[5]: С#
От: gloomy rocker Россия  
Дата: 31.10.03 07:44
Оценка:
Здравствуйте, alexkro, Вы писали:

A>А в чем проблемы?

Проблема в управлении памятью. В указанном примере MyMethod обязан будет освободить память, а это в ощем случае плохо,
поскольку не исключено такое использование этого метода в С++:
MyParam1* prm1 = new MyParam1(...);
MyParam2* prm2 = new MyParam2(...);
my_object.MyMethod(prm1,prm2);
prm1->DoSomething();
prm2->DoSomething();

А в .Net сбощик мусора все подберет.

A>Это не проблема языка, а особенность Win32 API, которые должны быть вызываемы из C. Возьми winstl, например, и жизнь станет проще.

А я на С++ и не наезжаю. Я утверждаю, что на C# компоненты разрабатывать намного приятней.

A>А попробуй из C# Win32 функции повызывать, тоже возвращаемое значение проверять прийдется. От этого никуда не деться.

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

A>Бардак в COM программировании опять же, а не в C++. А ты возьми comstl, и жизнь... сам знаешь

Что такое comstl? Или так теперь называется ATL?

A>А в C++ со строчками все хорошо: std::string.

Ну не хочу я в ATL-проект, в котором уже используются CComBSTR, _bstr_t и CStringW цеплять еще и std::string

A>Зато из C# нельзя создать COM объекты, не реализующие IDispatch.

Чушь!!!
Я не поленился — проверил эту гипотезу.
Вот работающий код:
// Class1.h : Declaration of the CClass1

#pragma once
#include "resource.h"       // main symbols

#include "COMObject.h"


// CClass1

class ATL_NO_VTABLE CClass1 : 
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CClass1, &CLSID_Class1>,
    public IClass1
{
public:
    CClass1()
    {
    }

DECLARE_REGISTRY_RESOURCEID(IDR_CLASS1)


BEGIN_COM_MAP(CClass1)
    COM_INTERFACE_ENTRY(IClass1)
END_COM_MAP()


    DECLARE_PROTECT_FINAL_CONSTRUCT()

    HRESULT FinalConstruct()
    {
        return S_OK;
    }
    
    void FinalRelease() 
    {
    }

public:

    STDMETHOD(Test)(BSTR bsInput, BSTR* bsOutput);
};

OBJECT_ENTRY_AUTO(__uuidof(Class1), CClass1)


// Class1.cpp : Implementation of CClass1

#include "stdafx.h"
#include "Class1.h"
#include ".\class1.h"


// CClass1


STDMETHODIMP CClass1::Test(BSTR bsInput, BSTR* bsOutput)
{
    // TODO: Add your implementation code here
    CComBSTR bsOut(L"CClass1::Test called with bsInput = ");
    bsOut.AppendBSTR(bsInput);
    *bsOutput = bsOut.Detach();
    return S_OK;
}


// COMObject.idl : IDL source for COMObject
//

// This file will be processed by the MIDL tool to
// produce the type library (COMObject.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";

[
    object,
    uuid(C0D727C9-97C0-4BA6-A0A4-7D046BA70A22),
    helpstring("IClass1 Interface"),
    pointer_default(unique)
]
interface IClass1 : IUnknown{
    [helpstring("method Test")] HRESULT Test([in] BSTR bsInput, [out,retval] BSTR* bsOutput);
};
[
    uuid(8F9408DE-6912-4B57-A42B-C9DE88BE88A0),
    version(1.0),
    helpstring("COMObject 1.0 Type Library")
]
library COMObjectLib
{
    importlib("stdole2.tlb");
    [
        uuid(BECA4E65-71A5-4947-BC78-8CA6623AAD7E),
        helpstring("Class1 Class")
    ]
    coclass Class1
    {
        [default] interface IClass1;
    };
};


using System;
using COMObjectLib;

namespace SharpCaller
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Class1Class cls1 = new Class1Class();
            string str_rer = cls1.Test("test");
        }
    }
}


A>Пока что C# выигрывает только тем, что библиотека .NET для него доступна, а для (native) C++ нет (C++ with managed extensions — это очень грусно). Но прийдет другое время... (http://msdn.microsoft.com/vstudio/productinfo/roadmap.aspx смотри раздел про Visual C++).

Пока я вижу у вас только нежелание принять что-то новое.
Для некоторых задач C# — действительно не лучший выбор, но уж те задачи,
для которых он предназначен, решать на нем одно удовольствие!
... << RSDN@Home 1.1 beta 2 >>
Скука — двигатель прогресса.
Re[5]: С#
От: WFrag США  
Дата: 31.10.03 14:11
Оценка:
Здравствуйте, alexkro, Вы писали:

GR>>Попробуй например на C++ напиши что-то типа

GR>>
GR>>my_object.MyMethod(new MyParam1(...), new MyParam2(...));
GR>>

GR>>Проблемы гарантированы!

A>А в чем проблемы?


Не exception-safe.
Re[5]: С#
От: _MarlboroMan_ Россия  
Дата: 31.10.03 15:11
Оценка: 12 (1)
Здравствуйте, Воронков Василий, Вы писали:

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


GIV>>В дереве от называется "Демагогия программирования" в форме модерирования и внутри него самого написано "Священные войны".


ВВ>В дереве это глюк. И над ним уже работают


fixed.

ура-ура!
... << RSDN@Home 1.1 beta 2 >>

— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
Re[6]: С#
От: alexkro  
Дата: 03.11.03 08:28
Оценка:
Здравствуйте, gloomy rocker, Вы писали:

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


A>>А в чем проблемы?

GR>Проблема в управлении памятью. В указанном примере MyMethod обязан будет освободить память, а это в ощем случае плохо,

Высосано из пальца. Ты будешь утверждать, что нужно обязательно объекты параметров создавать в куче и передавать голые указатели? Как будто это единственный способ.

...
A>>Зато из C# нельзя создать COM объекты, не реализующие IDispatch.
GR>Чушь!!!

Какой ты несдержанный . Долго злился, когда проверял? Так было в 1.0. Если в 1.1 поправили, то хорошо.

GR>Я не поленился — проверил эту гипотезу.

GR>Вот работающий код:

...


A>>Пока что C# выигрывает только тем, что библиотека .NET для него доступна, а для (native) C++ нет (C++ with managed extensions — это очень грусно). Но прийдет другое время... (http://msdn.microsoft.com/vstudio/productinfo/roadmap.aspx смотри раздел про Visual C++).

GR>Пока я вижу у вас только нежелание принять что-то новое.
GR>Для некоторых задач C# — действительно не лучший выбор, но уж те задачи,
GR>для которых он предназначен, решать на нем одно удовольствие!

Зачем мне принимать что-то новое, в котором нет половины возможностей старого? Мне больше по душе вот это: http://www.gotdotnet.com/team/PDC/4064/TLS310.ppt
Re: С#
От: Silver_s Ниоткуда  
Дата: 03.11.03 10:02
Оценка: -1
Здравствуйте, Terber, Вы писали:

T>Так вот, попробовал тут C#, после MFC все кажется очень легко, прям Visual Basic — ом попахивает....


Если все кажется слишком легко, значит на слишком примитивной задаче пробовал. Если система предназначена для решения на порядок более сложных задач (чем С++ и MFC) значит на них и надо ее применять.

T>Как вы считаете, можно ли отнести C# программеров к первой категории и почему?


Хороших можно, плохих нет. И при чем здесь сравнение с Delphi и VB, на дельфях разрабатывали в основном гуй и для этого нужны специалисты по дизайну и организации логики гуя. Это не програмирование но немного с ним пересекается.
.NET и C# предназначены для другого.
Re[2]: С#
От: Кирилл Осенков Украина
Дата: 03.11.03 13:35
Оценка:
M>Давайте посмотрим на корову с другого бока. А как на счет сравнения возможностей VB и C#. Пожалуй, C# в этом отношении помощнее будет.
Здесь неоднозначность. Нужно уточнять, который VB ты имеешь ввиду, потому что есть два кардинально разных языка:

  1. VB (до версии 6.0 включительно)
  2. VB.NET

Между ними — пропасть.

P.S. Кстати, VB.NET и C# сравнивались уже многократно, и отличия на самом деле есть, но незначительные (вещи вроде отсутствия inline XML документации в VB.NET и отличия с делегатами MS обещает устранить в следующей версии).

Поэтому лично я считаю языки VB.NET (2003) и C# (2003) функционально эквивалентными.
Re[2]: С#
От: vvs86 Великобритания  
Дата: 03.11.03 21:17
Оценка:
Здравствуйте, Silver_s, Вы писали:

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


T>>Так вот, попробовал тут C#, после MFC все кажется очень легко, прям Visual Basic — ом попахивает....


S_>Если все кажется слишком легко, значит на слишком примитивной задаче пробовал. Если система предназначена для решения на порядок более сложных задач (чем С++ и MFC) значит на них и надо ее применять.


T>>Как вы считаете, можно ли отнести C# программеров к первой категории и почему?


S_> Хороших можно, плохих нет. И при чем здесь сравнение с Delphi и VB, на дельфях разрабатывали в основном гуй и для этого нужны специалисты по дизайну и организации логики гуя. Это не програмирование но немного с ним пересекается.

S_>.NET и C# предназначены для другого.

Для чего если не секрет
Re[7]: С#
От: gloomy rocker Россия  
Дата: 04.11.03 07:50
Оценка:
Здравствуйте, alexkro, Вы писали:

A>Здравствуйте, gloomy rocker, Вы писали:


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


A>>>А в чем проблемы?

GR>>Проблема в управлении памятью. В указанном примере MyMethod обязан будет освободить память, а это в ощем случае плохо,

A>Высосано из пальца. Ты будешь утверждать, что нужно обязательно объекты параметров создавать в куче и передавать голые указатели? Как будто это единственный способ.


A>...

A>>>Зато из C# нельзя создать COM объекты, не реализующие IDispatch.
GR>>Чушь!!!

A>Какой ты несдержанный . Долго злился, когда проверял? Так было в 1.0. Если в 1.1 поправили, то хорошо.

Ну погорячился малось
Я проверял действительно на 1.1. На нем работает.
1.0. просто под рукой нет, а то тоже проверил бы.

GR>>Я не поленился — проверил эту гипотезу.

GR>>Вот работающий код:

A>...



A>>>Пока что C# выигрывает только тем, что библиотека .NET для него доступна, а для (native) C++ нет (C++ with managed extensions — это очень грусно). Но прийдет другое время... (http://msdn.microsoft.com/vstudio/productinfo/roadmap.aspx смотри раздел про Visual C++).

GR>>Пока я вижу у вас только нежелание принять что-то новое.
GR>>Для некоторых задач C# — действительно не лучший выбор, но уж те задачи,
GR>>для которых он предназначен, решать на нем одно удовольствие!

A>Зачем мне принимать что-то новое, в котором нет половины возможностей старого? Мне больше по душе вот это: http://www.gotdotnet.com/team/PDC/4064/TLS310.ppt

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

З.Ы. Whidbey — это интересно Сам хочу потрогать.
... << RSDN@Home 1.1 beta 2 >>
Скука — двигатель прогресса.
Re[8]: С#
От: Plutonia Experiment Беларусь http://blogs.rsdn.org/ikemefula
Дата: 06.11.03 10:29
Оценка:
Здравствуйте, gloomy rocker, Вы писали:

GR>VBS все методы через IDispatch.Invoke вызывает.

GR>Так почему он не хочет вызывать методы разных интерфейсов?
GR>Или он умеет вызывать только методы default интерфейса?

Так и есть. Дело в том что в обжекте реализация диспатча особо хитрая. Потому видны только метода одного интеофейса. Каждый раз приводит к типу и кастить очень геморно.
Re[9]: С#
От: gloomy rocker Россия  
Дата: 06.11.03 11:17
Оценка:
Здравствуйте, Plutonia Experiment, Вы писали:

PE>Здравствуйте, gloomy rocker, Вы писали:


GR>>VBS все методы через IDispatch.Invoke вызывает.

GR>>Так почему он не хочет вызывать методы разных интерфейсов?
GR>>Или он умеет вызывать только методы default интерфейса?

PE>Так и есть. Дело в том что в обжекте реализация диспатча особо хитрая. Потому видны только метода одного интеофейса. Каждый раз приводит к типу и кастить очень геморно.


Понятно...
Буду иметь в виду.
... << RSDN@Home 1.1 beta 2 >>
Скука — двигатель прогресса.
Re[5]: С#
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.11.03 02:29
Оценка: 3 (1)
Здравствуйте, alexkro, Вы писали:

A>Бардак в COM программировании опять же, а не в C++. А ты возьми comstl, и жизнь... сам знаешь

A>А в C++ со строчками все хорошо: std::string.

В КОМ говоришь? Проблема в том, что с С++ так сплошь и рядом. С++ — язык где сплошь и рядом нужно полагаться на те или иные патерны кодирования. Приемущество Шарпа не в том, что в нем ошибки обрабатывать проще, а в том, что Шарп практически не требует от программиста соблюдения неких джентельменских соглашений для получения работоспособного кода. Единсвенным серьезным код-патернов в Шарпе является using(). В общем, Шарп спроектирован так, чтобы уберигать программиста от граблей за счет строгости и сбалансированности языка (и рантайма), а не патернов кодирования. С++ же несоблюдения многих джентельменских соглашений тут же приводит к серьезнийшим проблемам.

A>Зато из C# нельзя создать COM объекты, не реализующие IDispatch.


Может не стоит говорить об областях в котороых не разбираешся?

GR>>И таких приятных мелочей в C# полно.


Больше конкретики.

A>Пока что C# выигрывает только тем, что библиотека .NET для него доступна, а для (native) C++ нет (C++ with managed extensions — это очень грусно). Но прийдет другое время... (http://msdn.microsoft.com/vstudio/productinfo/roadmap.aspx смотри раздел про Visual C++).


Извини, но это банальный фанатизм. Шарп выигрывает по очень многим параметрам. Главные из них — это простота и безопасность. С++ несомненно мощьный язык, но содержащий слишком огромное количество граблей. STL так же далека от совершенсва. Думаю даже после появления С++ for CLI все равно основная масса народа будет выбирать Шарп. А кое-кто вообще Васик.нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: С#
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.11.03 02:44
Оценка: 2 (1)
Здравствуйте, alexkro, Вы писали:

A>Высосано из пальца. Ты будешь утверждать, что нужно обязательно объекты параметров создавать в куче и передавать голые указатели? Как будто это единственный способ.


Вот многие не могут понять зачем нужен язык в котором для получения корректного кода все нужно десять раз обернуть в шаблоны. Наверно они уроды.

A>Какой ты несдержанный . Долго злился, когда проверял? Так было в 1.0. Если в 1.1 поправили, то хорошо.


Так небыло никогда. Это просто твое незнание предмета. На Шарпе (как и на других языках дотнета) всегда можно было как использовать, так и создавать КОМ-объекты не реализующие диспатч.

A>Зачем мне принимать что-то новое, в котором нет половины возможностей старого?


Затем, что в нем (в новом) нет 99% граблей (так искосно разоженных создателями С++) и не нужно напрягаться, чтобы написать корректный код. Как результат скорость создания ПО выростает на пордки. А надежность увеличивается.

Мне больше по душе вот это: http://www.gotdotnet.com/team/PDC/4064/TLS310.ppt

Сравни как нибудь на досуге функциональность std::vector-а и IList<T>. А потом ответь зачем std::vector нужен в дотнете?

В общем, это догматизм. STL далек от севершенства и имеется достойные замены ему. С другой стороны если тебе хочется использовать СТЛ — используй. Получишь тормоза в дотнете, но удовлетворение от использования чего-то "родного". Если оно того стоит, то почему бы и нет?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: С#
От: Шахтер Интернет  
Дата: 23.11.03 19:24
Оценка:
Здравствуйте, gloomy rocker, Вы писали:

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

...
GR>Я считаю, что для разработки GUI и бизнес-логики C# — то что доктор прописал

Абсолютно согласный. У C# очень хорошая и ёмкая ниша вырисовывается. Причем, решения для этой ниши не будут страдать тормознутостью, как в классическом Бейсике.
... << RSDN@Home 1.1 beta 2 >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[6]: С#
От: Plutonia Experiment Беларусь http://blogs.rsdn.org/ikemefula
Дата: 24.11.03 08:10
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>В КОМ говоришь? Проблема в том, что с С++ так сплошь и рядом. С++ — язык где сплошь и рядом нужно полагаться на те или иные патерны кодирования. Приемущество Шарпа не в том, что в нем ошибки обрабатывать проще, а в том, что Шарп практически не требует от программиста соблюдения неких джентельменских соглашений для получения работоспособного кода. Единсвенным серьезным код-патернов в Шарпе является using().


Это также и минус. С++ дисциплинирует писателя, а С# — нет. На шарпе иногда появляются такие выгибоны, на которые в здравом уме мало кто пойдет, а все потому, что слишком просто на нам нагнать код.
Re[7]: С#
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.11.03 15:01
Оценка: 2 (1)
Здравствуйте, Plutonia Experiment, Вы писали:

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



VD>>В КОМ говоришь? Проблема в том, что с С++ так сплошь и рядом. С++ — язык где сплошь и рядом нужно полагаться на те или иные патерны кодирования. Приемущество Шарпа не в том, что в нем ошибки обрабатывать проще, а в том, что Шарп практически не требует от программиста соблюдения неких джентельменских соглашений для получения работоспособного кода. Единсвенным серьезным код-патернов в Шарпе является using().


PE>Это также и минус. С++ дисциплинирует писателя, а С# — нет.


Дисциплирироваться нужно было в школе или в институте. А после обучения писать нужно. Да и некто не мешает натрахаться на С++ чтобы потом писать на Шарпе. Я так сам предпочитаю тех кто знаком с С++. Это как бы лишнее доказательство развитости человека как программиста. Но вот к минусам языка это отнести вряд ли можно.

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


Согласен. Но это и есть собстенно проблемы обучения и формирования личности.

Вот сколько есть людей не умеющих связать по-русски двух слов? Это же не значит, что русский плох?
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: С#
От: Mishka Норвегия  
Дата: 24.11.03 16:38
Оценка:
Здравствуйте, Terber, Вы писали:

T>Читал уже достаточно давно форум на сайте. Там поднималась проблема квалификация VB & Delphi программистов.

T>Так вот, попробовал тут C#, после MFC все кажется очень легко, прям Visual Basic — ом попахивает....
T>Как вы считаете, можно ли отнести C# программеров к первой категории и почему?


По секрету скажу, в жизни любого программиста наступает момент, когда уже не важно на чём ты пишешь или когда-либо писал
Re[2]: С#
От: Lloyd Россия  
Дата: 24.11.03 17:23
Оценка: 24 (3) :))) :)))
Здравствуйте, Mishka, Вы писали:

M>По секрету скажу, в жизни любого программиста наступает момент, когда уже не важно на чём ты пишешь или когда-либо писал


Увы, программисты тоже смертны.
... << RSDN@Home 1.1.0 stable >>
Re[5]: С#
От: mSerg Украина  
Дата: 26.11.03 13:31
Оценка:
Здравствуйте, alexkro, Вы писали:

[Skipped]
A>Бардак в COM программировании опять же, а не в C++. А ты возьми comstl, и жизнь... сам знаешь
A>А в C++ со строчками все хорошо: std::string.

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

[Skipped]

WBR, Serg Matskov.
WBR, Serg Matskov
Re[2]: С#
От: Igor Trofimov  
Дата: 26.11.03 14:33
Оценка:
S_> Хороших можно, плохих нет. И при чем здесь сравнение с Delphi и VB, на дельфях разрабатывали в основном гуй и для этого нужны специалисты по дизайну и организации логики гуя. Это не програмирование но немного с ним пересекается.
S_>.NET и C# предназначены для другого.

При чем туту гуй? Ниши у C#/Delphi совпадают почти на 100%.

Я некоторое время назад пользовался одним софтовым DVD-плеером, очень симпатичным и функциональным (DVDDirect). Очень удивился, но он оказался написан на Delphi, вместе с DS-фильтрами.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.