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

Да я лишь к тому, что это не своя Паскалевская придумка, а взято из .NET, поэтому аналогичный вызов есть в любом .NET - языке. Т.е. если это все повторить VB.NЕТ, к примеру, код будет почти такой же, Программирование на том или ином языке постепенно теряет свою уникальность.

1 лайк

Ну и что? В паскале всё реализовано через .Net. Каждый тип и подпрограмма в PABCSystem работают через внутренности .Net.

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

1 лайк

А лучше если бы обёрток не было, а был только чистый паскаль прошлого века?

И - с тем же успехом можно сказать что вся жизнь это обёртка животных инстинктов.
Вот только такая позиция много чего упускает. И с паскалем так же.

Уникальность дает разнообразие. Унификация ведет к противоположному. Я знаю неплохого программиста, который любит С-подобные языки за… всего лишь фигурные скобки!

1 лайк

В паскале полно уникальных фич, как статичные индексные свойства.

А фичи вроде паттерн мачинга - давно всем известно что они позволяют существенно сократить код и улучшить его читабельность. То что вам не нравится добавление инструментов и обёрток которые уже были внедрены в много других языков - это чистый консерватизм, которым вы сами себе руки связываете, и который не имеет никакого отношения к их полезности.

Кроме всего прочего…

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

Но опыт написания полноценных программ в разных языках никогда не будет одинаковым, в том числе из за обёрток. Вот #F ещё больше чем паскаль свои обёртки мутит, и когда надо написать красивый и короткий код - он подходит на много больше C# (хотя большинство из этого слухи от тех с кем я постоянно общаюсь, я сам видел только несколько кодов на нём, но выглядит таки красиво).

Безусловно, когда я говорю, что не надо к легковому автомобилю добавлять экскаваторный ковш, который будет востребован в 0.0001% ситуаций - это консерватизм. Впрочем… с Вами это обсуждать бесполезно, тем более что есть разработчики, которые и без меня Вашим фантазиям периодически подрезают крылышки. Иначе с PascalABC.NЕТ сейчас бы осталось работать уже человек пять-десять наверное.

1 лайк

То есть, решение избыточно или можно решить задачу оптимальнее?

Я сначала думал пройтись по каждому файлу, вставлять запятые между элементами и сохранить всё в другой файл, который можно вставить после объявления переменной прямо в редакторе Pascal Abc . Net, но версия со стримами пока мне подходит.

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

1 лайк

Задача простая: есть внешний источник неизменяемых тестовых данных, которые нужно прописать в откомпилированный ехе, чтобы исключить случайную потерю или умышленную порчу.

Директива $R - это аналог inklude или есть способ прямой вставки ?

  1. Директивы $R нет в PABC.Net
  2. $include а не $inklude
  3. Да, можно и в виде константной строки вставить, с помощью $include, но по моему это костыль. Лучше таки $resource юзайте.

У меня тот же вопрос. Фактически нынешний PascalABC.NET в том виде в котором мы его имеем сейчас - обёртка над функционалом .NET. Правда, обёртка, которая внешне похожа на классический Pascal, если откинуть все “современные” фишки. Обычным смертным, конечно же, до этого дела нет. Преподавателям многим тоже, ибо такая внешняя похожесть на классический Pascal позволяет им не переучиваться, что им, конечно же, доставляет удобство.

Таких фих полно во многих других языках. Разве что реализованы немного по разному. Фактически, у нас сейчас C# второй с Pascal’е подобным синтаксисом… Только, зачем нам это? Разве одного C#'а не достаточно? Если не хочется классы писать в C# для простых программ, то можно специальными средами пользоваться для этого. И на этом этим их список не ограничивается…

Главный вопрос, который меня мучает - а к чему стремятся разработчики PascalABC.NET? Что хотят из языка в итоге получить? Цель - язык для обучения - они уже давно достигли. Куда они дальше путь держат? В сторону перегруженности языка как C++? Такими темпами уже совсем скоро эта цель будет достигнута, но этого ли они добиваются? Уже сейчас язык трудно описать, особенно потому что он очень быстро меняется, а конечные цели, к которым стремятся разработчики нигде не прописаны, имеется ввиду официально, на сайте, а не на форуме, в виде отдельных разбросанных по форуму постов.

Это основа Паскаля с новыми возможностями синтаксиса и Net. Не столько “яйцо или курица”. а с какой пользой. Подобные вопросы были ещё во времена старого языка, который расширяли модулями и вставками даже на ассемблере. Логичное объединение перспектив.

  1. Как в примере быстрой сортировки массива сделать нормальную копию “а” ? Я хотел через milliseconds сравнить процедуру со встроенным методом sort, но объявление var a:=ArrRandom(n); var b:=a; после сортировки “а” через print (b) показывает, что второй массив тоже отсортирован.

  2. Почему в отличие от foreach var q in primes do Write(q,’ '); в задаче Решето Эратосфена ответ показывает лишь пятизначные цифры ? Если это оптимальное решение, почему set ?

Спасибо.

array of T - ссылочный тип, что означает, что при присваивании копируются лишь ссылки на какой-то объект в памяти. Через ссылку a Вы меняйте сам объект-массив. А так как a указывает ровно туда же, куда и b, то при проверки отсортирован ли массив через b получаете результат “отсортирован”. Кратко: Вы работаете с одним массивом, а не с двумя. Копирование массива можно осуществлять следующим образом:

begin
  var x := Arr(1, 5, 2);
  var y := Copy(x);
end.

При желании понять как это работает, можно залезть в PABCSystem и увидеть, что Copy - просто обёртка над Clone() (реализация интерфейса System.ICloneable):


function Copy(a: &Array): &Array;
begin
  Result := &Array(a.Clone());
end;

Понял. Спасибо. а как можно залезть в PABCSystem?

Ctrl+LMB по имени Copy.

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

2 лайка

Скажу даже больше, подрастающее поколение обычно даже ленится гуглить, не то что бы что-то читать. Сделайте всё за них называется.

1 лайк

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

// "Решето Эратосфена" - вычисление простых чисел
const
  n = 100000;

begin
  var primes := Range(2, n).ToHashSet;
  for var i := 2 to round(sqrt(n)) do
  begin
    if not (i in primes) then
      continue;
    var x := i * i;
    while x <= n do
    begin
      primes -= x;
      x += i;
    end;
  end;
  writeln('Время вычисления: ', Milliseconds / 1000);
  writeln('Простые числа < ', n, ':');
  writeln(primes);
  writeln;
end.

Да, так быстрее, хотя с особенностями, о которых надо знать.

Мой вопрос касался Writeln для полного вывода массивов и списков, но сокращенных множеств. Есть причина ?