Рассуждать о многословности Java под статьёй о Delphi, где операторные скобки занимают от 3 до 5 символов — можно, и никакого двоемыслия здесь нет.
Тяжеловесная форма блочного оператора в (Object) Pascal воспринимается как синтаксический шум и быстро перестает быть чем-то значимым.
Многословность Java в другом — начиная от принятой тяжеловесности идентификаторов и заканчивая собственно строго объектной парадигмой, что требует написания дополнительного чисто формального кода.
Так это с точки зрения здравого смысла приватизировать завод, скупив ваучеры за копейки, а потом распродать его на металлолом — преступление. А с точки зрения буржуазного закона — просто воля хозяина.
Скорее вопросы будут не просто с копированием участка, а с выделением строки из TBytes и наоборот.
В общем, решения-то есть, но все равно сложностей много.
Решение «кого-то умного» полностью поддерживаю, неюникодное приложение в XXI веке это дичь какая-то.
Да ну? Вот проект, в котором я работаю: полностью американский рынок, только ASCII, только хардкор. Юникод — бесполезная свистелка.
Да и поймите, string — это не просто строка текста, где можно говорить о кодировке.
Если кто-то не в курсе (это я не вам, а так в сторону), почему в Delphi часто строки используют как буферы данных, поясняю: типа shared_ptr там нет (не было в тем времена), а строка в Дельфи с самых ранних версий — RefCounted, поэтому строка — это в первую очередь, динамический байтовый массив, с поддержкой совместного владения, copy-on-write и автоматического удаления.
Поэтому строками можно свободно передавать данные на любую глубину вложенности, между любыми объектами — она всегда thread safe и автоматически удаляется по завершению использования. При этом работать с этим массивом можно стандартными строковыми функциями из RTL, результат можно хранить в RTL же коллекциях без преобразований типа.
Да и исправление тривиальное, заменить на RawByteString
Не совсем. RawByteString это не настоящий тип данных, а обертка для cast'а.
Новый RTL работает только с юникодом — это — постоянные преобразования туда-обратно. Implicit, что кидает warning'и тысячами. Так что или обертки, или сторонние классы типа JCL AnsiStringList'а.
WinApi, который теперь по умолчанию использует W версии.
Индексирование по строке.
Заменить на TBytes не везде можно, много где для членения буферов используются функции типа Copy/Pos. Плюс ко всему замена типа FastCode, как будет работать с TBytes — а хез. Сколько вылезет косяков в приложении, которому 30 лет — можно только гадать.
Вон, правильно пишут про ассемблерный код.
Да там нюансов для legacy вагон.
В какой именно стране? Когда учился я, был запрет на использование станков лицам не достигшим 16 лет, если только речь не идет о специализированных учебных заведениях.
Я тупо менял sting на AnsiString, pchar на PAnsiChar и т.д., ну и ручками доковыривал
Это-то не проблема, и утилиты для этого есть. Но этого мало.
Представьте, что у вас весь код — ASCII, и вам надо кинуть исключение, а оно в новой RTL только Unicode — нужны либо явные приведения, а это нечитаемо, либо неявные, а это лишние warning'и, подавлять которые некомильфо.
Вся работа с TStringList'ами, с WinAPI переписывается. В общем, веселье еще то.
Проблема с быстродействием не стояла, потому как компьютеры со времён Delphi 6-7 ушли далеко вперёд.
Сравнение-то не компьютера времен 6-7 и сегодняшнего дня. А сегодняшнего дня с 7кой и сегодняшнего дня с 10.
Там, где много приведений туда-обратно, это является проблемой. А уж двойная потеря памяти и вовсе атас, в некоторых местах может не хватить адресного пространства (код-то 32 битный).
Вот это точно «былинный отказ», тут не поспоришь. Самому сейчас надо переносить проект в много миллионов строк с 7 на 10.2, и это ппц.
Самое поганое, что даже недостаточно просто заменить string на ansistring, pchar на pAnsiChar. Старая строка была по сути byte string, и при операциях не учитывалась кодировка.
Кроме того, WinApi везде в новых дельфях по умолчанию используется в W варианте, тоже много переделок. RTL вся только под WideString. Отсюда — постоянные преобразования от однобайтного к двухбайтному представлению и обратно — потеря производительности. Просто тупо удвоенный расход памяти, учитывая, что все строки — ASCII и второй байт всегда будет равен нулю.
И нет бы сделать как в FPC, чтобы можно было выбрать Ansi-only вариант или Unicode, так нет, просто порвали совместимость.
Так и пусть стороннее. Про то, сколько там разработчиков — не знаю, мне казалось, что команда.
Таблиц не больше 64, left join в запросах работает криво, при ошибке на сервере запрос остаётся в отрытом состоянии, отжирая память на клиенте.
В какой версии? Не думаю, что ограничение на количество таблиц невозможно исправить. Но — повторю — я использовал только сетевую библиотеку mORMot, конкретно обсуждать ваш случай не могу.
И ОДНО обсуждение в русскоязычном интернете…
Даже не знаю, что ответить. А кому оно нужно? За последние 10-12 лет из русскоязычных ресурсов пользовался только Хабром. Мне не понять вашу боль — для меня «задать вопрос» железобетонно = «задать вопрос на английском ресурсе». Особенно если продукт не из б. СССР.
Нет на indy ssl-rest сервера, на синапсе можно прикрутить, но после знатных танцев с бубнами
Не пробовал рест в синапсе, не могу сказать; но документация у них очень обширная, модульность неплоха, должно быть выполнимо — судя по примерам, REST сервер делается легко. Форум у них опять же есть, живой, на вопросы отвечают очень быстро. Я использую синапс мормот сейчас просто как https/websockets библиотеку и здесь выбор есть — Indy (1 connection=1 thread, не подходит), ICL и тому подобное или morMot от синапса (async, worker thread pool все дела, причем используется httpd ядра NT).
В моей области деятельности — все есть, поэтому «так во всем» принять не могу.
Касательно синапса «Не у кого спросить, невозможно найти примеры» так и вовсе мимо — и примеры есть полные, и форум, как писал выше.
В общем, вопрос «где это все» — как-то странен.
Насчёт подключения сторонних либ. Вы пробовали перевести хидеры из C++ в Делфи? Попробуйте перетащить и отладить (!) 100-200 классов, уверяю, вам не понравится
Из плюсов — нет. Просто из Си — да, это не проблема. NETовские DLLки тоже использовал без проблем.
Пакет для отладки более-менее удобный только один — EurecaLog, сторонний, платный. Впрочем, как и многое в Делфах
Да, Eureka тоже пользуюсь. Инструмент отличный, не нарадуюсь. Приятно же при креше получать полный отчет с детализацией до номера строки.
Платный? Ну да, так что с того? 150-250$ за лицензию для одиночки и до 1250$ за полную enterprise с исходниками на всю команду — разве это расходы? 750$ на команду если без исходников. Это не деньги.
FastMM помогает отладить утечки памяти, например. Через map2dbg можно и WinDbg использовать и тому подобное.
Мне решительно не понятен ваш фетиш на тему «сторонний — не сторонний». Инструмент — есть, какая разница, кем он выпущен? Никого же не возмущает, что надо использовать, скажем, сторонний (изначально) Boost?
Это же замечательно, что есть возможность расширения сторонними производителями.
так всё и осталось, как раньше молились на VirtualTreeView и Synapce,
Synopse.
Так а в чем проблема-то, если решение есть, и оно хорошее? Часть популярных пакетов потом становится стандартом, как те же Indy или FastMM.
Пакетов — море, инструментов для отладки — тоже. Чего нет, можно подключить хоть из C, хоть из net.
… но уж слишком часто с лестницы падают люди, иногда и со смертельным исходом…
Значит, неправильно лестница спроектирована. Либо ступенки слишком маленькие по глубине, либо слишком высокие, либо наклон лестницы как у трапа на судне.
она съедает метров 6 квадратных, а то и больше.
Это много по отношению к площади средней квартиры какой-нибудь метров в 50-60.
Для дома 6 метров — это не то что «ни о чем», тут даже слов не подобрать, насколько это незначительно.
Да и ребенка загонять в спальню 6 метров — это изуверство какое-то. Раз уж мы о доме, где ты не обязан укладываться в уже ограниченную кем-то площадь.
Не перестану вспоминать, как коллега на одной из работ — столяр — десятки лет опыта — лишился двух пальцев на фрезере по дереву.
Всего-навсего в нарушение ТБ положил ключ для зажима цанги не на отдельную этажерку, а на станину. «А что может пойти не так?».
Ключ упал от вибрации, он дернулся на звук. Финита ля комедия.
О, вы что.
Это сейчас весьма модный холивар в рунете — строить ли больше одного этажа.
«Тяжело подниматься по лестнице» — целая философия есть, скажем так у одноэтажников. «Два этажа — это совковые понты»(с) — и такое слышал.
В эпоху застоя — да, там людям дали пару десятков лет на то, чтобы они могли что-то скопить, но в 90е — уничтожили все эти накопления.
И зря — денежный навес, скрытая инфляция.
Облигации, павловская реформа и тому подобное — они не потому затеивались, что кто-то кого-то хотел злобно угнетать. Несоответствие денежной массы товарной, и это особенно сильно стало сказываться начиная с косыгинских реформ.
Тяжеловесная форма блочного оператора в (Object) Pascal воспринимается как синтаксический шум и быстро перестает быть чем-то значимым.
Многословность Java в другом — начиная от принятой тяжеловесности идентификаторов и заканчивая собственно строго объектной парадигмой, что требует написания дополнительного чисто формального кода.
В общем, решения-то есть, но все равно сложностей много.
Да ну? Вот проект, в котором я работаю: полностью американский рынок, только ASCII, только хардкор. Юникод — бесполезная свистелка.
Да и поймите, string — это не просто строка текста, где можно говорить о кодировке.
Если кто-то не в курсе (это я не вам, а так в сторону), почему в Delphi часто строки используют как буферы данных, поясняю: типа shared_ptr там нет (не было в тем времена), а строка в Дельфи с самых ранних версий — RefCounted, поэтому строка — это в первую очередь, динамический байтовый массив, с поддержкой совместного владения, copy-on-write и автоматического удаления.
Поэтому строками можно свободно передавать данные на любую глубину вложенности, между любыми объектами — она всегда thread safe и автоматически удаляется по завершению использования. При этом работать с этим массивом можно стандартными строковыми функциями из RTL, результат можно хранить в RTL же коллекциях без преобразований типа.
Не совсем. RawByteString это не настоящий тип данных, а обертка для cast'а.
Новый RTL работает только с юникодом — это — постоянные преобразования туда-обратно. Implicit, что кидает warning'и тысячами. Так что или обертки, или сторонние классы типа JCL AnsiStringList'а.
WinApi, который теперь по умолчанию использует W версии.
Индексирование по строке.
Заменить на TBytes не везде можно, много где для членения буферов используются функции типа Copy/Pos. Плюс ко всему замена типа FastCode, как будет работать с TBytes — а хез. Сколько вылезет косяков в приложении, которому 30 лет — можно только гадать.
Вон, правильно пишут про ассемблерный код.
Да там нюансов для legacy вагон.
Это вы просто не в курсе доходности металлического бизнеса в те годы.
В какой именно стране? Когда учился я, был запрет на использование станков лицам не достигшим 16 лет, если только речь не идет о специализированных учебных заведениях.
Это-то не проблема, и утилиты для этого есть. Но этого мало.
Представьте, что у вас весь код — ASCII, и вам надо кинуть исключение, а оно в новой RTL только Unicode — нужны либо явные приведения, а это нечитаемо, либо неявные, а это лишние warning'и, подавлять которые некомильфо.
Вся работа с TStringList'ами, с WinAPI переписывается. В общем, веселье еще то.
Сравнение-то не компьютера времен 6-7 и сегодняшнего дня. А сегодняшнего дня с 7кой и сегодняшнего дня с 10.
Там, где много приведений туда-обратно, это является проблемой. А уж двойная потеря памяти и вовсе атас, в некоторых местах может не хватить адресного пространства (код-то 32 битный).
Самое поганое, что даже недостаточно просто заменить string на ansistring, pchar на pAnsiChar. Старая строка была по сути byte string, и при операциях не учитывалась кодировка.
Кроме того, WinApi везде в новых дельфях по умолчанию используется в W варианте, тоже много переделок. RTL вся только под WideString. Отсюда — постоянные преобразования от однобайтного к двухбайтному представлению и обратно — потеря производительности. Просто тупо удвоенный расход памяти, учитывая, что все строки — ASCII и второй байт всегда будет равен нулю.
И нет бы сделать как в FPC, чтобы можно было выбрать Ansi-only вариант или Unicode, так нет, просто порвали совместимость.
Так и пусть стороннее. Про то, сколько там разработчиков — не знаю, мне казалось, что команда.
В какой версии? Не думаю, что ограничение на количество таблиц невозможно исправить. Но — повторю — я использовал только сетевую библиотеку mORMot, конкретно обсуждать ваш случай не могу.
Даже не знаю, что ответить. А кому оно нужно? За последние 10-12 лет из русскоязычных ресурсов пользовался только Хабром. Мне не понять вашу боль — для меня «задать вопрос» железобетонно = «задать вопрос на английском ресурсе». Особенно если продукт не из б. СССР.
Не пробовал рест в синапсе, не могу сказать; но документация у них очень обширная, модульность неплоха, должно быть выполнимо — судя по примерам, REST сервер делается легко. Форум у них опять же есть, живой, на вопросы отвечают очень быстро. Я использую синапс мормот сейчас просто как https/websockets библиотеку и здесь выбор есть — Indy (1 connection=1 thread, не подходит), ICL и тому подобное или morMot от синапса (async, worker thread pool все дела, причем используется httpd ядра NT).
В моей области деятельности — все есть, поэтому «так во всем» принять не могу.
Касательно синапса «Не у кого спросить, невозможно найти примеры» так и вовсе мимо — и примеры есть полные, и форум, как писал выше.
В общем, вопрос «где это все» — как-то странен.
Из плюсов — нет. Просто из Си — да, это не проблема. NETовские DLLки тоже использовал без проблем.
Да, Eureka тоже пользуюсь. Инструмент отличный, не нарадуюсь. Приятно же при креше получать полный отчет с детализацией до номера строки.
Платный? Ну да, так что с того? 150-250$ за лицензию для одиночки и до 1250$ за полную enterprise с исходниками на всю команду — разве это расходы? 750$ на команду если без исходников. Это не деньги.
FastMM помогает отладить утечки памяти, например. Через map2dbg можно и WinDbg использовать и тому подобное.
Мне решительно не понятен ваш фетиш на тему «сторонний — не сторонний». Инструмент — есть, какая разница, кем он выпущен? Никого же не возмущает, что надо использовать, скажем, сторонний (изначально) Boost?
Это же замечательно, что есть возможность расширения сторонними производителями.
Synopse.
Так а в чем проблема-то, если решение есть, и оно хорошее? Часть популярных пакетов потом становится стандартом, как те же Indy или FastMM.
Пакетов — море, инструментов для отладки — тоже. Чего нет, можно подключить хоть из C, хоть из net.
Значит, неправильно лестница спроектирована. Либо ступенки слишком маленькие по глубине, либо слишком высокие, либо наклон лестницы как у трапа на судне.
Это много по отношению к площади средней квартиры какой-нибудь метров в 50-60.
Для дома 6 метров — это не то что «ни о чем», тут даже слов не подобрать, насколько это незначительно.
Да и ребенка загонять в спальню 6 метров — это изуверство какое-то. Раз уж мы о доме, где ты не обязан укладываться в уже ограниченную кем-то площадь.
А почему не выводить на свой счет физлица единоразово?
Вы так говорите, как будто это что-то плохое.
Вы так говорите, как будто это что-то хорошее.
Труд серьезный, пожалуй, озабочусь поиском и приоборетением.
Всего-навсего в нарушение ТБ положил ключ для зажима цанги не на отдельную этажерку, а на станину. «А что может пойти не так?».
Ключ упал от вибрации, он дернулся на звук. Финита ля комедия.
Это сейчас весьма модный холивар в рунете — строить ли больше одного этажа.
«Тяжело подниматься по лестнице» — целая философия есть, скажем так у одноэтажников. «Два этажа — это совковые понты»(с) — и такое слышал.
И зря — денежный навес, скрытая инфляция.
Облигации, павловская реформа и тому подобное — они не потому затеивались, что кто-то кого-то хотел злобно угнетать. Несоответствие денежной массы товарной, и это особенно сильно стало сказываться начиная с косыгинских реформ.