Статья про интернирование строк. @Admin, что Вы можете сказать в отношении FreePascal по вопросу интернирования строк? (Интересно)
ИМО нюансов всегда много, поэтому вполне достаточно примечания в Справке, желательно с наглядными примерами, кратким пояснением или ссылкой на issue/dispute
var i: byte = 0;
readln(i);
if i = 0 then begin var a := '123ABC' end else begin var a := 123.123; end;
print(a); // <-- НЕобъявленная?! переменная
такую хитрость нельзя?
Ничего не могу сказать. Это - свойство строк .NET, от него невозможно отказаться, и оно - хорошее
Ну, даже не знаю, что Вам ответить. Это - элементарное свойство пространств имен - вне пределов своего пространства имен имя не видно. Как и не видно i после цикла for var i
Это простое предложение. Нет конечно. Многие вещи - слишком многие - не работают во многих потоках. Если их все запрещать, то от языка ничего не останется. Если обо всём предупреждать, то во-первых перечень будет больше чем текст программы, во-вторых компиляция затянется на неопределенное время
у нас слава богу не яваскрипт (до ES6)
Я хочу обратить внимание, что раз уж вы начали обижаться, то первое обращение к личности началось вот здесь, а потом уже продолжилось разумеется
То есть, как-то обойти ограничение scope через статику нельзя; видимо, напутал с блоками директив.
Немного разобрался с сортировкой hashset через OrderBy Linq как sortedset (который якобы не доступен в Net3.5), хотя на Core вроде попадался метод Shuffle (случайно перемешать) – тоже ошибся или внешняя библиотека? Иногда бывает удобно добавить имеющиеся данные/объекты и перетусовать.
А с другой стороны нашёл интересный вариант тоже через с Linq:
var rand = new Random();
var randomList = imagesEasy.OrderBy (x => rand.Next()).ToList();
Паскаль компилируется на .Net4.0 . Всё из System.Linq
и System.Collections
, как и впрочем всё из System
- это стандартные библиотеки.
А внешние библиотеки - это .dll , которые надо положить в папку с .exe и добавить для них $reference в начале программы.
Что касается экстенш-методов для последовательностей - вы можете легко проверить, из .Net они или из паскаля. Зажмите Ctrl и кликните на них - если откроется PABCSystem
- это паскалевское, а если метаданные - это .Net-овское.
Можно так:
begin
var a: object;
repeat
var i := ReadInteger('Option?');
case i of
1: a := 'abc123';
2: a := 'Z';
3: a := 123;
4: a := 111.222;
0: exit
else
println('> wrong option! 0 - exit'#10);
continue
end;
match a with
integer(var v): println($'{v*2} - value of {v} [{a.GetType}] doubled',#10);
real (var v): println($'{v*2} - value of {v} [{a.GetType}] doubled',#10);
string (var v): println($'{v*2} - value of {v} [{a.GetType}] doubled',#10);
char (var v): println($'{v*2} - value of {v} [{a.GetType}] doubled',#10);
else
println('Error: unknown type!'#10)
end;
until false;
end.
Free Pascal такого не делает, причинение добра – это уже фокусы виртуальных сред исполнения.
Интересно другое – как эта проблема с передачей символов строк по ссылке решена в Oxygen, т.к. он транслирует код как под .NET, так и под JVM, где тоже есть автоматическое интернирование строк. Также через COW или есть другое решение, не замедляющее работу с подпрограммами типа Swap?
Ну, сделайте их .exe-шники, а я декомпилирую, посмотрю что он сделали. У меня тех языков нет и ставить что то лишнее почему то не хочется…
Ок, попробую как-нибудь на досуге их триалку, сейчас нет места на харде для инсталляции. Они недавно сделали, наконец, свою собственную легковесную IDE под Windows (“Water”) – очень любопытно попробовать и сравнить с нашей. Да и язык у них, похоже, очень продуманный и продвинутый, документация отличная, многоплатформенность. Одна беда – нет бесплатной Community лицензии для их Кислородного Паскаля…
Давно меня вопрос мучает: будет ли нарушением авторских прав создание копии библиотек .NET? Т.е. если сделать версию C#, компилируемую в машинный код(как C++) и набор исходников библиотек(так же, как и в C++), но с .NET-овским интерфейсом.
Зависит от многого. Как вы будете использовать, и сколько будет того же? Сам факт что вы будете делать платформу со стандартным набором библиотек - не нарушает авторские права, но если все типы и пространства будут называться так же и вообще устроено будет так же - это уже нарушение. Но опять же, только если вы будете распространять его, если оно будет лежать только на вашем компе - вряд ли кого то это будет беспокоить.
RemObjects это уже реализовала, как я понимаю: компиляция в нативный код под Windows – один из вариантов работы в их среде. Хотя, может быть, это относится только к Oxygen и Swift, а не к C# или Java.
Насколько мне известно, программные интерфейсы тоже могут быть защищены в США (и некоторых других странах) патентами (тяжба Оракл с Гугл по поводу их реализации Джавы в Андроиде). Но копирайт на них не распространяется. Исходники библиотек защищены копирайтом, дизассемблировать их нельзя, придется вам все переписывать с нуля.
Проще взять кредит, купить Майкрософт и заставить их самих все переписать Ну, или натравить ГРУшных хакеров на их отдел маркетинга, с Трампом же получилось вроде…
Ну так ведь в том то и дело, что всё копируется. Интерфейс C#, интерфейс всех библиотек. В этом ведь и заключается смысл. Уже готовые коды на C# можно будет компилировать в машинный код для любой платформы, не только Windows и не только для компьютера.
А их по-любому придётся переписывать. Мультиплатформенность этого потребует.
Хах, мультиплатформенный C#))) Ну, в таком случае вам скорее всего надо связаться с теми у кого права собственности C#, и спросить разрешение на это. По крайней мере если на ютубе хочешь сделать видео - перевод чьего то иностранного видео - надо всегда связаться с автором и спросить разрешение.
Переписывать все с нуля (вслепую) и адаптировать под мультиплатформенность отдельные низкоуровневые функции – две большие разницы
Не было бы копирайта – такая работа сократилась бы на порядки и была бы вполне решаемой относительно небольшой высококвалифицированной командой за приемлемые сроки и деньги.
Игрался в свое время с конвертированием IL в C и реализацией internal-call вызовов в lib-библиотеке. Списки, словари работали. Только кому это все надо, непонятно. Нативность сильно ограничивает.