Помощь новичкам

Статья про интернирование строк. @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

Это простое предложение. Нет конечно. Многие вещи - слишком многие - не работают во многих потоках. Если их все запрещать, то от языка ничего не останется. Если обо всём предупреждать, то во-первых перечень будет больше чем текст программы, во-вторых компиляция затянется на неопределенное время

1 лайк

у нас слава богу не яваскрипт (до ES6)

Я хочу обратить внимание, что раз уж вы начали обижаться, то первое обращение к личности началось вот здесь, а потом уже продолжилось разумеется

1 лайк

То есть, как-то обойти ограничение 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.
1 лайк

Free Pascal такого не делает, причинение добра – это уже фокусы виртуальных сред исполнения. :slight_smile:

Интересно другое – как эта проблема с передачей символов строк по ссылке решена в Oxygen, т.к. он транслирует код как под .NET, так и под JVM, где тоже есть автоматическое интернирование строк. Также через COW или есть другое решение, не замедляющее работу с подпрограммами типа Swap?

Ну, сделайте их .exe-шники, а я декомпилирую, посмотрю что он сделали. У меня тех языков нет и ставить что то лишнее почему то не хочется…

Ок, попробую как-нибудь на досуге их триалку, сейчас нет места на харде для инсталляции. Они недавно сделали, наконец, свою собственную легковесную IDE под Windows (“Water”) – очень любопытно попробовать и сравнить с нашей. Да и язык у них, похоже, очень продуманный и продвинутый, документация отличная, многоплатформенность. Одна беда – нет бесплатной Community лицензии для их Кислородного Паскаля… :frowning:

1 лайк

Давно меня вопрос мучает: будет ли нарушением авторских прав создание копии библиотек .NET? Т.е. если сделать версию C#, компилируемую в машинный код(как C++) и набор исходников библиотек(так же, как и в C++), но с .NET-овским интерфейсом.

Зависит от многого. Как вы будете использовать, и сколько будет того же? Сам факт что вы будете делать платформу со стандартным набором библиотек - не нарушает авторские права, но если все типы и пространства будут называться так же и вообще устроено будет так же - это уже нарушение. Но опять же, только если вы будете распространять его, если оно будет лежать только на вашем компе - вряд ли кого то это будет беспокоить.

1 лайк

RemObjects это уже реализовала, как я понимаю: компиляция в нативный код под Windows – один из вариантов работы в их среде. Хотя, может быть, это относится только к Oxygen и Swift, а не к C# или Java.

Насколько мне известно, программные интерфейсы тоже могут быть защищены в США (и некоторых других странах) патентами (тяжба Оракл с Гугл по поводу их реализации Джавы в Андроиде). Но копирайт на них не распространяется. Исходники библиотек защищены копирайтом, дизассемблировать их нельзя, придется вам все переписывать с нуля. :cowboy_hat_face:

Проще взять кредит, купить Майкрософт и заставить их самих все переписать :smile: Ну, или натравить ГРУшных хакеров на их отдел маркетинга, с Трампом же получилось вроде…

1 лайк

Ну так ведь в том то и дело, что всё копируется. Интерфейс C#, интерфейс всех библиотек. В этом ведь и заключается смысл. Уже готовые коды на C# можно будет компилировать в машинный код для любой платформы, не только Windows и не только для компьютера.

А их по-любому придётся переписывать. Мультиплатформенность этого потребует.

Хах, мультиплатформенный C#))) Ну, в таком случае вам скорее всего надо связаться с теми у кого права собственности C#, и спросить разрешение на это. По крайней мере если на ютубе хочешь сделать видео - перевод чьего то иностранного видео - надо всегда связаться с автором и спросить разрешение.

Переписывать все с нуля (вслепую) и адаптировать под мультиплатформенность отдельные низкоуровневые функции – две большие разницы :slight_smile:

Не было бы копирайта – такая работа сократилась бы на порядки и была бы вполне решаемой относительно небольшой высококвалифицированной командой за приемлемые сроки и деньги.

Игрался в свое время с конвертированием IL в C и реализацией internal-call вызовов в lib-библиотеке. Списки, словари работали. Только кому это все надо, непонятно. Нативность сильно ограничивает.