На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (245) « Первая ... 107 108 [109] 110 111 ...  244 245  ( Перейти к последнему сообщению )  
> Есть ли будущее у DELPHI?
    Цитата [S]mike @
    После знакомство с Джавой и Шарпом я в здравом уме не начну ни один проект на Дельфях. Потому что это неудобно и неэффективно, язык бедный, среда неполноценная и глючная вплоть до самых последних версий.

    Если бы ты сел в машину времени, вернулся на пару лет назад и сказал бы это себе самому тогдашнему, то вернулся бы с синяками на лице :D
      Цитата DesweR @
      Цитата ([S]mike @ 27.04.12, 01:43)
      или веб-разработке можно даже не мечтать.

      взгляни на первую демку
      http://unigui.com/demo

      Кстати у явистов это уже с 2006 года есть, причем бесплатно и от гугла: http://en.wikipedia.org/wiki/Google_Web_Toolkit
        Цитата --Ins-- @
        Цитата MyNameIsIgor @
        Как code style вообще может быть каким-то препятствием для профессионального разработчика?


        Сбивает с толку и ухудшает восприятие кода.

        Кого? Стандарт кодирования как раз призван описать соглашения, которому будут следовать все члены команды. Это касается не только стиля именования.
          Цитата Мяут-Настоящий @
          Кстати у явистов это уже с 2006 года есть, причем бесплатно и от гугла: http://en.wikipedia.org/wiki/Google_Web_Toolkit

          Более того, это unigui использует разработку компании Sencha - ExtJS. Но Sencha - зарекомендовавшая себя компания, с кучей известных клиентов. А кто является автором UniGui? Будет ли он достаточное время поддерживать проект? Будет ли его развивать, обновлять?

          Вот почему для Шарпа и Джавы есть все, а Delphi как-то плетется позади, изредка только копируя (и чаще всего неудачно) уже известные проекты? Лично я уже понял, почему. Сейчас я бы тоже не начал ничего писать на Дельфи.
            Цитата Астарот @
            Если бы ты сел в машину времени, вернулся на пару лет назад и сказал бы это себе самому тогдашнему, то вернулся бы с синяками на лице :D

            На самом деле в перспективности и удобстве Дельфей у меня уже тогда появлялись сомнения. Но с одной стороны не видел альтернативы. С другой стороны ожидал каких-то изменений к лучшему. И свято верил, что Дельфи - это более быстрый нативный код, что дает фору по сравнению с Шарпом или Джавой.

            Вот например что меня напрочь убивало в Дельфях (модуль System):
            ExpandedWrap disabled
              initialization
              {$IFDEF MSWINDOWS}
                _InitDelayHelp;
                InitializeMemoryManager;
                InitializeLocaleData; // !!!
              {$ENDIF}


            Эта процедура InitializeLocaleData имеет одно единственное предназначение: прочитать язык, выбранный по-умолчанию язык приложения в среде Delphi. Я когда-то поимел черт знает сколько мозгоклюйства, когда пробовал запустить на русской винде программу с русской локализацией вне среды. Оказалось эта зараза читает значение из реестра! Смотрим процедуру GetUILanguages. А среда, соответственно, это значение в реестр прописывает!

            Вот почему на Дельфях не пишут ОС :lool: Худшей залипухи я еще не видел.

            Да, такое есть во всех версиях Дельфи, во всех Дельфи-программах! :wall: Потому что модуль System подключается _всегда_.
            Сообщение отредактировано: [S]mike -
              Цитата [S]mike @
              На самом деле в перспективности и удобстве Дельфей у меня уже тогда появлялись сомнения. Но с одной стороны не видел альтернативы. С другой стороны ожидал каких-то изменений к лучшему. И свято верил, что Дельфи - это более быстрый нативный код, что дает фору по сравнению с Шарпом или Джавой.

              Да нет, я не про то! Я про то, что вот так писать:
              Цитата [S]mike @
              После знакомство

              это ужас-ужас-ужас, ты бы себе лицо за такое набил :D

              Скрытый текст
              Шучу ;)
                Граммар наци детектед :tong:
                Скрытый текст
                Шучу ;)
                  Цитата D_KEY @
                  Стандарт кодирования как раз призван описать соглашения, которому будут следовать все члены команды. Это касается не только стиля именования.


                  Я про отсутствие такового стандарта
                    Цитата --Ins-- @
                    Цитата D_KEY @
                    Стандарт кодирования как раз призван описать соглашения, которому будут следовать все члены команды. Это касается не только стиля именования.


                    Я про отсутствие такового стандарта

                    Вроде как у всех команд он есть.
                      Цитата [S]mike @
                      Оказалось эта зараза читает значение из реестра! Смотрим процедуру GetUILanguages. А среда, соответственно, это значение в реестр прописывает!


                      Что то я не нашел здесь упоминания о реестре.

                      ExpandedWrap disabled
                        procedure InitializeLocaleData;
                        begin
                          InitializeCriticalSection(CrSec);
                          CachedLangID := $7f; //  LANG_INVARIANT
                          UseThreadUILanguageAPI := (GetVersion and $000000FF) >= 6;
                          if UseThreadUILanguageAPI then
                          begin
                            @GetThreadPreferredUILanguages := GetProcAddress(GetModuleHandle(kernel), 'GetThreadPreferredUILanguages');
                            @SetThreadPreferredUILanguages := GetProcAddress(GetModuleHandle(kernel), 'SetThreadPreferredUILanguages');
                            @GetThreadUILanguage:= GetProcAddress(GetModuleHandle(kernel), 'GetThreadUILanguage');
                          end;
                        end;
                         
                        function GetUILanguages(const LANGID: WORD): string;
                         
                          function LastHyphenPos(S : String) : integer;
                          var
                            I: integer;
                          begin
                            for I := Length(S) downto 1 do
                              if S[I] = '-' then exit (I-1);
                            Result := 0;
                          end;
                         
                          function ConvertResToUILanguages(ResBuffer: PAnsiChar): String;
                          var
                            I: Integer;
                            Separator,
                            ALanguage: String;
                          begin
                            Result := String(PAnsiChar(ResBuffer));
                            for I := 1 to Length(Result) do
                              if Result[I] = ',' then exit;
                            ALanguage := Result;
                            Result := '';
                            while ALanguage <> '' do
                            begin
                              Result := Result + Separator + ALanguage;
                              Separator := ',';
                              ALanguage := Copy(ALanguage, 1, LastHyphenPos(ALanguage));
                            end;
                          end;
                         
                          function GetPreferredLangForOldOS(LANGID: Word): string;
                          var
                            Language, Region : array[0.. LOCALE_NAME_MAX_LENGTH-1] of Char;
                            H, L, I: Cardinal;
                          begin
                            Result := '';
                            // Lookup exceptional languages table.
                            if (NumberOfLocaleData > 0) and (LocaleTable[0].ID <= LANGID) and (LANGID <= LocaleTable[NumberOfLocaleData-1].ID) then
                            begin
                              H := NumberOfLocaleData-1;
                              L := 0;
                              while H >= L do
                              begin
                                I := (H + L) div 2;
                                if LocaleTable[I].ID > LANGID then H := I - 1
                                else if LocaleTable[I].ID < LANGID then L :=  I + 1
                                else
                                begin
                                  Result := ConvertResToUILanguages(LocaleTable[I].List);
                                  Break;
                                end;
                              end;
                            end;
                            if (Result = '') and IsValidLocale(LANGID, LCID_SUPPORTED) then
                            begin
                              // Generate language names: <language>-<country> and <language>
                              GetLocaleInfo(LANGID, LOCALE_SISO639LANGNAME, Language, LOCALE_NAME_MAX_LENGTH);
                              GetLocaleInfo(LANGID, LOCALE_SISO3166CTRYNAME, Region, LOCALE_NAME_MAX_LENGTH);
                              Result := String(Language) + '-' + String(Region) + ',' + String(Language);
                            end;
                          end;
                         
                          function CheckDifferentLanguageList(src1, src2: PWideChar; len: integer): boolean;
                          begin
                            Result := True;
                            while len > 0 do
                            begin
                              if (src1^ <> src2^) then exit;
                              inc(src1);
                              inc(src2);
                              dec(len);
                            end;
                            Result := False;
                          end;
                         
                          function ThreadUILanguages(var bufsize: Integer): PWideChar;
                          var
                            I: Integer;
                          begin
                            Result := nil;
                            bufsize := 0;
                            if GetThreadPreferredUILanguages(MUI_LANGUAGE_NAME or MUI_UI_FALLBACK, @I, nil, @bufsize) then
                            begin
                              GetMem(Result, bufsize * sizeof(Char));
                              GetThreadPreferredUILanguages(MUI_LANGUAGE_NAME or MUI_UI_FALLBACK, @I, Result, @bufsize);
                            end;
                          end;
                         
                          function GetPreferredLangForNewOS(const LANGID: WORD): string;
                          var
                            SavedBufSize, BufSize: Integer;
                            SavedUILanguages, UILanguages: PChar;
                            I: integer;
                            W: WORD;
                            IDBuf: array[0..5] of WideChar; // four digits + two #0
                          const
                            hexdig: AnsiString = '0123456789ABCDEF';
                          begin
                            SavedUILanguages := nil;
                            if GetThreadUILanguage <> LANGID then
                            begin
                              SavedUILanguages := ThreadUILanguages(SavedBufSize);
                              W := LANGID;
                              for I := 3 downto 0 do
                              begin
                                IDBuf[I] := WideChar(hexdig[1+ (W and $0F)]);
                                W := W div 16;
                              end;
                              IDBuf[4] := #0; // Double null-terminator.
                              IDBuf[5] := #0;
                              SetThreadPreferredUILanguages(MUI_LANGUAGE_ID, @IDBuf, @I);
                            end;
                         
                            UILanguages := ThreadUILanguages(BufSize);
                            if UILanguages <> nil then
                            begin
                              for I := 0 to BufSize - 2 do
                                if UILanguages[I] = #0 then UILanguages[I] := ',';
                              Result := UILanguages;
                              FreeMem(UILanguages);
                            end;
                         
                            if SavedUILanguages <> nil then
                            begin
                              SetThreadPreferredUILanguages(0, nil, @I);
                              UILanguages := ThreadUILanguages(BufSize);
                              if (SavedBufSize <> BufSize) or CheckDifferentLanguageList(SavedUILanguages, UILanguages, BufSize) then
                                SetThreadPreferredUILanguages(MUI_LANGUAGE_NAME, SavedUILanguages, @I);
                              FreeMem(UILanguages);
                              FreeMem(SavedUILanguages);
                            end;
                          end;
                         
                        var
                          bufSize: Integer;
                          UILanguages: PChar;
                          I: Cardinal;
                          numLang: integer;
                          SavedThreadUILanguage: WORD;
                        begin
                          EnterCriticalSection(CrSec);
                          if CachedLangID = LANGID then
                          begin
                            Result := CachedLanguageNames;
                            LeaveCriticalSection(CrSec);
                            exit;
                          end;
                          LeaveCriticalSection(CrSec);
                         
                          Result := '';
                          if IsValidLocale(LANGID, LCID_SUPPORTED) then
                          begin
                            if UseThreadUILanguageAPI then
                              Result := GetPreferredLangForNewOS(LANGID)
                            else
                            begin
                              Result := GetPreferredLangForOldOS(LANGID);
                              if LangID <> GetSystemDefaultUILanguage then
                              begin
                                if Result <> '' then Result := Result + ',';
                                Result := Result + GetPreferredLangForOldOS(GetSystemDefaultUILanguage);
                              end;
                            end;
                          end;
                         
                          EnterCriticalSection(CrSec);
                          CachedLangID := LANGID;
                          lstrcpyn(CachedLanguageNames, PChar(Result), SizeOf(CachedLanguageNames));
                          LeaveCriticalSection(CrSec);
                        end;
                        Цитата jack128 @
                        Что то я не нашел здесь упоминания о реестре.

                        Смотри GetLocaleOverride.

                        Добавлено
                        Может оно и не явно вызывается в секции инициализации модуля System, но то что вызывается всегда при старте программы - это точно (в GetResourceModuleName).
                        Сообщение отредактировано: [S]mike -
                          О, вспомнил чего мне еще не хватает в Delphi (правда этого нет и в Джаве, как в C# — не знаю):

                          В Eiffel есть такой клевый терм same, означает он примерно "тот же класс, что и текущий" в контексте описания класса, т.е. например:
                          ExpandedWrap disabled
                            class Object {
                             
                                public boolean equals(same other) { ... }
                            }

                          т.о. во всех наследниках Object метод equals будет требовать объект того же типа, что и сам наследник. Без этой фичи в Джаве местами весьма неудобно пользоваться дженериками.

                          C++-ными шаблонами это хотя бы можно эмулировать.
                          Сообщение отредактировано: korvin -
                            Цитата korvin @
                            эмулировать.
                            Это звучит оскорбительно! :D
                              Цитата Adil @
                              Цитата korvin @
                              эмулировать.
                              Это звучит оскорбительно! :D

                              Кстати, че-то не могу сообразить как это будет выглядеть, может подскажет кто?
                                Цитата korvin @
                                Кстати, че-то не могу сообразить как это будет выглядеть, может подскажет кто?

                                Я вот тоже не могу представить. Ближайший аналог - имитация примесей при помощи шаблонов.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (245) « Первая ... 107 108 [109] 110 111 ...  244 245


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1255 ]   [ 15 queries used ]   [ Generated: 23.12.25, 19:17 GMT ]