Введение


Времена старого и доброго Pascal закончились. Пришло время новых сред разработки под этот язык. Появилось множество диалектов этого языка. Хотя все они имели что-нибудь общее. Сегодня поговорим о диалекте PascalABC.Net и о том почему же стоит от него отказаться, если Вы всерьез хотите заняться программированием и считаете, что это Ваше будущее.

Первый взгляд


Представьте, что Вы новичок. Даже если это не так. Вообразите, что Вы первый раз пришли в мир программирования и первое что Вам дают изучить — язык Pascal. И говорят, конечно же, писать именно в среде PascalABC.Net. Хорошо, Вы садитесь и начинаете потихоньку изучать сам язык. Ваш скил поднимается и Вам все больше хочется узнать чего-то нового. И вот Вы уже не тот новичок каким были в начале, а человек со средним уровнем знаний программирования. И начиная именно с этого момента — Вы начинаете ощущать некоторый дискомфорт при работе в PascalABC.Net. И чем дальше продвигается изучение языка, и платформы .Net, тем сильнее Вы чувствуйте, что писать то становится не очень удобно. Вы начинаете замечать некоторую нестабильность самой IDE. К слову, Вы уже, наверняка, столкнулись с проблемой при нажатии Ctrl+Z — вылетании ошибки в самой PascalABC.Net при попытке отмены какого-нибудь действия, после чего о редактировании кода и не могло быть и речи. Это только одна проблема из немногих, с которыми Вам предстоит познакомиться.

А что же дальше?


А дальше начинается самое интересное. Вы использовали когда-нибудь при работе обобщения? Если нет, то это стоит сделать, так как именно здесь Вы встретите много подводных камней, и, наверняка, это перевернет Ваше положительное мнение о PascalABC.Net на противоположное. Для примера:

type
  ft = () -> integer;

begin
  var f: ft := () -> 0;
  var a := Arr(0).Select&<integer,  ft>(i -> f);
end.

Есть у нас тип функции ft, есть массив (из одного элемента — нуля). Здесь мы вызываем Select для преобразования каждого элемента массива в функцию. Однако, при наведении на a анализатор кода вместо того, чтобы показывать sequence of ft, показывает sequence of integer. А при наведении на Select вместо того, чтобы показывать ft показывает нам загадочное TResult (которое ни о чём не говорит). И это в самой последней версии этой IDE. Почему? Дальше поймете по чему.

Не используйте обобщения


Да, именно так звучит этот заголовок. Не думайте, что я шучу. Я на полном серьезе. Если хотите использовать их — идите и пишите на C#, поскольку в PascalABC.Net они реализованы лишь для галочки (слишком некачественно). К примеру, есть у нас обобщенный тип (автокласс) TA, имеющий один шаблонный параметр T. От него наследуется другой класс — TB, добавляя еще один шаблонный параметр-тип T2.

type
  TA<T> = auto class
    X: T;
  end;
  
  TB<T, T2> = class(TA<T>)
    Y: T2;
    constructor Create(x: T; y: T2) := (self.X, self.Y) := (x, y);
  end;

begin
end.

И всего то. Но компиляцию это не проходит. Компилятор вылетает с ужасающей ошибкой:
Internal compiler error in module [pabcnetc.exe] :'System.Exception: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в PascalABCCompiler.NETGenerator.ILConverter.ConvertCommonGenericInstanceTypeMembers(ICommonGenericTypeInstance value)
в PascalABCCompiler.NETGenerator.ILConverter.ConvertFromTree(IProgramNode p, String TargetFileName, String SourceFileName, CompilerOptions options, String[] ResourceFiles)
в PascalABCCompiler.Compiler.Compile()'
Нормально? Не думаю. А вот и ссылка на этот Issue. Сразу можно сделать два вывода: не надо использовать автоклассы в этом компиляторе с обобщениями.

Не используйте форматирование


Звучит забавно, но как можно не пользоваться форматированием кода при написании программ? И почему нет? Да, пожалуй звучит так, но помните, что мы пишем именно в PascalABC.Net. И сразу пример почему нет:

type
  TA = class
    property Prop1: real read 0 write begin end;
  end;

begin end.

А теперь нажмите Ctrl+Shift+F (форматировать код) и на выходе будет красоваться это:

type
  TA = class
    property Prop1: real read function#GetGen2(real read 00write 
  
  procedure#SetGen1(valuereal read 0 write begin endbegin endproperty 
  
  Prop1: real read#GetGen2 0 write#SetGen1;
end;
  TA = class
    property Prop1: real read 0 write begin end;
  end;

begin end.

А теперь представьте, что этот проект — что то важное для Вас и Вы пользовались этими расширенными свойствами не один раз. А потом взяли все и отформатировали. Учтите, что не стоит забывать об ошибке с Ctrl+Z, поэтому может получиться так, что отменить Вы это уже не сможете.

Не самое лучшее отношение разработчиков к пользователям и их просьбам


Да-да, именно так. Вы когда нибудь общались с ними на форуме? Если нет, то попробовать стоит, зрелище это не из веселых. Например, сколько я не просил исправить баг с Ctrl+Z, ничего от этого не изменилось — было либо полное игнорирование, либо что-то наподобие:
Мы не можем это сделать. Это слишком трудно.
Я не цитировал. Но общий смысл таков, что делать им это лень. Извините меня, но вы же сами захотели эту среду сделать (хотя это не ваша основная работа), так будьте добры делать ее качественно. Такое отношение не только убивает желание помогать разработчикам исправлять баги в среде, но и писать вообще в ней.

А куда идти, если все так плохо?


Буду краток — на C#, ребята из Microsoft постарались и сделали язык намного качественнее, чем разработчики PascalABC.Net свой.

Заключение


Да, я осветил лишь малость тех проблем, которые есть в этой среде, но помните, что хоть PascalABC.Net и тянется к C# она никогда им не станет — проще будет написать среду заново, чем исправлять уже существующую (чего не хотят делать разработчики, хотя это их вина, что IDE в таком состоянии).

P.S. А вот и пример бага, который проявляется при написании простейших программ. И вот еще (с массивами).

Комментарии (275)


  1. ru_vlad
    15.07.2018 14:06
    +1

    Чует мое сердце ой сейчас и будет…
    И так первое, PascalABC.Net это среда для НОВИЧКОВ, для детей, для тех кто только открывает дверь в мир программирования. То что вы перечислили да это есть, НО это уже совсем другой уровень. Паскаль как учебный язык по моему мнению считается на более лучшим. Да, сейчас прибегут "профи" и будут кричать что он умер и "наше все" Питон или С.
    Но как учитель еще раз говорю, для понимания алгоритмов и начало программирования Паскаль самое то. Вирт не зря сделал его близким к человеческой логике.
    На счет PascalABC.Net что Вы можете предложить в его замену?


    1. DASM
      15.07.2018 14:33
      +5

      TB<T, T2> = class(TA) — это для начинающих? Боюсь представить себе с чем работают кончающие


      1. ru_vlad
        15.07.2018 14:37
        +1

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


    1. lair
      15.07.2018 15:28
      +1

      … а чем конкретно Паскаль "ближе к человеческой логике", чем тот же Питон? (я уж молчу про бесценность REPL и интерактивных ноутбуков вроде Jupyter, а есть ли что-то аналогичное для Паскаля?)


      1. ru_vlad
        15.07.2018 15:42

        lair ну хотя бы тем что приближен к человеческому языку if (если) then(тогда) else (иначе) не говоря уж о begin и end. Циклы тоже сделаны так как они должны быть While Пока until До for Для
        Все же английский дети раньше начинают изучать чем программирование.
        Для понимания основных начальных алгоритмических структур он ближе.
        И опять все забывают что школа не готовит программистов, ее задача в другом, показать что данное существует.


        1. akryukov
          15.07.2018 15:48
          +3

          Считаю что тезис "Паскаль ближе к человеческому языку" неактуален. Новички в программировании обычно еще и новички в английском языке. С точки зрения "человеческого смысла" для них нет существенной разницы между
          if a < b then work() else smoke() end
          и
          asdf a < b lkjh work() zxcv smoke() poiu.
          В условиях РФ все языки программирования равноудалены по "человеческому смыслу" операторов.


          1. ru_vlad
            15.07.2018 16:01

            Новички в программировании обычно еще и новички в английском языке.

            английский изучают с 4 класса (а некоторые и с началки), а Информатику с разделом программирование с 7 класса.


            1. lair
              15.07.2018 16:04
              -2

              английский изучают с 4 класса (а некоторые и с началки), а Информатику с разделом программирование с 7 класса.

              Это как раз попадает под категорию "новички в английском языке" (если это не спецшкола, конечно).


              BTW, у меня английский был с седьмого.


              1. ru_vlad
                15.07.2018 16:18
                +1

                как новички уже простые слова Начало Begin, конец end, И And, ИЛИ Or к этому моменту уже знают.


                1. lair
                  15.07.2018 16:19

                  Знают, однако требования к синтаксической строгости у них невысокие.


            1. akryukov
              15.07.2018 16:20

              Наверняка школьники изучают базовую грамматику и какие-то бытовые шаблоны фраз. Сомневаюсь, что conditional statements входят в программу для школьников до 7 класса.


          1. Simplifier
            16.07.2018 13:27
            +3

            Согласен. Если слова if, end еще знают, то всякие else, until вряд ли. К тому же Паскаль очень многословный, а дети медленно печатают


            1. JobberNet
              16.07.2018 14:09

              Эти все слова -легко посмотреть в словаре, прямо на мобильнике.


        1. lair
          15.07.2018 15:59

          ну хотя бы тем что приближен к человеческому языку if (если) then(тогда) else (иначе)

          Питон:


          if x > 0:
            print('More')
          else:
            print('Not more')

          Вы правда считаете, что замена : на then что-то изменит в читаемости?


          не говоря уж о begin и end

          А что begin и end?


          Циклы тоже сделаны так как они должны быть While Пока until До for Для

          Что значит "так как они должны быть"? В Питоне совершенно нормальный while, и семантически корректный for (for word in words:).


          Для понимания основных начальных алгоритмических структур он ближе.

          Я вот не вижу отличия на приведенных вами примерах.


          И еще раз повторюсь, я считаю, что REPL и интерактивность намного важнее, чем (мифическая) близость к человеческому языку. В Jupyter можно вообще оформлять домашние работы с последовательным описанием и графиками, это будет развивать много полезных навыков.


          1. ru_vlad
            15.07.2018 16:15
            +2

            Вы правда считаете, что замена: на then что-то изменит в читаемости?

            Да, считаю.
            И данное проверено многолетней практикой.


            А что begin и end?

            а то что ДЕТИ видят где начало, а где конец
            и будь то начало программы или программного блока.


            Что значит "так как они должны быть"? В Питоне совершенно нормальный while, и семантически корректный for (for word in words:).

            нормальный говорите, вспомните как цикл ДО в Питоне
            не говоря уже про for
            я еще и еще раз говорю ВЫ уже профессионалы и вам подобные конструкции обыденность, а ребенку надо обычными словами объяснить что бы ОН понял в чем различие циклов и как они работают.


            1. lair
              15.07.2018 16:19
              -2

              И данное проверено многолетней практикой.

              Вы можете дать ссылки на исследования?


              а то что ДЕТИ видят где начало, а где конец

              Предположим, это действительно играет роль. Одно отличие.


              нормальный говорите, вспомните как цикл ДО в Питоне

              А зачем он нужен?


              не говоря уже про for

              for w in words, говорю же. Прекрасная вещь.


              а ребенку надо обычными словами объяснить что бы ОН понял в чем различие циклов и как они работают.

              А зачем? Если задача — как вы утверждаете — "показать что данное существует", то нет никакой необходимости разбираться в видах циклов, достаточно while и for (each in).


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


              1. ru_vlad
                15.07.2018 16:23
                +2

                Вы можете дать ссылки на исследования?

                25 лет педработы устроит?
                Сразу скажу десятки бывших учеников кто работает начиная от Яндекса и кончая Googla претензий что начинали на Паскаль не предъявляли.


                1. lair
                  15.07.2018 16:29

                  25 лет педработы устроит?

                  Нет, конечно. Может быть, на наблюдаемой области просто преподаватели лучше умели преподавать Паскаль, нежели Питон.


                  Сразу скажу десятки бывших учеников кто работает начиная от Яндекса и кончая Googla претензий что начинали на Паскаль не предъявляли.

                  Я тоже никому не предъявлял претензий за Basic (кажется, Q) и Fortran. Но это не значит, что я считаю их подходящими.


                  1. ru_vlad
                    15.07.2018 16:39

                    Может быть, на наблюдаемой области просто преподаватели лучше умели преподавать Паскаль, нежели Питон.

                    Милости просим, придите и покажите как надо учить на Питоне чтобы все и все поняли :)


                    Очень хорошо рассуждать по прошествии опыта и лет.


                    Но это не значит, что я считаю их подходящими.

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


                    1. lair
                      15.07.2018 16:57
                      -1

                      Милости просим, придите и покажите как надо учить на Питоне чтобы все и все поняли

                      Я вроде нигде не говорил, что я умею учить на Питоне. Я говорил, что сам по себе опыт преподавания, извините за прямоту, еще ничего не доказывает. Доказывают исследования.


                      (я просто учился у людей с самым разным по продолжительности опытом преподавания, и по моим наблюдениям эта самая продолжительность никак не коррелировала с качеством даваемых знаний и навыков)


                      я регулярно спрашиваю что можно изменить в учебном процессе, и почти все говорили что лучше начинать с того что было

                      Ну вот если бы кто-то спросил у меня, я бы рекомендовал Питон.


                      1. ru_vlad
                        15.07.2018 17:06

                        Я вроде нигде не говорил, что я умею учить на Питоне.

                        Да, но в говорите что :


                        на наблюдаемой области просто преподаватели лучше умели преподавать Паскаль, нежели Питон.

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


                        Я говорил, что сам по себе опыт преподавания, извините за прямоту, еще ничего не доказывает. Доказывают исследования.

                        Извиняю :)
                        На счет Доказывают исследования. как раз они ни чего не доказывают. Где то видел очень неплохое исследование что лучшей способ переноски воды, решето. :)


                        1. lair
                          15.07.2018 17:09

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

                          Этого я тоже не утверждаю. Пока что я всего лишь говорю, что не вижу подкрепленных исследованиями аргументов, что Паскаль лучше для преподавания, чем Питон. Типичный пример неотвергнутой нулевой гипотезы.


                          На счет Доказывают исследования. как раз они ни чего не доказывают.

                          Вот так взяли и опровергли все статистические методы оптом (ну и вообще чуть ли не все современное экспериментальное знание).


                      1. ElectroGuard
                        16.07.2018 22:32
                        -1

                        Я вроде нигде не говорил, что я умею учить на Питоне. Я говорил, что сам по себе опыт преподавания, извините за прямоту, еще ничего не доказывает. Доказывают исследования.
                        Статья как раз в тему :)
                        Доказательства в науке? Их нет
                        Что мы реально подразумеваем под исследованиями, и как это помогает получать информацию для понимания вещей? Люди, ожидающие наличия доказательств в каждом научном исследовании, будут жестоко разочарованы.
                        habr.com/post/417143


              1. ru_vlad
                15.07.2018 16:33

                А зачем? Если задача — как вы утверждаете — "показать что данное существует", то нет никакой необходимости разбираться в видах циклов, достаточно while и for (each in).

                Ну во первых учебную программу не кто не отменял, а там есть пункт про различия циклов. Второе, если человек который хочет стать программистом не понимает отличия цикла Пока от До, то это грустно.


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

                Не игнорирую, тогда уж лучше Scratch, НО если начитать с более младшего возраста.


                1. lair
                  15.07.2018 16:36

                  Ну во первых учебную программу не кто не отменял, а там есть пункт про различия циклов.

                  Так может в учебной программе проблема?


                  Второе, если человек который хочет стать программистом не понимает отличия цикла Пока от До, то это грустно.

                  Если он хочет стать программистом, он прекрасно сможет понять это различие в тот момент, когда оно первый раз попадется ему в книге.


                  Не игнорирую, тогда уж лучше Scratch, НО если начитать с более младшего возраста.

                  Давно на Scratch можно делать ноутбуки?


                  1. ru_vlad
                    15.07.2018 16:44

                    Так может в учебной программе проблема?

                    Этот вопрос не ко мне. Я бы вообще убрал бы Информатику из обязательных предметом.


                    Если он хочет стать программистом, он прекрасно сможет понять это различие в тот момент, когда оно первый раз попадется ему в книге.

                    Вы не поверите, но я видел уже "дипломированных" которые не понимали различия.


                    можно делать ноутбуки?

                    а в этом какой смысл? тем более для простого ребенка ;)


                    1. lair
                      15.07.2018 17:05

                      Этот вопрос не ко мне.

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


                      Вы не поверите, но я видел уже "дипломированных" которые не понимали различия.

                      Поверю. Я вам больше того скажу, я вот различие понимаю, но я попробовал и так и не смог вспомнить ни одного случая за 20 лет своего опыта, когда я использовал бы цикл until. Этому немало способствует то, что почти 15 лет из этих 20 я пишу на языке, в котором такого цикла нет.


                      а в этом какой смысл?

                      Большой. Ноутбук (в смысле Jupyter Notebook) — это прекрасный способ оформить работу с данными и графиками, а это требуется в намного более широкой области деятельности, нежели только программирование. Получаем три-в-одном: программирование, форматирование, и, что самое важное, развиваем навык связного изложения мыслей. Я вот где-то в районе 6-8 класса защищал бизнес-план на экономике, и мне бы там это сильно пригодилось.


                      Недавно кто-то (я подозреваю, что Paige Bailey, но не могу найти цитату) шутил, что Jupyter Notebook — это новый стандарт для любой научной работы, включающей статистику.


                      1. GeekberryFinn
                        15.07.2018 17:30

                        я попробовал и так и не смог вспомнить ни одного случая за 20 лет своего опыта, когда я использовал бы цикл until
                        Зависит от задач. Бывает, что наиболее удобным для данного случая является именно Until.


                        1. lair
                          15.07.2018 17:33

                          Я совершенно не спорю, что это зависит от задач, но вот в моем личном опыте получилось вот так.


                          1. GeekberryFinn
                            15.07.2018 17:36

                            А я вот ни разу elsif не использовал…


                      1. mayorovp
                        15.07.2018 18:15

                        until-подобные циклы часто применяются при использовании атомарных операций или оптимистических блокировок


                      1. longclaps
                        15.07.2018 18:40
                        +1

                        Паскалевский until — вполне удобная конструкция, но совершенно не вписывается в питоновский синтаксис «на отступах».
                        Интересно, что Ruby, язык чуть более близкий к паскалю, чем python, и достаточно успешный, в качестве альтернативы вообще не рассматривается.


                        1. GeekberryFinn
                          15.07.2018 18:47

                          Почему не вписывается?


                          1. longclaps
                            15.07.2018 18:58

                            Потому что «на отступах». Попробуйте написать аналогичный этому фрагмент в паскаль-стиле, где внутренности цикла обрамлены сверху repeat и снизу until i<10 соответственно

                            i = 0
                            while i < 10:
                                print(i)
                                i += 1 


                            1. GeekberryFinn
                              15.07.2018 19:04

                              do :
                                  print(i)
                                  i += 1 
                                  until i<9
                              

                              Так что причина не в этом, а в том что судя по всему за основу брался C-синтаксис, в котором слова until просто нет. Но зато есть do… while.
                              do :
                                  print(i)
                                  i += 1 
                                  while i<9
                              


                              1. longclaps
                                15.07.2018 19:14

                                В питоне, слава богу, нет do )
                                Компактность набора ключевых слов — одно из достоинств этого языка.


                      1. netch80
                        16.07.2018 16:20

                        > Я вам больше того скажу, я вот различие понимаю, но я попробовал и так и не смог вспомнить ни одного случая за 20 лет своего опыта, когда я использовал бы цикл until.

                        Ну реально раз в год приходится писать цикл с проверкой в конце, то есть в котором надо безусловно войти в первую итерацию.
                        За счёт того, что обычно это C/аналог, он оказывается do — while. Разница с repeat — until только в направлении условия.

                        > Недавно кто-то (я подозреваю, что Paige Bailey, но не могу найти цитату) шутил, что Jupyter Notebook — это новый стандарт для любой научной работы, включающей статистику.

                        Я бы даже сказал, что это правда в виде шутки :)


                      1. ElectroGuard
                        16.07.2018 19:14

                        Большой. Ноутбук (в смысле Jupyter Notebook) — это прекрасный способ оформить работу с данными и графиками, а это требуется в намного более широкой области деятельности, нежели только программирование

                        Ноутбук для реального программирования не очень удобен, увы. Так — наброски сделать — да. Отчет, еще какую-то визуализацию. Реальное же приложение если и получится, то с трудом. Плохо, что в самом питоне нет среды подобной Delphi. Ноутбук мне понравился за неимением среды. Но имея полноценную среду, я бы никогда её на ноутбук не поменял.
                        Ни разу не видел реальных программ или сайтов, подобным ноутбуку. Даже не представляю, где он может пригодится кроме как недо-среды для питона.


                        1. netch80
                          16.07.2018 19:36

                          Наш отдел аналитики прямо из jupyter запускал сложные обсчёты на машине с GPU?шками.
                          Видно, им никто почему-то не запрещал это делать :)
                          А «реальное приложение» делается из него просто копированием кода в отдельный файл и установкой нескольких параметров. Хотя, думаю, уже сделали переходник для прямого запуска в формате файла сохранения jupyter (всех проблем — вытащить пачку элементов из json и напустить на них eval).


                          1. Error1024
                            16.07.2018 19:53

                            Видимо я что-то делал не так, но у меня ощущения от jupiter остались, как от чего-то глючного и тормозного.


                          1. lair
                            16.07.2018 20:37

                            А «реальное приложение» делается из него просто копированием кода в отдельный файл и установкой нескольких параметров. Хотя, думаю, уже сделали переходник для прямого запуска в формате файла сохранения jupyter

                            Я неоднократно видел хуки, которые генерят .py-файл из ноутбука либо на сохранении, либо на коммите.


                        1. lair
                          16.07.2018 20:36

                          Ноутбук для реального программирования не очень удобен, увы. Так — наброски сделать — да. Отчет, еще какую-то визуализацию. Реальное же приложение если и получится, то с трудом.

                          А кто-то предлагал делать на Jupyter "реальные приложения"? Он немного не для этого предназначен.


                          Но имея полноценную среду, я бы никогда её на ноутбук не поменял. [...] Даже не представляю, где он может пригодится кроме как недо-среды для питона.

                          Вы, видимо, не занимаетесь исследованием данных, статистикой и машинным обучением.


                          1. ElectroGuard
                            16.07.2018 21:08

                            Занимаюсь, в том числе. Исследования — исследованиями, но результаты в ноутбуке не отдать никому, увы. Посмотреть/показать — максимум. Как приложение не получится оформить.


                            1. lair
                              16.07.2018 21:10

                              Исследования — исследованиями, но результат в ноутбуке не отдать никому, увы.

                              Результат исследований? Почему? Ну сохраните его в HTML.


                              1. ElectroGuard
                                16.07.2018 21:15

                                Не результаты исследований, а применение результатов в реальном приложении. Результаты интересны в лучшем случае разработчикам, да и то если они действительно есть.


                                1. lair
                                  16.07.2018 21:23
                                  +1

                                  Не результаты исследований, а применение результатов в реальном приложении.

                                  Вам не приходило в голову, что результатами исследований могут быть данные, графики и документы, и ни в какое последующее "реальное приложение" они не пойдут?


                                  1. ElectroGuard
                                    16.07.2018 22:08

                                    бесценность REPL и интерактивных ноутбуков вроде Jupyter, а есть ли что-то аналогичное для Паскаля?)

                                    Так в чем же бесценность именно Юпитера? Таких бесценных программ в своих отраслях — вагон и тележка. В той же химии, математике, сопромате, черчении. И Юпитер — да, хорошая оболочка в своей, весьма частной области, не более того.


                                    1. lair
                                      16.07.2018 23:01

                                      Так в чем же бесценность именно Юпитера?

                                      В простоте и распространенности. Идешь ты в AWS SageMaker — а там те же ноутбуки. Идешь ты в Azure — а там снова ноутбуки.


                                      1. ElectroGuard
                                        17.07.2018 10:34

                                        Ок, для своей, довольно ограниченной области они полезны и распространены. Главное — не стоит обобщать.


                                        1. lair
                                          17.07.2018 11:15

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


                                          1. ElectroGuard
                                            17.07.2018 16:12

                                            Ответил внизу.


                              1. ElectroGuard
                                16.07.2018 21:16

                                А кто-то предлагал делать на Jupyter «реальные приложения»

                                Просто не стоит Юпитер преподносить как образец универсальной среды программирования. В одной, крайне ограниченной области, он полезен, не более того.


                                1. lair
                                  16.07.2018 21:24

                                  Просто не стоит Юпитер преподносить как образец универсальной среды программирования.

                                  А кто-то это делал? Я, вроде бы, упоминал его как средство работы с данными.


                                  1. ElectroGuard
                                    16.07.2018 22:11

                                    Ну вы же писали:

                                    … а чем конкретно Паскаль «ближе к человеческой логике», чем тот же Питон? (я уж молчу про бесценность REPL и интерактивных ноутбуков вроде Jupyter, а есть ли что-то аналогичное для Паскаля?)

                                    Таким образом пытаясь противопоставить Питон/Юпитер Паскалю/ABC.


                                    1. lair
                                      16.07.2018 23:03

                                      Я противопоставлял питон паскалю. А REPL и ноутбуки — приятное дополнение.


                                      1. ElectroGuard
                                        17.07.2018 10:33

                                        То есть — пытались втянуть ноутбуки в область сред для универсальных языков. Но они там выглядят весьма блекло.


                                        1. lair
                                          17.07.2018 11:15

                                          Повторяю: "приятное дополнение".


                1. akryukov
                  15.07.2018 16:46

                  Учебную программу вы пишите сами. Разве нет? Это ведь не учебный план, который вам "спускают сверху".
                  Я в целом согласен, что студентам нужно иметь представление, что циклы бывают разные, но уж точно не из за того, что "надо по программе".


                  1. ru_vlad
                    15.07.2018 16:51

                    Учебную программу вы пишите сами. Разве нет? Это ведь не учебный план, который вам "спускают сверху".

                    Школьная "жесткая", конечно можно кое что поменять, но не в больших объемах. Даже прокуратура следит что бы было в соответствии с учебниками и прочим.


              1. akryukov
                15.07.2018 16:37

                Справедливости ради замечу, что "потерять скобочку" (в языках со скобочками) — одна из самых популярных проблем у начинающих. Учитывая это, потерять then и end немного сложнее. В питоне подобных скобочек нет, и я сомневаюсь, что отличать "действие, которое будет повторяться" от "действия, которое выполнится после цикла" только по отступу будет сильно проще.


                В конце концов IDE может сама расставить отступы, ориентируясь на скобки. В питоне же так не получится, потому что отступы значимы и нужно понимать смысл программы.


                1. lair
                  15.07.2018 16:54

                  В питоне подобных скобочек нет, и я сомневаюсь, что отличать "действие, которое будет повторяться" от "действия, которое выполнится после цикла" только по отступу будет сильно проще.

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


                1. GeekberryFinn
                  15.07.2018 16:58

                  Тут, даже, лучше не просто if, а end if, end case, end for и тому подобное.
                  Потому что несколько end не намного лучше, чем несколько } — то есть оставляет возможность запутаться.


                  1. netch80
                    16.07.2018 16:40

                    А тут уже надо иметь поддержку от редактора, как, например, '%" в vim, для перехода на парную скобку.
                    end if само по себе не помогает, если этих if было три вложенных.


                    1. akryukov
                      16.07.2018 18:27

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


            1. netch80
              16.07.2018 16:33

              > И данное проверено многолетней практикой.

              То есть ваша практика сравнивает именно форматы записи Паскаля и Питона? Или как?

              Моя практика показывает, что одна из основных граблей для начинающих, которую приходится преодолевать именно форсированием дисциплины написания — это то, что забывают, что вокруг нескольких операторов под условием надо ставить скобки вида begin-end. И потому я сейчас за те языки, в которых невозможно конструктивно не поставить эти скобки (отступами, как в Python, явными парными скобками, как в Perl, Go, Swift, или автооткрытием с закрытием через другой элемент того же уровня, как в Modula или Ruby… — все три варианта хороши, каждый по-своему, и каждый лучше того, что в Pascal, C, Java).

              > а то что ДЕТИ видят где начало, а где конец
              > и будь то начало программы или программного блока.

              Они точно так же видели, бы, например, в варианте Модулы:

              if условие then
              команда1
              команда2
              else
              команда3
              команда4
              end

              (отступов, извините, нет, хабр не знает Modula для тега code)

              но количество тупых втыканий в экран и жалоб «почему не работает», повторяюсь, меньше, чем с потерянной парой begin-end после then в Паскале. А уж почему перед else нельзя ставить ';', это вообще приходится зубрить как чистую магию…

              Не зря Вирт изменил это правило синтаксиса в своих последующих разработках, но Паскаль успел уйти из-под его контроля…

              > ребенку надо обычными словами объяснить что бы ОН понял в чем различие циклов и как они работают.

              Различие между циклом с проверкой «до» и проверкой «после» — да, полностью согласен.

              Но когда на это накладывается то, что в варианте с проверкой «до» мы проверяем условие _продолжения_, а с проверкой «после» — условие _выхода_, уже сбивает с толку.

              А то, что repeat-until является сам по себе скобками блока, а while — нет, сбивает ещё раз. И только после пятого «дети, это невозможно понять, это надо только запомнить!» получается устойчиво пробиться через эту несогласованность.


              1. akryukov
                16.07.2018 18:45

                Моя практика показывает, что одна из основных граблей для начинающих, которую приходится преодолевать именно форсированием дисциплины написания — это то, что забывают, что вокруг нескольких операторов под условием надо ставить скобки вида begin-end.

                Любопытно. Я своим великовозрастным студентам вообще не рассказываю, что (в java, c#, js) они опциональны. Как следствие — все всегда ставят. Если кто-то сам об этом узнал, то из подобных проблем человек уже вырос.


                А уж почему перед else нельзя ставить ';', это вообще приходится зубрить как чистую магию…

                Казалось бы "потому что компьютер не понимает такую фразу". Проблема актуальна не так уж долго, чтобы приходилось "зубрить".


                Но когда на это накладывается то, что в варианте с проверкой «до» мы проверяем условие продолжения, а с проверкой «после» — условие выхода, уже сбивает с толку.

                Это где так? Условие в цикле и в while() {} и в do{}while(); описывает условие продолжения.
                Я сейчас на всякий случай даже проверил.


                c#
                int i = 0;
                while(i < 5)
                {
                    Console.WriteLine(i);
                    i++;
                }
                Console.WriteLine("---------------");
                i = 0;
                do
                {
                    Console.WriteLine(i);
                    i++;
                } while (i < 5);

                Вывод


                0
                1
                2
                3
                4
                ---------------
                0
                1
                2
                3
                4


                1. netch80
                  16.07.2018 18:49
                  +2

                  > Любопытно. Я своим великовозрастным студентам вообще не рассказываю, что (в java, c#, js) они опциональны. Как следствие — все всегда ставят. Если кто-то сам об этом узнал, то из подобных проблем человек уже вырос.

                  Ну а мне приходилось «лечить» после школьного обучения, где скобки begin-end не ставили и не говорили, что они нужны.

                  > Это где так? Условие в цикле и в while() {} и в do{}while(); описывает условие продолжения.

                  В Паскале, очевидно. Я говорил как раз про него и его недостатки.


              1. ElectroGuard
                16.07.2018 19:26

                А то, что repeat-until является сам по себе скобками блока, а while — нет, сбивает ещё раз. И только после пятого «дети, это невозможно понять, это надо только запомнить!» получается устойчиво пробиться через эту несогласованность.

                Блок Repeat'а заканчивается until'ом. Парной конструкции для while, увы, не существует. Поэтому добавляют обычные программные скобки. Что тут запоминать? For, к слову, также организован.


                1. netch80
                  16.07.2018 19:31

                  А в C — не так: что while, что do-while требуют один оператор или блок.
                  А в Perl — while и until взаимозаменяемы как в цикле с предусловием, так и в цикле с постусловием.
                  И оба их варианта именно в этом смысле логичнее (особенно перловый).


          1. GeekberryFinn
            15.07.2018 16:17

            Вы правда считаете, что замена: на then что-то изменит в читаемости?
            Только для новичка.


      1. Volobuev_Ilya Автор
        15.07.2018 16:03

        Ближе тем, что он более лаконичен. И позволяет проще описывать свои «хотелки». Python — язык отличный. Я на нем сам пишу.


        1. lair
          15.07.2018 16:04
          +1

          Ближе тем, что он более лаконичен. И позволяет проще описывать свои «хотелки».

          А можно, пожалуйста, конкретные примеры?


          1. Volobuev_Ilya Автор
            15.07.2018 16:06
            -3

            Ну, например, проще гораздо пишутся структуры данных. Например, стек. Банальщина, но все же. И человек меньше отвлекается на всякие детали синтаксиса. Код намного проще выглядит в Python, чем в том же C#. Что для обучения играет положительную роль.


            1. lair
              15.07.2018 16:10
              +1

              Ну, например, проще гораздо пишутся структуры данных. Например, стек.

              А можно, пожалуйста, конкретные примеры?


              1. Volobuev_Ilya Автор
                15.07.2018 16:23
                -5

                Отвлеченный пример. Только что сочинил. Вот простой до безобразия класс:

                class Example:
                	def __init__(self, x, y):
                		self.x = x
                		self.y = y

                а на C#:
                public class Example
                {
                	public int x, y;
                
                	public Example(int x, int y)
                	{
                		this.x = x;
                		this.y = y;
                	}
                }

                Но суть в том, что даже здесь код на Python проще.


                1. lair
                  15.07.2018 16:25

                  Эм, а ничего, что я спрашивал, чем Паскаль проще, чем Питон, а не чем Питон проще, чем C#?


                  (на этом фоне обсуждать ваш пример не буду, хотя у меня есть много грубого что сказать по этому поводу)


                  1. Volobuev_Ilya Автор
                    15.07.2018 16:29
                    -1

                    Извиняюсь, невнимательно прочитал.


                1. Nagg
                  15.07.2018 18:10

                  А в чем простота кода питона по сравнению с C# тут? Как по мне, так код на сишарпе лучше читаем — Класс, с двумя полями, вот тут инициализация. Меньше строк далеко не всегда лучше. Хотя сравнивать языки с разной типизацией само по себе глупое занятие


                  1. ElectroGuard
                    16.07.2018 19:34

                    Особенно с учетом того, что в Delphi эта вся обвязка прописывается автоматом 1-2 нажатиями кнопок. Думаю, что в Шарпе не сложнее.


                1. Error1024
                  16.07.2018 01:26

                  Нет, не проще, да короче, но не проще, магическое __init__ уж точно не упрощает код.


                  1. ElectroGuard
                    16.07.2018 19:35

                    Ага, особенно __init__ сильно улучшил читаемость :)


                    1. netch80
                      16.07.2018 19:39

                      IMHO — улучшил. Потому что универсальное имя для конструктора на все случаи. В коде же на каком-нибудь C++ иногда, пока дойдёшь до конструктора, забываешь, как класс звался, и чем является функция с данным именем.


                      1. Error1024
                        16.07.2018 19:57

                        В какой-то мере согласен, просто имя, такое же как у класса, тоже не супер.
                        Благо в Delphi/ObjectPascal так старательно слитым автором поста все максимально логично: конструктор в коде выделен ключевым словом constructor вместо function/procedure.


                      1. ElectroGuard
                        16.07.2018 20:15

                        Ну если с плюсами разве что сравнивать :)


                        1. JobberNet
                          17.07.2018 06:40

                          А в Delphi объектная модель — та же самая, что и в Borland C++, не совпадая с объектной моделью в Borland Pascal.


                          1. ElectroGuard
                            17.07.2018 10:35
                            +1

                            Не понял суть комментария в обсуждаемой ветке.


            1. retran
              16.07.2018 13:46

              А можно пример того как вы на питоне представляете стек?

              Честно говоря, сложно представляю себе нормальную реализацию на языке в котором нормальные массивы придется подключать через numpy.


      1. APXEOLOG
        16.07.2018 01:29
        +1

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


        Что касается Паскаля — чем проще язык и чем меньше в нем вариативности — тем проще его изучить начинающему. Весь синтаксический сахар только отвлекает и мешает разобраться в сути, особенно когда учащийся пытается что-то нагуглить в интернете и находит 10 разных (даже если на вид) решений, или ему рассказывают о 5 способах записать одно и то же (а уж если у них еще и небольшие отличия в деталях то это совсем провал)


        На основе реального опыта (помогал в изучении программирования с нуля) скажу — у учащегося начинает болеть голова даже когда вы пишете "i++" вместо "i = i + 1". Лично я тоже начинал изучение программирования с паскаля (правда тот что TurboPascal, без всяких извращений) и не вижу в этом никаких проблем (хотя возможно С-89 тоже неплохой выбор)


        1. lair
          16.07.2018 01:48

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

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


          Что касается Паскаля — чем проще язык и чем меньше в нем вариативности — тем проще его изучить начинающему.

          Давайте для начала определимся с задачей: у нас стоит задача изучить язык или познакомиться с программированием?


          Что касается Паскаля — чем проще язык и чем меньше в нем вариативности — тем проще его изучить начинающему. Весь синтаксический сахар только отвлекает и мешает разобраться в сути, особенно когда учащийся пытается что-то нагуглить в интернете и находит 10 разных (даже если на вид) решений, или ему рассказывают о 5 способах записать одно и то же (а уж если у них еще и небольшие отличия в деталях то это совсем провал)

          … мне тут кто-то недавно рассказывал про необходимость знать именно три вида циклов.


          На основе реального опыта (помогал в изучении программирования с нуля) скажу — у учащегося начинает болеть голова даже когда вы пишете "i++" вместо "i = i + 1".

          Ну так не надо писать i++. Это, знаете, как в изучении естественного языка — сначала дают простые нормы, потом сложные, потом ненормативные варианты.


          1. APXEOLOG
            16.07.2018 02:04

            Давайте для начала определимся с задачей: у нас стоит задача изучить язык или познакомиться с программированием?

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


            … мне тут кто-то недавно рассказывал про необходимость знать именно три вида циклов.

            Ну, в идеале-то необходимо знать все виды циклов. Другое дело что приоритет у этих знаний далеко не высший


            1. lair
              16.07.2018 02:29

              Конкретное решение конкретных задач на конкретном языке — именно то, что нужно начинающему

              Вот решение конкретных задач — это не изучение языка. Достаточно показывать те конструкции, которые нужны для решения задач.


              Ну, в идеале-то необходимо знать все виды циклов.

              В школе? Зачем?


              1. APXEOLOG
                16.07.2018 10:37

                Вот решение конкретных задач — это не изучение языка. Достаточно показывать те конструкции, которые нужны для решения задач.

                Ну так а как вы будете решать задачи без изучения языка? Мы же говорим не только про составление алгоритма, но и про его реализацию, а реализация всегда привязана к языку (можно конечно в псевдокоде писать, но какой профит от этого учащемуся?)


                В школе? Зачем?

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


                1. lair
                  16.07.2018 11:26

                  Ну так а как вы будете решать задачи без изучения языка?

                  Легко — давать только те конструкции, которые нужны для решения задач.


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

                  Все то же самое можно сказать про "10 вариантов решений".


      1. zartarn
        16.07.2018 12:12

        Не ради холивара, вижу что вы всей душой за Питон :) Паскаль может и не хорош для обучения, но во всех книжках школьных — он, и pascal.abc всегда рассматривал только именно как для школ, с меньшей болью иметь возможность следовать школьной программе. Одно дело когда надо исопльзовать другую среду, а другое когда уже и язык другой. И как ниже упомянули begin/end — помня одноклассников скажу, что для многих это существеннее и проще, чем пытаться объяснить зачем нужна табуляция. Увы. Прививать стиль написания кода в школе тем кому это мало надо это будет сверх-задачей, тут то еще хоть как то что то.
        Для меня всегда бОльшим вопросом было почему они пилят свою IDE а не модуль для студии.

        и не по теме
        Мне в целом не критично на чем писать (ну я про простенькое конечно на уровне знания синтаксиса), но вот с операторными скобками нравится больше. Питоном приходилось пользоваться, но эта привычка увы, постоянный дискомфорт :(.
        Это так же как в бейсике, где надо обозначать не окончание ";", а что следующая является продолжением — тоже боль.


      1. ElectroGuard
        16.07.2018 18:52

        и интерактивных ноутбуков вроде Jupyter, а есть ли что-то аналогичное для Паскаля?)

        Jupyter — это костыль, хоть и весьма качественный. Для Паскаля нет необходимости что-либо подобное делать, так как там есть формы. Можно вывести быстро, что угодно и как угодно. Сразу сделать из этого бинарник и отдать. А вот попробуйте из Юпитера сделать монолитный бинарь :)


        1. netch80
          16.07.2018 19:41

          Пока ту форму напишешь — задолбаешься. Оперативность графического REPL, которую предоставляет jupyter, настолько высока и полезна при разработке, что тут сложно найти аналоги.


          1. Error1024
            16.07.2018 19:59

            В Lazarus/Delphi не надо ничего писать — достаточно накидать в редакторе форм нужную форму, ничего проще для быстрого создания GUI чем данные IDE в жизни не видел.


          1. ElectroGuard
            16.07.2018 20:17

            Ничего писать не надо. Форма идёт в комплекте с модулем, накидать можно на неё чего угодно за несколько минут — и картинок и графиков. Да и тот же ноутбук можно повторить 1:1, только, видимо, никому такое чудо пока в голову не приходило :)


            1. lair
              16.07.2018 22:01

              Ничего писать не надо

              То есть data wrangling произойдет горним чудом?


              Вот смотрите, типовой сценарий, сегодня был:


              1. есть csv, читаем его в датафрейм (полторы строчки кода, alt-enter, видим на экране таблицу с данными)
              2. давайте-ка построим график (строчка кода, alt-enter, на экране график)
              3. ой, нет, не такой (изменили одно слово, ctrl-enter, на экране график)
              4. а давайте-ка на метрики посмотрим (строчка кода, alt-enter, на экране цифры)
              5. ага, давайте данные немножко пошмурзим
              6. что будет, если вызвать вот эту функцию на индексе (строчка кода, alt-enter, на экране таблица)
              7. ага, то, что надо, давайте одну колонку на это поделим (вписали в ту же строчку еще два слова, ctrl-enter, на экране таблица)
              8. и от этого график (вписали еще одно слово, ctrl-enter, на экране график)
              9. ага, вроде то, что надо, еще раз метрики (скопировали строчку, alt-enter, цифры)
              10. все, так и будем делать — причем делать вообще на другом языке и в другой среде

              А теперь скажите мне, как вы такой же последовательности достигнете с обычными гуевыми формами и циклом edit-compile-run? Паскаль же вроде как компилируемый язык?


              1. ElectroGuard
                16.07.2018 22:18

                Паскаль же вроде как компилируемый язык?

                Реализаций скриптов под Паскаль я знаю штук 5, наверно, при том, что вообще никогда этим не интересовался. Всё там скриптиться, любые графики выводить — несколько строк кода. Динамически в том числе. Недавно делал как раз.
                Динамически графики удалять, добавлять, менять, форматы вывода графиков менять, что угодно, в десяток строк от силы. А потом на скриптах пиши что хочешь.
                То, что у вас вызывает такое восхищение делается за недели две на Delphi, ну может за месяц. С результами хоть в гуе, хоть в вебе.


                1. lair
                  16.07.2018 23:05

                  То, что у вас вызывает такое восхищение делается за недели две на Delphi, ну может за месяц. С результами хоть в гуе, хоть в вебе.

                  Ну вот когда сделаете — приходите, покажете. Прямо сейчас этого для Паскаля нет (если я не прав — покажите).


                  Но вы-то начали с того, что ноутбуки не нужны, потому что "есть формы". Ну вот есть у вас формы. Как вы с формами получите описанную выше последовательность действий?


                  1. ElectroGuard
                    17.07.2018 10:40
                    -1

                    Ну вот когда сделаете — приходите, покажете. Прямо сейчас этого для Паскаля нет (если я не прав — покажите).
                    Увы, нет у меня свободного месяца, весьма занят.
                    Но вы-то начали с того, что ноутбуки не нужны, потому что «есть формы»
                    Ноутбуки могут быть реализованы на формах, при желании.
                    Как вы с формами получите описанную выше последовательность действий?

                    Довольно просто: скриптовой язык, результаты работы выводим в TChart/TImage, динамически создающиеся. Могу набросать концепцию в коде, если сильно хочется. Для реализации полнофункциональных ноутбуков я, увы, слишком занят.


                    1. lair
                      17.07.2018 11:21

                      Ноутбуки могут быть реализованы на формах, при желании.

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


                      Довольно просто: скриптовой язык

                      То есть уже не Паскаль?


                      Для реализации полнофункциональных ноутбуков я, увы, слишком занят.

                      Судя по тексту выше, вы еще и не очень себе представляете набор требуемой функциональности.


                      Но, повторюсь, дело не в этом. Дело в том, что Jupyter есть уже сейчас, а REPL есть в Питоне из коробки (и, если я ничего не путаю, был всегда). И вот ровно это для обучения бесценно.


                      А наличие в Паскале форм никак не решает задач, для которых используется REPL.


                      1. akryukov
                        17.07.2018 11:41

                        Почему REPL это бесценное преимущество для обучения?
                        Ну то есть я понимаю, что можно на лету что-то написать и увидеть, но ведь это баловство или личные/производственные эксперименты.
                        Представьте, что занятия проводятся в формате группа студентов + преподаватель в каком-нибудь образовательном учереждении. Студентам так или иначе надо фиксировать и сдавать выполненные работы. Причин (сейчас приходит в голову) две: 1) надо отчитываться перед контролирующими органами. 2) При наличии сниппетов у студентов, можно им помогать методом "вспомни на что похожа задача и сделай как уже делал раньше".
                        В большинстве случаев результат работы студента это файл с исходным кодом.
                        Если результат — файл, то какая разница, нужно ли его компилировать, чтобы получить результат, или нет?


                        1. lair
                          17.07.2018 11:46

                          Почему REPL это бесценное преимущество для обучения?

                          Потому что свобода экспериментов. "Что будет, если, что будет, если". И очень быстрая обратная связь.


                          При наличии сниппетов у студентов, можно им помогать методом "вспомни на что похожа задача и сделай как уже делал раньше".

                          А если у него не сниппет, а ноутбук, то там будет текстовое описание задачи, математические формулы в читаемом виде и графическое представление. Так разбираться в задаче намного проще.


                          Если результат — файл, то какая разница, нужно ли его компилировать, чтобы получить результат, или нет?

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


                          1. akryukov
                            17.07.2018 11:59

                            Потому что свобода экспериментов. "Что будет, если, что будет, если". И очень быстрая обратная связь.

                            Ну так я и говорю: исключительно для баловства и экспериментов.
                            С открытой IDEA можно в классе с main методом писать код и запускать горячей клавишей. Обратная связь вряд ли будет медленнее.


                            А если у него не сниппет, а ноутбук, то там будет текстовое описание задачи, математические формулы в читаемом виде и графическое представление. Так разбираться в задаче намного проще.

                            Браузер и PDF отлично справляется с поставкой текстового описания задачи и математических формул. Рисовать графики вообще не всегда нужно.


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

                            Ну в IDEA для этого достаточно добавить класс с методом main. В MSVS еще пару шагов надо сделать. Но в целом не так уж трудоемко.


                            1. lair
                              17.07.2018 12:08

                              Ну так я и говорю: исключительно для баловства и экспериментов.

                              Баловство и эксперименты — неотъемлимая и очень важная часть хорошего обучения.


                              С открытой IDEA можно в классе с main методом писать код и запускать горячей клавишей. Обратная связь вряд ли будет медленнее.

                              Ну, в моем личном опыте (на выборке из нескольких языков) это сильно медленнее.


                              Плюс из main-метода сложно подряд вывести (читаемую) таблицу, график, еще один график, еще одну таблицу, и так до посинения. Я уже приводил частый сценарий использования (он, правда, не от школьного обучения, но не суть).


                              Браузер и PDF отлично справляется с поставкой текстового описания задачи и математических формул.

                              Получаем описание и формулы отдельно, код отдельно. Неудобно же. А тут строго одно под другим — формула, затем ее представление на питоне.


                              (более того, иногда ноутбук содержит готовые шаблоны кода с "а ваше здесь")


                              Ну в IDEA для этого достаточно добавить класс с методом main. В MSVS еще пару шагов надо сделать. Но в целом не так уж трудоемко.

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


                              1. akryukov
                                17.07.2018 12:27

                                Баловство и эксперименты — неотъемлимая и очень важная часть хорошего обучения.

                                Не могли бы вы привести какие-нибудь авторитетные источники, подтверждающие эту мысль?


                                Давайте еще уточним, вы говорите про обучение или про самообучение? Если про обучение, то в какой форме, по какой дисциплине?
                                Я разговариваю о системном очном обучении с преподавателем по дисциплине Основы программирования.


                                Плюс из main-метода сложно подряд вывести (читаемую) таблицу, график, еще один график, еще одну таблицу, и так до посинения. Я уже приводил частый сценарий использования (он, правда, не от школьного обучения, но не суть).

                                Вы правы, ваш пример не относится к обучению основам программирования, в контексте которого построена вся статья.


                                Получаем описание и формулы отдельно, код отдельно. Неудобно же. А тут строго одно под другим — формула, затем ее представление на питоне.

                                Заданий вида "реализуй расчет по формуле" на дисциплине Основы программирование довольно мало (по крайней мере у меня), чтобы это было значительным преимуществом. Это кусок темы про арифметические операторы и может быть кусок темы про циклы.


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

                                Первая же тема посвящена как раз тому, чтобы учащийся мог написать и запустить простейшую программу. Без этого бессмысленно изучать более сложные материи.
                                Плюс, людям очень важно увидеть скомпилированный бинарник "Task5.exe" и запустить его. Это создает необходимое ощущение прогресса и "чего-то настоящего". В этом смысле java даже проигрывает C#.


                                1. lair
                                  17.07.2018 12:37

                                  Не могли бы вы привести какие-нибудь авторитетные источники, подтверждающие эту мысль?

                                  К сожалению, нет. Это мое личное мнение.


                                  Давайте еще уточним, вы говорите про обучение или про самообучение? Если про обучение, то в какой форме, по какой дисциплине?

                                  В школе, по дисциплине "информатика". Не программирование как специализация.


                                  Заданий вида "реализуй расчет по формуле" на дисциплине Основы программирование довольно мало (по крайней мере у меня), чтобы это было значительным преимуществом.

                                  Я имею в виду не "реализуй расчет по формуле", а "надо посчитать евклидову дистанцию между векторами". Очень удобно сначала выписать себе формулу, по которой ведется расчет, потом ее реализовать.


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

                                  print "hello world". Написали, нажали Enter (или Ctrl-Enter), работает.


                                  Плюс, людям очень важно увидеть скомпилированный бинарник "Task5.exe" и запустить его.

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


                                  1. akryukov
                                    17.07.2018 13:04

                                    Я имею в виду не "реализуй расчет по формуле", а "надо посчитать евклидову дистанцию между векторами". Очень удобно сначала выписать себе формулу, по которой ведется расчет, потом ее реализовать.

                                    Что такое евклидово расстояние между векторами? Вот расстояние между точками знаю, угол между векторами знаю.
                                    Независимо от этого, вычисления по формуле — малая часть курса, которая оптимизации не требует. Можно ведь IDE не в полный экран развернуть. Тогда браузер будет видно и этого хватит.


                                    print "hello world". Написали, нажали Enter (или Ctrl-Enter), работает.

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


                                    1. lair
                                      17.07.2018 13:10

                                      Что такое евклидово расстояние между векторами?

                                      Извините, оговорка, "вектор" в значении "The position of a point in a Euclidean n-space is a Euclidean vector".


                                      Независимо от этого, вычисления по формуле — малая часть курса, которая оптимизации не требует. Можно ведь IDE не в полный экран развернуть. Тогда браузер будет видно и этого хватит.

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


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

                                      Подождите, речь была "написать и запустить".


                                      Плюс как-то получить исходные данные от "потенциального пользователя".

                                      Для первой "программы" это прекрасно делается с помощью функции с аргументами. В каком-то смысле это понятнее, чем cin/cout.


                                      1. akryukov
                                        17.07.2018 13:20
                                        -1

                                        Подождите, речь была "написать и запустить".

                                        Даже если я не написал слово "сохранить" в том сообщении, учащемуся нужна возможность дома вспомнить и запустить материал, который проходили на занятии. Они могут и в тетрадь записать этот print "Ура, заработало". Но лучше в файл, пригодный для (компиляции+)запуска, потому что бумага синтаксис не проверяет.


                                        Для первой "программы" это прекрасно делается с помощью функции с аргументами. В каком-то смысле это понятнее, чем cin/cout.

                                        Вот тут согласен с вами, у питона с функциями как то сильно проще, чем в java, c#. Но при чем тут REPL?)


                                        1. lair
                                          17.07.2018 13:27

                                          Даже если я не написал слово "сохранить" в том сообщении, учащемуся нужна возможность дома вспомнить и запустить материал, который проходили на занятии. Они могут и в тетрадь записать этот print "Ура, заработало". Но лучше в файл, пригодный для (компиляции+)запуска, потому что бумага синтаксис не проверяет

                                          Вот именно поэтому я предпочитаю ноутбуки чистому REPL. В них все это как раз есть.


                                          Вот тут согласен с вами, у питона с функциями как то сильно проще, чем в java, c#. Но при чем тут REPL?

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


                                1. JobberNet
                                  17.07.2018 12:56

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


                                  1. akryukov
                                    17.07.2018 13:06

                                    Материал так легче и лучше усваивается — когда не спать хочется от скуки и тупой зубрёжки без понимания, а реально интересно.

                                    Ну так надо такие задания готовить, чтобы не скучно было делать. И требовать от студентов не зубрежки буква-в-букву, а понимания и умения излагать свои мысли. При чем тут баловство с REPL?


                                    1. JobberNet
                                      17.07.2018 13:24

                                      При чем тут баловство с REPL?

                                      = возможность свободно и наглядно попрактиковаться.


                                      1. akryukov
                                        17.07.2018 13:31

                                        = возможность свободно и наглядно попрактиковаться.

                                        Что мешает свободно и наглядно практиковаться в main методе единственного java класса в IDEA?


                                        1. lair
                                          17.07.2018 13:39

                                          А он после выполнения сохраняет состояние всех переменных в памяти, так, чтобы можно было посмотреть, что где? Или "запускайте, дети, дебаггер"?


                                          (я отдаю себе отчет, что это формально не REPL, а interactive environment, но в питоне именно он)


                                          1. akryukov
                                            17.07.2018 13:59

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


                                            1. lair
                                              17.07.2018 14:01

                                              С какой целью нас может интересовать состояние переменных в конце выполнения?

                                              Ну так для тех же экспериментов. Я же не зря приводил пример. REPL с сохранением состояния позволяет сначала загрузить данные и увидеть, что в них, потом — на основании того, что мы увидели — их обработать, потом оценить результат и обработать другим образом.


                                              1. akryukov
                                                17.07.2018 14:04

                                                Как именно задача "загрузить данные, посмотреть на них, обработать" соотносится со школьной информатикой?


                                                1. lair
                                                  17.07.2018 14:08

                                                  Напрямую. Это один из примеров того, где (рудиментарное) программирование может пригодиться для решения прикладной задачи из биологии или экономики или (нужное вписать).


                                                  1. akryukov
                                                    17.07.2018 14:29
                                                    -1

                                                    Я думаю вы переоцениваете уровень знаний и навыков людей, которые начинают программировать. Они просто не увидят способов решения такой "прикладной" задачи.


                                                    1. lair
                                                      17.07.2018 15:54

                                                      Так им и способ показать надо. Ну и да, никто не предлагает делать это в первую неделю (и даже месяц).


                                                      1. akryukov
                                                        17.07.2018 17:58

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


                                                        1. lair
                                                          17.07.2018 18:13

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

                                                          Ну, обратного вроде бы никто и не утверждал.


                                              1. zartarn
                                                17.07.2018 19:18

                                                Сохранение состояний — я праивльно понял что это можно сохранить в полноценный документ со всеми расчетами а потом открыть в другом месте и продолжиьт расчеты?
                                                В универе мы «баловались» с GAP (и ныне неподдерживаемой для нее оболочкой GGAP), удобно было что всякие недельные расчеты сохранялись, и потом уже быстро можно спокойно пользовать. Без прекручивания баз данных и прочего, здесь и сейчас сразу же из wysiwyg редактора (GGAP, в консольке конечно не так). Или вернуться и поправить и пересчитатается весь набор данных который дальше потом используется.
                                                По началу казалось дикостью, а потом ак то приходит понимаение что удобно вот так здесь и сейчас посомтрет ьчто как куда, без компиляции лишний раз и дебага.


                                                1. lair
                                                  17.07.2018 21:33

                                                  К сожалению, нет — только внутри сессии.


                                            1. JobberNet
                                              17.07.2018 14:40

                                              С какой целью нас может интересовать состояние переменных в конце выполнения?
                                              Наглядность в процессе обучения.


                                              1. akryukov
                                                17.07.2018 17:55

                                                Что значит "наглядность"? Какие полезные выводы можно сделать глядя на переменные, которые получились после работы программы?
                                                Сейчас выглядит так, как будто разработчики не реализовали очистку переменных, а вы подаете это как фичу.


                                                1. lair
                                                  17.07.2018 18:15

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

                                                  Да очень просто: был у нас набор данных, мы его загрузили, вывели топ, вывели гистограммы. А теперь вопрос из аудитории: а какие данные попадают в такой-то бин? Если у меня набор данных так и остался в памяти, я могу просто отфильтровать и показать.


                                                  1. akryukov
                                                    18.07.2018 03:40

                                                    Смотреть на детализацию по гистограммам наверное классно, но при чем тут школьная информатика?


                                                    Посмотрите хотя бы в интернете, как выглядят учебные программы по информатике в школе и основам алгоритмизации для студентов, прикиньте какие программки там люди пишут и в этом контексте уже ответьте на вопрос "зачем там REPL и сохранение переменных после работы программы?".


                                                    1. lair
                                                      18.07.2018 11:13

                                                      "зачем там REPL и сохранение переменных после работы программы?".

                                                      Чтобы черепашкой управлять, конечно же.


                        1. retran
                          17.07.2018 12:30

                          Я строил курс обучения вокруг REPL.
                          Он позволяет тупо открыть его на проекторе и показывать вживую как работает код с практически мгновенной обратной связью и мгновенными ответами на вопросы студентов.
                          А если подключить turtle graphics, который как раз заточен под репл, то все становится совсем-совсем хорошо.


                          1. akryukov
                            17.07.2018 12:39

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


                            В общем то я могу и IDEA на проекторе открыть и что-нибудь в ней писать с попутными словесными комментариями. Зачем для этого именно REPL, если оно компилируется моментально?


                            1. ahmpro
                              18.07.2018 03:33
                              -1

                              В общем то я могу и IDEA на проекторе открыть и что-нибудь в ней писать с попутными словесными комментариями. Зачем для этого именно REPL, если оно компилируется моментально?

                              При каждой компиляции и запуске у вас полностью обнуляется состояние(переменные, функции, объекты и т.д.), в то время как в REPL вы фактически изменяете одно состояние, что позволяет проверять состояние любых объектов и изменять код на лету. Своего рода бесрочный дебаг-режим.
                              А это очень полезно для подробного объяснения что же на самом деле происходит.
                              Не говоря о том, что «мгновенная» компиляция и запуск проигрывают REPL в отзывчивости и скорости обратной связи.


                              1. akryukov
                                18.07.2018 03:52
                                -1

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

                                Ну нет. Не так уж и полезно, как вы мне пытаетесь "продать".
                                Зачем мне состояние по итогам работы программы? Для объяснения "как все происходит" мне надо показать как ведут себя переменные во время работы цикла. Точек остановки и пошагового выполнения, я так понимаю, в REPL нет?


                                Зачем мне выводить весь ворох промежуточных переменных, если я могу написать одну команду вывода, чтобы обратить внимание на значение одной важной для объяснения переменной?


                                Не говоря о том, что «мгновенная» компиляция и запуск проигрывают REPL в отзывчивости и скорости обратной связи.

                                Можно узнать, с каким счетом проигрывают?) В IDEA я нажимаю Shift+F10 и у меня за секунду появляется окно с выводом. Мы ведь про основы программирования говорим, где программы на тысячу строк — редкость.


                            1. retran
                              18.07.2018 11:56

                              Ну вот смотрите. Приходите вы и на вас смотрит 50 пар глаз из которых интересно вас слушать хорошо если 10-ку. Если вы первую лекцию посвятите тому как открыть IDEA, как в ней создать проект, что такое «скомпилировать», то на следующую к вам уже придет не 50 человек, а 25 (я напоминаю, что это вчерашние дети и подростки).

                              Альтернативный вариант — вы приходите, запускаете ОДНУ программу с минимальным интерфейсом и начинаете объяснять простейшие принципы показывая выполнение по одной команде с мгновенной реакцией и результатом. Потом подлкючаете черепашку и начинаете ей рисовать что-нибудь интересное по пути объясняя как вводимые команды влияют на поведение черепашки. Я вам гарантирую, что все 50 пар глаз будут наблюдать за «магией».

                              Чтобы заинтересовать нужно быть немножко фокусником и REPL позволяет им стать.

                              А вот потом уже практическая часть, IDE, компиляция и домашние задания сдаваемые через github. Потому что стало понятно и интересно.

                              Собственно, вы сами упомянули IDEA. Посмотрите на то, что предлагает сам JetBrains, они пришли к примерно такому же подходу — www.jetbrains.com/pycharm-edu


                              1. akryukov
                                18.07.2018 12:29

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


                                Заинтересовываю перспективой а не "магией" с черепахой. Впрочем у меня великовозрастные ученики, им черепашка нафиг не нужна. В школе совсем другая специфика.


                      1. ElectroGuard
                        17.07.2018 16:09
                        -1

                        Но, повторюсь, дело не в этом. Дело в том, что Jupyter есть уже сейчас, а REPL есть в Питоне из коробки (и, если я ничего не путаю, был всегда). И вот ровно это для обучения бесценно.
                        Максимум, чему вы сможете научить в Юпитере — это какая-либо обработка данных. В Паскале вы можете научить чему угодно: вплоть до создания этих же самых ноутбуков :) В которых уже сможете научить обработке данных.
                        Юпитер — это оболочка для работы (в том числе и для обучения) в весьма ограниченной сфере: работе с данными.
                        Паскаль же, как универсальный язык, и его оболочки, позволяют научится чему угодно. В том числе и тому, что умеет Юпитер. Даже и Питон можно подключить, я ссылку давал.
                        За счет универсальности Паскаль и его среды более подходят как для работы и для обучения.


                        1. lair
                          17.07.2018 16:12

                          Максимум, чему вы сможете научить в Юпитере — это работать с данными.

                          Это, очевидно, неправда.


                          А в Паскале вы можете научить чему угодно: вплоть до создания этих же самых ноутбуков

                          А почему вы противопоставляете Юпитер Паскалю? Правильно противопоставлять Паскалю Питон (в котором тоже можно научить чему угодно), а Юпитеру — формы (в которых тоже можно научить не всему).


                          1. ElectroGuard
                            17.07.2018 19:51
                            -1

                            Паскаль давно сросся с формами. На голом Паскале вполне можно создать любые формы, не прибегая к средовым редакторам, другое дело, что зачем это делать. Питон же сам не сможет ничего создать. Максимум — присоединиться к Qt, который за него будет всё и рисовать.

                            в которых тоже можно научить не всему
                            Подробнее. Нет, некоторые вещи Паскаль в реализации Delphi покроет слабо — драйвера, например. Остальное вроде бы всё покрыто вполне: основные платформы, веб. Хочется — можно и к Питону подключится и к Qt (в реализации FreePascal).


                            1. lair
                              17.07.2018 21:45
                              +1

                              Паскаль давно сросся с формами.

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


                              Питон же сам не сможет ничего создать.

                              Питон "сам" вообще ничего не делает, это язык. А использование одного компонента ничем не хуже использования другого компонента. С практической точки зрения форма в Питоне создается (может создаваться) как обычный класс.


                              Подробнее.

                              А что "подробнее", это та же самая ошибка, только наоборот: я не буду спорить, что в Паскале можно научить чему угодно (хотя, конечно, вопрос усилий), но речь-то шла о формах. Научить в формах написанию консольных приложений? Web (HTTP) API сервисов?


                              1. ElectroGuard
                                18.07.2018 01:57
                                -1

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

                                Программа может вполне существовать без среды выполнения вообще.
                                Набросал программу, которой достаточно компилятора для сборки и запуска:
                                program Project2;
                                
                                uses
                                 Vcl.Forms,
                                 vcl.Dialogs,
                                 vcl.Graphics,
                                 Vcl.StdCtrls;
                                
                                type
                                 TDummy = class
                                  class procedure Button1Click(Sender: TObject);
                                 end;
                                
                                var
                                 Form2: TForm;
                                 Button1: TButton;
                                
                                 { TDummy }
                                
                                 class procedure TDummy.Button1Click(Sender: TObject);
                                 begin
                                  ShowMessage('Hello world!');
                                 end;
                                
                                begin
                                 Application.Initialize;
                                 Application.MainFormOnTaskbar := True;
                                 Form2 := TForm.Create(nil);
                                 Button1 := TButton.Create(Form2);
                                 Form2.Name := 'Form2';
                                 Form2.Left := 0;
                                 Form2.Top := 0;
                                 Form2.Caption := 'Form2';
                                 Form2.ClientHeight := 153;
                                 Form2.ClientWidth := 364;
                                 Form2.Color := clBtnFace;
                                 Form2.OldCreateOrder := False;
                                 Form2.PixelsPerInch := 96;
                                 Button1.Name := 'Button1';
                                 Button1.Parent := Form2;
                                 Button1.Left := 144;
                                 Button1.Top := 64;
                                 Button1.Width := 75;
                                 Button1.Height := 25;
                                 Button1.Caption := 'Button1';
                                 Button1.TabOrder := 0;
                                 Button1.OnClick := TDummy.Button1Click;
                                 Application.Run;
                                 Form2.ShowModal;
                                end.
                                

                                Форму, опять же, можно грузить прямо из текста, могу кинуть код. Исходник формы (dfm) можно набрать в блокноте, если сильно хочется. Другое дело, что в среде это всё сильно удобнее делать. Но если хочется без среды — пожалуйста :)
                                Научить в формах написанию консольных приложений?
                                Не понятно, зачем именно так делать. Консольные приложения вполне работают в Паскале наравне с 'обычными' VCL/FMX. Однако, если сильно хочется, то можно вывод консоли перенаправить в форму.
                                Научить в формах написанию консольных приложений? Web (HTTP) API сервисов
                                Кроме форм есть DataModule. Сам, собственно, Web сервисом занимаюсь, среди прочего.


                                1. lair
                                  18.07.2018 11:12

                                  Программа может вполне существовать без среды выполнения вообще.

                                  Не, не может. Вашу вот программу можно запустить на моем планшете?


                                  Набросал программу, которой достаточно компилятора для сборки и запуска:
                                  uses
                                  Vcl.Forms

                                  Ага, очень смешно. А VCL (про который даже в названии написано, что это библиотека) — это часть компилятора, да? А как так вышло, что во FreePascal не она, а LCL, если это, как вы говорите, часть языка? А в PascalABC.net — System.Windows.Forms и FormsABC?


                                  Форму, опять же, можно грузить прямо из текста, могу кинуть код. Исходник формы (dfm) можно набрать в блокноте, если сильно хочется. Другое дело, что в среде это всё сильно удобнее делать. Но если хочется без среды — пожалуйста

                                  И какое отношение это имеет к среде выполнения? Вы точно ее со средой разработки не путаете?


                                  Не понятно, зачем именно так делать

                                  Чтобы учить всему на формах (это, напомню, ваше противопоставление Юпитеру), очевидно.


                                  Кроме форм есть DataModule.

                                  Вот именно, что кроме форм.


                                  1. ElectroGuard
                                    18.07.2018 12:00
                                    -1

                                    Не, не может. Вашу вот программу можно запустить на моем планшете?

                                    Под FMX пересобрать — и можно.
                                    Ага, очень смешно. А VCL (про который даже в названии написано, что это библиотека) — это часть компилятора, да? А как так вышло, что во FreePascal не она, а LCL, если это, как вы говорите, часть языка? А в PascalABC.net — System.Windows.Forms и FormsABC?

                                    Но среды то нет? Мы же говорили про среды.
                                    И какое отношение это имеет к среде выполнения? Вы точно ее со средой разработки не путаете?

                                    Путаете вы.
                                    Чтобы учить всему на формах (это, напомню, ваше противопоставление Юпитеру), очевидно.

                                    И что?
                                    Вот именно, что кроме форм.

                                    И что? Что вы пытаетесь доказать? Что учить всему этому неудобно или невозможно? Смешно же.


                                    1. lair
                                      18.07.2018 12:06

                                      Под FMX пересобрать — и можно.

                                      А что мешает запустить вашу программу на планшете? Уж не различие ли сред выполнения?


                                      Но среды то нет? Мы же говорили про среды.

                                      Есть, конечно. .net, в который входит System.Windows.Forms — это среда выполнения.


                                      И что? Что вы пытаетесь доказать?

                                      Что ваше противопоставление "Максимум, чему вы сможете научить в Юпитере — это работать с данными. [...] А в Паскале вы можете научить чему угодно: вплоть до создания этих же самых ноутбуков" (выделение мое) — некорректно. А когда мы переходим к корректному противопоставлению "максимум, чему вы можете научить в Питоне / максимум, чему вы можете научить в Паскале" — выясняется, что в Питоне, внезапно, можно научить всему тому же, чему и в Паскале.


                                      1. JobberNet
                                        18.07.2018 12:57

                                        Для новичков язык с явными begin и end — нагляднее.


                  1. ElectroGuard
                    17.07.2018 10:44
                    -1

                    Вот, к слову, проект
                    Python for Delphi:
                    github.com/pyscripter/python4delphi


                    1. lair
                      17.07.2018 11:16
                      +1

                      А зачем мне Дельфи, чтобы запускать Питон?


                      1. JobberNet
                        17.07.2018 12:08

                        Компилятор кода?


                        1. lair
                          17.07.2018 12:08

                          У Питона уже есть интерпретатор.


                          1. JobberNet
                            17.07.2018 13:02

                            Интерпретатор — это всегда мееееедлееееееноооооооо…
                            image
                            а компилятор — очень быстро!


                            1. lair
                              17.07.2018 13:05
                              +1

                              А что, от добавления питона в дельфи он каким-то магическим образом станет компилироваться?


                      1. ElectroGuard
                        17.07.2018 20:06
                        -1

                        А зачем мне Дельфи, чтобы запускать Питон?
                        Вам хочется интерпретируемые скрипты — вот один из вариантов. Их много, на цвет и вкус. Как подключаемые, так и полностью реализованные на Delphi.


                        1. lair
                          17.07.2018 21:45

                          Мне не хочется интерпретируемые скрипты, мне хочется (универсальный) язык с REPL и интерактивной средой.


                          1. ElectroGuard
                            18.07.2018 12:04
                            -1

                            Ага, учить детей тензорам или линейной алгебре. Представляю уже :)
                            Нужен универсальный простой язык и среда под него. Всё остальное вторично. Паскаль подходит идеально.
                            Юпитер для программирования вообще слабо заточен, если уж на то пошло. Максимум — визуализация данных.
                            Вот сейчас пытаюсь сделать: перенести код, написанный под второй питон на третий, и написанный под линукс на винду. Нормальной среды разработки очень не хватает. Юпитер почти не помогает. Реальный кейс и шило ваш этот Юпитер. Недо-среда, как изначально и говорил. Кого чему на этом можно научить?


                            1. lair
                              18.07.2018 12:09

                              Ага, учить детей тензорам или линейной алгебре. Представляю уже

                              Вы представляете себе то, чего я не говорил. Приятных фантазий.


                              Нужен универсальный простой язык и среда под него. Всё остальное вторично. Паскаль подходит идеально.

                              Я даже не буду спорить об универсальности Паскаля, хрен бы с ней. Мой тезис в другом: Питон подходит не хуже.


                              Вот сейчас пытаюсь сделать: перенести код, написанный под второй питон на третий, и написанный под линукс на винду. Нормальной среды разработки очень не хватает. Юпитер почти не помогает.

                              А почему вы решили, что Юпитер должен вам в этом помочь? Почему вы вообще решили, что он для этого предназначен?


                              Недо-среда, как изначально и говорил. Кого чему на этом можно научить?

                              Очевидно, можно научить, для каких задач Юпитер подходит, и как их с его помощью решать. Почему вы решили, что я предлагаю преподавать с использованием Питона и исключительно Юпитера, без использования IDE?


              1. ElectroGuard
                16.07.2018 22:27

                К слову — не нужно думать, что скомпилированное — значит супер-жесткое. В Delphi можно, например, из базы данных (или просто из тескта) в текстовом виде загрузить описание формы, прямо в рантайме собрать форму и она будет работать обычным способом, её отличить даже невозможно от той, что была вкомпилирована в exe (и это можно было делать уже в Delphi 1, к слову). С кодом такие фишки делать сложнее, тут скрипты в помощь.


                1. lair
                  16.07.2018 23:08
                  +1

                  Спасибо, я лет пятнадцать не имею никаких иллюзий по поводу жесткости скомпилированного кода. Причем, что характерно, безо всякого "с кодом такие фишки делать сложнее" — выдал код, скомпилировал, получил объект, запустил. Или выдал синтаксическое дерево, скомпилировал, получил объект, запустил.


        1. lair
          16.07.2018 20:34

          Так, давайте для начала определимся — вы под формой понимаете обычный такой десктопный GUI, вот такого толка?


    1. Volobuev_Ilya Автор
      15.07.2018 15:59
      -1

      Можно писать в Lazarus. Да, это сложнее, но если все подробно объяснять, то нормально. Тем более баги в программах уровня «Hello world» не будут вылезать, как например здесь.


    1. GeekberryFinn
      15.07.2018 16:01

      А что мешает использовать старый добрый Делфи?


      1. Volobuev_Ilya Автор
        15.07.2018 16:04

        Ничего. А Вы бы что предпочли из этих двух?


      1. alan008
        15.07.2018 18:32

        Может, его стоимость


        1. dmytrorem
          16.07.2018 13:27

          Delphi Starter — бесплатный. С коммерческой лицензией.
          www.embarcadero.com/products/delphi/starter/free-download


          1. Siemargl
            16.07.2018 21:00

            Обрезанный. Без графиков, без работы с СУБД, без отчетов. Все нужно или писать самому или докупать.

            Впрочем, компонентам работы с СУБД можно достаточно легко найти замену.

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


    1. alfred200
      16.07.2018 13:27
      +1

      Для новичков, обучающихся Паскалю, есть PascalABC без всяких .Net. Поэтому нет никакого смысла использовать для обучения PascalABC.Net если то, что отличает его от обычного паскаля реализовано плохо.


      1. ainoneko
        17.07.2018 08:25

        Для новичков, обучающихся Паскалю, есть PascalABC без всяких .Net
        А где оно есть и чем оно лучше?
        У меня оно находится на второй странице результатов и пишет:
        С сентября 2007 года система Pascal ABC не поддерживается. Последней версией стала 3.0. На смену ей пришла более современная система программирования PascalABC.NET, основанная на платформе Microsoft.NET и позволяющая генерировать .exe-файлы.

        Ссылка «Официальный сайт Pascal ABC (рус.)» ведёт на новую версию.


  1. skyblade
    15.07.2018 14:49
    +2

    Когда я учился ещё был Turbo Pascal. Ентот ABC внедрялся уже позже, но я по-прежнему убеждён, что учиться нужно сразу на каком-нибудь живом и рабочем языке. Задача системы образования: выбрать какое-то учебное подмножество языка, в рамках которого будет вестись преподавание. Можно даже запилить отдельную среду выполнения для этого учебного подмножества, которая будет ограничена в функционале, но чем-нибудь более удобна для обучения, но сам язык лучше сразу брать «настоящий», а не «учебный», потому что потом приходится тратить время на разбор «как оно в этой новой технологии устроено-то?» вместо того, чтобы просто сменить редактор и продолжать «думать» как уже привык. И чтобы эта привычка уже сразу была правильная.
    Да, осваивать новые технологии всё равно придётся, но это должно быть желание именно освоить новую технологиию, а не желание освоить всего-то чуть более сложные алгоритмы или структуры данных.


    1. GloooM
      15.07.2018 15:19
      +1

      Тоже впервые в школе изучал турбо паскаль и никаких особых проблем потом не испытывал с переходом на реальные языки. Возможно если бы не простота паскаля, то сложность в условном Си вообще не вызвала бы интереса к программированию. Как по мне так наоборот, ты четко понимаешь границу, вот то был учебный, а вот здесь уже реальный язык и надо «забыть все чему тебя учили»(тм) и приспособиться к новому языку понимая и разбирая его нюансы имея уже какой-то опыт, но не тащить весь багаж говнокодерских навыков со школы )


      1. khim
        16.07.2018 06:17
        +1

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

        А вот Паскаль… вроде как и настоящий язык — а вроде как и нет.


  1. vldby
    15.07.2018 16:04

    Даже стало любопытно как много людей использует для программирования именно .NET часть в Pascal? В школе и университете, мне кажется, этим не занимаются. Обычно же классический Pascal иучают и отдельно C#.


  1. danfe
    15.07.2018 16:15

    Времена старого и доброго Pascal закончились.
    Да, начались времена Ады, ну или того же Free Pascal (хоть про него и говорят, что, мол, был придуман людьми, не знающими про Аду, для людей, не знающих про Аду).

    Я сам еще лет пять назад топил против Паскаля. Теперь понимаю, что бы неправ. Отличный язык.


  1. AhJong
    15.07.2018 16:32

    Дайте детям на выбор Python для Minecraft и Pascal. И посмотрите на результат через пару недель.

    Программированием надо заинтересовать, иначе любое знание придет и тут же уйдет.


    1. Error1024
      16.07.2018 01:07

      В первом случае все ограничиться игрой в Minecraft, а со вторым, возможно ребенок заинтересуется не красивыми кубиками, а именно программированием.


    1. Lopar
      16.07.2018 10:11

      Угу, платная игра с донатом и микротранзакциями — самое то, что стоит внедрять как обязательный элемент школьного образования. Выбор детей — это хорошо. А кто проплачивать это будет? Родители? Школа?


  1. Pochemuk
    15.07.2018 17:04

    Как то смешалось всё мягкое с теплым, а люди с конями…

    Правильно тут многие написали — Pascal (в любой его ипостаси) — язык для новичков.

    Нельзя говорить одновременно о профессиональном росте программиста и программировании на Pascal. Ну не стыкуется это от слова «совсем».

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

    Возьмем такую виртуальную, но тем не менее существующую (как говорят) профессию, как математик-алгоритмист.

    Вот дают ему сердешному задание для оптимизации логистической работы:

    1. Поставки, срок начала выполнения которых близок к дедлайну (с учетом возможных задержек в пути), должны начаться сегодня.
    2. Поставки, дедлайн для которых далек, можно отложить до лучших времен (ну за исключением тех пунктов, куда можно что-то необременительно по весу и габаритам закинуть «по дороге».
    3. Остальные поставки оптимизируются с учетом расхода времени, бензина, ограничений законодальства по ОТ и др.
    4. И все это для полутора-двух-трех сотен пунктов поставок, сообщение между некоторыми из них только через Северный полюс на сломанных лыжах.

    Ну, это я для примера… Просто для того, чтобы почувствовали насколько эта задача «интересная».

    И вот наш горемыка после нескольких недель бессонного труда рожает, как ему кажется, приемлемую методу. И вот дальше начинается…

    Он — ни разу не программист. У него другая работа. Но сделать работающий макет своего алгоритма ему необходимо. Хотя бы для того, чтобы убедиться, что временная сложность его полиномиальна, а не экспоненциальна. Т.е., он уверен, что результат близкий к оптимальному его алгоритм обеспечит, но за 5 минут или за 5 часов — вот в чем вопрос! Сколько реально (а не умозрительно) потребуется памяти, не будет ли вылетов из-за слишком глубоких рекурсий и т.д.

    Ну и на каком языке ему писать этот макет, не привлекая специалистов? Чисто для себя, для проверки?

    Вот тут мне и кажется, что и C# и Pyton требуют более высокого порога вхождения, чем тот же самый Pascal. Пусть даже он ABC.Net
    Более того, IMHO, для таких целей процедурные языки гораздо более подходящие, чем чистые ООП-языки. Т.е., чем проще, тем лучше. Но не слишком просто, чтобы иметь возможность делать что-то чуть более серьезное, чем сложение и вычитание.


    1. longclaps
      15.07.2018 18:49

      Математик-алгоритмист, испытвающий проблемы с порогом вхождения в C# или Pyton — это чудо как хорошо.


      1. Pochemuk
        15.07.2018 19:59

        Ну я не математик, правда, и не программист. Обычный инженер-технарь. Но для решения технических (и не очень) задач приходилось и программировать и алгоритмы изобретать.

        Так вот, совершенно не возникало трудностей с такими языками, как Fortran IV, PL/1, C. Даже Forth и ассемблер для Intel 8080/8086 освоил. Много писал на том же Turbo Pascal, Clarion. Немного знаком с C++, PHP (на нем даже что-то полезное сваял, как ни странно).
        А вот ни C#, ни Pyton не зашли ни с первой попытки, ни со второй.

        Хотя, есть подозрение, что дело в мотивации — по большому счету ни тот, ни другой мне не нужны.


    1. lair
      15.07.2018 18:55

      Ну и на каком языке ему писать этот макет, не привлекая специалистов? Чисто для себя, для проверки? Вот тут мне и кажется, что и C# и Pyton требуют более высокого порога вхождения, чем тот же самый Pascal. Пусть даже он ABC.Net

      Вам кажется. Особенно учитывая то количество математических алгоритмов, которые есть в numpy и scipy, а так же Jupyter Notebook, в котором эту задачу можно делать прямо с самого начала.


      Но сделать работающий макет своего алгоритма ему необходимо. Хотя бы для того, чтобы убедиться, что временная сложность его полиномиальна, а не экспоненциальна. Т.е., он уверен, что результат близкий к оптимальному его алгоритм обеспечит, но за 5 минут или за 5 часов — вот в чем вопрос! Сколько реально (а не умозрительно) потребуется памяти, не будет ли вылетов из-за слишком глубоких рекурсий и т.д.

      Эм, оценки реального времени выполнения и ресурсов можно делать только на том языке, на котором будет писаться production-код.


      1. Pochemuk
        15.07.2018 20:01
        +1

        Речь не идет о точной оценке времени. Но если макет покажет, что глубина рекурсий растет не как ln(n), а как n, то это явно не имеет отношения к языку программирования, а косяк в самом алгоритме.


        1. lair
          15.07.2018 22:46

          Но если макет покажет, что глубина рекурсий растет не как ln(n), а как n, то это явно не имеет отношения к языку программирования, а косяк в самом алгоритме.

          Вот только для некоторых сред выполнения глубина рекурсии O(ln(n)) — проблема, а для некоторых и O(n) не проблема.


  1. Alert123
    15.07.2018 19:03
    +1

    Как то попросили посмотреть почему програмка не работает. Оказалось она на PascalABC.
    И суть была в том что то ли continue внутри цикла работало как break, то ли наоборот, т.е. баг в самом компиляторе, хотя вроде он и не совсем сырой раз в школах его давно используют.
    Удачного обучения с break/continue, детки. :)


    1. ainoneko
      16.07.2018 09:57

      вроде он и не совсем сырой раз в школах его давно используют.
      Это, мне кажется, не настолько связанные вещи. Недавно ставил Кумир (в котором «язык РАЯ» или что-то похожее, с русскими ключевыми словами) — так там в инсталляторе все русские буквы были «закрокозябрены», включая надпись, имеющая значение «Продолжить».

      По теме.
      В файле «Сравнение PascalABC.NET и старого Паскаля» в разделе «Сравнение версий языка Паскаль» почти всё остальное называется отжившим.

      Дальше утверждается «PascalABC.NET опережает Free Pascal по скорости выполнения программ
      на большинстве тестов. Ниже приводится пример со всеми включенными оптимизациями.» и приводятся:
      две программы
      uses Windows;
      {$apptype console}
      var
      tt: Cardinal;
      n,i,j: integer;
      s: real;
      begin
      tt := GetTickCount;
      n := 10000;
      s := 0.0;
      for i:=1 to n do
      for j:=1 to n do
      s := s + 1.0/(i*j);
      writeln(GetTickCount-tt);
      end.

      и
      begin
      var n := 10000;
      var s := 0.0;
      for var i:=1 to n do
      for var j:=1 to n do
      s += 1.0/(i*j);
      writeln(Milliseconds);
      end.



  1. KostaArnorsky
    15.07.2018 19:26

    Всё смешалось в доме Облонских.
    Язык программирования — это не IDE и не компилятор, это набор правил. Понятия не имею, насколько хорош или плох язык PascalABC.Net, но претензии были только к IDE и компилятору.
    Но в любом случае, не понимаю, зачем было свою IDE городить, когда Visual Studio поддерживает Language Extensions, а VS Community бесплатная?


  1. FreeManOfPeace
    15.07.2018 19:53
    -1

    В школе сталкивался с PascalABC (ещё не .NET) так и не смог его освоить толком, но больше потому что не видел никаких практических задач которые можно с таким языком решить.

    Вот скажем язык применяемый в Sanny Builder 3 для программирования скриптов в играх серии GTA я очень легко освоил, потому что было интересно и результат сразу виден, плюс примеров куча (хотя язык та ещё дрянь, большинство функций вызываются опкодами из 4-х шестнадцатиричных символов, что требует постоянного программирования мышкой).

    И скриптовые языки типа Bash/Batch легко освоил уже позже т.к. столкнулся с рядом задач которые можно было легко решить такими языками.

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


    1. Volobuev_Ilya Автор
      15.07.2018 20:48

      Среда PascalABC тоже кривая. Ниже примеры с комментариями.

      //Ошибка: Нельзя преобразовать выражение типа integer к типу Object.
      procedure F(x: object);
      begin
        exit;
      end;
       
      begin
        F(1); // <--
      end.


      //Ошибка: P недоступно.
      type
        T1 = class
        private // Либо protected
          procedure P;
          begin
            exit;
          end;
          
        public
          procedure P(x: integer);
          begin
            exit;
          end;
        end;
        
      var
        A: T1;
        
      begin
        A := T1.Create();
        A.P(1); // <--
      end.


      //Ошибка: private/protected работают некорректно.
      type
        T1 = class
        // Если убрать всю секцию public, то доступ к P пропадет из вне класса.
        // То же самое будет если public и private поменять местами.
        public
          procedure P(x: integer);
          begin
            Writeln('1');
          end;
       
        private
          procedure P;
          begin
            Writeln('2');
          end;
        end;
       
      var
        A: T1;
       
      begin
        A := T1.Create();
        A.P(); // Доступ есть.
      end.


      1. Siemargl
        16.07.2018 00:08

        Подучить бы тебе Паскаль…

        Так я и подумал сразу, что какой то обиженный из-за пары ошибок в редакторе IDE школьник. Был еще маловероятный вариант 2 — что кто то решил использовать П.АБЦ для серьезной работы, но отпал.

        ТЛДР — ты не понимаешь синтаксис ООП. Попробуй повторить фокус (написать аналог) в C# или в C++


        1. Siemargl
          16.07.2018 12:49

          Посмотрел повнимательнее утром на свежую голову. Проверил в версии 3.4.0.1694

          Итого — 1й пример стал работать (хотя конечно для стандартного Паскаля не должен был, боксинг добавился вместе с .NET).
          2й-работает, все доступно, см ниже
          3й — тоже работает, хотя [вроде] не должен, см ниже

          Взял пример, прямо из онлайн справки АВС Паскаля «Классы/Видимость членов класса и модификаторы доступа». Читаем

          Кроме того, private и protected члены видны отовсюду в пределах модуля, в котором определен класс
          Пример разнес по юнитам — все отработало согласно описанию.

          Ну учебная же среда, хотя это немного другой Паскаль =)
          Надо так учить мат.часть

          Но минус откатил на плюс за свою невнимательность.


      1. Error1024
        16.07.2018 01:15
        -1


        Автор — это шутка? Тебе компилятор просто не дает выстрелить в ногу, радовался бы, в js, Python… можно и прострелить, а Pascal уберег тебя от тупой ошибки. Имхо дело не в «плохом и ужасном» паскале.


      1. mayorovp
        16.07.2018 06:56
        +1

        Ну офигеть кривость! Если поменять private и public местами, то доступ, видите ли, пропадает…

        Вы вообще знаете что эти ключевые слова означают? Подсказка: они управляют доступом извне класса :-)


        1. khim
          16.07.2018 07:46
          -1

          А вы вообще знаете что такое перегрузка функций? Подсказка: это когда есть много функций — а имя у них одно.


        1. kogemrka
          16.07.2018 09:03

          Ну офигеть кривость! Если поменять private и public местами, то доступ, видите ли, пропадает…


          Как я понял, автор имеет в виду не замену public на private, а порядок описания секций private и public.
          В примере 2 порядок один, в примере 3 — порядок другой. Поведение, по словам автора, разное.


          1. mayorovp
            16.07.2018 09:11

            Да, я уже увидел. Почему-то первый раз показалось что компилятор прав, сейчас вижу что нет.


  1. aalebedev
    15.07.2018 23:23

    Это среда, которая делалась для замены Turbo Pascal или платного Делфи.
    Все таки среда создавалась в 2002 году.

    Сравнивать разработку от огромной корпорации с очень небольшой командой, не совсем правильно.

    Хотя, на мой взгляд, проект слишком разросся. Вопрос сколько процентов от него используется в обучении.



    1. ainoneko
      16.07.2018 05:30

      Хотя, на мой взгляд, проект слишком разросся. Вопрос сколько процентов от него используется в обучении.
      Так разаработчики предпочитают «добавлять фичи, а не фиксить баги».

      Я много с ним не занимался, но уже видел, как в «Watch» не обновляется присваиваемое значение элемента массива. И как-то раз удалось просто случайно уронить компилятор.


    1. ElectroGuard
      16.07.2018 19:48
      -1

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


      1. GeekberryFinn
        16.07.2018 21:02

        Просто не нужно было учебную оболочку пытаться тянуть до уровня языка.

        Проблема в том, что ни ALGOL, ни Modula — не имели на PC нормальной реализации, а Pascal — имел.

        PS если кто не помнит, Pascal планировался как чисто учебный язык после изучения, которого нужно переходить ALGOL. Позже была создана Modula — тоже как язык для работы, к которому легко перейти зная Pascal.


        1. ElectroGuard
          16.07.2018 21:19

          Я имел в виду Pascal ABC, если что. Позиционировались как учебная оболочка — так бы и оставались.


  1. Error1024
    16.07.2018 01:21

    1) С тем как хорошо автор поста знает паскаль, все ясно:

    2) Не ясно, зачем автор требует от среды, созданной исключительно для обучения, кучи продвинутых фич. (А с приведенным примером выше, можно усомниться в том, что автор действительно глюки словил, а не напоролся на собственноручно расставленные грабли)
    3) Советую автору взглянуть на настоящую IDE для Object Pascal — Lazarus.


  1. Xitsa
    16.07.2018 08:14

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

    class TA<T> {
     T x;
    }
    class TB<T, T2>: TA<T>
    {
    }
    

    Первая неожиданность в том, что TA<T> и TA<T>, который базовый класс TB<T, T2>, — это разные типы.
    Первый TA<T> — это обобщённый тип со свободным типом-параметром T.
    Второй TA<T> — это конкретизированный обобщённый тип TA<T>, в котором тип-параметр T конкретизирован типом-аргументом T класса TB<T, T2>.
    Чтобы было понятней, перепишу пример так:
    class TA<T> {
     T x;
    }
    class TB<D, N>: TA<D> {
    }
    

    Вторая неожиданность в том, что работа Reflection.Emit с обобщёнными типами описана довольно сжато и не всегда в итоге получалось сравнивать корректно типы и их методы.

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

    Третья неожиданность заключается в том, что авторы ICorDebug — набора интерфейсов для доступа к отладчику .NET, поддержку обобщённых типов добавили позже, с неполным отображением.

    (Это всё моё мнение, поддержкой проекта я занимался 6-8 лет назад, сейчас с наличием .NET Core с открытыми исходниками, наверное, будет полегче).


  1. jknight
    16.07.2018 11:00

    Какая, однако, активная темка тут на Хабре нашлась! Лол, да это же победа.

    По факту, не так давно этот человек начал активно заливать г#$%ом страницу Википедии проекта — размещать там ссылки на Issue на гитхабе, рассказывать о том, насколько же «нельзя» этим Паскалем пользоваться… Теперь вот дошел до того, что целый пост на Хабр написал с той же целью. Интересно только, в чем мотивация.

    По части того, насколько активно в обучении используются те или иные фичи — расскажу свою историю. Закончил я мехмат ЮФУ в 2016 году (магистратуру — начинал, соответственно, в 2010). В качестве первого языка для курса «Основы программирования» (продуктивной работы и хороших студентов Вам, Станислав Станиславович!) на первом году обучения был поставлен именно он. Поначалу (я пришел с крайне неплохим бэкграундом в плане опыта программирования на фоне остальных однокурсников) действительно возникала куча вопросов. В основном, связанных с тем, что в продакшене этот язык не используется, и возможность не предвидится. Курс, однако, закончился, а потом…

    На втором году обучения вся группа «подтянула» свои знания по C#, Java, C++, Python буквально за две-три недели за язык (ну ладно, на С++ целый год потратили, да, но писать простенькие программы смогли очень быстро), а сложность освоения новых языков свелась практически к нулю. Почему? Потому, что буквально на каждую конструкцию, которая в них встречалась, находилась та, которую мы уже выучили, и знали принципы работы с ней на языке PascalABC.NET. Спрашиваете, зачем все эти фичи, которые реализуют разработчики? Именно по этой причине — обеспечить плавный и легкий переход на практически любой язык, любую среду программирования. То, что не является стабильным (т.е. экспериментальные, разрабатываемые фичи), мною за время обучения не было увидено ни разу — разве что, сам накопаешь кровно-потными трудами, если есть желание что-то «поломать». К моменту, когда пришла пора рассказывать об этих самых фичах на курсах по ЯП, они уже протестированы и стабильны.

    То, что человек тут пишет о использовании PascalABC.NET в крупных проектах и промышленной разработке (и о том, что этого нужно избегать), явно говорит о том, что он еще школьник (ну, максимум, первый-второй курс) — зайдите интереса ради на форум мехмата — там таких добрый десяток, с «крупными» проектами вроде «напишем свой тридэ движок на пацкалях, и будем игры писать». Людям, которые имеют работу в нашей области, не нужно объяснять, почему язык не ставит себе целью эту самую промышленность. На это же намекают и орфографические ошибки вроде «по чему». Опять же, юношеский максимализм и абсолютизм, с которым эта «критика» преподносится, указывает на то же самое. Школьники, пожалуй, порой и умные вещи говорят, но в таких случаях их редко можно от взрослого человека отличить.

    То, что там есть баги, вполне объяснимо малым размером команды, которая, к слову, не только этим занимается — проект некоммерческий, надо еще и кушать что-то. Там, где максимальный охват аудитории (школа, первокурсники), 99,9% функциональности работает на отлично.

    Вопрос к автору у меня только один. Откуда столько хейта? Двойку поставили?
    Обидно просто. Учитывая объем работ команды разработчиков, усилия приложены титанические. И обучающий эффект мощнейший, по крайней мере, в руках хорошего преподавателя. А тут появляется п#$%#к, который на весь интернет орет о том, как этот ЯП нужно чуть ли не через Роскомнадзор запретить.


    1. jknight
      16.07.2018 11:09
      +1

      Извиняюсь, с «крупными проектами» я тут переборщил — здесь этого не было. Было в Википедии :) Впрочем, из «попрограммировал на PABC.NET, стал разработчиком среднего уровня, среда жить не дает», оно планомерно вытекает…

      Не оправдываю разработчиков в плане периодически отваливающегся парсера для автоформатирования… Слегка оффтоп, на деле. Придерусь к одному моменту, ибо в недоумении.

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

      Нет, один юзкейс есть — вставить код из стековерфлоу. А еще?


      1. lair
        16.07.2018 11:29

        Если не делаешь это на автомате руками, работа превращается слегка в боль, не?

        Конечно, нет. За меня большую часть форматирования делает IDE, чтобы я мог потратить свое время на что-нибудь более интересное.


        1. jknight
          16.07.2018 11:32

          Да. И когда мне выпадает необходимость пописать где-нибудь вроде Atom или Notepad++, я эти табы с пробелами ставлю сам, причем, не «напрягаясь», и не «задумываясь». Это ж столько мыслительной деятельности занимает — кнопки на клавиатуре нажимать.


          1. lair
            16.07.2018 11:34

            Да.

            Я искренне вам сочувствую, раз для вас автоматизация превращает работу в боль.


            я эти табы с пробелами ставлю сам, причем, не «напрягаясь», и не «задумываясь».

            16 пробелов подряд, на каждой строчке, не напрягаясь и не задумываясь?


            1. jknight
              16.07.2018 11:41

              Гхм, давно вроде как придумали табы, не? В любом адекватном редакторе можно их заменить на пробелы автоматически, если религия просит.

              Да

              Я искренне вам сочувствую, раз для вас автоматизация превращает работу в боль.

              Имелось в виду, что большая часть IDE умеет во время написания кода это делать. Хочется лишь сказать, что то, что этого нет — минус, но не повод выкидывать что-либо на помойку. Плюсов там изрядно больше, чем мелких, но досадных минусов. Написать хорошую IDE силами 5-6 человек, и поддерживать ее с учетом выхода новых возможностей, как минимум, очень сложно. Особенно учитывая некоммерческую суть проекта.


              1. lair
                16.07.2018 11:42

                В любом адекватном редакторе можно их заменить на пробелы автоматически, если религия просит.

                Вот вам и ответ на то, зачем нужно автоформатирование.


                Имелось в виду, что большая часть IDE умеет во время написания кода это делать.

                Цитирую: "делаешь это на автомате руками".


                1. jknight
                  16.07.2018 11:47

                  Это не автоформатирование IDE, а базовая фича любого редактора текста уровня выше «Блокнот», никак не привязанного ни к какому конкретному языку.

                  Имеется в виду, что если конкретный редактор этого не поддерживает, это не вызывает проблем. Ну, у меня, по крайней мере.


                  1. lair
                    16.07.2018 11:50

                    Это не автоформатирование IDE, а базовая фича любого редактора текста уровня выше «Блокнот», никак не привязанного ни к какому конкретному языку.

                    То есть то, что автоформатирование зависит от языка (и принятых в команде стандартов), вас не очень волнует?


                    Имеется в виду, что если конкретный редактор этого не поддерживает, это не вызывает проблем. Ну, у меня, по крайней мере.

                    У меня тоже не вызовет, но раздражать будет неимоверно.


                    1. jknight
                      16.07.2018 12:00

                      Я в последних сообщениях говорил только о табах, не путайте теплое с мягким. Сами завели рассказ про «16 пробелов»…

                      Форсирован формат кода в Python — и то, не так, чтоб очень сильно. За его пределами каждый что хочет, то и делает. В каждой фирме отдельный стайлгайд с правилами вроде «кривые скобки ставим на той же строке, что и описание функции». По хорошему — можно настроить какой-нибудь AStyle, и делать как душе угодно. Вот только не стоит просить еще и кастомного форматирования от разработчиков — у них и без того на это времени нет. Вы напрямую утверждаете, что это ну очень нужно — так епт, сделайте! Пулл-реквесты в репозитарий никто не отменял. Только вот что-то никто не торопится…


                      1. lair
                        16.07.2018 12:02

                        Я в последних сообщениях говорил только о табах, не путайте теплое с мягким. Сами завели рассказ про «16 пробелов»…

                        … которые тоже зависят от языка.


                        За его пределами каждый что хочет, то и делает.

                        Дада, про go fmt никто не слышал.


                        Вы напрямую утверждаете, что это ну очень нужно — так епт, сделайте!

                        Так у меня и так все есть и работает.


                        1. warlock13
                          17.07.2018 03:23

                          Количество пробелов зависит от ЯП, но фича Smart Indentation — универсальная.


                          1. lair
                            17.07.2018 11:14
                            +1

                            Мне кажется, мы под Smart Identation разное понимаем. Я вот привык к следующему:


                            1. набираем if(x>0)
                            2. нажимаем Enter, получаем сдвиг относительно if
                            3. набираем {, она немедленно сдвигается под if (т.е., сдвиг убирается)
                            4. нажимаем Enter, получаем сдвиг относительно {


      1. quverty
        16.07.2018 15:28

        По факту, не так давно этот человек начал активно заливать г#$%ом страницу Википедии проекта — размещать там ссылки на Issue на гитхабе, рассказывать о том, насколько же «нельзя» этим Паскалем пользоваться…
        Вы можете как-то обосновать предположение, что это был именно автор данной статьи? Там, действительно, есть некие правки человека с тем же именем и фамилией, но достаточно мелкие, вроде изменения регистра переменной или последовательные правки с вставкой и удалением ссылки на несуществующую страницу, не приводящие в итоге к изменению статьи.


        1. jknight
          17.07.2018 12:18

          В некотором смысле. Там были еще правки от незарегистрированного пользователя, и их стиль изложения/суть претензий крайне сильно напоминают то, что написано здесь. Была еще найдена связь между пользователем с тем же именем с сайта cyberforum, с выложенными исходниками того же характера, а также кусками кода, который он выкладывал как на форум Паскаля, так и на cyberforum.

          TL; DR — прямый улик нет, но косвенных — полно. Для того, чтобы с ними ознакомиться, предлагаю зайти на it.mmcs.sfedu.ru, и там темка сейчас в топе, с говорящим названием.


    1. lair
      16.07.2018 11:33

      Потому, что буквально на каждую конструкцию, которая в них встречалась, находилась та, которую мы уже выучили, и знали принципы работы с ней на языке PascalABC.NET. [...] плавный и легкий переход на практически любой язык

      В PascalABC.net есть list comprehensions и динамическая типизация? Указатели? async/await? Паттерн-матчинг?


      1. jknight
        16.07.2018 11:39

        Указатели — есть. async/await — в разработке, насколько мне известно. Паттерн-матчинг — недавно появился. Динамическая типизация — нет, это базовый параметр языка, да и зачем? По моему, она — лишний повод стрелять себе в ногу, но это уже религия и дело вкуса. List comprehensions — нет, но их аналоги легко реализуются на LINQ, с похожей логикой мысли. Зачем два раза одно и то же писать, если оно уже есть?

        Пардон, эти элементы языка (ну, кроме указателей) далеко за пределами уровня школьника или студента 1-2 курса (вспоминаем, что я говорил об аудитории).


        1. lair
          16.07.2018 11:42

          да и зачем? [...] Зачем два раза одно и то же писать, если оно уже есть?

          Это уже второй вопрос. Вы говорите, что на каждую конструкцию была та, которую вы выучили, хотя, как можно видеть, не на каждую.


          Пардон, эти элементы языка (ну, кроме указателей) далеко за пределами уровня школьника или студента 1-2 курса (вспоминаем, что я говорил об аудитории).

          Вы говорили, что задача PascalABC.net — "обеспечить плавный и легкий переход на практически любой язык, любую среду программирования". Одно другому противоречит.


          1. jknight
            16.07.2018 11:52

            1) Речь об аналогах и ассоциациях, которые в голове появляются автоматически. Эта функция исполняется. Тащить все подряд в язык — годный способ испортить все, что можно.
            2) Нет, не противоречит. Когда человек приходит с PABC.NET на C#, он знает о большей части средств — ООП, LINQ, базовая работа со стандартными классами, и т.д. Для чего нужен async/await, на первом-втором курсе вообще, я считаю, рановато рассказывать. Противоречия нет в том смысле, что то, что изучили с использованием PABC.NET транслируется на все остальное. То, что чего-то не рассказали — не смертный приговор. Именно поэтому тратится еще две недели, на «доковыривание» отдельной функциональности языков, на которые пытаемся переходить :)


            1. lair
              16.07.2018 11:55

              Речь об аналогах и ассоциациях, которые в голове появляются автоматически.

              А откуда они появляются, если вы async/await не видели никогда?


              Когда человек приходит с PABC.NET на C#, он знает о большей части средств — ООП, LINQ, базовая работа со стандартными классами, и т.д.

              А когда он приходит на Scala? Или любой другой функциональный язык?


              Именно поэтому тратится еще две недели, на «доковыривание» отдельной функциональности языков, на которые пытаемся переходить

              … а люди-то месяцами и годами языки учат.


              1. jknight
                16.07.2018 12:02

                А откуда они появляются, если вы async/await не видели никогда?

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


                1. lair
                  16.07.2018 12:03

                  Тогда, когда в процессе решения поставленной задачи приходится столкнуться с необходимость что-то сделать, и человек лезет на StackOverflow.

                  Ну то есть Паскаль в любой его форме тут ни при чем. QED.


                  1. jknight
                    16.07.2018 12:08

                    Для того, чтобы был смысл лезть на StackOverflow, нужна какая-то база в голове. Когда ее нет, ни он не поможет, ни Таненбаум, ни Страуструп. Паскаль позволяет ее сформировать.


                    1. lair
                      16.07.2018 12:09

                      Паскаль позволяет ее сформировать.

                      Как я уже сказал ниже, для этого достаточно любого мейнстримного языка программирования.


                      В моей жизни Паскаля никогда не было (кроме одного чужого диплома), и ничего, живу же.


                      1. jknight
                        16.07.2018 12:12

                        В моей жизни Паскаля никогда не было (кроме одного чужого диплома), и ничего, живу же.

                        А вот это уже чистой воды демагогия. Предлагаю завершить дискуссию.


                        1. lair
                          16.07.2018 12:14

                          Да нет, это контрпример из жизни, который показывает, что для достижения поставленной вами цели Паскаль необходимым не является.


                          1. jknight
                            16.07.2018 12:26

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


                            1. lair
                              16.07.2018 12:31

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

                              Я? Нет. Я всего лишь говорю, что, возможно, перечисленные вами достоинства этого языка как языка для обучения — завышены.


              1. jknight
                16.07.2018 12:05

                А когда он приходит на Scala? Или любой другой функциональный язык?


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

                … а люди-то месяцами и годами языки учат.

                Суть — довести до состояния, когда человек может сам продолжить что-то изучать, без указки, мела, и преподавателя. Эта цель выполняется на 100%.


                1. lair
                  16.07.2018 12:07

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

                  Ну то есть "плавный и легкий переход на практически любой язык" тоже не выполнено. Ок.


                  Суть — довести до состояния, когда человек может сам продолжить что-то изучать, без указки, мела, и преподавателя. Эта цель выполняется на 100%.

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


                  1. jknight
                    16.07.2018 12:11

                    практически

                    Я тут не говорил «любой», я сказал «практически любой». Brainfuck, Prolog, Haskell, J, и прочие не в счет.

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

                    Ну, да. Если не учитывать то, что почти для любого языка (может, кроме Питона) придется делать горы ссылок на будущее вроде «пишите пока так, потом расскажем», которые зачастую убивают любое желание что-то делать.


                    1. lair
                      16.07.2018 12:13

                      Я тут не говорил «любой», я сказал «практически любой». Brainfuck, Prolog, Haskell, J, и прочие не в счет.

                      А, в значении "любой похожий на PascalABC.net". Спасибо, мне это не нужно.


                      Если не учитывать то, что почти для любого языка (может, кроме Питона) придется делать горы ссылок на будущее вроде «пишите пока так, потом расскажем», которые зачастую убивают любое желание что-то делать.

                      Странно, и как я без этого обходился, когда изучал C#?


                      1. jknight
                        16.07.2018 12:24

                        А, в значении «любой похожий на PascalABC.net».

                        ООП, статическая строгая типизация, элементы ФП, императивная парадигма. «Любой похожий», ага. Только таких (за исключением типизации) — большинство. Да, я знаю, что и вакансию Haskell найти реально при желании — но эта ситуация скорее исключение, чем правило.

                        Странно, и как я без этого обходился, когда изучал C#?

                        Ну, имея бэкграунд уровня «поработал программистом N лет» позволяет без этого обходиться. Тут же речь идет о тех людях, которые еще программирования в глаза не видели. И тут код вроде

                        using System;
                        using System.Collections.Generic;
                        
                        namespace Crap
                        {
                        	class SomeClass
                        	{
                        		public static void Main(<kokoko>)
                        		{
                        			System.Console.WriteLine("Hello, World!");
                        		}
                        	}
                        }

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

                        Как уже сказал, завершим дискуссию. Конструктивом здесь уже не пахнет.


                        1. lair
                          16.07.2018 12:30

                          ООП, статическая строгая типизация, элементы ФП, императивная парадигма. «Любой похожий», ага.

                          Ну вот дженерики еще, ага.


                          Ну, имея бэкграунд уровня «поработал программистом N лет» позволяет без этого обходиться.

                          … а как я изучал те языки, на которых я работал до C#? А так же.


                          И тут код вроде

                          Вы про C# interactive не слышали, да?


                        1. akryukov
                          16.07.2018 12:43

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

                          Это верно для тех, кто знает другие варианты. Для новичков не сильно важно, особенно если IDE уже написала. Если человек впервые начал писать, для него это просто необходимое оформление на уровне "создать проект, положить его в папку" или "файлик с кодом лежит в проекте, а проект находится в решении".


                          1. jknight
                            16.07.2018 12:57

                            Когда скачиваешь новую среду, и пытаешься что-то сделать — да. А если задача, кроме того, качественный лекционный материал подготовить? Тоже будем про "ну, так надо, не парьтесь" рассказывать? Нет, согласен, оно так и делается. Но это, как мне кажется, не вполне корректно, хоть без него и никак.


                            1. akryukov
                              16.07.2018 13:09

                              Я лично вообще сомневаюсь в полезности лекций по оформлению решений и по синтаксису языка. Для этого есть практические занятия и методички. Я ведь недавно дописал под 2013, а актуальная версия уже 2017 и VS:Code появился.
                              В формате лекции было бы полезнее дать идею "зачем" и "где применяется", "какие проблемы бывают", связать с другими предметами (вроде ОС или сетей или дискретной математики) и т.п. Правда я в этом смысле не настоящий сварщик. У меня курсы без выделенных часов на лекции и все это приходится на практике рассказывать.


                              1. jknight
                                16.07.2018 13:16

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


                    1. khim
                      16.07.2018 12:58
                      +2

                      Я тут не говорил «любой», я сказал «практически любой». Brainfuck, Prolog, Haskell, J, и прочие не в счет.
                      Ага, ещё C++ отметается (там метапрограммирование есть всякое) и Python с PHP (совсем другая парадигма где мы имеем «два» уровня и часто бывает полезно не писать «эффективный» велосипед, а вызвать «не слишком подходящий» примитив, так как он за счёт того, что написан на C, работает в 10 раз быстрее).

                      Что осталось? C#? Но если нам нужен язык, на котором работаьть нельзя, но с которого удобно переходить на C# — то может проще C# сразу выучить?


                      1. jknight
                        16.07.2018 13:05

                        Побойтесь высших сил, метапрограммирование школярам читать :-) Если его не включать в "базовый набор", оставив его на уровне дженериков, получится вполне себе годный старт для базового С++.


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


                        1. khim
                          16.07.2018 13:45

                          Побойтесь высших сил, метапрограммирование школярам читать :-)
                          А почему нет? Тот же самый LINQ, который вроде как PascalABC есть — это метапрограммирование в чистом виде.

                          Беда метапрограммирования не в том, что это сложная и заумная концепция, а в том, что в соременных мейстриймовых языках — оно плохо реализовано.

                          Не могу сказать, проще, или нет. Но эффект я видел лично. Это реально работает.
                          А вы уверены, что в этом заслуга именно PascalABC и что выпускники MIT'а (недавно переключившиеся со Scheme на Python) имеют с этим большие трудности? Или, может быть, вопрос в правильном построении курса программирования?


                          1. mayorovp
                            16.07.2018 16:06

                            Простите, но с каких пор LINQ является метапрограммированием?


                            1. khim
                              16.07.2018 17:46

                              В том месте, где парсится Expression Tree и по коду на C# порождается совсем другой код на C#.

                              Что, собственно, метапрограммирование заметно более высокого порядка, чем возможно в C++.

                              Уверен на 99.9%, впрочем, что в PascalABC.Net ничего этого нету, полноценных механизмов, поверх которых построен LINQ не предусмотрено, а есть набор костыликов, который позволяет делать вид, что что-то такое у нас типа как вроде есть… но вот конкретно здесь, конкретно сейчас, а «шаг влево, шаг вправо — расстрел».

                              Впрочем Pascal'ю не привыкать: write(x:10:3) — вроде как и функция (во всяком случае так заявляет руководство), а на самом деле нет — хитрая конструкция, подобную которой самому сделать нельзя.


                              1. lair
                                16.07.2018 17:56
                                +1

                                Уверен на 99.9%, впрочем, что в PascalABC.Net ничего этого нету, полноценных механизмов, поверх которых построен LINQ не предусмотрено, а есть набор костыликов, который позволяет делать вид, что что-то такое у нас типа как вроде есть… но вот конкретно здесь, конкретно сейчас, а «шаг влево, шаг вправо — расстрел».

                                Ну а почему, кстати? Если там компилятор умеет порождать expression tree (что, все-таки, разумной сложности задача), то дальше это уже сваливается в стандартную имплементацию в .net.


                                1. khim
                                  16.07.2018 18:17

                                  Если там компилятор умеет порождать expression tree (что, все-таки, разумной сложности задача), то дальше это уже сваливается в стандартную имплементацию в .net.
                                  По моему вы сами ответили на этот вопрос. Гораздо проще для реализаторов «увидев» нужные зацепки вызвать стандартную реализацию, чем предоставлять полноценные средства работы с Expression Tree…


                                  1. mayorovp
                                    16.07.2018 18:21

                                    Что такое "полноценные средства работы с Expression Tree" и почему стандартная реализация неполноценна?


                              1. mayorovp
                                16.07.2018 18:05

                                Другой код на C# никто не порождает, максимум — байт-код материализатора.


                                В любом случае, использование LINQ метапрограммированием не является, а реализацию Queryable провайдера никто в школе делать не будет.


                                1. khim
                                  16.07.2018 18:15

                                  Другой код на C# никто не порождает, максимум — байт-код материализатора.
                                  Это уже расщепление волос.

                                  LINQ — это просто пример метапрограммирования, куда более приближенный к тому метапрограммированию, которое появилось в 60е в Lisp'е и в 70е в Forth'е, чем то, что творится в C++.

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

                                  Тот факт, что оно не было добавлено в язык, а было там обнаружено в результате «археологических раскопок» — ни разу не оправдание.

                                  а реализацию Queryable провайдера никто в школе делать не будет.
                                  А вот это как раз скорее показатель того, что даже и в C# всё весьма и весьма переусложнено… это вам не Lisp и не Forth…


                                  1. mayorovp
                                    16.07.2018 18:20

                                    Нет, это показатель того что перед Queryable провайдерами ставится достаточно сложная задача: преобразование AST-запроса к объектам в текстовый запрос к хранилищу (обычно это SQL-запрос).


                              1. danfe
                                16.07.2018 19:25

                                write(x:10:3) — вроде как и функция (во всяком случае так заявляет руководство), а на самом деле нет — хитрая конструкция, подобную которой самому сделать нельзя.
                                В том-то и дело, что это не «настоящая» функция процедура (руководства под рукой нет, чтобы процитировать), а специальная языковая конструкция (ну или оператор, если хотите). Обычных функций и процедур с переменным числом аргументов в паскале нет (хотя бы из-за порядка складывания оных в стек). Видимо, поэтому же для строк стандарт ISO Extended Pascal специально определяет WriteStr().


                                1. khim
                                  16.07.2018 19:39
                                  +1

                                  В том-то и дело, что это не «настоящая» функция процедура (руководства под рукой нет, чтобы процитировать), а специальная языковая конструкция (ну или оператор, если хотите).
                                  В том-то и дело, что стандарт это называет File handling procedures.

                                  Обычных функций и процедур с переменным числом аргументов в паскале нет (хотя бы из-за порядка складывания оных в стек).
                                  Угу. Поэтому в том же стандарте, отдельно, есть ещё и разделы The procedure read и The procedure write (и такие же для readln и writeln). Так, без задней мысли: вот да, у нас есть «нормальные» процедуры… а есть The procedure read и The procedure write… у которых особенный, отдельный, синтаксис…

                                  P.S. Про то, что read и write это не функции, а процедуры и стандарт их чётко отличает… каюсь, забыл…


                                1. netch80
                                  16.07.2018 19:43

                                  Ну вот я знаю нескольких человек, которые ещё в 90-е послали нафиг Паскаль по нескольким причинам, одной из которых было, что не хотели себя чувствовать быками по сравнению с Юпитером: ему позволено создавать отдельный синтаксис для особых случаев, а им — нет.


                                  1. danfe
                                    16.07.2018 20:05

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


                                  1. GeekberryFinn
                                    16.07.2018 21:10

                                    я знаю нескольких человек, которые ещё в 90-е послали нафиг Паскаль

                                    А я вот в 90-е с C++ перешёл на Delphi, потому что написание под Windows на C++ было ещё тем песцом, а Delphi позволил это сделать легко легко и быстро.


  1. arturpanteleev
    16.07.2018 11:32

    Я думал в школах до сих пор учат на turbo pascal 7 с синим фоном :)

    Скрин
    image


    1. khim
      16.07.2018 13:00
      +1

      Честное слово — это было бы полезнее. По крайней мере тем, что не возникает иллюзий на тему того, что на этом можно что-то «реальное» писать.


      1. jknight
        16.07.2018 13:10
        -2

        Нет. Один взгляд на этот вырвиглазный синий экран отбивает любое желание что-то изучать. У всех. Без исключений. В 2018 году, в век торжества разных там стилей, дизайнов, и прозрачностей, этой образины существовать не должно.


        1. jknight
          16.07.2018 13:11

          Дополним это учителями, которые на вопрос "а где же можно что-то "реальное" писать?" ответить не могут...


        1. mayorovp
          16.07.2018 13:27
          +1

          Вот чего-чего, а стилей, дизайнов и прозрачностей чем меньше — тем лучше.


        1. danfe
          16.07.2018 19:30
          +2

          вырвиглазный синий экран
          Да господь с вами, этот классический борландовский интерфейс — едва ли не лучший из текстовых UI, он и по сей день отлично выглядит (и по цветам, и по общей организации).


          1. GeekberryFinn
            16.07.2018 21:16

            Ага! В ту эпоху он был самый лучший!

            danfe Позвольте уточнить: на этом [нельзя] что-то «реальное» писать — это вы про паскаль вообще (в широком смысле) или именно про TP7?

            Turbo-Pascal был обрезанной версией для бедных, и писать было лучше на полноценном Borland Pascal.


        1. jknight
          17.07.2018 12:29
          -1

          Наминусовали, молодцы. Только сути не замечаете. Школьника надо заинтересовать. Студента — немного меньше, но тоже. Средства, которые предоставляют TP/BP (в том числе, средства отображения), не позволяют это сделать.

          PABC.NET: Школьник вернется домой с урока, сядет к себе за компьютер, напишет очередной «калькулятор», или прыгающий спрайт, и пойдет друзьям показывать. И в этот момент выберет свою будущую профессию, поскольку ему это понравилось. Максимальный эффект за минимум усилий.

          TP/BP: Чтобы школьник что-то там нарисовал, ему нужно сначала рассказать, в какой кусок системной памяти и по какому адресу заливать байтики изображения. И как их получить. Рассказать, какие прерывания включают графический режим. Выдать ему dosbox. Немного не та история, да? А программу, которую он напишет, потратив сотни, тысячи часов войны с указателями и попытками вычитать картинку из файла, потом еще и не показать никому. Результат?

          По поводу стилей и прочего — извините, пжлст, но тому же школьнику «яркое» и «современное» будет смотреться лучше, чем среда уровня «кассовый аппарат в Магните с кучей горячих клавиш». Все то, что там народ пишет — сугубо из ностальгических соображений аля «ну, нам же было норм». Простите, времена поменялись.


          1. mayorovp
            17.07.2018 13:18

            TP/BP: Чтобы школьник что-то там нарисовал, ему нужно сначала рассказать, в какой кусок системной памяти и по какому адресу заливать байтики изображения. И как их получить. Рассказать, какие прерывания включают графический режим.

            Какие-то устаревшие у вас представления о BP седьмой версии…


            1. jknight
              17.07.2018 13:41

              Не уверен насчет BP, но вот хорошая ссылка для TP, которая ярко показывает «возможности»…


              1. mayorovp
                17.07.2018 14:01

                А что не так с этой ссылкой? Готовый модуль как бы. В него не надо заглядывать, его можно брать и использовать.

                Но лично я помню что в BP существовал еще и системный модуль Graph, который даже скачивать не требовалось.


          1. DoctorMoriarty
            18.07.2018 11:48

            Школьник вернется домой с урока, сядет к себе за компьютер, напишет очередной «калькулятор», или прыгающий спрайт, и пойдет друзьям показывать. И в этот момент выберет свою будущую профессию, поскольку ему это понравилось.

            … и друзья школьника, посмотрев на калькулятор и спрайтики, покажут школьнику свой крутой смартфон с гоночками и стрелялками или что позабористее из Steam, и скажут — «а так можешь?» и школьник отойдет в печали подумав — «и правда, не могу...», а потом, когда школьник узнает, что большие дяди для рисования прыгающих спрайтов используют всякие нипанятные штуки типа OpenGL и DirectX, он может начать сильно возмущаться — почему его любимую песочницу, в которой он так легко клепал учебные поделия, совершенно не используют в продакшене, ему же, оказывается, придётся учить всякие ужасные классы и указатели, а потом и решит — ну его нафиг, это программирование. Или выберет путь копипастера со stack Overflow и GitHub — а что, рефераты с курсовыми сдавать стало проще. И пойдёт пацан к успеху.


            1. akryukov
              18.07.2018 12:19

              Я скорей поверю, что школьник нагуглит не DirectX и OpenGL, а Unity или CryEngine, на которых можно за недельку по видеоурокам сделать простейшую стрелялку. Время указателей еще придет. Но позже.


              1. DoctorMoriarty
                18.07.2018 12:30

                Нагуглит — согласен. Но я имел в виду, что случится со школьником, когда он, замотивированный песочницей, решится поступить в относительно приличный вуз на чаемую специальность :-)


                1. akryukov
                  18.07.2018 12:37

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


      1. danfe
        16.07.2018 19:41

        По крайней мере тем, что не возникает иллюзий на тему того, что на этом можно что-то «реальное» писать.
        Позвольте уточнить: на этом [нельзя] что-то «реальное» писать — это вы про паскаль вообще (в широком смысле) или именно про TP7?


        1. Error1024
          16.07.2018 20:02

          Возможно автор комментария не в курсе сколько всего «реального» было на TP написано, и продолжает использоваться в некоторых местах.


        1. khim
          16.07.2018 20:19
          +1

          Я про TP7, разумеется. И нет, я как раз в курсе, сколько всего было написано… Самый древний рарит, который я видел — это жутчайшая система анализа «чёрных ящиков» (те, которые на само деле оранжевые) даже на TP7, а на, прости господи, Turbo Pascal 3.0. Несколько тысяч .CHN файлов! Как это всё писалось и что случилось за долгие годы с авторами — можно только догадываться.

          Но в современном мире TP (да и BP7 тоже), увы, годится только для обучения. Хотя бы потому что созданные им бинарники на современных 64-битных операционках (хотя на десктопе, хоть на телефоне) запускаются только под эмулятором…

          С тем же успехом можно какой-нибудь CodeWarrior куда-нибудь пытаться прикрутить… А тоже ведь крутая штука в своё время была…


  1. ElectroGuard
    16.07.2018 19:01

    Зачем менять шило на мыло?
    Кроме Pascal ABC существуют:
    Delphi
    Lazarus/FPC
    Pascal for Android
    play.google.com/store/apps/details?id=com.duy.pascal.compiler&hl=ru
    И I-Pascal (плагин для IDEA)
    plugins.jetbrains.com/plugin/7340-i-pascal
    Pascal — отличный язык.