LINUX.ORG.RU

Языковый базис


5

3

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

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

Какие языки вы бы предложили?

★★★★

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

C, Python, JS. Первый - низкоуровневое+процедурное, второй - высокоуровневое+объектно-ориентированное+пример идеальной системы модулей, третий - императивное+прототипно-ориентированное+функциональное+embedded.

border-radius
()
Ответ на: комментарий от vertexua

Java/C#

Ява пойдёт, наверно, а шарп - это ведь смесь явы и «Haskell/Scheme»? )

Параллельное программирование изучать не на базе ЯП, а на доске

Почему?

unsigned ★★★★
() автор топика
Ответ на: комментарий от RacketEvangelist

Так и запишем - вы ООП не знаете (в С++ - неполная и уродская реализация),

При чем тут ООП, лохудра?!? Я говорю про RAII, а эта концепция совершенно параллельна всяким разным ООПам. Это самостоятельная парадигма, применимая во всех языках. Твой call-with-input-file - это тоже пример RAII, пусть и корявенький ad hoc.

Концепцию RAII при обучению программированию зачем затрагивать?

Потому, что это фундаментальная концепция, ничуть не менее важная, чем ООП или ФП.

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

RAII это далеко не только низкий уровень. Программист всегда работает с ресурсами, на любом уровне абстракции.

Повторюсь - С++ не нужен.

Повторюсь, ты - неумный и неграмотный ламер.

anonymous
()
Ответ на: комментарий от anonymous

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

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

otnnte
()
Ответ на: комментарий от RacketEvangelist

Концепцию RAII при обучению программированию зачем затрагивать? Ее наличие в «программе обучения» можно оправдать только желанием объяснить как на низком уровне работает высокоуровневая программа

ну вот зачем рассуждать о том, что вообще не понимаешь? RAII решает те задачи, которые руками решают программисты в C#, Java и пр.

wota ★★
()
Ответ на: комментарий от otnnte

Какой Си, у Си нет рантайма.

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

И еще, ты забыл рассказать, как выкинуть Verilog и заменить его на Си.

anonymous
()
Ответ на: комментарий от unsigned

Ява пойдёт, наверно, а шарп - это ведь смесь явы и «Haskell/Scheme»? )

Да C# - Java с нескучными обоями. Это вообще ни разу не нормальный язык для ФП. Тем более как академический пример настоящего ФП чтобы понять философию. Но он так же как и Java позволяет рассказать ООП и серые будни 90% девелоперов, которыми этим студентам скорее всего прийдется быть.

Параллельное программирование изучать не на базе ЯП, а на доске

Потому что нет ЯП, который all about concurrency, причем в богатой форме, с futures, actors и не более. Это или Erlang в котором угребищный синтаксис и только актеры. Или это Scala в которую засунули весь IT за 20 и 21 век, у студентов волосы дыбом станут и они уйдут во флористы.

А вот рассказать о threads, thread pools, futures, promises, actors, векторный параллеллизм, SIMT на GPU, кластеризации можно и схемками

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от unsigned

Нет его там. У value types нет деструкторов. Нет никакой возможности привязать какое либо действие неявно к выходу из области видимости определения.

anonymous
()
Ответ на: комментарий от vertexua

Потому что нет ЯП, который all about concurrency, причем в богатой форме, с futures, actors и не более.

Есть такой язык: Occam. Почти чистое Пи-исчисление.

anonymous
()
Ответ на: комментарий от anonymous

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

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от anonymous

Ты ещё и тут решил в лужу сесть. Мб ты мне ещё скажешь, что-то типа: «ты ещё попробуй предложить Си как замену RL(ru)» в треде про PL.

Твой HLD - это банальная абстракция и к ЯП отношения никакого не имеет и вперёд, ничего не мешает использовать синтаксис СИ как HLD.

otnnte
()
Ответ на: комментарий от border-radius

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

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

anonymous
()
Ответ на: комментарий от unsigned

В C# есть RAII, емнип.

да - через using и IDisposable, т.е.:

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

wota ★★
()
Последнее исправление: wota (всего исправлений: 1)
Ответ на: комментарий от otnnte

Твой HLD - это банальная абстракция и к ЯП отношения никакого не имеет

Нет, HDLы - это языки программирования. По определнию. Потому как на них можно программировать.

ничего не мешает использовать синтаксис СИ как HLD.

Вперед. Продемонстрируй простейший pipelined умножитель на Си.

anonymous
()
Ответ на: комментарий от anonymous

При чем тут ООП, лохудра?!

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

Получение ресурса есть инициализация (англ. Resource Acquisition Is Initialization (RAII)) — программная идиома объектно-ориентированного программирования, смысл которой заключается в том, что получение некоторого ресурса совмещается с инициализацией, а освобождение — с уничтожением объекта.

Объясни как данная идея будет жить без ООП? Кстати - Smalltalk и Ruby прекрасно обходятся при этом без RAII ^_^

Потому, что это фундаментальная концепция, ничуть не менее важная, чем ООП или ФП.

Пруф. Особенно в факте того, что есть языки не поддерживающие RAII.

RAII это далеко не только низкий уровень. Программист всегда работает с ресурсами, на любом уровне абстракции.

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

Повторюсь, ты - неумный и неграмотный ламер.

Высказался? Иди доедай борщ мамкин. Доказал, что кто-то в интернетах не прав)

RacketEvangelist
()
Ответ на: комментарий от wota

И прекрасно без него обходятся в той же Ruby. В любом случае - задумываться о RAII стоит, когда уже изучил концепции. Само же RAII выучится в процессе без особого на это упора.

RacketEvangelist
()
Ответ на: комментарий от border-radius

А у Си недоразвитая?

Я бы сказал, зачаточная.

Ради чего отказываться от динамики?

Отказываться не надо, надо знать то и другое.

unsigned ★★★★
() автор топика

началось...

отписываюсь от треда, дальше можно не читать :)

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

anonymous
()
Ответ на: комментарий от RacketEvangelist

Объясни как данная идея будет жить без ООП?

А ты не цитируй педивикию, лошара. Для RAII достаточно наличия lexical scoping, а это практически во всех современных языках есть. Объекты не обязательны, можно и другие механизмы использовать. Я и в Лиспе RAII реализую запросто.

Кстати - Smalltalk и Ruby прекрасно обходятся при этом без RAII ^_^

А еще есть языки, которые обходятся без ООП, без ФП, и даже без конструкций структурного программирования.

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

Ресурсы разные бывают, ламеришко. RAII - это конструкция control flow, пригодная для работы с любыми ресурсами, да и не только с ресурсами. Просто у тебя не хватает ума и воображения, чтобы подумать о чем-то за пределами банального memory management или открывания/закрывания файлов.

anonymous
()
Ответ на: комментарий от RacketEvangelist

Объясни как данная идея будет жить без ООП?

Переключись на английский вариант )

unsigned ★★★★
() автор топика

Ну и вот ещё, Практика функционального программирования (комментарий)

Five different things
1. Syntax: How do you write language constructs?
2. Semantics: What do programs mean? (Evaluation rules)
3. Idioms: What are typical patterns for using language features to express your computation?
4. Libraries: What facilities does the language (or a well-known project) provide “standard”? (E.g., file access, data structures)
5. Tools: What do language implementations provide to make your job easier? (E.g., REPL, debugger, code formatter, …) – Not actually part of the language

These are 5 separate issues
In practice, all are essential for good programmers
Many people confuse them, but shouldn’t

This course focuses on semantics and idioms

• Syntax is usually uninteresting
– A fact to learn, like “The American Civil War ended in 1865”
– People obsess over subjective preferences

• Libraries and tools crucial, but often learn new ones “on the job”
– We are learning semantics and how to use that knowledge to understand all software and employ appropriate idioms
– By avoiding most libraries/tools, our languages may look “silly” but so would any language used this way

Bad_ptr ★★★★★
()
Ответ на: комментарий от unsigned

Да это махровее хаскелля со схемой. Студенты будут демотивированы и их точки зрения ненужностью «в реальной жизни». «На это штуке работает Google, IBM, Oracle, Microsoft» обычно помогает концентрировать внимание, повышать усердие и улучшать память студента

vertexua ★★★★★
()
Ответ на: комментарий от RacketEvangelist

сейчас «крестовики» «набигут» и станут с пеной у рта утверждать

Набижал. На чем предлагаешь писать YOBA-игры?

anonymous
()
Ответ на: комментарий от anonymous

Ты тоже не отличаешь Си от libc? Давай, объясни мне что такое рантайм.

И еще, ты забыл рассказать, как выкинуть Verilog и заменить его на Си.

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

otnnte
()
Ответ на: комментарий от anonymous

Нет, HDLы - это языки программирования. По определнию. Потому как на них можно программировать.

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

Вперед. Продемонстрируй простейший pipelined умножитель на Си.

О5 ты пытаешься съюлить и нести какую-то ахинею. Тупая, днищенская подмена понятий. Синтаксис на ЯП. Берёшь синтаксис Си и пишешь транслятор не в АСМ, а в то, во что транслируются твои HDLы. Ну и да, банальный парсер лора( справится любой пхп-бомж) на ХДП встудию.

otnnte
()
Ответ на: комментарий от otnnte

ЯП в данном случае - это не абстракция, а инструмент написания исполняемого кода, а не твой балаболство.

На Verilog можно писать исполняемый код, ламер ты дранный.

Берёшь синтаксис Си и пишешь транслятор не в АСМ, а в то, во что транслируются твои HDLы.

Ну давай, шалава, представь в этом убогом и ограниченном синтаксисе хотя бы даже тупо аналог выражения «always @(posedge clock or negedge reset) begin if (rest) reg = 0; else reg = A + B; end». С аналогичной семантикой. Нет таких конструкций в синтаксисе Си.

anonymous
()
Ответ на: комментарий от vertexua

Студенты будут демотивированы и их точки зрения ненужностью «в реальной жизни».

А такие студенты не нужны. Чем быстрее они отсеятся, тем лучше.

anonymous
()
Ответ на: комментарий от otnnte

Ты тоже не отличаешь Си от libc? Давай, объясни мне что такое рантайм.

Рантайм, двоечник, это время исполнения. Неожиданно, да?

Ты понимаешь, что твой hdl можно выкинуть и заминить на русский язык?

Нет. Не понимаю. Напиши мне процессор, или хотя бы DDR-контроллер на русском языке.

Твой hdl никакого отношения к написанию исполняемого кода не имеет.

Да? То есть, все мои test benches исполняемым кодом не являются? И модели, компилируемые непосредственно в native, тоже не «исполнимые»? Очень, очень интересно. Что-то ты, школоло, совсем окончательно заврался.

anonymous
()
Ответ на: комментарий от anonymous

А такие студенты не нужны. Чем быстрее они отсеятся, тем лучше.

Государству ылитаризм или налоги в бюджет?

vertexua ★★★★★
()
Ответ на: комментарий от anonymous

На Verilog можно писать исполняемый код, ламер ты дранный.

И на русском можно писать исполняемый код, и что? Вякнул про HDL - говори про хдл и не сливайся.

Ну давай, шалава, представь в этом убогом и ограниченном синтаксисе хотя бы даже тупо аналог выражения «always @(posedge clock or negedge reset) begin if (rest) reg = 0; else reg = A + B; end». С аналогичной семантикой. Нет таких конструкций в синтаксисе Си.

ifelse - может любой синтаксис. «posedge clock or negedge reset» - __attribute__ тот же можешь юзать.

В очередной раз сел в лужу.

otnnte
()
Ответ на: комментарий от otnnte

И на русском можно писать исполняемый код, и что?

Как? Напиши.

Вякнул про HDL - говори про хдл и не сливайся.

Сучка, ты совсем тупой, да? Я и говорю про HDL (Verilog).

ifelse - может любой синтаксис. «posedge clock or negedge reset» - __attribute__ тот же можешь юзать.

Вот молодец. Ты бы еще предложил все то, чего нет в Си, засунуть в комментарии. Итак, я жду - опиши простейший FSM на Си, так, чтобы его можно было транслировать в тот же netlist, что получился бы из Verilog-а.

anonymous
()
Ответ на: комментарий от vertexua

Че сказать-то хотел, болезный? У меня парсер сломался.

anonymous
()

C, haskell, java и какоенить скриптовое поделие. Ну, если не учитывать изотерику, конечно

actics
()
Ответ на: комментарий от anonymous

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

реализуется? да. легко и быстро? нет. особенно повеселило про сколь-угодно сложный синтаксис. запилишь синтаксис C++ ?

Sectoid ★★★★★
()
Ответ на: комментарий от Sectoid

реализуется? да. легко и быстро? нет.

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

особенно повеселило про сколь-угодно сложный синтаксис. запилишь синтаксис C++ ?

Запиливал. Не проблема. У меня есть и GLR, и PEG. Оба с C++ отлично справляются, не надо никаких уродливых извращений а ля GCC или Clang.

anonymous
()
Ответ на: комментарий от anonymous

Как? Напиши.

Осиль пожалуйста термин «транслятор».

Сучка, ты совсем тупой, да? Я и говорю про HDL (Verilog).

Ты говорил про HDL, а потом уже съюлил на HDL. Прочитай своё первоё сообщение про HDL - там нет даже упоминания про Verilog.

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

Слился? Так и запишем.

Итак, я жду - опиши простейший FSM на Си, так, чтобы его можно было транслировать в тот же netlist, что получился бы из Verilog-а.

Я тебе описал синтаксис. always @ - меняешь на трибуты, ущербные бегин/енд на скобочки и т.д. Всё, синтаксис в твоём Verilog приметивен.

otnnte
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.