Size: a a a

Compiler Development

2020 April 11

V

Vlad in Compiler Development
Че-то я тебя не помню :) Ты под каким именем был?
источник

PS

Peter Sovietov in Compiler Development
Vlad
Нет, с чистым ФП по-нормальному не был знаком. Но использовал в С++ функциональный подход по месту.
То есть на месте Haskell могла быть Scheme, правильно? Главное — основы классического ФП.
источник

PS

Peter Sovietov in Compiler Development
Vlad
Че-то я тебя не помню :) Ты под каким именем был?
Отвечу лично, чтобы флуд не разводить.
источник

V

Vlad in Compiler Development
Хаскель я так понимаю статически типизирован в отличие от. Схема, возможно, не так бы впечатлила. Лисп, например, не зацепил с свое время.
источник

PS

Peter Sovietov in Compiler Development
Ок! Спасибо за ответы. Я так и не понял степень влияния именно концепции монадических комбинаторов парсеров на результат, но можно считать, что ФП в целом повлияло. То есть речь не о "рядовом JS-разработчике — самородке", а о вполне подготовленном хаскеллисте под прикрытием :) Так вот красивые мифы и разрушаются.
источник

V

Vlad in Compiler Development
А, да, в этом смысле к моменту написания парсера я если и не был хардкорным функциональщиком, но как минимум под тяжелым влиянием ФП :)
источник

DP

Dmitry Ponyatov in Compiler Development
Victor Miasnikov
Ещё о том какой язык изучать первым:

http://users.monash.edu/~damian/papers/PDF/SevenDeadlySins.pdf
а что думаете про Picat как учебный язык?
оно как бы мультипарадигменное, сразу три направления в одном
источник

МБ

Михаил Бахтерев in Compiler Development
Victor Miasnikov
Ещё о том какой язык изучать первым:

http://users.monash.edu/~damian/papers/PDF/SevenDeadlySins.pdf
Они опять заморачиваются с синтаксисом. А надо заморачиваться с семантикой.

P.S. А ещё не понятно, чего все так опасаются ассемблера. Это очень простой язык. От которого можно отталкиваться повышая и повышая уровень понимания. Объяснение того, как устроен Hello World на ассемблере закрывает столько последующих вопросов, что очень сложно переоценить такой опыт. При чём, очень легко на этих простых примерах объяснять и денотационку, и операционку, и монады, и прочее, и взаимосвязи с машиной.

Вполне можно взять минимальное подмножество любого ассемблера: арифметику и простые режимы адресации - и вперёд.
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
При всём уважении к опыту предыдущих ораторов и при всей моей любви к ФП, да и к железу тоже, остаюсь при своём мнении.

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

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

Опять же, при наличии чётко определённой вычислительной модели можно предметно говорить о корректности алгоритмов и программ. А при желании и возможности — преподавать средства доказательства корректности.
С машиной Тьюринга и переписыванием термов есть проблема, как мне кажется: всегда возникает вопрос, а как оно работает-то в компьютере? Если сказать, что вот именно так и работает, то у человека закрепляется надолго неверное представление. Если сказать это во время формирования первоначальных моделей в мозге, потом переучиться может быть очень и очень тяжело, очень тяжело будет решать львиную долю необходимых прикладных задач. Зачем человеку сразу усложнять путь в драйверописатели какие-нибудь (что актуально)?

Есть, конечно, опасность, что освоив Си и Ассемблер человек возмнить себя кульхацкером и забьёт на дальнейшее образование (и таких примеров много). Поэтому, возможно, разумно сразу говорить и об ассемблере, и о lambda-исчислении, связывая их через какие-нибудь естественные абстрактные машины или же через строгое математическое описание ассемблера.

Эх... Может, и стоит написать такой курс.
источник

M

MaxGraey in Compiler Development
Михаил Бахтерев
Они опять заморачиваются с синтаксисом. А надо заморачиваться с семантикой.

P.S. А ещё не понятно, чего все так опасаются ассемблера. Это очень простой язык. От которого можно отталкиваться повышая и повышая уровень понимания. Объяснение того, как устроен Hello World на ассемблере закрывает столько последующих вопросов, что очень сложно переоценить такой опыт. При чём, очень легко на этих простых примерах объяснять и денотационку, и операционку, и монады, и прочее, и взаимосвязи с машиной.

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

А

Алексей ayaye :) in Compiler Development
По-моему, вы при обсуждении правильной последовательности обсуждения упускаете очень важную вещь - мотивацию обучающихся. Из-за которой, на мой взгляд, невозможно обучать без компьютера, из-за которой появляются "неправильные" Scratch, ардуинки и прочее, направленное в первую очередь на формирование заинтересованности. А уж когда человек во всё это влез, тогда можно его грузить дальше. Только вот он уже безнадежно испорчен :) Последнее шутка, конечно, я сам с бейсика начинал и ничего, до хаскеля добрался :)
источник

VM

Victor Miasnikov in Compiler Development
Dmitry Ponyatov
а что думаете про Picat как учебный язык?
оно как бы мультипарадигменное, сразу три направления в одном
Именно Picat открыл для себя недавно.

 Mercury ( сайт MercuryLang.org ) , как "более декларативный Prolog" был бы интересен. Всё-таки cut ( "!") разрушает целостность концепции.

P.S. Статью нашёл по поисковому запросу Modula-3 Prolog

P.P.S. На www.txl.ca , среди примеров, есть преобразование исходного текста программы на императивном ЯП в набор Пролог предикатов.

Т.е. далее можно делать запросы а-ля используется ли "транзитом" глобальная переменная X во вложеной в T подпрограмме P.

Не говоря о том, что Ada SPARK написан на Prolog.
источник

C

Constantine in Compiler Development
https://ptls.dev/

Pointless: a scripting language for learning and fun
источник

VM

Victor Miasnikov in Compiler Development
Михаил Бахтерев
Они опять заморачиваются с синтаксисом. А надо заморачиваться с семантикой.

P.S. А ещё не понятно, чего все так опасаются ассемблера. Это очень простой язык. От которого можно отталкиваться повышая и повышая уровень понимания. Объяснение того, как устроен Hello World на ассемблере закрывает столько последующих вопросов, что очень сложно переоценить такой опыт. При чём, очень легко на этих простых примерах объяснять и денотационку, и операционку, и монады, и прочее, и взаимосвязи с машиной.

Вполне можно взять минимальное подмножество любого ассемблера: арифметику и простые режимы адресации - и вперёд.
Статья 1996 года. Т.е. к конкретной  фактуре надо относиться с некоторой осторожностью: например, утверждается, что в Modula-3 аж 100 зарезервированых ключевых слов.

( Просто во всех грамматиках M3 их заметно меньше.)

Есть и специфика Канады: язык Turing там активно применялся в обучении.

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

AK

Andrei Kurosh in Compiler Development
Constantine
https://ptls.dev/

Pointless: a scripting language for learning and fun
Фшарп лайт
источник

а

а это кто in Compiler Development
Тогда F* это фшарп хард
источник

AK

Andrei Kurosh in Compiler Development
а это кто
Тогда F* это фшарп хард
Так и есть
источник

p

polunin.ai in Compiler Development
Andrei Kurosh
Так и есть
Они не имеют общего ничего🤔
источник

а

а это кто in Compiler Development
polunin.ai
Они не имеют общего ничего🤔
У F# и F* есть большое общее подмножество синтаксиса
источник

AK

Andrei Kurosh in Compiler Development
polunin.ai
Они не имеют общего ничего🤔
Ага, Microsoft Research сделали два ML-подобных языка, F# и F*, не имеющих ничего общего ;)
источник